diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 00000000..60f5e416 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,36 @@ +# Contributing to BloodMagic + +First off, thank you for taking the time to contribute! + +## Issues + +First, make sure the issue has not been already reported. + +If it has not been reported, follow the provided issue template (created when you click "New Issue"). + +If it has been reported, provide any additional information you can to the current active issue. + +## Pull Requests + +With the 1.8 rewrite comes a need to keep the code *clean*. Pull Requests will be looked over a bit stricter from now on. + +When you wish to contribute, please keep these points in mind: + +###Do: +* Only make 1 commit for each major change. + * This helps avoid "polluting" the Git history. +* Squash extra commits. + * See above. +* Describe each and every change you make in your Pull Request. + * This lets everybody know exactly what is going on for easy discussion. +* Make short yet descriptive commit titles. + * Feel free to give a very basic overview of the commit in the message, then use the description to go into detail. +* Keep your formatting the same as the project. + * This will be expanded upon at a later date. + +###Do not: +* Make unnecessary changes to files. + * If you don't need to touch it, don't touch it. + * This includes: *renaming args*, *renaming files*, *editing formatting*, etc. +* Use obfuscated names for parameters. + * This makes the code look messier and less "professional". \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..88a1a00c --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,25 @@ +#### Issue Description: +Note: If this bug occurs in a modpack, please report this to the modpack author. Otherwise, delete this line and add your description here. If this is a feature request, this template does not apply to you. Just delete everything. + + +#### What happens: + + + +#### What you expected to happen: + + + +#### Steps to reproduce: + +1. +2. +3. +... + +____ +#### Affected Versions (Do *not* use "latest"): + +- BloodMagic: +- Minecraft: +- Forge: \ No newline at end of file diff --git a/.gitignore b/.gitignore index da2d8747..64717e09 100644 --- a/.gitignore +++ b/.gitignore @@ -13,13 +13,13 @@ crash-reports/ /.idea/ /.metadata/ -/.settings/ /libs/ /saves/ /resourcepacks/ /logs/ /mods/ /screenshots/ +/classes/ # File Extensions *.psd @@ -28,9 +28,10 @@ crash-reports/ *.iws *.classpath *.project +*.launch # Specific files Thumbs.db usernamecache.json options.txt - +usercache.json diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 00000000..e8895216 --- /dev/null +++ b/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,2 @@ +connection.project.dir= +eclipse.preferences.version=1 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..52c66cdc --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,392 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.codeComplete.argumentPrefixes= +org.eclipse.jdt.core.codeComplete.argumentSuffixes= +org.eclipse.jdt.core.codeComplete.fieldPrefixes= +org.eclipse.jdt.core.codeComplete.fieldSuffixes= +org.eclipse.jdt.core.codeComplete.localPrefixes= +org.eclipse.jdt.core.codeComplete.localSuffixes= +org.eclipse.jdt.core.codeComplete.staticFieldPrefixes= +org.eclipse.jdt.core.codeComplete.staticFieldSuffixes= +org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes= +org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes= +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false +org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false +org.eclipse.jdt.core.formatter.align_with_spaces=false +org.eclipse.jdt.core.formatter.alignment_for_additive_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=1 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=1 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=1 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=1 +org.eclipse.jdt.core.formatter.alignment_for_assertion_message=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=0 +org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=0 +org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=49 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 +org.eclipse.jdt.core.formatter.alignment_for_logical_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=1 +org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=1 +org.eclipse.jdt.core.formatter.alignment_for_record_components=16 +org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=1 +org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=0 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=17 +org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 +org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 +org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch=0 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=next_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_record_constructor=next_line +org.eclipse.jdt.core.formatter.brace_position_for_record_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line +org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true +org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true +org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +org.eclipse.jdt.core.formatter.comment.format_line_comments=true +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false +org.eclipse.jdt.core.formatter.comment.indent_root_tags=false +org.eclipse.jdt.core.formatter.comment.indent_tag_description=false +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags=do not insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert +org.eclipse.jdt.core.formatter.comment.line_length=80 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=2 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_record_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false +org.eclipse.jdt.core.formatter.indentation.size=4 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_not_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_record_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert +org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert +org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_record_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_constructor=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_record_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=true +org.eclipse.jdt.core.formatter.join_wrapped_lines=true +org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=true +org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_if_empty +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_preserve +org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_record_constructor_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_record_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=true +org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=true +org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false +org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=true +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.lineSplit=120 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_record_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.jdt.core.formatter.tabulation.char=tab +org.eclipse.jdt.core.formatter.tabulation.size=4 +org.eclipse.jdt.core.formatter.text_block_indentation=0 +org.eclipse.jdt.core.formatter.use_on_off_tags=false +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true +org.eclipse.jdt.core.formatter.wrap_before_assertion_message_operator=true +org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false +org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true +org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true +org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true +org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true +org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true +org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true +org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true +org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs new file mode 100644 index 00000000..1994e3f7 --- /dev/null +++ b/.settings/org.eclipse.jdt.ui.prefs @@ -0,0 +1,81 @@ +eclipse.preferences.version=1 +editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true +formatter_profile=_WayofTime-Dev +formatter_settings_version=20 +org.eclipse.jdt.ui.exception.name=e +org.eclipse.jdt.ui.gettersetter.use.is=true +org.eclipse.jdt.ui.keywordthis=false +org.eclipse.jdt.ui.overrideannotation=true +org.eclipse.jdt.ui.text.custom_code_templates= +sp_cleanup.add_default_serial_version_id=true +sp_cleanup.add_generated_serial_version_id=false +sp_cleanup.add_missing_annotations=true +sp_cleanup.add_missing_deprecated_annotations=true +sp_cleanup.add_missing_methods=false +sp_cleanup.add_missing_nls_tags=false +sp_cleanup.add_missing_override_annotations=true +sp_cleanup.add_missing_override_annotations_interface_methods=true +sp_cleanup.add_serial_version_id=false +sp_cleanup.always_use_blocks=true +sp_cleanup.always_use_parentheses_in_expressions=false +sp_cleanup.always_use_this_for_non_static_field_access=false +sp_cleanup.always_use_this_for_non_static_method_access=false +sp_cleanup.convert_functional_interfaces=false +sp_cleanup.convert_to_enhanced_for_loop=false +sp_cleanup.convert_to_enhanced_for_loop_if_loop_var_used=false +sp_cleanup.correct_indentation=false +sp_cleanup.format_source_code=true +sp_cleanup.format_source_code_changes_only=false +sp_cleanup.insert_inferred_type_arguments=false +sp_cleanup.lazy_logical_operator=false +sp_cleanup.make_local_variable_final=true +sp_cleanup.make_parameters_final=false +sp_cleanup.make_private_fields_final=true +sp_cleanup.make_type_abstract_if_missing_method=false +sp_cleanup.make_variable_declarations_final=false +sp_cleanup.merge_conditional_blocks=false +sp_cleanup.never_use_blocks=false +sp_cleanup.never_use_parentheses_in_expressions=true +sp_cleanup.number_suffix=false +sp_cleanup.objects_equals=false +sp_cleanup.on_save_use_additional_actions=false +sp_cleanup.organize_imports=true +sp_cleanup.precompile_regex=false +sp_cleanup.push_down_negation=false +sp_cleanup.qualify_static_field_accesses_with_declaring_class=false +sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_with_declaring_class=false +sp_cleanup.qualify_static_method_accesses_with_declaring_class=false +sp_cleanup.remove_private_constructors=true +sp_cleanup.remove_redundant_modifiers=false +sp_cleanup.remove_redundant_semicolons=false +sp_cleanup.remove_redundant_type_arguments=false +sp_cleanup.remove_trailing_whitespaces=false +sp_cleanup.remove_trailing_whitespaces_all=true +sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_array_creation=false +sp_cleanup.remove_unnecessary_casts=true +sp_cleanup.remove_unnecessary_nls_tags=false +sp_cleanup.remove_unused_imports=false +sp_cleanup.remove_unused_local_variables=false +sp_cleanup.remove_unused_private_fields=true +sp_cleanup.remove_unused_private_members=false +sp_cleanup.remove_unused_private_methods=true +sp_cleanup.remove_unused_private_types=true +sp_cleanup.simplify_lambda_expression_and_method_ref=false +sp_cleanup.sort_members=false +sp_cleanup.sort_members_all=false +sp_cleanup.use_anonymous_class_creation=false +sp_cleanup.use_autoboxing=false +sp_cleanup.use_blocks=false +sp_cleanup.use_blocks_only_for_return_and_throw=false +sp_cleanup.use_directly_map_method=false +sp_cleanup.use_lambda=true +sp_cleanup.use_parentheses_in_expressions=false +sp_cleanup.use_this_for_non_static_field_access=false +sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true +sp_cleanup.use_this_for_non_static_method_access=false +sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true +sp_cleanup.use_unboxing=false +sp_cleanup.use_var=false diff --git a/BM3 Progression.drawio b/BM3 Progression.drawio new file mode 100644 index 00000000..a37ad70e --- /dev/null +++ b/BM3 Progression.drawio @@ -0,0 +1,308 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/README.md b/README.md index a8116fad..c945030e 100644 --- a/README.md +++ b/README.md @@ -1,61 +1,68 @@ -#Blood Magic: Alchemical Wizardry +# Blood Magic: Alchemical Wizardry [![](http://cf.way2muchnoise.eu/full_blood-magic_downloads.svg)](https://minecraft.curseforge.com/projects/blood-magic) [![Discord](https://img.shields.io/discord/259683256348311552.svg?colorB=7289DA&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHYAAABWAgMAAABnZYq0AAAACVBMVEUAAB38%2FPz%2F%2F%2F%2Bm8P%2F9AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfhBxwQJhxy2iqrAAABoElEQVRIx7WWzdGEIAyGgcMeKMESrMJ6rILZCiiBg4eYKr%2Fd1ZAfgXFm98sJfAyGNwno3G9sLucgYGpQ4OGVRxQTREMDZjF7ILSWjoiHo1n%2BE03Aw8p7CNY5IhkYd%2F%2F6MtO3f8BNhR1QWnarCH4tr6myl0cWgUVNcfMcXACP1hKrGMt8wcAyxide7Ymcgqale7hN6846uJCkQxw6GG7h2MH4Czz3cLqD1zHu0VOXMfZjHLoYvsdd0Q7ZvsOkafJ1P4QXxrWFd14wMc60h8JKCbyQvImzlFjyGoZTKzohwWR2UzSONHhYXBQOaKKsySsahwGGDnb%2FiYPJw22sCqzirSULYy1qtHhXGbtgrM0oagBV4XiTJok3GoLoDNH8ooTmBm7ZMsbpFzi2bgPGoXWXME6XT%2BRJ4GLddxJ4PpQy7tmfoU2HPN6cKg%2BledKHBKlF8oNSt5w5g5o8eXhu1IOlpl5kGerDxIVT%2BztzKepulD8utXqpChamkzzuo7xYGk%2FkpSYuviLXun5bzdRf0Krejzqyz7Z3p0I1v2d6HmA07dofmS48njAiuMgAAAAASUVORK5CYII%3D)](https://discord.gg/VtNrGrs) -###Gruesome? Probably. Worth it? Definitely! -###[Downloads](http://minecraft.curseforge.com/mc-mods/224791-blood-magic/files) +### Gruesome? Probably. Worth it? Definitely! +### [Downloads](http://minecraft.curseforge.com/projects/blood-magic/files) -##Information +## Information Have you ever picked up a magic mod for Minecraft, and thought that it was too tame? Was there not enough danger involved when creating your next high-tech gadget? Bored with all of those peaceful animals just staring at you without a care in the world? Well then, I am glad you came here! Blood Magic is an arcane art that is practiced by mages who attempt to gather a vast amount of power through utilizing a forbidden material: blood. Even though it does grant a huge amount of power, every single action that is performed with this volatile magic can prove deadly. You have been warned. -##Links +## Links * Twitter: [@WayofTime](https://twitter.com/WayofTime) * Wiki: Found at [FTBWiki](http://ftbwiki.org/Blood_Magic) * [Minecraft Forum Thread](http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/1290532-bm) -* [Curseforge](http://minecraft.curseforge.com/mc-mods/224791-blood-magic) +* [Curseforge](http://minecraft.curseforge.com/projects/blood-magic) * [Donate](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=J7SNY7L82PQ82) +* [Patreon](https://www.patreon.com/BloodMagic) -##Issue Reporting - -Please include the following: - -* Minecraft version -* Blood Magic version -* Forge version/build -* Versions of any mods potentially related to the issue -* Any relevant screenshots are greatly appreciated. -* For crashes: - * Steps to reproduce - * ForgeModLoader-client-0.log (the FML log) from the root folder of the client - -##Development Setup +## Development Setup 1. Fork this project to your own Github repository and clone it to your desktop. -2. Navigate to the directory you cloned to. Open a command window there and run `gradlew setupDevWorkspace` then (if you use Eclipse) `gradlew eclipse` or (if you use IDEA) `gradlew idea`. -3. This process will setup [Forge](http://www.minecraftforge.net/forum/), your workspace, and link [MineTweaker](http://minetweaker3.powerofbytes.com/) as a dependency. -4. Open the project in your IDE of choice. -5. Set `../src/api/java` as a source directory. +2. Navigate to the directory you cloned to. Follow the [Forge Documentation](http://mcforge.readthedocs.io/en/latest/gettingstarted/#from-zero-to-modding) (start at step 4) to setup your workspace. If you use IDEA, follow [this set](http://mcforge.readthedocs.io/en/latest/gettingstarted/#terminal-free-intellij-idea-configuration) of steps. + +#### IntelliJ IDEA extra steps + +1. Navigate to `File > Settings > Plugins > Browse repositories...`. Search for Lombok and install the plugin. +2. Navigate to `File > Settings > Build, Execution, Deployment > Compiler > Annotation Processors`. Check `Enable annotation processing`. [Setup video](https://www.youtube.com/watch?v=8VEdtQLuLO0&feature=youtu.be) by LexManos. For more information, refer to the [Forge Forums](http://www.minecraftforge.net/forum/index.php/topic,14048.0.html). -##Custom Builds -###Custom builds are unsupported. If you have an issue using a build not by me (WayofTime), it is not guaranteed that you will get support. +## Developing Addons -####How to make a custom build: +Add to your build.gradle: + + repositories { + maven { + url "http://tehnut.info/maven/" + } + } + + dependencies { + deobfCompile "com.wayoftime.bloodmagic:BloodMagic:" + } + +`` can be found on CurseForge (or via the Maven itself), check the file name of the version you want. + +## Custom Builds + +**Custom builds are *unsupported*. If you have an issue while using an unofficial build, it is not guaranteed that you will get support.** + +#### How to make a custom build: 1. Clone directly from this repository to your desktop. 2. Navigate to the directory you cloned to. Open a command window there and run `gradlew build` 3. Once it completes, your new build will be found at `../build/libs/BloodMagic-*.jar`. You can ignore the `deobf`, `sources`, and `javadoc` jars. -##License +## License ![CCA4.0](https://licensebuttons.net/l/by/4.0/88x31.png) Blood Magic: AlchemicalWizardry by WayofTime is licensed under a [Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/). -##Installation Instructions +## Installation Instructions This mod requires "Minecraft Forge" in order to operate. It is incredibly easy to download and set up, so might as well get to it! @@ -65,14 +72,12 @@ This mod requires "Minecraft Forge" in order to operate. It is incredibly easy t 3. Place the mod in the **mods** folder of your .minecraft. If you are unsure of where that is located, it is here: `../Users/you/AppData/roaming/.minecraft`. -##FAQ +## FAQ **Q**: My weak blood orb doesn't show my current LP! Fix it please. **A**: The mechanic for viewing the player's essence has changed due to some issues with mechanics. You now need a Divination Sigil to view a player's essence. It does other things, too, so it is worth it! - - **Q**: Why am I dying so much? **A**: It might be a good idea to make sure that you have enough essence to do a task. If you don't have enough essence for, say, an imperfect ritual, it will take it out of your health. If your health reaches 0... Well, you don't have to be a genius to see what would happen. @@ -110,8 +115,6 @@ This mod requires "Minecraft Forge" in order to operate. It is incredibly easy t **A**: This is a config option. The person you saw with an orb had a config that changed the knife to an orb. The orb and knife function exactly the same way, but you can change it in the configs by looking for the "Idontlikefun" option. - **Q**: When I respawn, I appear to only come back with 3 hearts. What's happening? - -**A**: This is due to another config option in the "WhimpySettings," which is due to my attempt to combat Zerg Rushing. You can disable this if you really want to, but it shouldn't hurt unduly. \ No newline at end of file +**A**: This is due to another config option in the "WhimpySettings," which is due to my attempt to combat Zerg Rushing. You can disable this if you really want to, but it shouldn't hurt unduly. diff --git a/build.gradle b/build.gradle index 9be2f8af..b9e99859 100644 --- a/build.gradle +++ b/build.gradle @@ -1,137 +1,199 @@ buildscript { repositories { + maven { url = 'https://files.minecraftforge.net/maven' } + jcenter() mavenCentral() - maven { url = "http://files.minecraftforge.net/maven" } - maven { url = "https://oss.sonatype.org/content/repositories/snapshots/" } } dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT' - classpath 'org.ajoberstar:gradle-git:0.10.1' + classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true } } +apply plugin: 'net.minecraftforge.gradle' +// Only edit below this line, the above code adds and enables the necessary things for Forge to be setup. +apply plugin: 'eclipse' +apply plugin: 'maven-publish' -apply plugin: 'forge' +version = '1.16.4-3.1.0-15' +group = 'com.yourname.modid' // http://maven.apache.org/guides/mini/guide-naming-conventions.html +archivesBaseName = 'BloodMagic' -ext.configFile = file "build.properties" -configFile.withReader { - def prop = new Properties() - prop.load(it) - project.ext.config = new ConfigSlurper().parse prop -} +sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. -version = config.mc_version + "-" + config.mod_version + "-" + config.build_number -group= config.package_group -archivesBaseName = config.mod_name +println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + '(' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch')) +minecraft { + // The mappings can be changed at any time, and must be in the following format. + // snapshot_YYYYMMDD Snapshot are built nightly. + // stable_# Stables are built at the discretion of the MCP team. + // Use non-default mappings at your own risk. they may not always work. + // Simply re-run your setup task after changing the mappings to update your workspace. + mappings channel: 'snapshot', version: '20200916-1.16.2' + // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable. + + // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') -import org.ajoberstar.grgit.Grgit + // Default run configurations. + // These can be tweaked, removed, or duplicated as needed. + runs { + client { + workingDirectory project.file('run') + + properties 'mixin.env.disableRefMap': 'true' -def gitHash = 'unknown' -if (new File(projectDir, '.git').exists()) { - def repo = Grgit.open(project.file('.')) - gitHash = repo.log().find().abbreviatedId + // 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' + + mods { + bloodmagic { + source sourceSets.main + } + } + } + + server { + workingDirectory project.file('run') + + properties 'mixin.env.disableRefMap': 'true' + + // 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' + + mods { + bloodmagic { + source sourceSets.main + } + } + } + + data { + workingDirectory project.file('run') + + properties 'mixin.env.disableRefMap': 'true' + + // 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' + + args '--mod', 'bloodmagic', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/') + + mods { + bloodmagic { + source sourceSets.main + } + } + } + } } repositories { - maven { - name 'CB Maven FS' - url "http://chickenbones.net/maven/" + maven { + url "http://dvs1.progwml6.com/files/maven/" } maven { - name 'DVS1 Maven FS' - url 'http://dvs1.progwml6.com/files/maven' + name = "The Loader" + url = "https://maven.blamejared.com" } - maven { - name 'TehNut Repo' - url 'http://tehnut.info/maven/' - } - ivy { - name "MineTweaker3" - artifactPattern "http://minetweaker3.powerofbytes.com/download/[module]-[revision].[ext]" - } } dependencies { - compile "codechicken:CodeChickenLib:" + config.mc_version + "-" + config.cclib_version + ":dev" - compile "codechicken:CodeChickenCore:" + config.mc_version + "-" + config.ccc_version + ":dev" - compile "codechicken:NotEnoughItems:" + config.mc_version + "-" + config.nei_version + ":dev" -// compile name: 'MineTweaker3', version: config.minetweaker_version, ext: 'jar' -// compile "codechicken:ForgeMultipart:1.7.10-1.1.0.314:dev" -// compile "info.amerifrance.guideapi:Guide-API:" + config.mc_version + "-" + config.guideapi_version + ":deobf" -} - -minecraft { - version = config.mc_version + "-" + config.forge_version - runDir = "run" - - replaceIn "GAPIChecker.java" - replace "@VERSION@", config.guideapi_version -} - -processResources { - inputs.property "version", project.version - inputs.property "mcversion", project.minecraft.version - - from(sourceSets.main.resources.srcDirs) { - include '**/*.info' - include '**/*.properties' - - expand 'version': project.version, 'mcversion': project.minecraft.version - } - from(sourceSets.main.resources.srcDirs) { - exclude '**/*.info' - exclude '**/*.properties' - exclude '**/*.db' - } + // Specify the version of Minecraft to use, If this is any group other then 'net.minecraft' it is assumed + // that the dep is a ForgeGradle 'patcher' dependency. And it's patches will be applied. + // The userdev artifact is a special name and will get all sorts of transformations applied to it. + minecraft 'net.minecraftforge:forge:1.16.4-35.1.37' + + // compileOnly fg.deobf("mezz.jei:jei-${minecraft_version}:${jei_version}:api") + // runtimeOnly fg.deobf("mezz.jei:jei-${minecraft_version}:${jei_version}") + + //deobfCompile "mezz.jei:jei_${minecraft_version}:${jei_version}" + + compileOnly fg.deobf("mezz.jei:jei-1.16.2:7.1.3.19:api") + runtimeOnly fg.deobf("mezz.jei:jei-1.16.2:7.1.3.19") + + compileOnly fg.deobf("vazkii.patchouli:Patchouli:${patchouli_version}:api") + runtimeOnly fg.deobf("vazkii.patchouli:Patchouli:${patchouli_version}") + + compileOnly fg.deobf("com.blamejared.crafttweaker:CraftTweaker-1.16.4:7.1.0.84") + + // You may put jars on which you depend on in ./libs or you may define them like so.. + // compile "some.group:artifact:version:classifier" + // compile "some.group:artifact:version" + + // Real examples + // compile 'com.mod-buildcraft:buildcraft:6.0.8:dev' // adds buildcraft to the dev env + // compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env + + // The 'provided' configuration is for optional dependencies that exist at compile-time but might not at runtime. + // provided 'com.mod-buildcraft:buildcraft:6.0.8:dev' + + // These dependencies get remapped to your current MCP mappings + // deobf 'com.mod-buildcraft:buildcraft:6.0.8:dev' + + // For more info... + // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html + // http://www.gradle.org/docs/current/userguide/dependency_management.html + } +// Example for how to get properties into the manifest for reading by the runtime.. jar { - dependsOn "incrementBuildNumber" - classifier = '' - manifest.mainAttributes( - "Built-By": System.getProperty('user.name'), - "Created-By": "${System.getProperty('java.vm.version')} + (${System.getProperty('java.vm.vendor')})", + manifest { + attributes([ + "Specification-Title": "bloodmagic", + "Specification-Vendor": "bloodmagicsareus", + "Specification-Version": "1", // We are version 1 of ourselves "Implementation-Title": project.name, - "Implementation-Version": project.version, - "Git-Hash": gitHash - ) + "Implementation-Version": "${version}", + "Implementation-Vendor" :"bloodmagicsareus", + "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") + ]) + } } -// add a source jar -task sourceJar(type: Jar) { - from sourceSets.main.allSource +// Example configuration to allow publishing using the maven-publish task +// This is the preferred method to reobfuscate your jar file +jar.finalizedBy('reobfJar') +// However if you are in a multi-project build, dev time needs unobfed jar files, so you can delay the obfuscation until publishing by doing +//publish.dependsOn('reobfJar') + +sourceSets.main.resources { + srcDir 'src/generated/resources' +} + +task srcJar(type: Jar) { + from(sourceSets.main.java) classifier = 'sources' } -// add a javadoc jar -task javadocJar(type: Jar, dependsOn: javadoc) { - from javadoc.destinationDir - classifier = 'javadoc' +task apiJar(type: Jar) { + from(sourceSets.main.allJava) + from(sourceSets.main.output) + include 'wayoftime/bloodmagic/api/**' + + classifier = 'api' } -// because the normal output has been made to be obfuscated -task deobfJar(type: Jar) { - from sourceSets.main.output - classifier = 'deobf' +artifacts { + archives srcJar, apiJar } -tasks.build.dependsOn sourceJar, javadocJar, deobfJar - -tasks.withType(JavaCompile) { task -> - task.options.encoding = 'UTF-8' -} - -task("incrementBuildNumber") { - // increment build number - doFirst { - // increment - config.build_number = (config.build_number.toString().toInteger()) + 1 - - // write back to the file - configFile.withWriter { - config.toProperties().store(it, "") - } - } -} - -// Uncomment this line if you want to auto-upload to CurseForge when you build. This requires you to setup curse.gradle yourself. -// fileTree('gradle').include('curse.gradle').collect().sort().each { apply from: it } \ No newline at end of file +publishing { + publications { + mavenJava(MavenPublication) { + artifact jar + artifact srcJar + artifact apiJar + } + } + repositories { + maven { + url "file:///${project.projectDir}/mcmodsrepo" + } + } +} \ No newline at end of file diff --git a/build.properties b/build.properties deleted file mode 100644 index a40914e6..00000000 --- a/build.properties +++ /dev/null @@ -1,12 +0,0 @@ -mod_name=BloodMagic -forge_version=11.14.3.1499 -cclib_version=1.1.2.133 -ccc_version=1.0.5.36 -nei_version=1.0.5.104 -//=Dependency Information -guideapi_version=1.0.1-20 -package_group=com.wayoftime.bloodmagic -mod_version=1.3.3 -minetweaker_version=Dev-1.7.10-3.0.9B -build_number=12 -mc_version=1.8 diff --git a/changelog.txt b/changelog.txt new file mode 100644 index 00000000..e9b9c9ee --- /dev/null +++ b/changelog.txt @@ -0,0 +1,1346 @@ +------------------------------------------------------ +Version 3.1.0 +------------------------------------------------------ +- Majorly refactored the progression of the mod. Instead of starting with a Snare, you instead start by crafting the Blood Altar. The changes are documented in the guide, and you can follow its "Getting Started" entry! + +- Changed the tooltips so that they are gray, more easily differentiating them from the name of the item. +- Added the Sigil of Holding +- Changed the crafting of Tartaric Gems so that you no longer need to use the previous tier gem in the gem slot. +-> The Hellfire Forge will now syphon from the gem in the crafting table first, and all unused will from the consumed gem will be placed in the crafted gem. + +- Changed the GUI for the Alchemy Table +-> You can now select which sides that an input/output slot is accessible from. Click on the slot you wish to change, then click on the directional toggle buttons. + +- Fixed Plunderer's Glint not properly applying the Looting level. +- Also fixed a NPE crash due to Iron Tip. Fixes some crashes due to mods using the ItemUsedFinish event. + +- Fixed the Blood Altar not being able to input fluids. About time, Way! +- Added new Explosive Charges +-> Fungal Charge, which is very useful for giant mushrooms and nether mushrooms +-> Controlled Charge, which will destroy only blocks that match the block it is placed on. +- Added the ability to apply a few select Anointments to the charges. Only one can be applied to a charge at a time. +-> Soft Touch, Fortuna, and Smelting + +- Fixed the Living Armour so that you cannot use an upgrade tome to usurp the point cap. +-> Fixed "Strong Legs" so that it no longer runs the program "CrunchyLegs.exe" - as a result, you no longer suffer fall damage from jumping on the same level. +-> Removed the direct fall damage mitigation from "Strong Legs" + +- Added two types of Throwing Daggers to the Blood Mage's offensive kit. +-> Iron Throwing Dagger +-> Syringe Throwing Dagger + +- Refactored the guide so that it provides +2 to awesomeness. + + +------------------------------------------------------ +Version 3.0.6 +------------------------------------------------------ +- Reimplemented the Well of Suffering. +- Added several new items, called "Anointments"! These are items that provide temporary buffs to your tools and weapons, such as silk touch, higher damage, and more! Look them up in the Utility section of the book. These include: + - Honing Oil + - Soft Coating + - Fortuna Extract + - Holy Water + - Miner's Secrets + - Dexterity Alkahest + - Iron Tip + - Plunderer's Glint + - Slow-burning Oil + +------------------------------------------------------ +Version 3.0.5 +------------------------------------------------------ +- Fixed a crash with the Blood Altar because I am dumb. +- Also fixed the recipe for the Day array. Now you don't need to clean your clocks! + +------------------------------------------------------ +Version 3.0.4 +------------------------------------------------------ + +- Added two new explosives: + - The Shaped Charge, which will break a 5x5x5 volume when placed + - The Deforester Charge, which can chop down a tree up to a maximum of 128 logs. + - (Both explosives drop all blocks affected, and do not cause further environmental nor entity damage.) + +- Added new alchemy arrays: + - Two arrays, which changes the current daylight cycle to day and night. Recipes are temp. + +- Fixed the following Living Armour upgrades so that they are now obtainable: + - Experienced + - Body Builder + +- Fixed Living Armour not upgrading under certain conditions. + +- Fixed the two rituals involving Living Armour so that they are properly activatable using a Weak Activation Crystal. + +- Fixed NPE in Blood Altar when trying to interact with the contained Fluids +- Also fixed bug that prevented the Altar from accepting fluids piped in as inputs. +- Fixed a client-side crash when right clicking the ground with a Lava Crystal when on a server - now properly makes a fire without consuming the client. + +- Fixed the JEI so that it no longer ouputs an error when loading Alchemy Array recipes without a crafting output. +- Fixed crash with Actually Additions + + +------------------------------------------------------ +Version 3.0.3 +------------------------------------------------------ + +- Updated the Sanguine Scientiem - it's very well written! Special thanks to both VT-14 and Wrince for their long hours of effort to make this book better than I could have done! +- Fixed a crash with the Living Armour when crafted and worn right after enchanting. + + + +------------------------------------------------------ +Version 3.0.2 +------------------------------------------------------ + +Readded the Living Armour. Currently only with a few upgrades, and no downgrades. + - Pin Cushion + - Soft Fall + - Tough + - Strong Legs (Now can be temporarily deactivated when jumping by sneaking) + - Healthy + - Experienced + - Charging Strike + - Tough Palms + - Quick Feet + - Poison Resistance + - Gift of Ignis + - Dwarven Might + - Body Builder + +Reimplemented the following rituals: + - Resonance of the Faceted Crystal + - Crack of the Fractured Crystal + - Reap of the Harvest Moon + - Ritual of the Shepherd + - Ritual of the Green Grove + - Focus of the Ellipsoid + - Sound of the Cleansing Soul + - Ritual of Living Evolution + +------------------------------------------------------ +Version 3.0.1 +------------------------------------------------------ + +- Reimplemented the Incense Altar with all appropriate blocks. +- Added guide entries for the Incense Altar and Blood Altar. Other misc entries added, too. +- Fixed a server-related crash on the client on the Sigil of the Green Grove. +- Added ore processing to Ancient Debris. +- Readded the other Sentient Tool types (with one more on the way). +- Added a few WIP items that cannot be used yet - they're part of the D*$)@ D*#@(@* system that I'm adding for Tier 4. +- Added the API - It's still in flux, so expect it to change very soon! +- Probably forgot something important. +- Fixed a crash for the Lava Crystal that made it blow up the Client if used on a server. No, that was not the intended purpose! +- Added the Ritual Tinkerer for Rituals. +- Added the "Tome of Peritia" again - stores EXP. + + +------------------------------------------------------ +Version 2.4.3 +------------------------------------------------------ + +- Fixed Lava Crystals causing crash when used while not yet bound +- Fixed Teleposers sending entities at the destination position the wrong way +- Fixed Speed Runes not working on Tier 2 altars +- Fixed crash when checking tasks for some entities +- Fixed crash when checking some entities for potion effects +- Re-implemented the Boost potion + - The PR still had TODOs in the description when I merged so this may not be complete yet + +------------------------------------------------------ +Version 2.4.2 +------------------------------------------------------ +Now with no guarantees for working textures! + +Blood Altar: + - A Blood Altar with a Redstone Lamp below it will now emit a redstone signal upon finishing crafting (#1635) + - Fixed Blood Altar being able to obtain negative progress (#1649) + +Living Armor: + - Fixed Storm Trooper Level 4 costing 65 instead of -65 upgrade points (#1631) + +Rituals: + - Fixed Ritual of the Eternal Soul (Ritual Stone layout & didn't work) (#1633) + - Fixed Ritual Tinkerer (ritual area is now unique per ritual instance), added the ability to reset the ritual ranges to default (#1636) + +Misc: + - Lava Crystals can now set things on fire (#1652) + - Fixed parts of the German translation. Other translations still need to be reworked to accomodate changed translation keys (#1640) + - Fixed Guidebook showing wrong recipes (Rune of Self-Sacrifice instead of others) (#1641) + - Wooden Paths now behave like wood instead of stone (sound & efficient tool) (#1638) + + +Technical Stuff: + - Fixed Veil of Evil and Ward of Sacrosanctity console spam (which could eventually lead to an out of memory exception) (#1639) + - Fixed GLSL shader compilation errors (affected Mesa driver (AMD GPU) on Linux) (#1624) + - Fixed `/bloodmagic network` command permissions (#1613) + - Fixed a rare crash that could occur when summoning mobs (#1618) + +------------------------------------------------------ +Version 2.4.1 +------------------------------------------------------ + +Nut was too lazy to create a changelog, it's AEon's turn now! +Changes made from Feb 02 - now (Fill end date in later) + + +Living Armor: + - Fixed "Soft Fall" not preventing damage + - "Nocturnal Prowess" should not flash anymore + - "Trickshot" now ignores HurtResistanceTime + - "Trickshot" now works properly with sentient arrows + - "Step Assist" does not take effect while sneaking + +Sentient Bow: + - Fixed Destructive Will arrows exploding continuously + - Fixed Tipped Arrows getting improved even if no Will can be used + +Sigils: + - Buffed "Sigil of the Fast Miner" to be in accordance to the "Sanguine Scientium" + - Fixed a bug where "Sigil of the Fast Miner" would also cause the whirlwind effect + - Added "Whirlwind" to the potion registry + - Fixed broken Sigil tooltip formatting + - Fixed Sigil of Holding not updating some Sigil data, allowing for exploits + - Greatly improved "Sigil of Compression" performance + - Fixed "Sigil of Compression" bug that would eat leftover items (usually everything between 55 and 64 items for a 3x3 compression) + + +Rituals: + - Ported Veil of Evil & Ward of Sacrosanctity + - Fixed "Serenade of the Nether" replacing lava source blocks with lava (fixed underlying function to detect flowing liquids) + - Added configurability to Ritual of the High Jump by modifying a new ritual area with the Ritual Tinkerer + +Misc: + - Fixed routing node oredict filter (crashes) + - Fixed mimic vanishing in some cases + - Fixed "Blood Letter's Pack" and "Coat of Arms" always being used in the main hand slot (action bar/hotbar) + - Stop insertions into Demon Crucible if the inventory is not empty + - Fixed abnormal deaths at your own hands through the sacrificial dagger (hopefully) (Gravestone bugginess) + - Fixed "Unmending" mod incompatibility + - Fixed Teleposers crashing the game if someone force-fed it junk + - added Nut being angery at contributors for messing stuff up + - Added some Russian language strings for the guide book + - Added repair recipes for Sentient Tools & Living Armor to JEI + - Many translation keys have changed which makes affected translations fall back to english + +Technical Stuff no player cares about: + - Formatted Project code + - Fixed BlockState parsing (mimic vanishing) + - Fixed some and streamlined ritual block ranges + - Mystery drain still mysterious + - Use TextFormatting rather than color codes in block lang names + - Fixed world unload crash (may happen if a world is loaded by world generators or JEI Resource graphing) + - Fixed `/bloodmagic network get` command + - Added translation keys for tickethistory command help strings + +------------------------------------------------------ +Version 2.4.0 +------------------------------------------------------ + +It's been a while, eh? Some of you may be asking yourself "whats up with bloodmagic" like that damned recon on a certain +social media site. Well here's what's up: put something snarky here when done writing changelog + +There's so much here, I'm probably going to miss some. Here's a general overview from just skimming commit titles. + +Much of this was done via PR because I'm ~~lazy~~ too busy having fun with Fabric. + +- Fixed harvest moon not working with pumpkins +- [API] Added a way to unregister an altar component +- Moved anything related to Tier 6 behind an opt-in config. Please stop asking me how to get it. +- Fixed small demon stone bricks recipe so it returns 4 instead of 1 +- Ported some old rituals from 1.7 + - Cry of the Eternal Soul + - Reverence of the Condor + - Ritual of the Feathered Earth +- Added a new ritual, Ritual of Grounding +- Optimized bound tool harvesting +- Fixed render issues with demon crystals +- Fixed Hymn of Syphoning not updating some tanks visually +- Added very basic documentation for several rituals to the guide book +- Made meteor costs for Mark of the Falling Tower configurable in the meteor json +- Fluid related sigils should now work identically to buckets of the fluid +- Fixed ritual tinkerer area setting behaving wonkily +- Fixed Seer Sigil not working for incense altars +- Added the ability to buff movement and updraft arrays by providing more of their ingredient +- Ported the ritual dismantler from 1.7.10 +- Logic fix for the Solar Powered + - Now it requires a clear line of sight to the sky as well as it being day time +- Fixed Sigil of Magnetism AOE being offset from the player +- Rewrote commands + - They're different in some way, some how + - Don't ask me how +- Quality of life improvements for the ritual tinkerer +- Changed the activation crystal levels of some rituals to use the awakened crystal + - Mark of the Falling Tower + - All the living armor ones + - It's late and I'm tired don't hate me for being too lazy to look up their names +- Fixed up some bounding boxes for some blocks with fancier models +- Sentient Bow now properly handles modded and potion-ified arrows + +I can't wait for this to turn out to be very broken so I can yell at the contributor :> + +------------------------------------------------------ +Version 2.3.3 +------------------------------------------------------ + +- Fixed Altars not filling orbs of their own tier + +------------------------------------------------------ +Version 2.3.2 +------------------------------------------------------ + +looky bois, we beta now + +- Fixed Sentient Sword attacking mobs and players without being provoked +- Fixed weird Crystal Clusters being weird + - They are now less weird +- Fixed Ritual Reader and Tinkerer not being in the creative tab +- Fixed an NPE that would happen with some blocks in the Ritual of Magnetism's area of effect +- Fixed Mimics not being able to replace blocks during placement +- Fixed issues with inter-dimensional teleportation + - Teleposers and Teleposition Sigils are now fully functional +- Fixed custom arrows not having their effects when fired from the Sentient Bow +- Fixed Splash Potions being unthrowable while Living Armor had the quenched downgrade +- Fixed Ritual Stones being considered Iron instead of Rock +- Fixed the Lava, Water, and Void sigils so they now work properly with tanks +- Fixed an issue where the Teleposer would attempt to damage an offline player +- Fixed the Compression Sigil so it now functions +- Fixed low tier altars being able to fill high tier orbs +- Fixed Sentient Tools having the wrong material +- Fixed Sentient Tools not having a repair material + - It is now demon crystals +- Added a config to disable mob drops from mobs killed by the Well of Suffering +- Added an additional glow to the Dagger of Sacrifice when it has a full incense bonus +- Reworked the Phantom Bridge +- Updated german translation +- Updated chinese translation + +------------------------------------------------------ +Version 2.3.1 +------------------------------------------------------ + +- Fixed Ritual of Magnetism not being registered +- Fixed Mob Sacrifice Array so it no longer kills bosses and players +- Fixed Will type serializer using lowercase names +- Fixed item rendering for the Sigil of Holding HUD +- Added mod id to command localization keys to prevent potential conflicts + +------------------------------------------------------ +Version 2.3.0 +------------------------------------------------------ + +- Fixed Basic Cutting Fluid recipe so it no longer requires an unobtainable potion +- Fixed Teleposer Blacklist not working +- Fixed the bounding box on the Blood Tank +- Fixed crafted Inscription Tools not having their uses tag applied +- Fixed JEI queries with bound Blood Orbs +- Fixed Crushing Ritual not passing a valid player +- Fixed Mending applying to Potion Flasks +- Fixed Teleposition Sigil not checking for a Teleposer at it's destination +- Fixed Lava Crystal not syphoning LP +- Fixed the Laputa array moving unbreakable blocks + - ie: Bedrock +- Fixed the Ritual of the Green Grove not working on Cactus and Reeds +- Added a Mob Sacrifice array +- Updated the HUD system + - You can now edit the HUD layout via the in-game config editor with a drag'n'drop system. + - This screen is only available while in a world. +- Updated the German translation +- Updated the Chinese translation +- [API] Reworked how rituals are registered + - This will break any addons that work with rituals + - If you report an issue to me regarding broken addons, it will be closed without any comment + +------------------------------------------------------ +Version 2.2.12 +------------------------------------------------------ +- Fixed Hellfire Forge and Alchemy Table's shape-crafted-ness. +- Fixed Cutting Fluids so they now work properly. +- Fixed the Fluid filters so that they now work perfectly in the routing system. +- Fixed the Living Armour Upgrade that provides night vision, so it is no longer as finicky. +- Proved that Way could update the version number properly without being told by the maid. + +------------------------------------------------------ +Version 2.2.11 +------------------------------------------------------ +- Fixed the Alchemy Array from voiding items when broken when it shouldn't have. +- Fixed Blood Tank NBT transfer between item/tile form. +- Made sure to not offend TehNut's sensibilities :NutMaid: + +------------------------------------------------------ +Version 2.2.10 +------------------------------------------------------ +- Fixed Turret Array crash on servers. +- Fixed the Blood Altar so it can actually fill Blood Orbs (derp). + +------------------------------------------------------ +Version 2.2.9 +------------------------------------------------------ +- Fixed stupid NPE in the Furnace Array +- Fixed various issues with the Alchemy Table: + - Now works for recipes that require an LP cost. + - Hoppers no longer lose items when items are placed into the "slave" Alchemy Table who has some slots restricted. +- Added an entry to the book that explains you can, in fact, use Sea Lanterns instead of glowstone blocks for your Tier 3 altar. +- Fixed the Demon Will crystals growing when they shouldn't. Also lowered the time between natural crystal growths in Will-enriched areas. + - Side note: who's bright idea was it to have to wait 15 minutes per crystal growth? +- Added the "Resonance of the Faceted Crystal", which can be used to create your first aspected Will crystal clusters. +- Made it so the Crystallizer no longer generates a random aspected Will crystal cluster. +- Fixed rare crash with the Blood Altar, which only has a chance of occuring on restart. + +------------------------------------------------------ +Version 2.2.8 +------------------------------------------------------ +- Fixed a client side null-pointer exception with the Blood Lamp + - It's a bright idea to fix this as soon as I can. +- Changed the recipe of the Teleport Array: + - Note from Scotty: Captain, I'll remind ya what happened last time you put an apple in her array! Use an Enderpearl and redstone dust next time! +- Added new arrays + - The Turret Array: + > Place an array on top of an inventory with arrows and then place a bow and an arrow in the array. The array will target enemies greater than 3 blocks away and less than 32, using any arrows in the inventory. + - Spike Array: + > Place a piece of cobblestone and iron ingot in the array. The array deals damage to any living entity that enters +- Increased the max number of items transferable by the Master Routing Node in its system to 64 per second. Will revisit this limit if I figure out a less silly upgrade system. +- Added additional effects to the Sentient Bow when aspected to different Will types. +- Added in book entries for the Teleport Array and the Turret Array. +- Fixed the Haste sigil and "Quick Feet" so that they work with MC's new movement method. +- Removed added health from "Quick Feet" - seriously, why was this a thing? +- Readded the ritual "Focus of the Ellipsoid": creates a hollow ellipsoid from blocks provided in the connecting chest. + - Note: The dictionary definition for "Ellipsoid" is a three-dimensional figure whose plane sections are ellipses or circles. For those who weren't born in a math class, it means it is a sphere that has different radii in each direction. +- Fixed an off by one in altar upgrade management causing the first of any upgrade to not be counted +- Fixed the LP cost of the Master Blood Orb + - This bug has gone unnoticed for 2 years now. +- Potion Flasks can be crafted now +- Fixed a server crash when handling dye recipes +- Moved several text outputs out of the chat and into the action bar +- Fixed a crash when trying to use unbound toggle-able sigils in the Sigil of Holding +- Fixed an issue where unbound sigils could be used inside the Sigil of Holding +- Added missing items for Demon Crystals and Demon Pylons + +------------------------------------------------------ +Version 2.2.7 +------------------------------------------------------ +- Added the Furnace Array: + - Name pending. + - Takes health from nearby players to power adjacent furnaces. + - Not covered by standard medical insurance. +- Added a new Teleport Array: + - Please keep all hands and feet inside the floating circle until you have come to a complete stop. + - Note to Scotty: Feed the non-floating circle a Feather followed by an Apple to initiate the Beaming sequence. +- Seer Sigil should now properly mimic all functions of the Divination Sigil. +- Fixed some console error spam when using Lava/Water/Void sigils. +- Registered Sulfur (dustSulfur) and Saltpeter (dustSaltpeter) to the ore dictionary. +- Rewrote how IBindable stores it's data: + - This will probably break existing worlds if you have Rituals running. Stop them before updating. + - This will also unbind any of your bound items. Bind them again after updating. + - *glances at the big red A next to all 1.12 files* +- Fixed Haste being *constricted* when above level 2. +- De-nerf Fast Miner array so it provides Haste 3 again. +- Prepped API for recipe tweaking mods. + +------------------------------------------------------ +Version 2.2.6 +------------------------------------------------------ + +- Fixed a weird thing where slates were weird +- Added HUD elements for Tranquility and Inversion +- Fixed Sigils stacking 64 times higher than they should have + +As a side note, I've been listening to http://loli.dance/ for the last like 2 hours now. + +------------------------------------------------------ +Version 2.2.5 +------------------------------------------------------ + +- We are now even more sure we're looking at a block before doing blocky things +- Fix Lava Crystal being consumed by furnaces +- Augmented Capacity and Self Sacrifice runes remember their names now +- Satiated Stomach will now let you gorge yourself on overly high saturation foods + - I'm looking at you, Pam. Stop being weird and giving your foods 28 saturation. +- Made Mod ID node filter dumber so it actually, like, works properly +- "Temporarily" disabled cross-dimensional teleports for entities. Temporarily. + - Did I mention this is temporary? As in totally not permanently? + - Who am I kidding? I'll probably forget about this. +- Bounce Arrays are no longer death traps when sneaking. + +------------------------------------------------------ +Version 2.2.4 +------------------------------------------------------ + +- Make sure we're looking at a block before doing blocky things +- Slightly altered the altar's renderer +- Added new spammy logging with config options + - Prints out information like mods registering things via the API and stuff + +------------------------------------------------------ +Version 2.2.3 +------------------------------------------------------ + +- Fixed mundane components being really really really thirsty + - (everything required water reagents. everything.) +- Buffed the Fast Miner array with a nerf + - Vanilla doesn't like Haste 3 I guess? +- Moved Divination Sigil altar output to a HUD element + - RIP Blood Altar chat spam 2014-2018 +- Mark of the Falling Tower is now re-opened and ready for sacrifices. +- Polished Demon Stones are no longer lonely uncraftable bois +- Somewhat more efficient (at least LoC wise) altar upgrade checking +- Blood Altar is now less stingy about outputs +- Coerced augmented Potion Flask recipe outputs out of hiding + +------------------------------------------------------ +Version 2.2.2 +------------------------------------------------------ + +- Fixed Alchemy Arrays so they might actually function now. Might. + - How did this even function properly before? I have no idea. +- Soul Snare should now stop giving the thrower ghosty debuffs. Should. +- Blood Magic is now in the mood to launch on servers. Probably. +- Soul Forge crafting works again! Potentially! +- Fixed the altar nuking any and all NBT attached to output items. +- Fixed the version not being replaced properly +- Rewrote Hwyla integration. + - Should now function a lot nicer. +- Implemented a new API for recipe registration + - Still need to move the alchemy table over, but otherwise this seems to function just fine. +- Implemented a new API for registering tranquility blocks. + - Will allow Chisel to stop crashing + +------------------------------------------------------ +Version 2.2.1 +------------------------------------------------------ + +- Fixed crashes when using systems that depended on internal entity names +- Fixed a crash when attempting to get the owner from unbound bindable items +- Fixed a server crash on startup +- Fixed GUIs not displaying the background and tooltips properly +- Helped the Sentient Sword get over it's identity crisis +- By the way I'm not actually upset or anything guys. + - Please stop overreacting Reddit. + +------------------------------------------------------ +Version 2.2.0 +------------------------------------------------------ + +- Basic port to 1.12 + - Does not include the vast majority of rewrites and cleanup I did on the other branch + - Completely untested. Done out of spite. Go away. + - There, you have it. Screw off now. + +------------------------------------------------------ +Version 2.1.11 +------------------------------------------------------ + +- Added support for some modded crops (Untested. Theoretically they work) + - Harvestcraft + - Actually Additions + - Extra Utilities +- Fixed permission level for sub-commands +- Large Bloodstone Bricks should receive 4 from a craft +- Fixed Diamond Meteor giving blocks of diamond +- Dynamically calculate Meteor Weight +- Fixed NPE in fluid filter +- Fixed Blood Tank capacity being reset when the chunk reloaded +- Updated russian translation +- Fixed Rune Type capability not registering on physical client +- Updated Sigil of Holding texture so set color is more visible +- Fixed blocks destroyed by bound tools not storing any NBT data +- Fixed Harvest ritual not working on Melons and Pumpkins +- [API] Methods for removing recipes + +------------------------------------------------------ +Version 2.1.10 +------------------------------------------------------ + +- Fixed malicious clients being able to load arbitrary chunks on the server +- Fixed Bound tools not setting their tool class and harvest level + +------------------------------------------------------ +Version 2.1.9 +------------------------------------------------------ + +- Fixed Alchemy Table overwriting output each time it crafted something + - https://github.com/WayofTime/BloodMagic/issues/1119 +- Blood Magic commands (/bloodmagic) can now be used in Command Blocks + - https://github.com/WayofTime/BloodMagic/issues/1117 +- Re-implemented the Soul Fray debuff on death + - No more exploiting sacrifice by killing yourself over and over (again) + - https://github.com/WayofTime/BloodMagic/issues/1118 +- Updated Traditional Chinese localization + - https://github.com/WayofTime/BloodMagic/pull/1116 + +------------------------------------------------------ +Version 2.1.8 +------------------------------------------------------ + +- Fixed more null stack issues + - Will it ever end? +- Fixed a crash when activating a ritual via Redstone +- Fixed a fluid handling issue with Blood Tanks + - https://github.com/WayofTime/BloodMagic/issues/1108 +- Fixed issue where Sigils inside a Sigil of Holding were using the wrong item + - https://github.com/WayofTime/BloodMagic/issues/1102 +- Fixed crash when activing Bound Tools + - https://github.com/WayofTime/BloodMagic/issues/1114 +- Updated the Chinese localization + - https://github.com/WayofTime/BloodMagic/pull/1052 +- Placer Ritual is now much more performant +- Many recipes have been moved over to support the Ore Dictionary + - https://github.com/WayofTime/BloodMagic/issues/1101 + +------------------------------------------------------ +Version 2.1.7 +------------------------------------------------------ + +- Fixed Grave Digger not applying damage bonus + - https://github.com/WayofTime/BloodMagic/issues/1098 +- Fixed crash when attempting to handle the dropping of Demonic Will + - https://github.com/WayofTime/BloodMagic/issues/1091 +- Fixed Crash of the Timberman dupe + - This also adds support for IItemHandler based inventories + - https://github.com/WayofTime/BloodMagic/issues/1090 +- Fixed a crash when a Meteor struck the ground + - https://github.com/WayofTime/BloodMagic/issues/1088 +- Fixed the Seer's Sigil not using Roman Numerals to display the altar tier + - https://github.com/WayofTime/BloodMagic/pull/1094 + +------------------------------------------------------ +Version 2.1.6 +------------------------------------------------------ +- Fixed invisible Sentient Specters destroying everything and everybody around their owners + - lol + - https://github.com/WayofTime/BloodMagic/issues/1065 +- Fixed occasional crash when Blood Altar checked it's recipe + - https://github.com/WayofTime/BloodMagic/issues/1086 +- Fixed Blood Light acting as a collidable block in obfuscated environments + - I think + - https://github.com/WayofTime/BloodMagic/issues/1083 +- Fixed crash when Alchemy Table fully depleted a Cutting Fluid item + - https://github.com/WayofTime/BloodMagic/issues/1082 +- Fixed crash when scrolling through Sigil of Holding + - https://github.com/WayofTime/BloodMagic/issues/1081 +- Fixed not being able to take Gems out of Demon Crucibles + - https://github.com/WayofTime/BloodMagic/issues/1079 +- Fixed some more null stack issues + - When is this going to be over... + - https://github.com/WayofTime/BloodMagic/issues/1068 +- Fixed JEI not displaying Armor Tomes +- Fixed Body Builder level 4 being 5x more expensive than level 5 + - https://github.com/WayofTime/BloodMagic/pull/1080 +- Updated Japanese localization + - https://github.com/WayofTime/BloodMagic/pull/1076 + +------------------------------------------------------ +Version 2.1.5 +------------------------------------------------------ +- Fixed Hellfire Forge slots acting up + - i is not j no matter how similar they look +- Fixed JEI compat for Alchemy Table recipes +- Fixed a lot more null stack checks +- Fixed (yet another) crash when creating an "invalid" stack of the Blood Tank +- Fixed Demon Will Crystal and Teleposer crashy interaction +- Fixed crash when working with toggleable sigils + +------------------------------------------------------ +Version 2.1.4 +------------------------------------------------------ +- Fixed a crash when checking if two items could be combined +- Fixed a crash when attempting to open the Sigil of Holding GUI +- Fixed a crash when somebody made an "invalid" stack of the Blood Tank +- Fixed a crash/hilarity where a Blood Altar would update itself as a Comparator + - Thanks to Arcaratus for causing this. I haven't laughed that hard in a while. + +------------------------------------------------------ +Version 2.1.3 +------------------------------------------------------ +- Added a new Master Ritual Stone that inverts it's redstone activity +- Fixed Living Armor attributes overriding eachother instead of adding up +- Fixed Ore doubling sometimes adding invalid recipes +- Downgrade tomes are now called Downgrade Tomes +- Added some caching to rituals to (hopefully) increase performance with less world data query-ing + +------------------------------------------------------ +Version 2.1.2 +------------------------------------------------------ +- Fixed server crash when creating the guide entries + +------------------------------------------------------ +Version 2.1.1-70 +------------------------------------------------------ +- Updated to Minecraft 1.11(.2) +- Fixed the Living Armour Sacrificial Upgrade +- Fixed Bound Tools not draining LP +- Implemented the Blood Tank + - Current recipes are temporaryâ„¢ +- Empty flasks can now be refilled to create a new flask +- Fixed Aura of Expulsion whitelist +- Added the Altar's Charge value to the Waila Tooltip when holding a Seer's Sigil +- Fixed meteor config error caused by EnderCore reloading configs early into startup +- Fixed meteor config not generating new entries +- Blacklisted Sentient Spectres from the Well of Suffering +- Fixed Sigils drawing from the user instead of the bound network +- Added Fluid routing to the routing nodes - this is done by using the Fluid Filter and placing a fluid container as the filter. +- Made it so the book does not give the filling recipe when the Blood Orb recipe is queried. +- Added a null check for the Will getter for the Aura incase the WillChunk somehow does not generate. +- [API] Added a new IMC API for modders to register their blocks as an altar component. + - Example: Chisel Glowstone can now be used for the Tier 3 caps (once Chisel implements it) + +------------------------------------------------------ +Version 2.1.0-69 +------------------------------------------------------ +- Fixed Phantom Bridge sigil glitch when travelling between dimensions and teleporting large distances. +- Added deprecated methods for easier updating - Oops! + +------------------------------------------------------ +Version 2.1.0-68 +------------------------------------------------------ +- Fixed Ritual of Regeneration's text +- Fixed silly dupe bug with the Zephyr ritual. + +------------------------------------------------------ +Version 2.1.0-67 +------------------------------------------------------ +- Added the Destructive Will effect to the Ritual of the Green Grove. This ritual now is done~ +- Finished the Augments for the Serenade of the Nether. +- Implemented a new model for the Blood Altar to be more in-line with the rest of the mod (Thanks, wiiv!) +- Made the Blood Altar respect the new capability system for fluid management. +- Finished the Augments for the Ritual of the Feathered Knife. +- Finished the Augments for the Ritual of the Crusher. +- Finished most of the Augments for the Ritual of the Shepherd. +- Changed the Ritual of the Feathered Knife so it respects the Tough Palms Living Armour Upgrade. +- Fixed the Ritual of the Feathered Knife so that its health threshold is percent-based. +- Made the aspected Sentient Tools drop their corresponding Will type on killing enemies. +- Made it so peaceful animals provide more LP by default (to encourage creating your own farm). +- Increased the effectiveness of animals for the Gathering of the Forsaken Souls ritual by a factor of 4. +- Added the framework for the Purification Altar. +- Fixed a crash with the Ritual Diviner when attempting to replace certain blocks. +- Snares can no longer hit the thrower of the snare within 20 ticks of throwing it. +- Updated the book so it contains most of the rituals. +- Added some placeholder recipes for the Living Armour Downgrades - they will eventually change. + +------------------------------------------------------ +Version 2.1.0-66 +------------------------------------------------------ +- Made it so that when you acquire a Living Armour Upgrade from a Tome, it raises the corresponding Stat Tracker up to that upgrade level. +- Added some more framework for the Living Armour Downgrades. +- Modified the Grim Reaper's Sprint so it is better at later levels. +- Added a Repairing Living Armour Upgrade (trained by damaging the chestplate of the Living Armour while you have a full set on - it repairs all of your armour pieces over time) +- Modified the Dwarven Might skill to better change the mining speed when mining. +- Added a Dig Slowdown armour downgrade called "Weakened Pick". +- Added the framework for a ritual that grants downgrades (instead of the potion method). +- Fixed the recipes for some of the Demon Will blocks +- Added the Sigil of Elasticity, the Sigil of the Claw, and the Sigil of Winter's Breath. +- Changed most of the BlockString blocks to a BlockEnum in order to solve a loading issue with schematics. +- Added the entries for the Skeleton Turret Array and the Updraft Array +- Added the Bounce Array +- Modified the Sigil of the Phantom Bridge so it better performs with speed modifications +- Added the ability to use Mimic Blocks containing a valid Altar Component to work with the altar (#945) + - Note: If using a Blood Rune, you do not get the ability of said rune. It just counts as a valid block. +- Fixed `/bloodmagic network get NAME` using the wrong localization (#955) +- Fixed Mimic Blocks causing an NPE with some Tile Entities (#951) +- Fixed a massive FPS drop when looking at a Master Ritual Stone while holding a Ritual Tinkerer (#950) +- Fixed an occasional crash when looking at a Mimic block with WAILA installed (#949) +- Fixed the displayed Lesser Tartaric Gem recipe in the Guide (#947) +- Fixed Dagger of Sacrifice one-shotting bosses. It now just doesn't work (#932) +- Fixed controls re-binding after each startup (#922) +- Added an alchemy array, the Array of the Fast Miner + +------------------------------------------------------ +Version 2.1.0-65 +------------------------------------------------------ +- Fixed NPE when attacking mobs when you don't have a set of Living Armour. Oops. + +------------------------------------------------------ +Version 2.1.0-64 +------------------------------------------------------ +- Fixed the symmetry issues of the Ritual of Containment +- Changed the recipe of the Acceleration rune so that it is a T4 rune. +- Added the Charging rune, which accumulates charge by using the LP from the Blood Altar (1 charge = 1 LP always). If enough charge is stored when crafting, the crafting occurs instantly. +- Added the entries for the Rune of Augmented Capacity, Charging Rune, and Rune of Acceleration +- Fixed the Sigil of Translocation so that it does not crash when picking up certain blocks. Also removed the damned lightning. +- Changed the Quick Feet upgrade and the speed boost sigil so that their speeds are applied when strafing and walking backwards as well. + +------------------------------------------------------ +Version 2.1.0-63 +------------------------------------------------------ +- Removed the darn testing code from the Divination Sigil. >.> + +------------------------------------------------------ +Version 2.1.0-62 +------------------------------------------------------ +- Fixed the fact rituals were not working (Might have been a compiler error). + +------------------------------------------------------ +Version 2.1.0-61 +------------------------------------------------------ +- Added fancy rendering for the Inversion Pillars. +- Made the Meteor registry more manageable by separating the meteors into independent .json files. +- Fixed the Sigil of Holding so that it does not crash servers when pressing the Holding key ('H' by default) + +------------------------------------------------------ +Version 2.1.0-60 +------------------------------------------------------ +- Fixed routing node serialization. +- Removed unwanted System.out lines when clicking on the slots in the routing node. + +------------------------------------------------------ +Version 2.1.0-59 +------------------------------------------------------ +- Added the Living Armour Upgrade, Nocturnal Prowess, which gives night vision in dark areas and increases damage while the area is dark. +- Added a LOT of dungeon blocks. I mean a lot. +- Finished adding the recipes for all of the blocks (except the Demon Alloy) +- Added a temporary texture (finally) for the Inspectoris Scandalum +- Fixed Specters spawning with the /give command +- Fixed the sacrifice range of the altar. +- Fixed the Regeneration ritual so that it works on non-players +- Added Mimic entry to The Architect. +- Configurified the Meteor Ritual - Modpacks and users can edit all of the major properties of the meteor ritual, including what items need to be dropped onto the ritual as well as what you get in the ritual, radius, etc. The config will refresh if there is a version change unless you set "resyncOnVersionChange" to false. +- Merged the three brick variants into one. +- Added the Inversion Pillar models and caps + +------------------------------------------------------ +Version 2.0.4-58 +------------------------------------------------------ +- Temporarily removed the dungeon stuff so that it doesn't crash. + +------------------------------------------------------ +Version 2.0.4-57 +------------------------------------------------------ +- Changed the Demon Will Aura Gauge so it refreshes based on the player's ticks existed +- Made Draft of Angelus craftable with gold dust +- Fixed Elytra upgrade +- Added the Mimics - the real ones +- Implemented a bit of framework for some T5 shenanigans. +- Fixed the Incense Altar so it properly detected the south sides of the altar. +- Updated the Filtered Item Routing Nodes' GUI so that it behaved less like ass. Also added the necessary nbt porting code. +- Further improved the routing GUI by allowing an amount to be typed into the amount bar. +- Updated the toggleable sigils so they drain the user's LP based on the user's total ticks existed instead of the world time. This is to solve the doDaylightCycle glitch in this scenario. + +------------------------------------------------------ +Version 2.0.4-56 +------------------------------------------------------ +- Fixed an incompatability between the 1.10.2 and the 1.9.4 versions + +------------------------------------------------------ +Version 2.0.4-55 +------------------------------------------------------ +- Made Guide-API a required mod. +- Fixed a funky issue where the Sound of the Cleansing Soul did not reset the upgrade points internally. +- Added Sentient Specters, which are essentially tamable companions. Drop a sentient tool if you have more than 1024 Will of a given type to summon one (at the cost of 100 Will). +- Added Mimic Blocks! + +------------------------------------------------------ +Version 2.0.3-54 +------------------------------------------------------ +- Eliminated some of the "wonkiness" from the Air Sigil +- Fixed the Hellfire Forge so that swapping Tartaric gems will not give free stuff. +- Added the Potion Flask and a few of the potion effects - max amount of effects that can be added to a single flask is currently 3. +- Fixed the Aura gauge not resetting in chunks that do not have any Aura +- Added tooltips for the progress to the next upgrade for Living Armour (hold shift + M) +- Finished off The Architect docs for now +- Finished off The Demon Kin docs for the time being + +------------------------------------------------------ +Version 2.0.3-53 +------------------------------------------------------ +- Fixed issue where the mod doesn't load on servers. Oops. + +------------------------------------------------------ +Version 2.0.3-52 +------------------------------------------------------ +- Updated the Sanguine Scientiem with Alchemy Array recipes +- Fixed the Blood Altar so that it can (again) work on a stack size larger than 1. + +------------------------------------------------------ +Version 2.0.3-51 +------------------------------------------------------ +- Added the Demon Will Aura Gauge to accurately determine the Will in the Aura. +- Added the ability for rituals to have a Demon Will set on them. Now to get rituals to use them. +- Fixed it so that the Crushing Ritual now ignores liquids +- Added the Mark of the Falling Tower ritual. +- Changed the tooltip of the ritual diviner so that it gives information about the selected ritual. +- Added more to the Sanguine Scientiem, including Hellfire Forge recipes and Altar recipes +- Updated a lot of the text in the Sanguine Scientiem + +------------------------------------------------------ +Version 2.0.2-50 +------------------------------------------------------ +- Fixed bad NPE when using the WoS. (Well, I guess all NPEs are technically bad, but I guess it depends on your perspective. That said, I don't think a changelog is the best place for a theoretical discussion about the rights and wrongs of errors, so I will stop now.) + +------------------------------------------------------ +Version 2.0.2-49 +------------------------------------------------------ +- All Alchemy Array recipes are WIP and are subject to change! ^.^ They are created using the Arcane Ash and are shown as first item + second item. +- Added the Movement Array (feather + redstone) +- Added the Mob Beacon Array (2x Zombie Flesh) +- Added the Updraft Array (feather + glowstone) +- Added the Skeleton Turret Array (Arrow + feather) +- Fixed the Lava Crystal recipe so that it can use all tiers of blood orb +- Nerfed the Bound Blade. This is temporary, since the sword eventually will be modified. +- Fixed Teleposers so they no longer crash 1.10 instances when teleposing tiles. + +------------------------------------------------------ +Version 2.0.2-48 +------------------------------------------------------ +- Fixed a stupid bug by a stupid Way + +------------------------------------------------------ +Version 2.0.2-47 +------------------------------------------------------ +- Fixed horrible memory leak in the Living Armour. +- Item Nodes can now be disabled by a (weak) redstone signal. + +------------------------------------------------------ +Version 2.0.2-46 +------------------------------------------------------ +- Fixed it so Ritual stones can be placed by the Ritual Diviner again. Also made it so that rituals are activateable and don't crash servers. + +------------------------------------------------------ +Version 2.0.2-45 +------------------------------------------------------ +- Changed the recipe of the Sanguine Scientiem +- Fixed the Routing system so that it properly eliminates the connection to the Master node when the Master node is broken. +- Fixed an issue where the Spectral Blocks (from the Sigil of Suppression) would return the liquid on the client side before the sigil was deactivated. +- Made it so that the bound tools are (supposedly more so) unbreakable. This will probably come bite me on the ehem later, but we'll see. +- Added Fire Resistance Living Armour Upgrade, "Gift of Ignis." +- Updated The Architect section of the documentation. +- Fixed it so the Ritual will call stopRitual when a ritual stone is broken. +- Added the recipe for the Inspectoris Scandalum (I had to check if I spelled that right) which acts as a helper for Altar Building +- Right-clicking a MRS with the Ritual Diviner will affix the ritual hologram to the MRS. + +------------------------------------------------------ +Version 2.0.2-44 +------------------------------------------------------ +- Added the Draft of Angelus, which increases the max number of upgrade points for Living Armour. It's strawberry flavoured! +- Fixed the Tome of Peritia again - <= and < are the same, right? +- Fixed an interaction between the Tome of Peritia and the Experienced upgrade + +------------------------------------------------------ +Version 2.0.1-43 +------------------------------------------------------ +- Added an initial method to divine where a blood rune is missing for the next tier of altar. +- Fixed an NPE with the Gathering of the Forsaken Souls +- Fixed Absorption Hearts remaining after the absorption buff ends for the Steadfast Sentient Sword +- Updated the Guide (Woooooooooooooo........) +- (Possibly?) fixed Tome of Peritia bug of the Negative Speed of Light +- Added recipes for all ores -> dust in the alchemy table. +- Added the recipes for the Sentient Tools - yes, they all drop Will. +- Fixed the bow so that it now gives you Will when you kill a mob - it does not drop the Will, it goes directly to you. + +------------------------------------------------------ +Version 2.0.1-42 +------------------------------------------------------ +- Fixed Demon Crucible's weird behaviour where right-clicking it with an invalid item would still put the item in the crucible + and give the player an item with a stacksize of 0. +- WAILA! +- Oh, and demon wings with the Elytra. + +------------------------------------------------------ +Version 2.0.1-40 +------------------------------------------------------ +- Bug fix version, and added several translations - some of these are still WIP. +- Fixed render bug with the Alchemy Table +- Demon WIll now drops from slimes at a reduced rate instead of not at all +- Fixed Jesus Water effect with Life Essence +- Added the Vengeful Will crystal cluster recipe. Oops! >.> +- Changed the "Default" Will into "Raw" Will. +- Fixed an item duplication bug with how item pick-up is handled with the Zephyr ritual and the magnetism sigil. +- Made the bound Axe function... correctly +- Fixed a command block only issue with BM commands + +------------------------------------------------------ +Version 2.0.0-39 +------------------------------------------------------ +- Updated to 1.9.4! +- Fixed the Trick Shot upgrade +- Fixed Gate of the Fold endless loop +- Added rune type colors to the Ritual Diviner tooltip +- Crusher ritual ignores unbreakable blocks + +------------------------------------------------------ +Version 2.0.0-38 +------------------------------------------------------ +- Fixed it so that the Sentient weaponry is actually repairable using any demon will crystals in an anvil +- Changed the stat tracker for Tough Palms so that it counts number of hearts sacrificed, not number of sacrifices +- Fixed the Living Armour so that it wouldn't get damaged by self-sacrificing when you had upgrades that mitigate unblockable sources. +- Fixed bound sword stuttering + +------------------------------------------------------ +Version 2.0.0-37 +------------------------------------------------------ +- Fixed Elytra upgrade not working on servers. Oops! + +------------------------------------------------------ +Version 2.0.0-36 +------------------------------------------------------ +- Added JEI compat for the Alchemy Table +- Changed the Item Routing system so that it used capabilities instead +- Updated the Alchemy Table recipe system so that it can provide better custom recipes. +- Added some more recipes (like rudimentary ore doubling) to the alchemy table. +- Added Explosive Powder, which is used to reduce cobblestone into gravel and gravel into sand (64 uses) + +------------------------------------------------------ +Version 2.0.0-35 +------------------------------------------------------ +- Changed Living Armour so that it is now damagable. The Living Armour Chestplate will be damaged, but will not break. If it gets to ~0 durability, it will damage your LP network heavily. +- Living Armour is now repairable in an anvil with Binding Reagent. +- Started adding in the Alchemy Table... not really started. +- Changed it so that the Mending enchantment consumes the EXP before the Tome of Peritia does +- Added fall distance mitigation to the jump upgrade +- Fixed Lava Crystals... again. +- Worked on the Alchemy Table +- Added the Elytra upgrade - craft the tome in an anvil by using a book and a full Elytra. + +------------------------------------------------------ +Version 2.0.0-34 +------------------------------------------------------ +- Added config to Blood Magic that will prevent the compression handler from reading the recipes added by the Compression mod (default is true). +- Added Japanese localization and fixed Czech (I can't spell) localization. + +------------------------------------------------------ +Version 2.0.0-33 +------------------------------------------------------ +- Fixed a few localization derps. +- Fixed a few minor bugs. + +------------------------------------------------------ +Version 2.0.0-32 +------------------------------------------------------ +- Changed Tome of Peritia's recipe +- Added step assist living armour upgrade tracker. +- Added new Living Armour upgrades: + - Added Charging Strike, which increases knockback and damage for attacks while sprinting + - Added True Strike, increasing the damage of critical hits +- Updated for Forge 12.16.0.1859 +- Did some work on the Sentient Bow to start adding abilities to it +- Fixed the Speed and Jump rituals so that they correctly update the player's motion. +- Implemented the "Ritual Tinkerer" and added its recipe. + +------------------------------------------------------ +Version 2.0.0-31 +------------------------------------------------------ +- Fixed NPE when using an empty bucket. +- Added Living Armour Upgrades: + - Strong Legs increases jump height. Pro tip: hold shift to bypass this jump boost. + - Soft Fall decreases all fall damage, up to 100% at level 5. + - Grave Digger, for fun times with alternative weapons +- Added increase in speed for Routing nodes inside of a chunk with Demon Aura +- Fixed OutOfBoundsException in the Sentient Sword when you didn't have enough Will. +- Fixed custom potion effects so they could be applied server-sided +- Added recipe for the Tome of Peritia + +------------------------------------------------------ +Version 2.0.0-30 +------------------------------------------------------ +- Wow, there are a lot of bug fixes lately. +- Fixed it so that the blood orb is no longer consumed in the crafting grid. + +------------------------------------------------------ +Version 2.0.0-29 +------------------------------------------------------ +- Fixed formatting not working properly on servers. + +------------------------------------------------------ +Version 2.0.0-28 +------------------------------------------------------ +- Fixed the soul snare. +- Removed health buff from Steadfast armour +- Changed corrosive sword's effect from poison to wither +- Fixed living armour's training bracelet so that it deactivates any training of upgrades not supported +- Added "Experienced" living armour upgrade, which provides more xp from picked up orbs. +- Updated to Forge 1826 + +------------------------------------------------------ +Version 2.0.0-27 +------------------------------------------------------ +- Added OreDict support for the altar (was done in 26) +- Made it so that the Tartaric gem would show visually what type of will was contained +- Allowed the Sentient Sword to use different wills, and change its colour based on the used one. Also made it so you do not toggle it by right clicking, but it simply + rechecks itself when you smack something and when you right-click. +- Fixed item binding. Yusssss. +- Added Sword, Armour, and Bow texture changes when you have different demonic will in your inventory. +- Finalized sentient sword effects +- Did work on the unique demon will effects for armour +- FINALLY changed it so farm animals do not drop demon will. + +------------------------------------------------------ +Version 2.0.0-23 +------------------------------------------------------ +- Fixed "see through world" syndrome for most blocks +- Fixed .obj models so that they will properly render while in-hand +- Fixed routing node attaching logic +- Changed the growth behavior of the crystals +- Fixed Potion getting for various methods +- Started work on crystal automation ritual +- Finished first iteration of the iterator of AreaDescriptor (hehe) +- Finished the crystal automation ritual, "Gathering of the Forsaken Souls." This ritual damages mobs in it's area (21^3 cube around the MRS) and once it kills a mob it + uses its life essence to feed the demonic will crystals inside of its area (two blocks above the ritual stone, 7x7 region and 5 high). This costs LP and + demonic will from the aura of the particular type, and costs less will the more... varied the mobs killed are. Growth amount is dictated by the max health + of the mobs killed. +- Updated to Forge 1811 + +------------------------------------------------------ +Version 2.0.0-22 +------------------------------------------------------ +- Fixed client disconnect when joining servers +- Fixed Bound Blade having same damage between activated and deactivated states +- Fixed Sentient Armour gem so it works, now +- Fixed Armour model textures +- Fixed crash on newer versions of Forge +- Updated zh_CN localization + +------------------------------------------------------ +Version 2.0.0-21 +------------------------------------------------------ +- Initial release to 1.9. Many glitches that have yet to be ironed out, some of them Forge issues. Probably best not to play with this one until Forge stabilizes. + +------------------------------------------------------ +Version 2.0.0-20 +------------------------------------------------------ +- Fixed Blood Altar crashing on odd occasions. +- Fixed GUI of hellfire forge. +- Fixed issue with Will Chunks not generating when requested in new chunks +- Fixed issue where Orb Tier was never set for a player internally +- Fixed Creative Dagger. It now works correctly. Shift + Right Click on an Altar to fill it to capacity. +- Fixed step height being set to incorrect value. Your Chisels and Bits stairs should work, now! +- Fixed Bound Tools not being enchantable. +- Fixed Bound Tools "Beast Mode" breaking blocks unreliably. +- Fixed Blood Light Sigil not using LP +- Changed Will system so that it automatically goes into your inventory and then drops any excess Will on the ground. +- Changed Blood Light to render more particles when the sigil is held to make them easier to find. +- Added debug commands. These work exactly the same as in the 1.7.10 version +- [API] Fixed AddToNetworkEvent not being cancellable even though it should be +- [API] Helper method in NetworkHelper to obtain the highest possible capacity for a given tier. + +------------------------------------------------------ +Version 2.0.0-19 +------------------------------------------------------ +- Fixed path blocks so they are actually craftable. +- Added gui stuff to enable priority in the item routing system: nodes with a lower value priority will be accessed first. (May be rotated in the future) +- Grayed out the currently active side's button in the item routers. +- Added Demon Pylon +- Changed behaviour of Demon Crucible +- Fully implemented the behaviour of the crystal growing process. + - A Demon Crucible will be able to syphon the demon will from the tartaric gems inside of its inventory - right click with a gem to place it into the inventory. + - The syphoned will from the gem will go into the chunk, staying in the air - it will not move to neighbouring chunks unless forced to do so through other means + - The Demon Pylon draws will in the air from surrounding chunks and puts it into its own chunk - this acts as sort of like a pressure system, where it will even out the will distribution, but only goes one way. + - The Demon Crystallizer takes 100 will from the air (need a demon crucible for it to work) and forms a demon crystal on top of it. There is a 10% chance that this crystal will be of a special type. + - The Demon Crystals can be mined in order to collect their crystals. These crystals can be used for crafting more powerful stuff. If you have over 1024 will on your person when you right click the crystal, you can harvest a single crystal instead of the entire thing. + - You can put the harvested crystals inside of a demon crucible. Each crystal is worth 10 will, so this acts as a way to semi-automate will creation. + - When a hellfire forge is inside of a chunk with demon will, it will fill its contained tartaric gem with will. + - Changed a few recipes (like the greater tartaric gem) to match this new system. + +------------------------------------------------------ +Version 2.0.0-18 +------------------------------------------------------ +- Fixed issue with lava crystal working even their is no LP available. +- Added upgrade trainer +- Fixed step height issue with C&B stuff. Apparently step height is now 0.6 by default instead of 0.5. +- Added Ritual: Song of the Cleansing Soul to remove Living Armour upgrades from the armour. +- Added Ritual: Ritual of Living Evolution, which is used to set the living armour's max upgrade points to 300. +- Added Ritual: The Timberman to cut down trees. Requires a chest on top of the MRS in order to collect the drops from harvested trees. +- Added Ritual: Hymn of Syphoning, which syphons up fluids around it in a 16 block radius and puts the fluid in the tank above it. The tank above it must have at least one bucket of the fluid you want to syphon inside of it. +- Added Ritual: The Assembly of the High Altar, which places runes and blocks from the inventory above it in the world in the form of a blood altar. Autobuilding altars~ +- Added Ritual: The Gate of the Fold. +- Added Ritual: The Filler. Places blocks from the inventory on top of it in the world. +- Added Ritual: Le Vulcanos Frigius + +- Added tooltip to living armour to show the current upgrade points of the armour. +- Added recipe for the training bracelet. Combine in an anvil with an upgrade tome to set it as the upgrade to train. +- Ammended range of Zephyr ritual +- Fixed Green Grove ritual +- Fixed Crusher ritual so it didn't break everything at once. +- Removed the FOV effect from the Quick Feet speed upgrade. +- Minor work on the Demon Crucible. +- Crucibles now fill the tartaric gems of close-by hellfire forges +- Fixed rituals not correctly re-activating when taking off a redstone signal after reloading the world. +- Added Teleposition Sigil, which teleports the user to the bound Teleposer. +- Added Transposition Sigil, which picks up the block clicked on including the NBT of the given tile. + +------------------------------------------------------ +Version 2.0.0-17 +------------------------------------------------------ +- Added Living Armour Upgrades + - Solar Powered + - Grim Reaper's Sprint + - [Thaumcraft] Runic Shielding +- Fixed Blood Altar's progress resetting when clicking with another item +- Fixed Divination and Seer sigils crashing when clicking on an altar while not bound +- Added crafting recipes for the following sigils: + - Compression + - Phantom Bridge + - Ender Severance + - Haste +- Dagger now bypasses checks of armour + +------------------------------------------------------ +Version 2.0.0-16 +------------------------------------------------------ +- Fixed a major bug with the Blood Orbs. + +------------------------------------------------------ +Version 2.0.0-15 +------------------------------------------------------ +- Added blood lamp sigil array texture and reagent. Made it so the blood lamp sigil will place the light when right clicking on a block. +- Added magnetism sigil array texture and reagent. +- Added the ability for the blood altar to have its buffer tanks accessed (Semi-tested) +- Improved readability for large numbers +- Fixed break particle for Alchemy Array +- Waila handling for Alchemy Array +- Fixed Ritual eating LP when reactivated via a Redstone signal +- Ritual Stones now always drop blank stones +- Bound Blade is now enchant-able +- Goggles of Revealing upgrade for Living Helmet. Combine a Living Helmet and Goggles of Revealing in an Anvil +- Fixed config for disabling rituals +- [API] Lots of changes to the binding system. It's now handled automatically for all items that implement IBindable. +- Added Incense Altar system. +- Added models for the routing nodes, incense altar, and the hellfire forge. + +------------------------------------------------------ +Version 2.0.0-14 +------------------------------------------------------ +- [API] Added support for some IMC methods: + - FMLInterModComs.sendMessage("BloodMagic", "teleposerBlacklist", ItemStack) + - FMLInterModComs.sendMessage("BloodMagic", "sacrificeValue", "ClassName;Value") + - FMLInterModComs.sendMessage("BloodMagic", "greenGroveBlacklist", "domain:name") +- Fixed the bound sword so that it now drops weak blood shards. +- Fixed the demon will so that you can actually pick it up! + +------------------------------------------------------ +Version 2.0.0-13 +------------------------------------------------------ +- Added recipes and temp textures for path blocks. More path blocks to come. +- Tweaked the Incense altar and added its recipe. +- Fixed Blood Light sigil not providing the right coloured particles +- Added the ability for the divination sigil to look up information about the incense altar. +- Fix another NPE when checking of a player has a full set of Living Armor + +------------------------------------------------------ +Version 2.0.0-12 +------------------------------------------------------ +- This build doesn't exist. Shhh + +------------------------------------------------------ +Version 2.0.0-11 +------------------------------------------------------ +- Fix NPE when checking if a player has a full Living Armor set + +------------------------------------------------------ +Version 2.0.0-10 +------------------------------------------------------ +- Added recipe for Sentient Armour - craft a Sentient Armour Gem and right click with it to toggle the armour. +- Added recipes for the Greater and Grand Tartaric gems. These are temporary recipes. +- Updated textures. +- Added ability to fill gems from other gems. Right click with a gem to fill other gems in your inventory. +- Un-nerfed the Ritual Stone recipe to provide 4 again +- Rituals can now be toggled with Redstone. Provide a redstone signal to the Master Ritual Stone to turn it off. +- Made the Sentient sword able to block. +- Fixed the Sentient Sword so that even when not activated it will still do damage - just at a reduced amount. +- Made it so that Demon Will will be voided if all of the player's tartaric gems are filled. + +------------------------------------------------------ +Version 2.0.0-9 +------------------------------------------------------ +- Fixed the rituals so that they no longer caused nausea no matter what. + +------------------------------------------------------ +Version 2.0.0-8 +------------------------------------------------------ +- Fixed crash when activating rituals while operating on servers +- Added the majority of stuff for the item routing system. + +------------------------------------------------------ +Version 2.0.0-7 +------------------------------------------------------ +- JEI now displays more information for Altar recipes. Hover over the Altar image to view it. +- Added particles to the Blood Altar on the server-side. +- Allow configuration of entity sacrificial values +- [API] Allow setting of entity sacrificial values via API. Takes precedence over config values. +- [API] Method to easily get instances of Items and Blocks +- [API] Allow mods to blacklist their blocks from the Green Grove ritual/sigil + +------------------------------------------------------ +Version 2.0.0-6 +------------------------------------------------------ +- Fixed the LivingArmourTracker for defense so that it no longer ate up armour (om nom nom nom) + +------------------------------------------------------ +Version 2.0.0-5 +------------------------------------------------------ +- Tweaked Sentient Sword's will drop rate +- No longer 1.8.8 compatible +- Cleaned some clutter from JEI +- Added a potential fix to some server mod issues. + + +------------------------------------------------------ +Version 2.0.0-4 +------------------------------------------------------ +- Added Physical resistance upgrade (Tough skin) +- Added health boost upgrade (Healthy) +- Added melee damage upgrade (Fierce strike) +- Added trick shot upgrade (Have fun finding it! :D) +- Added T5 orb recipe and Demonic Activation Crystal +- Added Rituals: + - Animal Growth ritual + - Harvest ritual + - Magnetism ritual + - Crushing ritual + - Full Stomach ritual + +- Added parts for the new Demon Will System + - Added the Demon Will item + - Added the Sentient Sword, which will be powered by consuming demon will + - Added a Lesser Tartaric Gem in order to hold onto more will + - SSSSSSSSoooooooouuuuuuulllllllllsssssss + - Added Hellfire Forge block + - Added rudimentary snare and recipe - has 25% chance for monster to drop its soul + - Added Sentient Bow + - Added Sentient Armour + +- Fixed binding of togglable sigils +- Added saving for ritual tags + +------------------------------------------------------ +Version 2.0.0-3 +------------------------------------------------------ +- Fixed client-side issue when shift-clicking lava crystals into a furnace while on a server. +- Added poison upgrade to Living Armour +- Fixed digging upgrade +- Added self sacrifice upgrade to Living Armour (Tough Palms) +- Added knockback resistance upgrade to Living Armour, trained via eating (Body Builder) + + +------------------------------------------------------ +Version 2.0.0-2 +------------------------------------------------------ +- Added Life Essence bucket recipe +- Added the rendering of LP inside of the altar +- Added Living Armour including some upgrades: + - Added speed upgrade + - Added digging upgrade +- Modified Divination Sigil recipe - no longer uses a block of glass because of issues on servers (tempramental) +- Modified Apprentice Blood Orb recipe to require a block of redstone instead. +- Added the Reagent Air recipe. + + +------------------------------------------------------ +Version 2.0.0 +------------------------------------------------------ + +Initial release of the open beta for the mod to Minecraft v1.8.9! This mod version has a lot of changes. Because it is a full-on rewrite, some of the mechanics of the mod have changed/are going to change. As such, the feel of the mod will be slightly different than previous iterations. +This mod has a large amount of compatibility with the recipe look-up mod, Just Enough Items (JEI). It is VERY much recommended that you download JEI, since it will make your life a lot easier with the new mechanics. +Because this is a beta of a rewrite, there will be a lot of missing content. I am trying my hardest to add new content as fast as I can, but my team and I are only human and can only code so fast. Please give a little patience while we make the mod the best it possibly can! +Also, please submit bug reports or feature requests to the github, https://github.com/WayofTime/BloodMagic. We'll get to the issue soon! + +New +- Added "Alchemy Array" crafting - this is achieved by making some "Arcane Ash" and clicking on the ground to create an array. You then click on the array with the first ingredient and then the second - breaking the array will give the items back. +- Added JEI compatibility +- Added WAILA compatibility (No more needing 3rd-party addons!) + +Changed +- Lots of internals have changed. Too many to list. +- A graphical overhaul of everything has been implemented. These textures were provided by CyanideX's Unity texture pack. BBoldt and Yulife (Inap) from the Unity team are our new permanent texture artists. + +Bug Fixes +- diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 00000000..27da6a0e --- /dev/null +++ b/gradle.properties @@ -0,0 +1,10 @@ +# Sets default memory used for gradle commands. Can be overridden by user or command line properties. +# This is required to provide enough memory for the Minecraft decompilation process. +org.gradle.jvmargs=-Xmx3G +org.gradle.daemon=false + +minecraft_version=1.16.3 + +#Mod dependencies +jei_version=7.6.0.49 +patchouli_version=1.16.4-48-SNAPSHOT \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 3d0dee6e..7a3265ee 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 fbe9865d..1d5b29fb 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Sep 26 11:20:52 CDT 2014 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.3-bin.zip diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 index 91a7e269..cccdd3d5 --- a/gradlew +++ b/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh ############################################################################## ## @@ -6,47 +6,6 @@ ## ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - # Attempt to set APP_HOME # Resolve links: $0 may be a link PRG="$0" @@ -61,9 +20,49 @@ while [ -h "$PRG" ] ; do fi done SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- +cd "`dirname \"$PRG\"`/" >/dev/null APP_HOME="`pwd -P`" -cd "$SAVED" >&- +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="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# 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 + ;; +esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -90,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +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 @@ -114,6 +113,7 @@ fi 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` @@ -154,11 +154,19 @@ if $cygwin ; then esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=$(save "$@") -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +# 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")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 8a0b282a..f9553162 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -8,14 +8,14 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@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 DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@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= + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -46,10 +46,9 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windowz variants +@rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -60,11 +59,6 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ :execute @rem Setup the command line diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache new file mode 100644 index 00000000..6089bd47 --- /dev/null +++ b/src/generated/resources/.cache/cache @@ -0,0 +1,757 @@ +cb435652c27b4978d8db83af2fd531ccaa82ada7 assets/bloodmagic/blockstates/accelerationrune.json +43be0406da1c9f7cf734427bea235a65cda073d2 assets/bloodmagic/blockstates/airritualstone.json +5ba8e1b2a7ef85028044056cc971b8fe02ab7e7f assets/bloodmagic/blockstates/alchemicalreactionchamber.json +4a60c54def00d68368ed0a0d4783979aa63d5f60 assets/bloodmagic/blockstates/altarcapacityrune.json +950fff9f06033741091aa8a66a62857da673efb9 assets/bloodmagic/blockstates/bettercapacityrune.json +8a5edb859a6f4d0adfbe2f608bab6b8c8addf01a assets/bloodmagic/blockstates/blankrune.json +904d9baa649250571bce5f965cf48fbec69c2c1a assets/bloodmagic/blockstates/bloodlight.json +5f3898cc4891f85091fe6104800d6c88d9e85e29 assets/bloodmagic/blockstates/bloodstonebrick.json +631b579c38652efbcd9e5771d09ad6e476f3ba00 assets/bloodmagic/blockstates/chargingrune.json +a35188b0244bf9808098c7d49d0af9bd32cef297 assets/bloodmagic/blockstates/corrosivedemoncrystal.json +b943c6433f295c168841aec3c3f62e525c5c9cc9 assets/bloodmagic/blockstates/creeping_doubt.json +a54ab8dfd36a593829dc33644c5f9dbccaaadaf3 assets/bloodmagic/blockstates/deforester_charge.json +b696f680545dffa4d3fbcc83b4b81ab58ac69aef assets/bloodmagic/blockstates/destructivedemoncrystal.json +6bd58d1d02a40416cec29409dee7ef80038b26d5 assets/bloodmagic/blockstates/dislocationrune.json +0b7d0241c379d0b3a8a4fa2dae79d4f998800a1f assets/bloodmagic/blockstates/dungeon_brick1.json +19d1da41c8b836a88ea7164b32e5a8525e5155cf assets/bloodmagic/blockstates/dungeon_brick2.json +79853c0ffa8fd2eb9e2ddd0848c572de0cf49037 assets/bloodmagic/blockstates/dungeon_brick3.json +1117fb4dd4f110a7b7fabae92760e0a3b949c461 assets/bloodmagic/blockstates/dungeon_brick_assorted.json +c67498a81f8dd53770da51df45192b171cdd234c assets/bloodmagic/blockstates/dungeon_brick_gate.json +8b568926830785a5cb848fb36d4ae01e67590501 assets/bloodmagic/blockstates/dungeon_brick_stairs.json +6c10c79909e008b960f2d78543f55847eec7a226 assets/bloodmagic/blockstates/dungeon_brick_wall.json +8a04e502b6965d912793699d61071e44428fceb8 assets/bloodmagic/blockstates/dungeon_eye.json +40051ea4111a9c2fd2524d664d52f241eed5317e assets/bloodmagic/blockstates/dungeon_metal.json +fe31978b41dc50c21f413c81410221f657fd4d23 assets/bloodmagic/blockstates/dungeon_ore.json +388af5c6d34f62d66d987760871c64793df84a37 assets/bloodmagic/blockstates/dungeon_pillar_cap.json +8d8d58ad890f339b75dbdfc710b30dc00eed2ef3 assets/bloodmagic/blockstates/dungeon_pillar_center.json +48e7b0533fa722eb66956e01de661ebac6470da7 assets/bloodmagic/blockstates/dungeon_pillar_special.json +e3f31a23580bce835115483f5790cb08bac44fe2 assets/bloodmagic/blockstates/dungeon_polished.json +aa980029d03236ba34f53952fdadc06cf1cff245 assets/bloodmagic/blockstates/dungeon_polished_gate.json +30c3dc138436c2a25a7fcdd7edca7f70f1adb425 assets/bloodmagic/blockstates/dungeon_polished_stairs.json +512bd11d55934229cb464c720362949302309eba assets/bloodmagic/blockstates/dungeon_polished_wall.json +2015a403ca2bcc73afbb4768df99554a13b171b6 assets/bloodmagic/blockstates/dungeon_smallbrick.json +f5b4cda776f7aabe537ca843e41074c03429cdfb assets/bloodmagic/blockstates/dungeon_stone.json +167512323d506489adb4487d3da092ceec0bd17e assets/bloodmagic/blockstates/dungeon_tile.json +4806276351c534917c2e72f98c4618e6592b18a0 assets/bloodmagic/blockstates/dungeon_tilespecial.json +ba1cd8a9475212843e3b26232c8a9943fa0d2d20 assets/bloodmagic/blockstates/duskritualstone.json +bb3db171734f511fc0c259d86e869b49aa1d0c77 assets/bloodmagic/blockstates/earthritualstone.json +e780d6d9e891082dc6ce83fde1697ce36281a02a assets/bloodmagic/blockstates/fireritualstone.json +e2c9c08bab702938e1a861d096526f16f68f6691 assets/bloodmagic/blockstates/fungal_charge.json +f78ce2be09ab794bf5f5679414eee0dc85cf4fb1 assets/bloodmagic/blockstates/largebloodstonebrick.json +002795212cc7bf2cad2a91f873d85e2204c6367d assets/bloodmagic/blockstates/lightritualstone.json +e1a98bd53fca155e4bbb03c1e548341af0f84bd7 assets/bloodmagic/blockstates/masterritualstone.json +505e45be4a207e22433d853e5139c5b1d48c57d7 assets/bloodmagic/blockstates/nether_soil.json +95a0c9a84139cf92c2689e53408b51619db126a1 assets/bloodmagic/blockstates/obsidianbrickpath.json +8b0ea137c63cf3a658a03eee58ca4b2c3d996f87 assets/bloodmagic/blockstates/obsidiantilepath.json +372ecd737f7082a4c2c70e46745f893b1179f885 assets/bloodmagic/blockstates/orbcapacityrune.json +a2eaa9166258d7179d9e5099200f777bb9edf613 assets/bloodmagic/blockstates/rawdemoncrystal.json +90daa355e528ab8a6582f796951201882f3c56da assets/bloodmagic/blockstates/ritualstone.json +285618c1a8ec36e36d479f577190579ae7616529 assets/bloodmagic/blockstates/sacrificerune.json +b03040d7a168653bf8df3600033b8fde2383db30 assets/bloodmagic/blockstates/selfsacrificerune.json +d2e2e78bd859c321a72f40fbb17ca79292d58031 assets/bloodmagic/blockstates/shaped_charge.json +487ffdc02ab7b65aafcb932e3b5cf6ea0500b21d assets/bloodmagic/blockstates/speedrune.json +f1ca47098385a955155cab9c2a97219e02d390a0 assets/bloodmagic/blockstates/steadfastdemoncrystal.json +297bc2425f7b07b1a9dd3f7f6649c44f88dbac29 assets/bloodmagic/blockstates/stonebrickpath.json +e3256db10fc8a8ab540f6ac8d27e0f47861e817a assets/bloodmagic/blockstates/stonetilepath.json +6989c4e23e5405772a8601ea88f071a479ed3fa9 assets/bloodmagic/blockstates/veinmine_charge.json +48ed6b25a5d8d8074c38d772fdc27c1753d42c36 assets/bloodmagic/blockstates/vengefuldemoncrystal.json +e6d9cf699667aaa47efff37b2b033895dee29c15 assets/bloodmagic/blockstates/waterritualstone.json +74c889434f46e060e8f185e8ef674312eb2f1192 assets/bloodmagic/blockstates/woodbrickpath.json +42f26f715bddd16c069f9b51e3767b36477c8908 assets/bloodmagic/blockstates/woodtilepath.json +3c6ce233dae6c1307d9016406c324bbe844b4e1e assets/bloodmagic/blockstates/wornstonebrickpath.json +d59655f12d1724b73b77c373fb6864fcff69db12 assets/bloodmagic/blockstates/wornstonetilepath.json +0492479fed31666acdf2d5f3fb2dab3b6ebdf6b5 assets/bloodmagic/lang/en_us.json +34445195b9f2459475cde53454bc8e37d32865d7 assets/bloodmagic/models/block/accelerationrune.json +bcdbccc49d4509571be6988762ab87126275a4c8 assets/bloodmagic/models/block/airritualstone.json +adf6c0b1e25451609486dc8c8cfbd9cf0f8c67f4 assets/bloodmagic/models/block/alchemicalreactionchamber.json +3c98a88c2283ad54f0efb9d7194361bbc3e93c17 assets/bloodmagic/models/block/altarcapacityrune.json +7cd62092c6fb3109e016d42090cf89bfa3ab7fca assets/bloodmagic/models/block/bettercapacityrune.json +1fe0f89895addb7abcacf6ce7e39b6ddc87b0d85 assets/bloodmagic/models/block/blankrune.json +3c83e090a1cff00e2bb2c7eb475785954b6eb980 assets/bloodmagic/models/block/bloodlight.json +ae2ff1abd707f2193d04d235de8f0ce92ada1d0f assets/bloodmagic/models/block/bloodstonebrick.json +320827ad2feaa51a90ebb7064a70bdc6d3765203 assets/bloodmagic/models/block/chargingrune.json +d5d82916652aee95adb8c16c97788be0a0f9f9d6 assets/bloodmagic/models/block/creeping_doubt_1.json +3effbe56422e18a44138e13e33eb26ba33b9381f assets/bloodmagic/models/block/creeping_doubt_2.json +8a7e5bfc63d3de0987bd71c1237fb580a6317601 assets/bloodmagic/models/block/creeping_doubt_3.json +8c75a72923902d5000852728436313f5979e903a assets/bloodmagic/models/block/creeping_doubt_4.json +38d083dbe1852d6dc0995a46d63a8a6dbe2c31ac assets/bloodmagic/models/block/creeping_doubt_5.json +ec5fcd20fee4260f131c82ec0a6558cc4e70e781 assets/bloodmagic/models/block/creeping_doubt_6.json +f38c5b52e9215a3d819e0b35c590d8924ca84200 assets/bloodmagic/models/block/creeping_doubt_7.json +9b332dc0443cb28c08d3af52096b7dd4fb2b68cc assets/bloodmagic/models/block/creeping_doubt_8.json +17ed7bf0e4e0aba9fc6390c8fa46f02b63145b1c assets/bloodmagic/models/block/crystal/corrosivecrystal1.json +0ae47095829ba2218113131f29e0a870b7ac7c71 assets/bloodmagic/models/block/crystal/corrosivecrystal2.json +f2fa5d770d52b5888d4fcba9161bc6485938cc21 assets/bloodmagic/models/block/crystal/corrosivecrystal3.json +f3f58ce78925d6c5e9c3beaa325f75084b9fab7c assets/bloodmagic/models/block/crystal/corrosivecrystal4.json +ca4af4bd7d6bfefbdb925aafe9d7ea80b18eaa3a assets/bloodmagic/models/block/crystal/corrosivecrystal5.json +1e0d6dc84398a2e12d177578c6c798b2c22ca95c assets/bloodmagic/models/block/crystal/corrosivecrystal6.json +302703cfe171a5f5bca492eb781ab3f3fd1c5cc1 assets/bloodmagic/models/block/crystal/corrosivecrystal7.json +6e4a3ba1cbd063757f2781e61bfae1b6191f750f assets/bloodmagic/models/block/crystal/defaultcrystal1.json +c41eee3071f1c1b27548eed79d333ab40d18a993 assets/bloodmagic/models/block/crystal/defaultcrystal2.json +3cf921a7416da052e2879cf0daae21144a40fa98 assets/bloodmagic/models/block/crystal/defaultcrystal3.json +6019d4e18f271f67b970c4e9b140ff96dc2c26fb assets/bloodmagic/models/block/crystal/defaultcrystal4.json +a106985d414ba63680da8a6b1abe77a0406adcc7 assets/bloodmagic/models/block/crystal/defaultcrystal5.json +8c3307e3ef8f44eb95c70774e32989454da8b675 assets/bloodmagic/models/block/crystal/defaultcrystal6.json +592af0e2cf2849bd0581a43271d391a9ddbc6fb0 assets/bloodmagic/models/block/crystal/defaultcrystal7.json +f688ae826b9f42b092d8de2e419f67f8049a5d00 assets/bloodmagic/models/block/crystal/destructivecrystal1.json +e27df3ee62984fc10026e721b262c89db95f2b40 assets/bloodmagic/models/block/crystal/destructivecrystal2.json +df186d5bbcb608d7e91b2a67ab7fc347aa715a34 assets/bloodmagic/models/block/crystal/destructivecrystal3.json +c4839ceb06d5a22aa47c71e1a7d7dfd12a7af68c assets/bloodmagic/models/block/crystal/destructivecrystal4.json +091b5b1986e7542485c7d03419baf6f3f81fd8cb assets/bloodmagic/models/block/crystal/destructivecrystal5.json +cf05718711393bf322680bc24897ba82bafd1f53 assets/bloodmagic/models/block/crystal/destructivecrystal6.json +a66d5091e5241479e512a3a71aba67d93992f32b assets/bloodmagic/models/block/crystal/destructivecrystal7.json +47d8fa9891d7baad8a17df455fd6d9baf6da56de assets/bloodmagic/models/block/crystal/steadfastcrystal1.json +6bbd2e8584e783e07390b0f30d0f3fbb2782f663 assets/bloodmagic/models/block/crystal/steadfastcrystal2.json +0883e99e1d5fa81d2ea0212ab8e9f4d5313717f4 assets/bloodmagic/models/block/crystal/steadfastcrystal3.json +c0a2ec89a412ce6dc078697f6ab92944a8a65cd9 assets/bloodmagic/models/block/crystal/steadfastcrystal4.json +b8d576ca3daf0b597b222f9d0645526e1d8a65be assets/bloodmagic/models/block/crystal/steadfastcrystal5.json +1e6b6825d373b1532d2458e6122a9869153d3776 assets/bloodmagic/models/block/crystal/steadfastcrystal6.json +2478650854e8e82b46bfb58754004e89771636fc assets/bloodmagic/models/block/crystal/steadfastcrystal7.json +dc2fff8fbabd58db8c0f2fb83d3d68446e324389 assets/bloodmagic/models/block/crystal/vengefulcrystal1.json +623e226eb28df9d7e2311ed6c68fba0835c80785 assets/bloodmagic/models/block/crystal/vengefulcrystal2.json +fe8271e4e815de11cd617179dedface57bd8c696 assets/bloodmagic/models/block/crystal/vengefulcrystal3.json +658bcbf2eadb0e2b442668e47b8a3a0fc684a57f assets/bloodmagic/models/block/crystal/vengefulcrystal4.json +825352d6cdd314dd4cb775062757e2b8eb39f5d7 assets/bloodmagic/models/block/crystal/vengefulcrystal5.json +9603b46cb4ebc567878ca5f54fe96e1199f34d0c assets/bloodmagic/models/block/crystal/vengefulcrystal6.json +ecf64f8c06743f0c2752e32a67753c0d5f9f67a1 assets/bloodmagic/models/block/crystal/vengefulcrystal7.json +c75695cf399d96d66914ab7dcfe1fe6bf171d6b9 assets/bloodmagic/models/block/deforester_charge.json +6adbeedc17f649ef47419845a6da0d50cfc76742 assets/bloodmagic/models/block/dislocationrune.json +313607b36c7c30073bbc64d3130f15b5871c5cd3 assets/bloodmagic/models/block/dungeon_brick1.json +55a9c171872cf9fb40c06dc2e9e826223a9096e0 assets/bloodmagic/models/block/dungeon_brick2.json +ff6727ee9a149e89deef8d666f373bdb4e68a545 assets/bloodmagic/models/block/dungeon_brick3.json +5b95b5519b04dec4f87ad7d287e3e1fa344725d8 assets/bloodmagic/models/block/dungeon_brick_gate.json +3de5c424b0928c220bf2073ee6aca5dbf4f379bb assets/bloodmagic/models/block/dungeon_brick_gate_open.json +daaeb0a0adb39fb6df3c6e6d380b34efd14bf4ce assets/bloodmagic/models/block/dungeon_brick_gate_wall.json +62ecdb415d060bf8a815f57fcf4c56b1e788f8f2 assets/bloodmagic/models/block/dungeon_brick_gate_wall_open.json +d40eb07dfa8b700d08a7f4c3739f4b6eef0bc95f assets/bloodmagic/models/block/dungeon_brick_stairs.json +df27c2b4e3345199ba29e16cddffcb86efe457b5 assets/bloodmagic/models/block/dungeon_brick_stairs_inner.json +2fbb36a96684b4acc57e551ac1f971878685a2aa assets/bloodmagic/models/block/dungeon_brick_stairs_outer.json +ffb2021036b74d29fca5fc706885f3e1399c2950 assets/bloodmagic/models/block/dungeon_brick_wall_inventory.json +70508a960748a3f62a11b1a7277977f0256be58a assets/bloodmagic/models/block/dungeon_brick_wall_post.json +a7d371e5d0efefae2729131bda16120bfe477bb8 assets/bloodmagic/models/block/dungeon_brick_wall_side.json +bd152efd619489661cac86a80190bf9e88c86363 assets/bloodmagic/models/block/dungeon_brick_wall_side_tall.json +19ae530a34eb5cee35dc7b9cdd51c9c2d61fdc9e assets/bloodmagic/models/block/dungeon_eye.json +72d70f0acb18b765340167559c10b027bd98673a assets/bloodmagic/models/block/dungeon_metal.json +61eb4e5ede53a8278d2d95fbeb40dc01424f2895 assets/bloodmagic/models/block/dungeon_ore.json +a4449c1d14c46bcda58b542c3efdddadff15bedc assets/bloodmagic/models/block/dungeon_pillar_cap.json +1752cc99d0c334016bebd0e8027b8abe3ca5d7e8 assets/bloodmagic/models/block/dungeon_pillar_cap_down.json +f171162bb4b86e70f2b2f13f3393704d295a4d86 assets/bloodmagic/models/block/dungeon_pillar_cap_east.json +c340c5e6c593cec4d342b36097fe7cca85ad647b assets/bloodmagic/models/block/dungeon_pillar_cap_north.json +c8ee14fcf2f46c755b47cc407e3cd0dbe7a477f9 assets/bloodmagic/models/block/dungeon_pillar_cap_south.json +4ac68eafddb0c99ad884af596bc48cd63af5a021 assets/bloodmagic/models/block/dungeon_pillar_cap_west.json +e6f858e8aa3c4bf2189885400a76892e707f5403 assets/bloodmagic/models/block/dungeon_pillar_center.json +12209619fc1d437d9339402ce437e6c9b2f3c02b assets/bloodmagic/models/block/dungeon_pillar_center_x.json +a4223ff2570f04a4a5d068944e8964811a62e92a assets/bloodmagic/models/block/dungeon_pillar_center_z.json +5b884f4ad41e9f0ba94a1a91938af497d3dde49b assets/bloodmagic/models/block/dungeon_pillar_special.json +eb4237db6507002305969c55ba64c9e19fe90357 assets/bloodmagic/models/block/dungeon_pillar_special_x.json +29736a69c3d5eef5b11befa0be27ddd274abc29e assets/bloodmagic/models/block/dungeon_pillar_special_z.json +a0aabc2be78af27e620e82d9f9b877dc99ae2798 assets/bloodmagic/models/block/dungeon_polished.json +05b4a25735c96036005bea06e013651a8aac5641 assets/bloodmagic/models/block/dungeon_polished_gate.json +fd32ed9981b8164f88319b66811f8e6d41ec8470 assets/bloodmagic/models/block/dungeon_polished_gate_open.json +590dbd87da39d8dc0f03dd274e46e5fec55a6ab0 assets/bloodmagic/models/block/dungeon_polished_gate_wall.json +9b86f7cfcf9b539090a49fe213ca76eb4295a7cd assets/bloodmagic/models/block/dungeon_polished_gate_wall_open.json +a9871493a35453a0f0cf1f5ff3e54f646325c2cf assets/bloodmagic/models/block/dungeon_polished_stairs.json +b073d62667acc4d278b96efcfbb929e4c70afe22 assets/bloodmagic/models/block/dungeon_polished_stairs_inner.json +fc4b1f91035eab88ea3178713ff950dce2637e41 assets/bloodmagic/models/block/dungeon_polished_stairs_outer.json +f5176982c9143ec07275349178617102af40ebeb assets/bloodmagic/models/block/dungeon_polished_wall_inventory.json +eb1252284b87f352e5d7eeae48d57e189f25340f assets/bloodmagic/models/block/dungeon_polished_wall_post.json +3c060012163a8c95532b85010773326a28e6f30e assets/bloodmagic/models/block/dungeon_polished_wall_side.json +6b5d875b69643f9daa4302a317ef3863fcce1a91 assets/bloodmagic/models/block/dungeon_polished_wall_side_tall.json +ef2a677751c2ae6c3cec9b905c28aeb615ea03e7 assets/bloodmagic/models/block/dungeon_smallbrick.json +84555e144215de4477ab826420400747b11edf9a assets/bloodmagic/models/block/dungeon_stone.json +d4e4cbb3a24e069a8e6c8e60764f8bbb7b3adb2b assets/bloodmagic/models/block/dungeon_stone_mirrored.json +8a922c0105191857905467f048aa40221cb34853 assets/bloodmagic/models/block/dungeon_tile.json +3895234c0c49d936ad0ad420dedd3669999b8a81 assets/bloodmagic/models/block/dungeon_tilespecial.json +81313327125e6e7396df0408595228bf0f63e1c9 assets/bloodmagic/models/block/duskritualstone.json +c30064f4aa09c42d23e94d118ae5b148eadb3a6c assets/bloodmagic/models/block/earthritualstone.json +44c4d3178261b3756987643b62f263c91fa74198 assets/bloodmagic/models/block/etherealopaquemimic.json +4ff1cab1014cd8f655e5f032ecf60dd371f421c3 assets/bloodmagic/models/block/fireritualstone.json +0fb05dea521223c58619fd71ccc2bcdf82ba7563 assets/bloodmagic/models/block/fungal_charge.json +d6bf1482345199e7d056a60865024ea5d480b986 assets/bloodmagic/models/block/largebloodstonebrick.json +2e1a81c758bfeec2aee807b48239f23241302268 assets/bloodmagic/models/block/lightritualstone.json +eab1713a8879decb2ae05258a6bcfa9da78ec67b assets/bloodmagic/models/block/masterritualstone.json +c0e0f918b237d2f25718bae4774750b90a88de7b assets/bloodmagic/models/block/nether_soil.json +1e354903812e9cf8e2fea26b908430d7e1cf20a9 assets/bloodmagic/models/block/obsidianbrickpath.json +71893b8b185c2b0f64f21b7dc6c4f2850f936206 assets/bloodmagic/models/block/obsidiantilepath.json +c3a813b735cd229f8597e41d04465926b2e65fe1 assets/bloodmagic/models/block/orbcapacityrune.json +9b2bf2a44b788cbaecbe63a3e085e8de76672e1b assets/bloodmagic/models/block/ritualstone.json +a8a1d06fcc2f8395530c72d2846133fff37d5537 assets/bloodmagic/models/block/sacrificerune.json +791c9f2e27215ff0a45eed7efe385276bfc09aed assets/bloodmagic/models/block/selfsacrificerune.json +d6238c0661560abd991d534ef6c8836f4655a7e7 assets/bloodmagic/models/block/sentientmimic.json +04a1e67d1587be970310912849119903b99412ef assets/bloodmagic/models/block/shaped_charge.json +6556131b1aeb25dc67daf31a1ecdb3ce23e718d4 assets/bloodmagic/models/block/solidclearmimic.json +88b9f25444280d323fff11046d4d3a3af11265e8 assets/bloodmagic/models/block/solidlightmimic.json +23d937795efdb02507d301c459e52cd4b0cfa5cb assets/bloodmagic/models/block/solidopaquemimic.json +65fe5e01ed2660e45a5c329ff2389a87e4d791ec assets/bloodmagic/models/block/speedrune.json +c5d2b0e33500a5c51046cd606e0d1272ec0dddd6 assets/bloodmagic/models/block/stonebrickpath.json +359e28e79778961f57c6369b5d1b68218972fccb assets/bloodmagic/models/block/stonetilepath.json +d8c8cb24e0e8479ec620b4cd8d5a6f5abb1a2dcb assets/bloodmagic/models/block/veinmine_charge.json +6041f2e47f5437d90a58586e42d18dadc42df439 assets/bloodmagic/models/block/waterritualstone.json +d77cdb168a084aeb962be6ad7b4f41b181837be6 assets/bloodmagic/models/block/woodbrickpath.json +e54a4f2b3cd405c69782662b1b0d57e24f7c2524 assets/bloodmagic/models/block/woodtilepath.json +ee59117289640eaebf7a9d7f629dd584ac3ed50f assets/bloodmagic/models/block/wornstonebrickpath.json +bee51abed529a89ad088b2cb89a4c1d0de541bf1 assets/bloodmagic/models/block/wornstonetilepath.json +9462d62d9bc9408359d30728de8651dc104aacf1 assets/bloodmagic/models/item/accelerationrune.json +28dc926a434253f140a7c4eece1522a64a7cccae assets/bloodmagic/models/item/activationcrystalawakened.json +3f64f82051888db51f30a75c41e1d249d7899235 assets/bloodmagic/models/item/activationcrystalcreative.json +10fa1f758c52f639880607bfaac3ced18b8b91ae assets/bloodmagic/models/item/activationcrystalweak.json +fe8e3deb3ad0107ca3ebd70694c1fc55a987d912 assets/bloodmagic/models/item/airritualstone.json +33074d865864911fcaf65e6d56430e87d466a1b8 assets/bloodmagic/models/item/airscribetool.json +60487d07a2fc1af61993e6bbebf012cf20aa3edd assets/bloodmagic/models/item/airsigil.json +92cc51b70ce22796804d093e3fc21141658f85fd assets/bloodmagic/models/item/alchemicalreactionchamber.json +f150f178edf7d6d250bcfd84af1c28a21cff09c6 assets/bloodmagic/models/item/altarcapacityrune.json +cb96caeaa30f168d03a7763f06fdff9fe47d29c5 assets/bloodmagic/models/item/apprenticebloodorb.json +5ae6e2eedcbf4a58b2e437aae2304e8171e05689 assets/bloodmagic/models/item/arcaneashes.json +69dc96914b3f5c8f672bbaca16720ffef951c179 assets/bloodmagic/models/item/basemonstersoul.json +975b721b2a1b40b4d3b3bf20d17329476f4bfc98 assets/bloodmagic/models/item/basemonstersoul_corrosive.json +318e954cc662ea33e30dad9bdff5e73b1da3b129 assets/bloodmagic/models/item/basemonstersoul_destructive.json +366657ca2747a4c8f9521c5b0b8f439d7880fcce assets/bloodmagic/models/item/basemonstersoul_steadfast.json +af6319be25a2aeadf7366c6f4b83a6c8e9e07343 assets/bloodmagic/models/item/basemonstersoul_vengeful.json +f5a0419f239ff5079b60011adb903a126265942e assets/bloodmagic/models/item/basiccuttingfluid.json +d3c33ff908880e7abc8a2cd977304419ec48a23d assets/bloodmagic/models/item/bettercapacityrune.json +7a1c55d55fe59d8a70bc2a867d127cb303c1ba23 assets/bloodmagic/models/item/blankrune.json +db9d31cae77018833be0e4d38db84d75adeb30a1 assets/bloodmagic/models/item/blankslate.json +c801f34e88224f9fabd89245f9d2a0d9ef466b64 assets/bloodmagic/models/item/bloodlightsigil.json +c795d1b7aa99ce27da63868f81bac615cf199c66 assets/bloodmagic/models/item/bloodstonebrick.json +dd4a590f68820a04ca4a71df507e8a39ca6bd393 assets/bloodmagic/models/item/bow_power_anointment.json +7315e49149eca494e6b132d383082cb76fc9c0e4 assets/bloodmagic/models/item/chargingrune.json +8c84f53166f2fdf7eaac4b6dc45402e3fa5b18d9 assets/bloodmagic/models/item/coalsand.json +3636c40fafa385642db14ca5f09d68e547060c4d assets/bloodmagic/models/item/corrosivecrystal.json +e8bdf0e3f557bb09c665312df380672e676f4382 assets/bloodmagic/models/item/corrosivedemoncrystal.json +470406aa7191f99f8b8d144fa0b1c314bdc10f11 assets/bloodmagic/models/item/corrupted_dust.json +1136b546d2cf73fc0f419447f7c328b8e2083323 assets/bloodmagic/models/item/corrupted_tinydust.json +9b332dc0443cb28c08d3af52096b7dd4fb2b68cc assets/bloodmagic/models/item/creeping_doubt.json +7b4471ae902c8e96a3730a86e1b15fb5c13aeec7 assets/bloodmagic/models/item/crystalline_resonator.json +5414b42d1246ff780f15ebd42212f19e90891daa assets/bloodmagic/models/item/daggerofsacrifice.json +08e573e533ecbfed2a734691608abe0119f3f3e3 assets/bloodmagic/models/item/defaultcrystal.json +cad1aef333d131d77b7960f5dc295694baeead1c assets/bloodmagic/models/item/deforester_charge.json +6353ff212d21942d3fcbf7ea0cedd027e831059f assets/bloodmagic/models/item/demonslate.json +fd9ec2b5fe4436363ae5058b6ff9d77bd81ce85d assets/bloodmagic/models/item/demonwillgauge.json +51f65b07ce2ff59d740e28a27a039bd0022c367f assets/bloodmagic/models/item/destructivecrystal.json +3e952fc5e87bd7883dadd761ef708ddfac29638c assets/bloodmagic/models/item/destructivedemoncrystal.json +7af07ab578bbd20e2f834b26d9cafb5fe23bc7d4 assets/bloodmagic/models/item/dislocationrune.json +d57d9bcecc2580bdc009e1cd2b4a87cc39b4bca9 assets/bloodmagic/models/item/divinationsigil.json +f866879eed9f1bd7eebac14495de599ca3ad855d assets/bloodmagic/models/item/dungeon_brick1.json +78f206d696acf10f082a34c7ec2fdbddc321231a assets/bloodmagic/models/item/dungeon_brick2.json +52f18a291e92fe5218dd4abacdabdc106dc2d380 assets/bloodmagic/models/item/dungeon_brick3.json +f866879eed9f1bd7eebac14495de599ca3ad855d assets/bloodmagic/models/item/dungeon_brick_assorted.json +1a1ab86e948d6f2a7e928750d5442fff1edb4c19 assets/bloodmagic/models/item/dungeon_brick_gate.json +2ec6a2c66e88981ff54e74035bb3adb1ec4f6396 assets/bloodmagic/models/item/dungeon_brick_stairs.json +098a26f4e9222c801f9a17a6db1b266ad4085003 assets/bloodmagic/models/item/dungeon_brick_wall.json +0a48c4fd74036702ae2d72a9b2333c2bdf5ab31b assets/bloodmagic/models/item/dungeon_eye.json +e5b467f756ccc4d3ab42a1249864d47f2b9c4587 assets/bloodmagic/models/item/dungeon_metal.json +95a45fae0890e626aa5e5ff85b9884bd30087244 assets/bloodmagic/models/item/dungeon_ore.json +ba5c610437b7d3a84820109c32d204310ff41fd7 assets/bloodmagic/models/item/dungeon_pillar_cap.json +d098a544e7b9918a45106c2cbc5e10baea66502a assets/bloodmagic/models/item/dungeon_pillar_center.json +5284f1cc7508546c66669564182fe5056053333d assets/bloodmagic/models/item/dungeon_pillar_special.json +9e876e438fa9bac067f6b3af4904e6bbd24044c8 assets/bloodmagic/models/item/dungeon_polished.json +9a7bf4c6c15f2a6e39588b1b8aed7988a7713a02 assets/bloodmagic/models/item/dungeon_polished_gate.json +477cd98babad0a71ccfcc9e541169fe9bc31d8d1 assets/bloodmagic/models/item/dungeon_polished_stairs.json +f3b763d6edc3c75655797481f05e02d409f481d9 assets/bloodmagic/models/item/dungeon_polished_wall.json +2ecba4811bd02698f6a34b5cdd9160426f7bda63 assets/bloodmagic/models/item/dungeon_smallbrick.json +2d7a8a3ed9f91a5bf5c277c6342c69e97692d347 assets/bloodmagic/models/item/dungeon_stone.json +717a9dcc833d1fbea4e5f989f45f46268d4ffe37 assets/bloodmagic/models/item/dungeon_tester.json +6186d2045f87b1e6cc7006226993a93b63d650ff assets/bloodmagic/models/item/dungeon_tile.json +21e8a4fa93ba249684e0624a10a6f0f00ff6d194 assets/bloodmagic/models/item/dungeon_tilespecial.json +10aceefca3ad3f0da773cb317c4effc6c06051ea assets/bloodmagic/models/item/duskritualstone.json +1f8ce936602a2e55ecf05b926734099c057733e5 assets/bloodmagic/models/item/duskscribetool.json +4d56efd7fdbf430f49903ce201577047687c3804 assets/bloodmagic/models/item/earthritualstone.json +b29b6d11b54e98dbfbeb9d677298e6ca95bf2ca2 assets/bloodmagic/models/item/earthscribetool.json +cdbaaf8662f2e855a34a66f28e49403c4ea9a45e assets/bloodmagic/models/item/ethereal_mimic.json +c5a3b58c52f75650ae38391841b21ad1cb0855f9 assets/bloodmagic/models/item/etherealslate.json +64529fc174f49c6eabca127ebdd287ff77a7ed63 assets/bloodmagic/models/item/experiencebook.json +dbd20c2ac822262cc368fd7d649de67c754e693d assets/bloodmagic/models/item/explosivepowder.json +c36bde4f98c0aeb3bf0f369ad3bc067e5f0dc916 assets/bloodmagic/models/item/fireritualstone.json +0a3dcea188a3e5cf5f7c9a2cc4ad62667ac5821b assets/bloodmagic/models/item/firescribetool.json +dd4a590f68820a04ca4a71df507e8a39ca6bd393 assets/bloodmagic/models/item/fortune_anointment.json +0392d220dc92ab8abad335e620b011e000b61ef9 assets/bloodmagic/models/item/fragment_netherite_scrap.json +4228d831053597cbb7d7e5fb68b7a6dbf1dbf977 assets/bloodmagic/models/item/fungal_charge.json +27ce75b6179a4620fd23aa07568c47fad36a14eb assets/bloodmagic/models/item/furnacecell_primitive.json +72386afa0dcb2444a8072d1618425038c73106c7 assets/bloodmagic/models/item/goldfragment.json +2bf9f4f4901425531903ace1cebee594bc37e55a assets/bloodmagic/models/item/goldgravel.json +bad504721d3bfd106869df9902bac0aa4001a1a7 assets/bloodmagic/models/item/goldsand.json +ebb91dfd0f28c439478b5f041b127aefa00ae583 assets/bloodmagic/models/item/gravel_netherite_scrap.json +44663089f348642bcca1c5020b5081c3ab172f92 assets/bloodmagic/models/item/growthsigil.json +dd4a590f68820a04ca4a71df507e8a39ca6bd393 assets/bloodmagic/models/item/hidden_knowledge_anointment.json +dd4a590f68820a04ca4a71df507e8a39ca6bd393 assets/bloodmagic/models/item/holy_water_anointment.json +f68825f667ca73b4373fd5068a47f0d1ca9b2aad assets/bloodmagic/models/item/icesigil.json +5d151f9d9007fb7459dde9f2d5c182b9b6aa06e0 assets/bloodmagic/models/item/infusedslate.json +59940408324c0379fa791a58f4a81781d06d1257 assets/bloodmagic/models/item/ingot_hellforged.json +80c575c613c1696069284224fe2c711c343bb0be assets/bloodmagic/models/item/ironfragment.json +4b803c1c838284d78474bab0f8ced938985dd958 assets/bloodmagic/models/item/irongravel.json +d83040a473f44ff2fd9d290f3fd6ef0d8b9f3114 assets/bloodmagic/models/item/ironsand.json +9b9fc4a11a187257d30334cd3faa949790b6ca29 assets/bloodmagic/models/item/largebloodstonebrick.json +ffc3da1cbb86adc5aec7dfd503d23af319aec529 assets/bloodmagic/models/item/lavacrystal.json +12360580230f4eab90dbe7de3d5bbf79e2338b03 assets/bloodmagic/models/item/lavasigil.json +5a76914a87fc9b99079bb6afed1d4cfe3e4a532e assets/bloodmagic/models/item/lightritualstone.json +0d6c9d3b2ec30835ef74b6d6e8184074ac0861b8 assets/bloodmagic/models/item/livingboots.json +dd50db84188025895693164736f4799e75b8c7a9 assets/bloodmagic/models/item/livinghelmet.json +e39cf255d5c8873e02d1f2df2c829d0858df25e3 assets/bloodmagic/models/item/livingleggings.json +45756697d2f012fcc2de5fead120768a87655662 assets/bloodmagic/models/item/livingplate.json +dd4a590f68820a04ca4a71df507e8a39ca6bd393 assets/bloodmagic/models/item/looting_anointment.json +7211624c82431d12dd21b3de262f4f332a69e0e1 assets/bloodmagic/models/item/magicianbloodorb.json +2b760616f7dad714accf1249b85eec4761f69706 assets/bloodmagic/models/item/masterbloodorb.json +9e377ab2c131993f96ab6fb544bda4dbba0ab87e assets/bloodmagic/models/item/masterritualstone.json +dd4a590f68820a04ca4a71df507e8a39ca6bd393 assets/bloodmagic/models/item/melee_anointment.json +3d5c71d1f24ebcc65db48765b56db60d64673a0d assets/bloodmagic/models/item/mimic.json +7596826c5b40c2809eb0a42eb5f5f2089290e3e5 assets/bloodmagic/models/item/miningsigil.json +9010fdcefb80ed0db271b41263412a1673c6c311 assets/bloodmagic/models/item/nether_soil.json +eaa0548775c3d5839b46d333af33f815dc6dd0fe assets/bloodmagic/models/item/obsidianbrickpath.json +cf066d15baae650a383240a91240abd335bbb0e3 assets/bloodmagic/models/item/obsidiantilepath.json +ff9b802098659824626dc90dbb5a0d8960234228 assets/bloodmagic/models/item/orbcapacityrune.json +d5fd516b1cf94ab01d5b1fbe554705215f21ff66 assets/bloodmagic/models/item/plantoil.json +abdd58730704a0936783c6752098a9fec1e3f18d assets/bloodmagic/models/item/primitive_crystalline_resonator.json +f3dd3ad67c86895983e3cf0f21e44d0f4046962e assets/bloodmagic/models/item/primitive_explosive_cell.json +0a88f03b48e0032f7ed7878212b0b01a930186d0 assets/bloodmagic/models/item/primitive_hydration_cell.json +dd4a590f68820a04ca4a71df507e8a39ca6bd393 assets/bloodmagic/models/item/quick_draw_anointment.json +63fe86d0faf9aa03a513221a6a12828a886b1301 assets/bloodmagic/models/item/rawdemoncrystal.json +6f5418ed5739381e95b4d3b33f3e2924a6233941 assets/bloodmagic/models/item/reagentair.json +0f3fbea424448d41cac91bc479d9235def615af7 assets/bloodmagic/models/item/reagentbinding.json +df9beacb97275ffaa7f186778d94ad11138dffe3 assets/bloodmagic/models/item/reagentbloodlight.json +ba57b2a11a0920e7a4df894c6fbae38bf2a6e0ce assets/bloodmagic/models/item/reagentfastminer.json +f9a2fbb703e22dee4ae74daff99249e5f22caa0f assets/bloodmagic/models/item/reagentgrowth.json +a0e2480efd5433e9ead1ef87c2b31b0dbbc7ecb6 assets/bloodmagic/models/item/reagentholding.json +2f8cfb7f2c9cb3dd62a007c2ec56f585414149d8 assets/bloodmagic/models/item/reagentlava.json +2a07dc18d2d8166815c29aa989ccd0093d5d112b assets/bloodmagic/models/item/reagentmagnetism.json +7ce18ad9b0de94a3fc5abf03c6726c8cc4cf5524 assets/bloodmagic/models/item/reagentsight.json +7aa180a374f6a60f0525659c90f386a9df7bedcd assets/bloodmagic/models/item/reagentvoid.json +d6fefc8d0d11bcc40ec6c9fa41e8e9402274251a assets/bloodmagic/models/item/reagentwater.json +98783464efdcbcaf2f457dfafc4a126f57454f8c assets/bloodmagic/models/item/reinforcedslate.json +8c473f375d7e45adb82f615a6d9e6dea312f57bd assets/bloodmagic/models/item/ritualdiviner.json +152682fd87d660cb06931b65d7a402ccd332a21a assets/bloodmagic/models/item/ritualdivinerdusk.json +2722891c9c40b124d85bf9ff8eb885e175f5e6ff assets/bloodmagic/models/item/ritualstone.json +7f7c3f406430ca088c3993c1347c2219b287498e assets/bloodmagic/models/item/ritualtinkerer.json +db73abb3bcb1731b6fc389e3577910b6aab87b10 assets/bloodmagic/models/item/sacrificerune.json +7d0c46410e4e256bd88f9220cd3eaf948a4b715f assets/bloodmagic/models/item/sacrificialdagger.json +9a67ae7be820dca31446758377677cc2c906ab80 assets/bloodmagic/models/item/saltpeter.json +db66835b16edd296fe71a63a2f195ffdc9e97519 assets/bloodmagic/models/item/sand_hellforged.json +1e7fca5638c09e4c46f9e65854bc0316d8142361 assets/bloodmagic/models/item/sand_netherite.json +eb098783e91a17d07429d9006fb09bf056350e57 assets/bloodmagic/models/item/sanguinereverter.json +b6e98c7b1789654fe7ff559e95011c0a28c58bc1 assets/bloodmagic/models/item/seersigil.json +cc71421e98ee7ee047a4cfbb6cb69529c2b02d4e assets/bloodmagic/models/item/selfsacrificerune.json +7f0256ef2f219d92882e759677399050b0776d64 assets/bloodmagic/models/item/shaped_charge.json +6cc73920a09d4d6925154732f4064d8d03590f25 assets/bloodmagic/models/item/sigilofholding.json +ea5747638d0b5dcc03f008b202cc60a11e0827bb assets/bloodmagic/models/item/sigilofmagnetism.json +dd4a590f68820a04ca4a71df507e8a39ca6bd393 assets/bloodmagic/models/item/silk_touch_anointment.json +96eca80edd26a325bd65f325f4c3d651b1080912 assets/bloodmagic/models/item/slate_ampoule.json +08bee690d5092e3c9e6c04c43f50af668fdb3b7e assets/bloodmagic/models/item/slate_vial.json +dd4a590f68820a04ca4a71df507e8a39ca6bd393 assets/bloodmagic/models/item/smelting_anointment.json +db0f63198089161b8d4ecfb1ec8a45f7dc5ba83d assets/bloodmagic/models/item/soulaxe.json +9ec68a2dcf04b987c3c5d5c6c52195e3deccacbb assets/bloodmagic/models/item/soulgemcommon.json +6501bb4b72457e8107bec818f26de6178b655203 assets/bloodmagic/models/item/soulgemgreater.json +ad010d9680cd748bd04c8fc36262c236f7d90105 assets/bloodmagic/models/item/soulgemlesser.json +b49e7f34913e32ccb68eeb6f6c196ff6b209f482 assets/bloodmagic/models/item/soulgempetty.json +c873e91c70eef9ad4c39aeb2fe8b9aa16a26cccd assets/bloodmagic/models/item/soulpickaxe.json +5682770badd4dbc1ae533de0ce0f9a7cd0b2aeea assets/bloodmagic/models/item/soulscythe.json +bde2befafc97fd89a428dfa3f39fc970e9a3ae29 assets/bloodmagic/models/item/soulshovel.json +7b375670d1fa52a3585907d3e880863dbcc04b32 assets/bloodmagic/models/item/soulsnare.json +fe2b201007c974229509f6900c6eb8b03d158b0a assets/bloodmagic/models/item/soulsword.json +52d21027ac6fed000e77b5e8ad9102319b25cb33 assets/bloodmagic/models/item/speedrune.json +36e0914768c8b3eb3b80702280ca74bbd8546623 assets/bloodmagic/models/item/steadfastcrystal.json +6968a3d0c3bbeac8ea4cb2c050e28506e8938851 assets/bloodmagic/models/item/steadfastdemoncrystal.json +29009ca92dc30e1ec4ae1d454cd3f8726d8edc3c assets/bloodmagic/models/item/stonebrickpath.json +2dc28b0e2b7ae7bb0bcf8c8e74b9ba7c800446ff assets/bloodmagic/models/item/stonetilepath.json +1992b3655f7bbca8b7aac7c53f1a0e7b1ab3124d assets/bloodmagic/models/item/sulfur.json +451fa4812d23a207882eb95d89673b1e4c2dd257 assets/bloodmagic/models/item/throwing_dagger.json +4f4e6c72a160eb635bdf78ed0a6ba5765fbf51ea assets/bloodmagic/models/item/throwing_dagger_syringe.json +d13731c45f6dd23b8e70d2a75d4068bdae88ef5c assets/bloodmagic/models/item/upgradetome.json +e8fe01c5cddc268538681889f3161472a8f1c8ad assets/bloodmagic/models/item/variants/growthsigil_activated.json +20c802279de4df496057795c2e891fa54a21376f assets/bloodmagic/models/item/variants/growthsigil_deactivated.json +2778ea3a62ce6dd718a557beee7b5329bb185ff9 assets/bloodmagic/models/item/variants/icesigil_activated.json +11f5516cea8ac65bbb0f5958d6492170482ae8d8 assets/bloodmagic/models/item/variants/icesigil_deactivated.json +be3772fd711ccf4a2adfad122a8b39e8a36e874a assets/bloodmagic/models/item/variants/miningsigil_activated.json +7dec45f3167426d975564692a80196cdb3f4bdb4 assets/bloodmagic/models/item/variants/miningsigil_deactivated.json +9403d6195d4d38d5876c2a42f4edfb9bdcd05210 assets/bloodmagic/models/item/variants/sacrificialdagger.json +89ea1f760bac680b1baa98536d6bc407e347676e assets/bloodmagic/models/item/variants/sacrificialdagger_ceremonial.json +79c61e61656a934397c92626809c1869b0617fc3 assets/bloodmagic/models/item/variants/sigilofmagnetism_activated.json +129ace1f4a25f22bd09215603248a25adcf234e0 assets/bloodmagic/models/item/variants/sigilofmagnetism_deactivated.json +81e1cb0664f53f30ad195fc4330786b71db9e20c assets/bloodmagic/models/item/variants/soulaxe.json +2254b45194021cdd3fbc7d384d958b031a8e7cea assets/bloodmagic/models/item/variants/soulaxe_corrosive.json +c11750d01a720a1b0eca0610ec12cba0fef4d5da assets/bloodmagic/models/item/variants/soulaxe_destructive.json +368e428410c7c6d6bf444970221bb5ebe5f6bacd assets/bloodmagic/models/item/variants/soulaxe_steadfast.json +267875926ed261400a10371e044e9f54aafa637a assets/bloodmagic/models/item/variants/soulaxe_vengeful.json +cddaa2be8db3aff90933fb772b92cab735ebf11e assets/bloodmagic/models/item/variants/soulgemcommon.json +874aa708d02de2315e29033b2f67fd313edc8aff assets/bloodmagic/models/item/variants/soulgemcommon_corrosive.json +3ca3c4251a8907c1c47caf49e53a711265e0e92c assets/bloodmagic/models/item/variants/soulgemcommon_destructive.json +3ad2785d3e893943ea769c7e39d69cedd71e556a assets/bloodmagic/models/item/variants/soulgemcommon_steadfast.json +016ccdfb8a6e0101975e64f9f548e6a93d32f53c assets/bloodmagic/models/item/variants/soulgemcommon_vengeful.json +daef17113abd2003f745e069c1ccecc911445919 assets/bloodmagic/models/item/variants/soulgemgreater.json +73926de465b378adad07303f02a01c41c2f3656e assets/bloodmagic/models/item/variants/soulgemgreater_corrosive.json +1807f9b243e98c9ea43ac230ae211a324c82db79 assets/bloodmagic/models/item/variants/soulgemgreater_destructive.json +07c68e7574ef7d4db2e011e23c3bc20ad258daea assets/bloodmagic/models/item/variants/soulgemgreater_steadfast.json +3691ec7d9fedd3694feb1d6d387a9420e87ff8ce assets/bloodmagic/models/item/variants/soulgemgreater_vengeful.json +2b2322dfd3f7e28ea5d0ad2d9df2223d7ee47f00 assets/bloodmagic/models/item/variants/soulgemlesser.json +8eaab2fddfe201dc83d2d2ffd65e1537a3e5a388 assets/bloodmagic/models/item/variants/soulgemlesser_corrosive.json +24608fc7a19e41d71ec84a80c18ceccbc869cd79 assets/bloodmagic/models/item/variants/soulgemlesser_destructive.json +1ef6dd3ceed7f6ffd3e91283146fbe3f6db46d10 assets/bloodmagic/models/item/variants/soulgemlesser_steadfast.json +7801bda9366c21aad10137d30151ac4154acbea1 assets/bloodmagic/models/item/variants/soulgemlesser_vengeful.json +0b37376d07ecf8ff91df345435abd5d94d28714e assets/bloodmagic/models/item/variants/soulgempetty.json +fb9e51a933316daa4a99b6e6c9a2606dc354f0dc assets/bloodmagic/models/item/variants/soulgempetty_corrosive.json +0a15d2c90a8d139c1689579460379e5feefaddec assets/bloodmagic/models/item/variants/soulgempetty_destructive.json +a94516c3019969baa379f4a32d68736010cb473a assets/bloodmagic/models/item/variants/soulgempetty_steadfast.json +eabd2e88451ef42250e86c6675868b322aa0db92 assets/bloodmagic/models/item/variants/soulgempetty_vengeful.json +cebb0537b96480ac99314840a45107108b1bbc3a assets/bloodmagic/models/item/variants/soulpickaxe.json +2045e6593e80a11da9c60d0bdcef456503141232 assets/bloodmagic/models/item/variants/soulpickaxe_corrosive.json +37144adb7eb312c66a3567faeb3ece5aeef76e70 assets/bloodmagic/models/item/variants/soulpickaxe_destructive.json +e09d7927fdb84c372d36b290e3c69f728c922675 assets/bloodmagic/models/item/variants/soulpickaxe_steadfast.json +bec6cecf74db6a32fb5890b0596ddb7e2bf2daef assets/bloodmagic/models/item/variants/soulpickaxe_vengeful.json +a1fa69851bf9bb7022a25c0bef26fd44633616e2 assets/bloodmagic/models/item/variants/soulscythe.json +7c97bf4b12fc39cbe100d0e54e6b1b53a592c771 assets/bloodmagic/models/item/variants/soulscythe_corrosive.json +ad9c84341af3f0e90cdb206f39fbf4c2e589c52a assets/bloodmagic/models/item/variants/soulscythe_destructive.json +00b631dc41ee04264a91fe9a9e0b5660daf9fbc5 assets/bloodmagic/models/item/variants/soulscythe_steadfast.json +379922deb3b4e352763b335c01d4d66bfc531218 assets/bloodmagic/models/item/variants/soulscythe_vengeful.json +501142d1ff49eaf663e9a2044da17b8b5a25e361 assets/bloodmagic/models/item/variants/soulshovel.json +f65e2a2d4f0cae6c3dc986274c2dee0f1773cfb2 assets/bloodmagic/models/item/variants/soulshovel_corrosive.json +6c6b04b81358bb82b4d127fc621190dc2804fd45 assets/bloodmagic/models/item/variants/soulshovel_destructive.json +0e193ee2b27783f3d10461977c7d719be96af203 assets/bloodmagic/models/item/variants/soulshovel_steadfast.json +a8a7f03cc24f0d796e8868ace72f50ec4343dd5b assets/bloodmagic/models/item/variants/soulshovel_vengeful.json +0cd32e8e693d85b8a81e96ea305ffafb4a72e861 assets/bloodmagic/models/item/variants/soulsword_activated.json +60831276c8b0a5ecfa8e1a7beee6c5a4838cae69 assets/bloodmagic/models/item/variants/soulsword_corrosive_activated.json +792bb3a3e613808890cf0c31585318dc8e16891d assets/bloodmagic/models/item/variants/soulsword_corrosive_deactivated.json +ba7a7366b1471dd58b27b523bde130e39220fe01 assets/bloodmagic/models/item/variants/soulsword_deactivated.json +ef838be270d9d87651aec70c6b59197b01e48a6c assets/bloodmagic/models/item/variants/soulsword_destructive_activated.json +ec6f6bf7f520182b2044f3cc5a10f1d4c7a8d7ab assets/bloodmagic/models/item/variants/soulsword_destructive_deactivated.json +149f3e3049bd4f4ed559e56db79027bda9e8478e assets/bloodmagic/models/item/variants/soulsword_steadfast_activated.json +7d22fdba9bb8593c247a0b33df11f3b26a16c254 assets/bloodmagic/models/item/variants/soulsword_steadfast_deactivated.json +2029220112f89a3f4d432ab4749dff6143846659 assets/bloodmagic/models/item/variants/soulsword_vengeful_activated.json +0f5a3e1e5993a03ccda156eed855b71fbd0be0a2 assets/bloodmagic/models/item/variants/soulsword_vengeful_deactivated.json +81776d7be5f2d13e44622a6d38929821bc78ae7d assets/bloodmagic/models/item/veinmine_charge.json +16bde91467016c6012fe2b618c898d0340043492 assets/bloodmagic/models/item/vengefulcrystal.json +11e3347147e079093c4fa12018412071db22a4f5 assets/bloodmagic/models/item/vengefuldemoncrystal.json +9019dcd2f21b03e703ceeee1ea3199de72110268 assets/bloodmagic/models/item/voidsigil.json +a31019db55828cb937a071ac2f74b125a2d0c955 assets/bloodmagic/models/item/waterritualstone.json +23d5a97cb44909c470ea76833138cd187f13ba80 assets/bloodmagic/models/item/waterscribetool.json +bfa6dec13cc193bbe634c2c68b641f3897ccb342 assets/bloodmagic/models/item/watersigil.json +cb4eaa9292890e172b0f36a63605db0c973f735e assets/bloodmagic/models/item/weakbloodorb.json +46423c1325542ab0efad772e1aab52082d9ef636 assets/bloodmagic/models/item/weakbloodshard.json +6b16a94dcb06f31b7a92f250449ec42dbc3568aa assets/bloodmagic/models/item/will_power_anointment.json +c0907e611e09ccc924452070519006add21f3d12 assets/bloodmagic/models/item/woodbrickpath.json +1de444baa270a146dcd33c784b08f75a3d745421 assets/bloodmagic/models/item/woodtilepath.json +c8ea88c439c91d0eeee3e6204a3c50f8cfd36758 assets/bloodmagic/models/item/wornstonebrickpath.json +2d9dab8ebc036473d82eb044eb7a7bba0d0937a4 assets/bloodmagic/models/item/wornstonetilepath.json +273f8363ef906c87c67ae8aeb21a7d9d2834bbc6 data/bloodmagic/advancements/recipes/bloodmagictab/alchemy_table.json +e6a3ac3998653b10ee09780be9099a9d0c5b3917 data/bloodmagic/advancements/recipes/bloodmagictab/arc.json +08af21340e8457f43f7e5235790f58c2a67b9b3a data/bloodmagic/advancements/recipes/bloodmagictab/blood_altar.json +80cf1e0f026565be99279c46306b92be06bda65c data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_acceleration.json +f77e3947a24a252c04a80d1eb26547a3fbf868e7 data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_aug_capacity.json +f8b66411c96c6a7a409fb10f6888d078f1f8fa14 data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_blank.json +ab5612f33028487c08e51de4b91bb786df1b1b95 data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_capacity.json +e59e508cdbd51f62f83559edeb5f2a89226d7694 data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_charging.json +d707d48cc670ae65f224487a5012d5464c0a9760 data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_displacement.json +e897d6f91e2a0bd12b0da0a50e5c897294989e7c data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_orb.json +4a53004c651901cd1245de452810161736d9b067 data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_sacrifice.json +263f7c251d2f163db5bd229f2ab8a222f23ae03a data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_self_sacrifice.json +7ca400d1141ff4be1b529cd060950b42cf3b9bfb data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_speed.json +764e54fdaa24f87cceb815990bbbd2e2cd87f205 data/bloodmagic/advancements/recipes/bloodmagictab/bloodstonebrick.json +2e7ec285e758b06c2bd7d9fd93eedd96f511fa49 data/bloodmagic/advancements/recipes/bloodmagictab/corrupted_dust.json +f92c8a88a2c0ca63510d170c33f5eb2d1aee25ec data/bloodmagic/advancements/recipes/bloodmagictab/experience_tome.json +1b1dab3143eae33e25c4a14c011adec72768c9b5 data/bloodmagic/advancements/recipes/bloodmagictab/hellforged_block.json +a6f012d0584d36d9b7dd0ec4f9e4cbd2a3ff1146 data/bloodmagic/advancements/recipes/bloodmagictab/incense_altar.json +4c24af93a64071aadc0308b27bcbc44572e5ccfc data/bloodmagic/advancements/recipes/bloodmagictab/largebloodstonebrick.json +344567e6f5671131addcfebbd92d18e5cbd66ef5 data/bloodmagic/advancements/recipes/bloodmagictab/lava_crystal.json +d8ca7255f72a2ab6915552cdeb682ecc6efde03a data/bloodmagic/advancements/recipes/bloodmagictab/path/path_stone.json +1b85f9d2b823aef941158276b6f46bd8279cd693 data/bloodmagic/advancements/recipes/bloodmagictab/path/path_stonetile.json +f17f721149daf9246788be3235e5a6472155215a data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wood.json +147ba38e68ca50e503ecf1ea96e85ce62c2dd86d data/bloodmagic/advancements/recipes/bloodmagictab/path/path_woodtile.json +ea0b32b5595661f0d09f68a8a596577cc62ba0b1 data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wornstone.json +0dc717f46c2c6f36b58114df2bf5c82aadb104d2 data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wornstonetile.json +091fbd276c5ad173716e9e7474fa278e742a662f data/bloodmagic/advancements/recipes/bloodmagictab/primitive_furnace_cell.json +7cf09fef1a5bfc1401ecc34857bdf78c7282c12a data/bloodmagic/advancements/recipes/bloodmagictab/primitive_hydration_cell.json +01e90bb9c59d44a52777ecc0cf28754295fda675 data/bloodmagic/advancements/recipes/bloodmagictab/ritual_diviner_0.json +836e1fc171dba197e02d6a9e3e61a3718cb5a482 data/bloodmagic/advancements/recipes/bloodmagictab/ritual_diviner_1.json +5deb91599f19a4f28e5b03c9fcb428d3f00a3644 data/bloodmagic/advancements/recipes/bloodmagictab/ritual_reader.json +c8e5cdac0e7328640ab1cb0eab0a46f0733b59b3 data/bloodmagic/advancements/recipes/bloodmagictab/ritual_stone_blank.json +1578416eb302aecb3fd61e481634c5c021541f51 data/bloodmagic/advancements/recipes/bloodmagictab/ritual_stone_master.json +832301a424345b7ca70b43cb214faa104179f0fb data/bloodmagic/advancements/recipes/bloodmagictab/sacrificial_dagger.json +b76943e5606d3cd4ec9933b533e0925499af5c65 data/bloodmagic/advancements/recipes/bloodmagictab/smelting/ingot_hellforged.json +766cf6a61f198a8426debb6f0c9f43e36193fc76 data/bloodmagic/advancements/recipes/bloodmagictab/soul_forge.json +1c751b044e5ce4d05746857d6cf5e812e94a4026 data/bloodmagic/advancements/recipes/misc/smelting/ingot_gold.json +af036dd1bd5193c2d36e7cb96c0a2b73a37b76ab data/bloodmagic/advancements/recipes/misc/smelting/ingot_iron.json +ab358377c93ecbdd790722d5e796df59095e79e1 data/bloodmagic/advancements/recipes/misc/smelting/ingot_netherite_scrap.json +639ebb2ccabb2eaece59be96c2e6f28c31f4d2f4 data/bloodmagic/loot_tables/blocks/accelerationrune.json +26e3f34021426def32602e5ae7755e4672878320 data/bloodmagic/loot_tables/blocks/airritualstone.json +1ed1f3cebe68450b6d5ca3ce69e4728a7d250b1c data/bloodmagic/loot_tables/blocks/alchemicalreactionchamber.json +443550be9eaf1021b11fd2bbe6afcfe2cee6f7ad data/bloodmagic/loot_tables/blocks/alchemyarray.json +c92a9f2a90f2c17933f89832899c295cde1f194d data/bloodmagic/loot_tables/blocks/alchemytable.json +17d8dcc62320d5d2eeb781e925963d9b9d5eec54 data/bloodmagic/loot_tables/blocks/altar.json +05bb6268d7e884c962061a632e162d5baf73271e data/bloodmagic/loot_tables/blocks/altarcapacityrune.json +87d44fa5143733864c12608443d11744b91e0496 data/bloodmagic/loot_tables/blocks/bettercapacityrune.json +867d0fa555de94140215d9edb7cd7ae533bbc619 data/bloodmagic/loot_tables/blocks/blankrune.json +f1a8e3131d85077665563372cad868534a72fb31 data/bloodmagic/loot_tables/blocks/bloodlight.json +f0827ad5bf71c06a71f50aeb0298c04d0cb1a1d9 data/bloodmagic/loot_tables/blocks/bloodstonebrick.json +779b809a2a51e6dab46f9e6799249f2f14653ebb data/bloodmagic/loot_tables/blocks/chargingrune.json +0d501e4eb447e84b38250ab1c396abe1218d129c data/bloodmagic/loot_tables/blocks/corrosivedemoncrystal.json +e59c93dcc8d42b3ddb71dad1695573b1c284213f data/bloodmagic/loot_tables/blocks/creeping_doubt.json +794eab6d989fe113f797835fa6a2f7ead5bfbd38 data/bloodmagic/loot_tables/blocks/deforester_charge.json +4c9ed83e7e7215f995df35054e96d2f4e5027016 data/bloodmagic/loot_tables/blocks/demoncrucible.json +c590b923d28b3d7916932dfcb05091df815f71dd data/bloodmagic/loot_tables/blocks/demoncrystallizer.json +b0ce964c69f63aa13350259279e5fe831ae18e2c data/bloodmagic/loot_tables/blocks/destructivedemoncrystal.json +a9fcfc656fab957328c10ee1d9d33807e697b7f7 data/bloodmagic/loot_tables/blocks/dislocationrune.json +e39c50638d466bf706327f52fd42c915e2990d7e data/bloodmagic/loot_tables/blocks/dungeon_brick1.json +be050ff812ae62793e3c51d7c2ab343294ede7f0 data/bloodmagic/loot_tables/blocks/dungeon_brick2.json +75252b630d7e0cf77db12125844283949ee94226 data/bloodmagic/loot_tables/blocks/dungeon_brick3.json +607d6e286ff2280686f258a931341aeed5334781 data/bloodmagic/loot_tables/blocks/dungeon_brick_assorted.json +03410080009911badbf6458a54b596bee464cbe4 data/bloodmagic/loot_tables/blocks/dungeon_brick_gate.json +0d30aeb91425e2419abf555e9baab34475f45afc data/bloodmagic/loot_tables/blocks/dungeon_brick_stairs.json +fa335aded871280065ca02db79d6de59ced7f6c9 data/bloodmagic/loot_tables/blocks/dungeon_brick_wall.json +47baa958866616d96eb39e2671a4cf488e0abae2 data/bloodmagic/loot_tables/blocks/dungeon_eye.json +055aa396cd80393d84ed340692be62f74ecb6ffc data/bloodmagic/loot_tables/blocks/dungeon_metal.json +234675dab5d5ff7e1fec0e13cede1f141811fc92 data/bloodmagic/loot_tables/blocks/dungeon_ore.json +53864c213b973e67006cda4596877bcdd3474396 data/bloodmagic/loot_tables/blocks/dungeon_pillar_cap.json +db8be3b67639ab451d0a28e0674240094ceea046 data/bloodmagic/loot_tables/blocks/dungeon_pillar_center.json +c3deab4dd4ef8c1cf6f217d660ea07e5d7bd8555 data/bloodmagic/loot_tables/blocks/dungeon_pillar_special.json +32d9f0674d7d416a5d668af187b89caede4188a3 data/bloodmagic/loot_tables/blocks/dungeon_polished.json +dc0822572a66634163dd630797b1b90d98d47c22 data/bloodmagic/loot_tables/blocks/dungeon_polished_gate.json +a44e605af1925a17a806c751f9f4279dbffa417f data/bloodmagic/loot_tables/blocks/dungeon_polished_stairs.json +d6f0610c923131dee1c8723231ffafd7a75eb689 data/bloodmagic/loot_tables/blocks/dungeon_polished_wall.json +e936d89fc5a75a786a455a32e9bce2f7b1bdcb34 data/bloodmagic/loot_tables/blocks/dungeon_smallbrick.json +b6732b30df9e946739a1913671a60f56090679f8 data/bloodmagic/loot_tables/blocks/dungeon_stone.json +69eb25424b97782eb86d9667581ada8d03e3b220 data/bloodmagic/loot_tables/blocks/dungeon_tile.json +6381473b6e0bc7c16b8214eb083f5069622b4dd1 data/bloodmagic/loot_tables/blocks/dungeon_tilespecial.json +26e3f34021426def32602e5ae7755e4672878320 data/bloodmagic/loot_tables/blocks/duskritualstone.json +26e3f34021426def32602e5ae7755e4672878320 data/bloodmagic/loot_tables/blocks/earthritualstone.json +2f27b244e5b3459408e9519dde05dc70cbb03998 data/bloodmagic/loot_tables/blocks/ethereal_mimic.json +26e3f34021426def32602e5ae7755e4672878320 data/bloodmagic/loot_tables/blocks/fireritualstone.json +70ecedd4cea1655ce9fe5b1d3f72796a5c0ff133 data/bloodmagic/loot_tables/blocks/fungal_charge.json +59dd54a876b7ccd0b6c90f409753c2af2d687f03 data/bloodmagic/loot_tables/blocks/incensealtar.json +462a82b07e7fe3e479a2c072c73507686c339346 data/bloodmagic/loot_tables/blocks/largebloodstonebrick.json +26e3f34021426def32602e5ae7755e4672878320 data/bloodmagic/loot_tables/blocks/lightritualstone.json +72610188b4538d98ffcd015c2813d63d19889d5f data/bloodmagic/loot_tables/blocks/masterritualstone.json +ce5bf03f0ee03205ef6a1b6f512cb5da23addc57 data/bloodmagic/loot_tables/blocks/mimic.json +842c4dce4e47561fe29d7b5c03d3953808ada929 data/bloodmagic/loot_tables/blocks/nether_soil.json +3892d33bbef90db50034b1358d4a9ee8b731bc8d data/bloodmagic/loot_tables/blocks/obsidianbrickpath.json +3576b2f9d92ab5bdc456cb904905fb5c969e55f3 data/bloodmagic/loot_tables/blocks/obsidiantilepath.json +95442c1bb740fab2eb8ee051f7184813f6023afa data/bloodmagic/loot_tables/blocks/orbcapacityrune.json +6c59e846922061c0f2249b0c73c3be89ec73ea31 data/bloodmagic/loot_tables/blocks/rawdemoncrystal.json +26e3f34021426def32602e5ae7755e4672878320 data/bloodmagic/loot_tables/blocks/ritualstone.json +e0239eff7762a414a4e4faa0158d844dffb8c1f6 data/bloodmagic/loot_tables/blocks/sacrificerune.json +9b697e37046b6238b3a19eae9113b88010ccff32 data/bloodmagic/loot_tables/blocks/selfsacrificerune.json +fce757b3f3b79758be0fba70e016b3bdb373814e data/bloodmagic/loot_tables/blocks/shaped_charge.json +f748a5ba8838b50de0502f132fe2a65f4726dae6 data/bloodmagic/loot_tables/blocks/soulforge.json +015e07226fd90935f7ec663f4bcf3873a57a82d1 data/bloodmagic/loot_tables/blocks/speedrune.json +128ec3ee93e927d457beeb8161e80706e9239760 data/bloodmagic/loot_tables/blocks/steadfastdemoncrystal.json +8849e41b699c2eb7c3712a8e862bd9dd309a5c31 data/bloodmagic/loot_tables/blocks/stonebrickpath.json +6149fd464bafaabf35ca431202680c84cf5441b1 data/bloodmagic/loot_tables/blocks/stonetilepath.json +10b636d364f9ff72eb6db34f6f5e6aca704fc621 data/bloodmagic/loot_tables/blocks/veinmine_charge.json +33a22d9b198c93ed07ac69b7a594bb08db64b239 data/bloodmagic/loot_tables/blocks/vengefuldemoncrystal.json +26e3f34021426def32602e5ae7755e4672878320 data/bloodmagic/loot_tables/blocks/waterritualstone.json +04c5bc02383ddff04588af3a048ee3973e69666f data/bloodmagic/loot_tables/blocks/woodbrickpath.json +2c471cedf5e3e39610821766609646698d2b47e3 data/bloodmagic/loot_tables/blocks/woodtilepath.json +9ab0aac56f75e7811f9641a6a20ff8d9dd78876a data/bloodmagic/loot_tables/blocks/wornstonebrickpath.json +4a7395079f874ae08af94f64a8a00211a56e906a data/bloodmagic/loot_tables/blocks/wornstonetilepath.json +c95cd70b7ca320e18618c07827add555984b0e45 data/bloodmagic/loot_tables/test.json +966981b01944985f1fe5cfa72b21c9ceeebd9cc4 data/bloodmagic/recipes/alchemy_table.json +6e508e442b24c2a0e3f85026277c199cc0deada0 data/bloodmagic/recipes/alchemytable/arcane_ash.json +a343604b5a75e1b3810df97d024813fb041cffb6 data/bloodmagic/recipes/alchemytable/basic_cutting_fluid.json +cc28a48ec4b21be99c4ec13f6e560c322012192c data/bloodmagic/recipes/alchemytable/bow_power_anointment.json +6a93bcd65cf2636fc684276777f56630f82d710c data/bloodmagic/recipes/alchemytable/bread.json +e50009fa724173c2dcb4fab49b4f029039f69bf8 data/bloodmagic/recipes/alchemytable/clay_from_sand.json +72f8d4afe57970d3969a9373b18f8eac86b245bc data/bloodmagic/recipes/alchemytable/cobweb.json +96cc66cdb9c5f786eaa899e1fbdd38144e44a0fe data/bloodmagic/recipes/alchemytable/explosive_powder.json +1fa964af556af521d8eaf1a686befdd9d69c63af data/bloodmagic/recipes/alchemytable/flint_from_gravel.json +90b9431139014864558e96916eb835105f3b5a2f data/bloodmagic/recipes/alchemytable/fortune_anointment.json +7b4b20c316a4c2e533d8a123025a4424ea808142 data/bloodmagic/recipes/alchemytable/gold_ore_from_gilded.json +aff95e4322f9e8daaffc2337964f95ab6f9d631c data/bloodmagic/recipes/alchemytable/grass_block.json +540edca1f507d366e55887b4429a9952c00f4060 data/bloodmagic/recipes/alchemytable/gunpowder.json +9f1b37b59f8abbe419306b3eb8af59317a54483a data/bloodmagic/recipes/alchemytable/hidden_knowledge_anointment.json +566352daaa6e6803df68475d964108b3f89cebd2 data/bloodmagic/recipes/alchemytable/holy_water_anointment.json +0657a60976678fdfbdf0b8ee2c178502520d194a data/bloodmagic/recipes/alchemytable/leather_from_flesh.json +c42ae24ad8955d8cf0a1f1096b0bca37d55621cf data/bloodmagic/recipes/alchemytable/looting_anointment.json +93620eaad39a46a97f3381ff5c645e59d7dddd16 data/bloodmagic/recipes/alchemytable/melee_damage_anointment.json +b18dde32d8a428f44437c0e53e5fdb990597498d data/bloodmagic/recipes/alchemytable/nether_wart_from_block.json +0a5ce0f2d09a596fb47b27a60e66eceeb04e0b0d data/bloodmagic/recipes/alchemytable/plantoil_from_beets.json +f1fd76dab242882e327b4677b95328cb3a52deee data/bloodmagic/recipes/alchemytable/plantoil_from_carrots.json +e9f5a06e4800cb03cc13480db9fdb7b9fa47f487 data/bloodmagic/recipes/alchemytable/plantoil_from_taters.json +f41e9bf8376ffcad07752b5657e27e06e500be0a data/bloodmagic/recipes/alchemytable/plantoil_from_wheat.json +6230b36712a5b6d239ec35b85e7fda0917ca7bc2 data/bloodmagic/recipes/alchemytable/quick_draw_anointment.json +eb8f2ef0c592ba022190d727eec69d73b7437bac data/bloodmagic/recipes/alchemytable/reagent_air.json +755960529025fecd187cae962dc76988c1d52c8e data/bloodmagic/recipes/alchemytable/reagent_binding.json +47a4511054bd10454302a6b41eecfac942d27864 data/bloodmagic/recipes/alchemytable/reagent_blood_light.json +e50bf64f33ac29e704f553ef465c2631c1857777 data/bloodmagic/recipes/alchemytable/reagent_fastminer.json +00d41617bb2e67cdfcfcd87c3bb931726bd37e13 data/bloodmagic/recipes/alchemytable/reagent_growth.json +2c613ba6d23fb3a133963e48134893ac7e404042 data/bloodmagic/recipes/alchemytable/reagent_holding.json +e06d24e618d3f2f17cb34a79ac630bd81c85dc45 data/bloodmagic/recipes/alchemytable/reagent_lava.json +41969af0a92baece82c53a779f2e71aec71fe0cb data/bloodmagic/recipes/alchemytable/reagent_magnetism.json +cb5b17173d9f6b7dad40a59aa920f47601e1304e data/bloodmagic/recipes/alchemytable/reagent_sight.json +1f19c4b4070c9e519c83fc624cb401503d8178cb data/bloodmagic/recipes/alchemytable/reagent_void.json +ef693cd04a08d89990ec8bb2620ff5e7efc353fc data/bloodmagic/recipes/alchemytable/reagent_water.json +842713a090b5abf3ce967dbee90d7582f7414949 data/bloodmagic/recipes/alchemytable/sand_coal.json +9292733697eca52de2c2ac7325ba45ab0354bfa3 data/bloodmagic/recipes/alchemytable/sand_gold.json +06f00cce47e0d5e5d25a2587796494340f8a3278 data/bloodmagic/recipes/alchemytable/sand_iron.json +3e3359b89a8c38c0fdeb2b4ca2920bce053082f8 data/bloodmagic/recipes/alchemytable/silk_touch_anointment.json +f7e91d164ea5c782420ff3507a98da16c5915b73 data/bloodmagic/recipes/alchemytable/slate_vial.json +4158f21d795aeeec52cfdec718ba9f82b0f2d10d data/bloodmagic/recipes/alchemytable/smelting_anointment.json +a91e81c79959b522bcd1bac901bca646184015de data/bloodmagic/recipes/alchemytable/string.json +3c9d829f7bff8a4d607c46fc3ff4f86dffa28fd5 data/bloodmagic/recipes/altar/air_tool.json +f41b0e9dfab608c42a85c3c5c5bbc050b03f02a1 data/bloodmagic/recipes/altar/apprenticebloodorb.json +2269c03d8ba4b790fb6a30c32bdb0169c283e5e2 data/bloodmagic/recipes/altar/bucket_life.json +2a67e37497a571b5ee944375d315fddccea87697 data/bloodmagic/recipes/altar/daggerofsacrifice.json +c5a4a256a7437f2e13c574a6f0c4d75fc2e718cb data/bloodmagic/recipes/altar/demonicslate.json +d79a96eb3eed597f1c18a8983764a6362a24748c data/bloodmagic/recipes/altar/dusk_tool.json +7272cdd4e1469cf83849e5444b4b93a7563a6bf2 data/bloodmagic/recipes/altar/earth_tool.json +37913b1babf9b8159332db09b114c919b1b49473 data/bloodmagic/recipes/altar/fire_tool.json +9aeb0d2d33d839eedb2d9bbdaf76fc73e0b39941 data/bloodmagic/recipes/altar/imbuedslate.json +2643d1516f6dae79128fdc8c48c4cfe23453f171 data/bloodmagic/recipes/altar/magicianbloodorb.json +5996888ae6e4ae9afc86a5d629a729d624fc4372 data/bloodmagic/recipes/altar/masterbloodorb.json +30d84c946ad9235f6e59f1046edbe8d44acc799e data/bloodmagic/recipes/altar/reinforcedslate.json +584d01dff4d64bb88bd3783751a29723700f1728 data/bloodmagic/recipes/altar/slate.json +5e6289a1c8deb414202bba0f16fc09f9fdf7add0 data/bloodmagic/recipes/altar/soul_snare.json +926d4a0e165c87a15a609744d832d2f5f04a40d0 data/bloodmagic/recipes/altar/water_tool.json +dd59da50b674ec8f680e01a91261bf34091075cf data/bloodmagic/recipes/altar/weakbloodorb.json +5807b2515f4a2dc9855327940e6055f6947f0749 data/bloodmagic/recipes/arc.json +f35bb47d609201f6568b598307ae9d157792fe3e data/bloodmagic/recipes/arc/clay_from_sand.json +6b8ba1822bac8a1af426a14f87d613dc89e3fca0 data/bloodmagic/recipes/arc/clay_from_terracotta.json +5206a65f02d3bea5c23164325eb23ce8e928102f data/bloodmagic/recipes/arc/dustsfrom_gravel_gold.json +5af6c601a7be4c0fc4811befa59324c1a2cdb758 data/bloodmagic/recipes/arc/dustsfrom_gravel_iron.json +6f3f5d2f3054d61a3965b10bcebc8cefe107cf5f data/bloodmagic/recipes/arc/dustsfrom_gravel_netherite_scrap.json +b5d3a7ee94494665a9e69519da43a0d4056deb76 data/bloodmagic/recipes/arc/dustsfrom_ingot_gold.json +a31e17fb2da1259fb186cfd07c9cd500e6354518 data/bloodmagic/recipes/arc/dustsfrom_ingot_iron.json +b9dc41ad0d9ee6035084a8e9a8eb920223817d33 data/bloodmagic/recipes/arc/dustsfrom_ingot_netherite_scrap.json +e0846e670dc94334ba695d2a1182527a5016cd31 data/bloodmagic/recipes/arc/dustsfrom_ore_gold.json +855c963531471cedd2f5f067801b96c0bd6a0c56 data/bloodmagic/recipes/arc/dustsfrom_ore_iron.json +e410be937d52aea0f186aa14fa9b2929a98ffaf3 data/bloodmagic/recipes/arc/dustsfrom_ore_netherite_scrap.json +517a3b7a6bbfc486777f509c2d9af6490ff722c9 data/bloodmagic/recipes/arc/fragmentsgold.json +d8b9e64d14e67299aa08888246cdead76ebd91ce data/bloodmagic/recipes/arc/fragmentsiron.json +ec54b6d447bf5709b15d7bccb9c7d0790661f621 data/bloodmagic/recipes/arc/fragmentsnetherite_scrap.json +0275b4a539ccac64818c19bcb5351408eea9d193 data/bloodmagic/recipes/arc/gravelsgold.json +32b0aeab82c1d98b86b162e98036b2591ccf649c data/bloodmagic/recipes/arc/gravelsiron.json +f83ad96ea74fd51f1fd78ee40ff0fbeb08755b12 data/bloodmagic/recipes/arc/gravelsnetherite_scrap.json +2eb26a1af68ed7a5fdb6ac9d4bbc7557729c56cd data/bloodmagic/recipes/arc/netherrack_to_sulfer.json +0a6a8034c55d093fed458759bbc85e5893712d35 data/bloodmagic/recipes/arc/ore/dustgold.json +b2760564e300976d88a3938bc0e9e2d2defa0841 data/bloodmagic/recipes/arc/ore/dustiron.json +249229687c1b41a4191c455278624b642b501b4e data/bloodmagic/recipes/arc/reversion/apprentice_blood_orb.json +a2b7d868ac099dd6fb29fa54892aad90e29d028d data/bloodmagic/recipes/arc/reversion/magician_blood_orb.json +a7f51456052d0fd317164d400cdd595ae2687df8 data/bloodmagic/recipes/arc/reversion/master_blood_orb.json +8d9d66d63e21cc8a6f02fac2111f5d169c8542ff data/bloodmagic/recipes/arc/reversion/weak_blood_orb.json +1e5814caf63714b8e1ff2b2f413a86ba8c840ebb data/bloodmagic/recipes/arc/weakbloodshard.json +e1285ec51100f2336c1ea1a1a3057e74a0dd84d1 data/bloodmagic/recipes/array/airsigil.json +d1ac23080f72f21adb5908befefe965ffb4efd4f data/bloodmagic/recipes/array/bloodlightsigil.json +f6b6c72c0a2d6b3e602976f0dd2dfa778be41777 data/bloodmagic/recipes/array/bounce.json +7110895fe75e65404bc66d6c09087d9e58220a11 data/bloodmagic/recipes/array/day.json +1890706e5b93cd6df764b0419483c348e0d7f277 data/bloodmagic/recipes/array/divinationsigil.json +4bd220ced486f1d8fc4468ebd61dac755670d716 data/bloodmagic/recipes/array/fastminersigil.json +d9ae32c70d4bd872f22229006ad3c8e0cf7e3721 data/bloodmagic/recipes/array/grove.json +f191a3c9982b827b0b2ba93164a81fc4f8cb0959 data/bloodmagic/recipes/array/growthsigil.json +4452b681c328ed01ec680b6b68cb2a0aee11ed3d data/bloodmagic/recipes/array/holdingsigil.json +78c880321f0bfad14239d4b9d2edae170a7fa86e data/bloodmagic/recipes/array/lavasigil.json +165f8f8ba7ae094cdd1367716a0797a0f8d4d605 data/bloodmagic/recipes/array/living_boots.json +1de17e8a769d471c934835955184d0c8782fb619 data/bloodmagic/recipes/array/living_helmet.json +4a48885f110a87505381c7e2f2607d30612a3604 data/bloodmagic/recipes/array/living_leggings.json +5e3c6dd7bfcd16e79f17e963d8c1b59c0d1aebe9 data/bloodmagic/recipes/array/living_plate.json +8b1007de1b7fca5d27b54d7c9839cde9e47ab1c0 data/bloodmagic/recipes/array/magnetismsigil.json +7a674784e0d8d4f6f071a72d26ba677087976970 data/bloodmagic/recipes/array/movement.json +5c208259e33c3a56c5d6f6ab951ac0c4d5b60e26 data/bloodmagic/recipes/array/night.json +6fd91801759c6a7a018b9d18601fc3db4d3ee3b4 data/bloodmagic/recipes/array/seersigil.json +1921cc1cba3bcc36a6be6edd377dd44eb9b884a0 data/bloodmagic/recipes/array/spike.json +085bf564ec74060e5c0224155cefc6ba0635c2c8 data/bloodmagic/recipes/array/updraft.json +cabe693e7c714203ad708a1068f302b3ee3120b0 data/bloodmagic/recipes/array/voidsigil.json +5e68d933fff631142a8dd819aee235d343d43cff data/bloodmagic/recipes/array/watersigil.json +ac895b8c95ca10d61ae6efedfe5815b980588433 data/bloodmagic/recipes/blood_altar.json +f4de3cfc4616f762b4a87b08510153ae06733528 data/bloodmagic/recipes/blood_rune_acceleration.json +78e3f4666bc13897821abec9fa41e8b72accd007 data/bloodmagic/recipes/blood_rune_aug_capacity.json +2f31d0108cdb0cca056405023bd0ac64b6c02524 data/bloodmagic/recipes/blood_rune_blank.json +5c4e4af372250a3f967666f0f97198547cfbd5e1 data/bloodmagic/recipes/blood_rune_capacity.json +f905c1a8ca4d3a9f841ca6c44caa91de327fc29d data/bloodmagic/recipes/blood_rune_charging.json +ac0ee73ab691edd09be24453bd3fe3dc1a8f1ecb data/bloodmagic/recipes/blood_rune_displacement.json +89563d5c176d465632a45005cbe5e570791fd8dd data/bloodmagic/recipes/blood_rune_orb.json +b63d77c3762f86d4a91f62e192c3e9b26e3b52ca data/bloodmagic/recipes/blood_rune_sacrifice.json +7c4e247c1df6ef594bbb2fc2196afb102f45982b data/bloodmagic/recipes/blood_rune_self_sacrifice.json +e2bcf2a6f951fbcef45554ec90ba28d14e261d18 data/bloodmagic/recipes/blood_rune_speed.json +eeb5e64b8bc90adc2554dde88b8792b92ad7c8cc data/bloodmagic/recipes/bloodstonebrick.json +68e9201ef0d0051618a73434b35791a208bacde1 data/bloodmagic/recipes/corrupted_dust.json +ab11cf6806dab2a2d1cda2f7fde9cd2ecd9cdf9f data/bloodmagic/recipes/experience_tome.json +84aeee900c15d94f1940e72c8f331755d0a97b11 data/bloodmagic/recipes/hellforged_block.json +9a5749465020b32b0147b3367784ce31a0d3b54b data/bloodmagic/recipes/incense_altar.json +63bca28ba5eebb9c488c819bcb117595eadb877d data/bloodmagic/recipes/largebloodstonebrick.json +9dedad36e9d2ab6688e069c2e6df3851c395b583 data/bloodmagic/recipes/lava_crystal.json +50d84717ac673875e4b52522b583f564a8a75e8e data/bloodmagic/recipes/path/path_stone.json +2756ff3f29e1231795671c94fdaf9e5abc65bbee data/bloodmagic/recipes/path/path_stonetile.json +dcb702aeb768bc0ff5d1f05c5ac95066c4082193 data/bloodmagic/recipes/path/path_wood.json +7491b9f62c29d2fde6ff1dbff09f16f458b9afe8 data/bloodmagic/recipes/path/path_woodtile.json +d85f637e3c87ba050c24581b8f4bef4176e1ba14 data/bloodmagic/recipes/path/path_wornstone.json +2ee3e7f073df764289939b8df814cc8f056eced0 data/bloodmagic/recipes/path/path_wornstonetile.json +0b1a11f0e1b6bc317e2dbf04560a81581623f41e data/bloodmagic/recipes/primitive_furnace_cell.json +7e1a70935e9b5ba6b345af6a7077287896ec6cfe data/bloodmagic/recipes/primitive_hydration_cell.json +bfd7925ad30534463d7daf0f7dce03cf1502cbcf data/bloodmagic/recipes/ritual_diviner_0.json +2ec436681cdd169bae99d090bb889c2a45420b6c data/bloodmagic/recipes/ritual_diviner_1.json +18accae45d6c592b108c227c629caf15e430bf2b data/bloodmagic/recipes/ritual_reader.json +7757e5fd52f71b0d21595e072593fc592210dd64 data/bloodmagic/recipes/ritual_stone_blank.json +8608f828f997b1a8015287bd9cd436e9d7dff2ff data/bloodmagic/recipes/ritual_stone_master.json +aefbf1fd258f1cda8d04db7e0794b9612993e6bf data/bloodmagic/recipes/sacrificial_dagger.json +1eab0535b38c4a8a021a72244b9e6a75353970f0 data/bloodmagic/recipes/smelting/ingot_gold.json +b644726cea2da0626f33b60fbc64701f26d48561 data/bloodmagic/recipes/smelting/ingot_hellforged.json +477f968ee84a5b9cd3e9c2a9864be32b5e7d3a32 data/bloodmagic/recipes/smelting/ingot_iron.json +06855bcd8951355604ab1e63b5db717382430967 data/bloodmagic/recipes/smelting/ingot_netherite_scrap.json +d4ee90b52934c7c530fb031dcf81d4f1ccb27a9b data/bloodmagic/recipes/soul_forge.json +8b64af8453c60b6b1ae55bd0dd1a68fe95e8ba19 data/bloodmagic/recipes/soulforge/commontartaricgem.json +659db62f8fb71c792b00d6409b1c9a2f1ca96048 data/bloodmagic/recipes/soulforge/corrosive_crystal_block.json +5ad148899ed46134ae0572b220736b9d38004980 data/bloodmagic/recipes/soulforge/deforester_charge.json +26d7fb7f868bcc96ce268adccead7207d5559afb data/bloodmagic/recipes/soulforge/deforester_charge_fortune_1.json +40ae097cd8b3c0dcd38f7032d928acdb71da13da data/bloodmagic/recipes/soulforge/deforester_charge_silk_touch.json +bd63ccb772c829a4a50df17f06a641353dc3b98e data/bloodmagic/recipes/soulforge/deforester_charge_smelting.json +2c90f1da43a79e61d2b6b09c012d08f53b133264 data/bloodmagic/recipes/soulforge/demon_crucible.json +bc4ad3b44720a3f7363ef53027b4aae35622e7c1 data/bloodmagic/recipes/soulforge/demon_crystallizer.json +759279a190f3bc74e162dedf0f5d311267e06fbc data/bloodmagic/recipes/soulforge/destructive_crystal_block.json +78f0e3dc5fa61d8f9c182a3608184f21925f79db data/bloodmagic/recipes/soulforge/fungal_charge.json +61003f9b47ae96e5bccd518d514ef2532ce6e028 data/bloodmagic/recipes/soulforge/fungal_charge_fortune_1.json +9f7efc88c863110e6253b8877eee93c2e6533090 data/bloodmagic/recipes/soulforge/fungal_charge_silk_touch.json +a625c60e99970a93cb188e17579bcb958890d7a9 data/bloodmagic/recipes/soulforge/fungal_charge_smelting.json +0b82d2354aaa635b4fe5514e4815298ee0dedf80 data/bloodmagic/recipes/soulforge/greatertartaricgem.json +d46b61779b3c8382862d4e66c3909a1241ecca18 data/bloodmagic/recipes/soulforge/lessertartaricgem.json +d6e06747c75fc06e708a15358911f1c63eee86b1 data/bloodmagic/recipes/soulforge/pettytartaricgem.json +2468dd785e301732b1be8108caa468bdd5008e46 data/bloodmagic/recipes/soulforge/primitive_crystalline_resonator.json +535a9ec33a425bde205dffc3254635741d1c82d6 data/bloodmagic/recipes/soulforge/raw_crystal_block.json +4a4340f334c51beaacb77fd201298ad94b71e79c data/bloodmagic/recipes/soulforge/sanguine_reverter.json +799c9b83373966f70bbd6777cdae0ff2ff89fd84 data/bloodmagic/recipes/soulforge/sentientaxe.json +6d94372ffffbe36ca91ed2a5e46991bff896726c data/bloodmagic/recipes/soulforge/sentientpickaxe.json +6b47831e5c2f3033b6706706d810fa96d8abebd6 data/bloodmagic/recipes/soulforge/sentientscythe.json +6dcced40126f950b85f868aa04c77e90b71b69f2 data/bloodmagic/recipes/soulforge/sentientshovel.json +7e281841a2953c1284d332c2bbf75097f8128241 data/bloodmagic/recipes/soulforge/sentientsword.json +dc977e9d98fcba66fbcce3f6c31a746db5ed60f5 data/bloodmagic/recipes/soulforge/shaped_charge.json +865cac49dd9604f35577aa6cfd2756946b49b8b1 data/bloodmagic/recipes/soulforge/shaped_charge_fortune_1.json +83b9b038785f449e4948cf17f8fa35457c24a3cb data/bloodmagic/recipes/soulforge/shaped_charge_silk_touch.json +7417c0ad20f4c23a7fed958f658e6dc96720ec60 data/bloodmagic/recipes/soulforge/shaped_charge_smelting.json +c4102a1573e632d0b9f894353b0d522a51a7c65e data/bloodmagic/recipes/soulforge/steadfast_crystal_block.json +ed0875aaba76e013684b8ea2f8275d5563e90e98 data/bloodmagic/recipes/soulforge/throwing_dagger.json +b081dbc0865421df6a591366393ffdbceb205907 data/bloodmagic/recipes/soulforge/throwing_dagger_syringe.json +978033adf58e34fa317bcea448ac1ddf3f0cd69e data/bloodmagic/recipes/soulforge/vein_charge.json +a06bb2d29cfa5d9c38092e93196bed7f331bcc97 data/bloodmagic/recipes/soulforge/vein_charge_fortune_1.json +29a712f5e12e1702f6221c4c8918ba37299edd7c data/bloodmagic/recipes/soulforge/vein_charge_silk_touch.json +911023ba84eed7836875793a21c32a83755760d3 data/bloodmagic/recipes/soulforge/vein_charge_smelting.json +3aa852edda803a2225ebe53d2daa55bd46b0a1b9 data/bloodmagic/recipes/soulforge/vengeful_crystal_block.json +d7d993bb729284a5201c164ea81fbe1d8e4e4750 data/bloodmagic/recipes/weak_activation_crystal.json +cf63fdccec992f2cb36c72843791623463cecc44 data/bloodmagic/tags/items/arc/cuttingfluid.json +54a0fcc973590c80a4d3cd6b82f5602ba7208438 data/bloodmagic/tags/items/arc/explosive.json +331b978ba851ae3c48390c5d992bcd5f28ac644d data/bloodmagic/tags/items/arc/furnace.json +a62b82e1f59284d230b4b983ffa4a4cecb288c0e data/bloodmagic/tags/items/arc/hydrate.json +9689738644fcfa3a80effc6ee150b67c67e8b8f4 data/bloodmagic/tags/items/arc/resonator.json +65326040c8974fcfcc8711d29040b4297ff55ec1 data/bloodmagic/tags/items/arc/reverter.json +14fb88c612622be110e273818eee9512cd285d56 data/bloodmagic/tags/items/arc/sieve.json +bcd2befe59cbb4931c8c9bed183d19b2a469e506 data/bloodmagic/tags/items/arc/tool.json +2bdc1397bd092d373f785f08a2befdce8c1c1e2e data/bloodmagic/tags/items/crystals/demon.json +dab44ece8bcdf079b349fc4f49da67aafe9c4cf7 data/bloodmagic/tags/items/dusts/corrupted.json +dc8d6f8f8d128499f3d2632ef1bc353cc49d1ddb data/bloodmagic/tags/items/fragments/gold.json +a60c7b779168689387a03f00002bfd8380d919e5 data/bloodmagic/tags/items/fragments/iron.json +590aab8d5f5a4ed18dd211865e917674dcabfea0 data/bloodmagic/tags/items/fragments/netherite_scrap.json +af9b1a9ba1b16a85e3e1cf84b99e4cc9e12f9886 data/bloodmagic/tags/items/gravels/gold.json +19547e1b8859f1e2f1ae858e74b4456fc20be53f data/bloodmagic/tags/items/gravels/iron.json +3597daeddb742612d0b7fe2d0f711251a2781ac2 data/bloodmagic/tags/items/gravels/netherite_scrap.json +04fdfff381183672d6d7b3e55ded42a0a5b89f16 data/bloodmagic/tags/items/tiny_dusts/corrupted.json +b7b3ffae086763317f5ed70a4f857e9634932972 data/forge/tags/fluids/life.json +4f8f46a7e30fe81d36790d3ffed37efef7c87d06 data/forge/tags/items/dusts/coal.json +82f2679934e550a1188658350e52cfac7c450c4d data/forge/tags/items/dusts/gold.json +205d57b4f622a13fceda5e8062d9bba80d619e92 data/forge/tags/items/dusts/hellforged.json +625a1e6a3b635b2ac5176a49afbae9b476de4f71 data/forge/tags/items/dusts/iron.json +05fbe38ee5bdb3d912a5980254886ad64399e062 data/forge/tags/items/dusts/netherite_scrap.json +9380fe45b06787ba776af4a7d542a047c1441031 data/forge/tags/items/dusts/saltpeter.json +5c709b6444acb94ca784c33618547ba535e15db2 data/forge/tags/items/dusts/sulfur.json +ca758f49ba878f8e498fe156d4916c1e332d552c data/forge/tags/items/ingots/hellforged.json +74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/forge/tags/items/ores/copper.json +74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/forge/tags/items/ores/lead.json +74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/forge/tags/items/ores/osmium.json +74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/forge/tags/items/ores/silver.json +74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/forge/tags/items/ores/tin.json +d348e6ef5f30db7c6c6ef2aac89c45e9c4c6fef7 data/minecraft/tags/blocks/mushroom_hyphae.json +95fd3a7b178a92c5aecdd097fec5359f14a06c13 data/minecraft/tags/blocks/mushroom_stem.json +2ba6f93ee0567360afa3ae9999027b839ed06532 data/minecraft/tags/blocks/walls.json +d348e6ef5f30db7c6c6ef2aac89c45e9c4c6fef7 data/minecraft/tags/items/mushroom_hyphae.json +95fd3a7b178a92c5aecdd097fec5359f14a06c13 data/minecraft/tags/items/mushroom_stem.json diff --git a/src/generated/resources/assets/bloodmagic/blockstates/accelerationrune.json b/src/generated/resources/assets/bloodmagic/blockstates/accelerationrune.json new file mode 100644 index 00000000..dc97d5de --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/accelerationrune.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/accelerationrune" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/airritualstone.json b/src/generated/resources/assets/bloodmagic/blockstates/airritualstone.json new file mode 100644 index 00000000..a64ce156 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/airritualstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/airritualstone" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/alchemicalreactionchamber.json b/src/generated/resources/assets/bloodmagic/blockstates/alchemicalreactionchamber.json new file mode 100644 index 00000000..05658c8b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/alchemicalreactionchamber.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,lit=false": { + "model": "bloodmagic:block/alchemicalreactionchamber" + }, + "facing=south,lit=false": { + "model": "bloodmagic:block/alchemicalreactionchamber", + "y": 180 + }, + "facing=west,lit=false": { + "model": "bloodmagic:block/alchemicalreactionchamber", + "y": 270 + }, + "facing=east,lit=false": { + "model": "bloodmagic:block/alchemicalreactionchamber", + "y": 90 + }, + "facing=north,lit=true": { + "model": "bloodmagic:block/alchemicalreactionchamber" + }, + "facing=south,lit=true": { + "model": "bloodmagic:block/alchemicalreactionchamber", + "y": 180 + }, + "facing=west,lit=true": { + "model": "bloodmagic:block/alchemicalreactionchamber", + "y": 270 + }, + "facing=east,lit=true": { + "model": "bloodmagic:block/alchemicalreactionchamber", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/altarcapacityrune.json b/src/generated/resources/assets/bloodmagic/blockstates/altarcapacityrune.json new file mode 100644 index 00000000..f5a088ea --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/altarcapacityrune.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/altarcapacityrune" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/bettercapacityrune.json b/src/generated/resources/assets/bloodmagic/blockstates/bettercapacityrune.json new file mode 100644 index 00000000..ead6c945 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/bettercapacityrune.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/bettercapacityrune" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/blankrune.json b/src/generated/resources/assets/bloodmagic/blockstates/blankrune.json new file mode 100644 index 00000000..d211f0a6 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/blankrune.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/blankrune" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/bloodlight.json b/src/generated/resources/assets/bloodmagic/blockstates/bloodlight.json new file mode 100644 index 00000000..dfa612f0 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/bloodlight.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/bloodlight" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/bloodstonebrick.json b/src/generated/resources/assets/bloodmagic/blockstates/bloodstonebrick.json new file mode 100644 index 00000000..4bf17916 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/bloodstonebrick.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/bloodstonebrick" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/chargingrune.json b/src/generated/resources/assets/bloodmagic/blockstates/chargingrune.json new file mode 100644 index 00000000..5c238290 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/chargingrune.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/chargingrune" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/corrosivedemoncrystal.json b/src/generated/resources/assets/bloodmagic/blockstates/corrosivedemoncrystal.json new file mode 100644 index 00000000..fb67a253 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/corrosivedemoncrystal.json @@ -0,0 +1,431 @@ +{ + "multipart": [ + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal1", + "x": 180 + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal1" + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal1", + "x": 90 + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal1", + "x": 270 + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal1", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal1", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal2", + "x": 180 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal2" + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal2", + "x": 90 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal2", + "x": 270 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal2", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal2", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal3", + "x": 180 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal3" + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal3", + "x": 90 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal3", + "x": 270 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal3", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal3", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal4", + "x": 180 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal4" + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal4", + "x": 90 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal4", + "x": 270 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal4", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal4", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal5", + "x": 180 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal5" + } + }, + { + "when": { + "age": "4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal5", + "x": 90 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal5", + "x": 270 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal5", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal5", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal6", + "x": 180 + } + }, + { + "when": { + "age": "5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal6" + } + }, + { + "when": { + "age": "5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal6", + "x": 90 + } + }, + { + "when": { + "age": "5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal6", + "x": 270 + } + }, + { + "when": { + "age": "5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal6", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal6", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal7", + "x": 180 + } + }, + { + "when": { + "age": "6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal7" + } + }, + { + "when": { + "age": "6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal7", + "x": 90 + } + }, + { + "when": { + "age": "6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal7", + "x": 270 + } + }, + { + "when": { + "age": "6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal7", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/corrosivecrystal7", + "x": 90, + "y": 90 + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/creeping_doubt.json b/src/generated/resources/assets/bloodmagic/blockstates/creeping_doubt.json new file mode 100644 index 00000000..d7e819a0 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/creeping_doubt.json @@ -0,0 +1,28 @@ +{ + "variants": { + "age=0": { + "model": "bloodmagic:block/creeping_doubt_1" + }, + "age=1": { + "model": "bloodmagic:block/creeping_doubt_2" + }, + "age=2": { + "model": "bloodmagic:block/creeping_doubt_3" + }, + "age=3": { + "model": "bloodmagic:block/creeping_doubt_4" + }, + "age=4": { + "model": "bloodmagic:block/creeping_doubt_5" + }, + "age=5": { + "model": "bloodmagic:block/creeping_doubt_6" + }, + "age=6": { + "model": "bloodmagic:block/creeping_doubt_7" + }, + "age=7": { + "model": "bloodmagic:block/creeping_doubt_8" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/deforester_charge.json b/src/generated/resources/assets/bloodmagic/blockstates/deforester_charge.json new file mode 100644 index 00000000..bac5692f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/deforester_charge.json @@ -0,0 +1,29 @@ +{ + "variants": { + "attached=down": { + "model": "bloodmagic:block/deforester_charge", + "x": 180 + }, + "attached=up": { + "model": "bloodmagic:block/deforester_charge" + }, + "attached=north": { + "model": "bloodmagic:block/deforester_charge", + "x": 90 + }, + "attached=south": { + "model": "bloodmagic:block/deforester_charge", + "x": 270 + }, + "attached=west": { + "model": "bloodmagic:block/deforester_charge", + "x": 90, + "y": 270 + }, + "attached=east": { + "model": "bloodmagic:block/deforester_charge", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/destructivedemoncrystal.json b/src/generated/resources/assets/bloodmagic/blockstates/destructivedemoncrystal.json new file mode 100644 index 00000000..b99a263f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/destructivedemoncrystal.json @@ -0,0 +1,431 @@ +{ + "multipart": [ + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal1", + "x": 180 + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal1" + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal1", + "x": 90 + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal1", + "x": 270 + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal1", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal1", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal2", + "x": 180 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal2" + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal2", + "x": 90 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal2", + "x": 270 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal2", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal2", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal3", + "x": 180 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal3" + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal3", + "x": 90 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal3", + "x": 270 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal3", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal3", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal4", + "x": 180 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal4" + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal4", + "x": 90 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal4", + "x": 270 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal4", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal4", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal5", + "x": 180 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal5" + } + }, + { + "when": { + "age": "4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal5", + "x": 90 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal5", + "x": 270 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal5", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal5", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal6", + "x": 180 + } + }, + { + "when": { + "age": "5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal6" + } + }, + { + "when": { + "age": "5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal6", + "x": 90 + } + }, + { + "when": { + "age": "5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal6", + "x": 270 + } + }, + { + "when": { + "age": "5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal6", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal6", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal7", + "x": 180 + } + }, + { + "when": { + "age": "6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal7" + } + }, + { + "when": { + "age": "6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal7", + "x": 90 + } + }, + { + "when": { + "age": "6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal7", + "x": 270 + } + }, + { + "when": { + "age": "6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal7", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/destructivecrystal7", + "x": 90, + "y": 90 + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dislocationrune.json b/src/generated/resources/assets/bloodmagic/blockstates/dislocationrune.json new file mode 100644 index 00000000..e788f3d5 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dislocationrune.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/dislocationrune" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick1.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick1.json new file mode 100644 index 00000000..149337cf --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick1.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/dungeon_brick1" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick2.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick2.json new file mode 100644 index 00000000..2be23091 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick2.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/dungeon_brick2" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick3.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick3.json new file mode 100644 index 00000000..b5c84c5c --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick3.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/dungeon_brick3" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick_assorted.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick_assorted.json new file mode 100644 index 00000000..81dc572a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick_assorted.json @@ -0,0 +1,15 @@ +{ + "variants": { + "": [ + { + "model": "bloodmagic:block/dungeon_brick1" + }, + { + "model": "bloodmagic:block/dungeon_brick2" + }, + { + "model": "bloodmagic:block/dungeon_brick3" + } + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick_gate.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick_gate.json new file mode 100644 index 00000000..4dae3f78 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick_gate.json @@ -0,0 +1,80 @@ +{ + "variants": { + "facing=north,in_wall=false,open=false": { + "model": "bloodmagic:block/dungeon_brick_gate", + "y": 180, + "uvlock": true + }, + "facing=south,in_wall=false,open=false": { + "model": "bloodmagic:block/dungeon_brick_gate", + "uvlock": true + }, + "facing=west,in_wall=false,open=false": { + "model": "bloodmagic:block/dungeon_brick_gate", + "y": 90, + "uvlock": true + }, + "facing=east,in_wall=false,open=false": { + "model": "bloodmagic:block/dungeon_brick_gate", + "y": 270, + "uvlock": true + }, + "facing=north,in_wall=true,open=false": { + "model": "bloodmagic:block/dungeon_brick_gate_wall", + "y": 180, + "uvlock": true + }, + "facing=south,in_wall=true,open=false": { + "model": "bloodmagic:block/dungeon_brick_gate_wall", + "uvlock": true + }, + "facing=west,in_wall=true,open=false": { + "model": "bloodmagic:block/dungeon_brick_gate_wall", + "y": 90, + "uvlock": true + }, + "facing=east,in_wall=true,open=false": { + "model": "bloodmagic:block/dungeon_brick_gate_wall", + "y": 270, + "uvlock": true + }, + "facing=north,in_wall=false,open=true": { + "model": "bloodmagic:block/dungeon_brick_gate_open", + "y": 180, + "uvlock": true + }, + "facing=south,in_wall=false,open=true": { + "model": "bloodmagic:block/dungeon_brick_gate_open", + "uvlock": true + }, + "facing=west,in_wall=false,open=true": { + "model": "bloodmagic:block/dungeon_brick_gate_open", + "y": 90, + "uvlock": true + }, + "facing=east,in_wall=false,open=true": { + "model": "bloodmagic:block/dungeon_brick_gate_open", + "y": 270, + "uvlock": true + }, + "facing=north,in_wall=true,open=true": { + "model": "bloodmagic:block/dungeon_brick_gate_wall_open", + "y": 180, + "uvlock": true + }, + "facing=south,in_wall=true,open=true": { + "model": "bloodmagic:block/dungeon_brick_gate_wall_open", + "uvlock": true + }, + "facing=west,in_wall=true,open=true": { + "model": "bloodmagic:block/dungeon_brick_gate_wall_open", + "y": 90, + "uvlock": true + }, + "facing=east,in_wall=true,open=true": { + "model": "bloodmagic:block/dungeon_brick_gate_wall_open", + "y": 270, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick_stairs.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick_stairs.json new file mode 100644 index 00000000..f36609c1 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=north,half=top,shape=straight": { + "model": "bloodmagic:block/dungeon_brick_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "bloodmagic:block/dungeon_brick_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "bloodmagic:block/dungeon_brick_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "bloodmagic:block/dungeon_brick_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "bloodmagic:block/dungeon_brick_stairs", + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "bloodmagic:block/dungeon_brick_stairs", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "bloodmagic:block/dungeon_brick_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=straight": { + "model": "bloodmagic:block/dungeon_brick_stairs" + }, + "facing=north,half=top,shape=inner_left": { + "model": "bloodmagic:block/dungeon_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "bloodmagic:block/dungeon_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "bloodmagic:block/dungeon_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "bloodmagic:block/dungeon_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "bloodmagic:block/dungeon_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "bloodmagic:block/dungeon_brick_stairs_inner" + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "bloodmagic:block/dungeon_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "bloodmagic:block/dungeon_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "bloodmagic:block/dungeon_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "bloodmagic:block/dungeon_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "bloodmagic:block/dungeon_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "bloodmagic:block/dungeon_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "bloodmagic:block/dungeon_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "bloodmagic:block/dungeon_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "bloodmagic:block/dungeon_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "bloodmagic:block/dungeon_brick_stairs_inner" + }, + "facing=north,half=top,shape=outer_left": { + "model": "bloodmagic:block/dungeon_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "bloodmagic:block/dungeon_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "bloodmagic:block/dungeon_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "bloodmagic:block/dungeon_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "bloodmagic:block/dungeon_brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "bloodmagic:block/dungeon_brick_stairs_outer" + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "bloodmagic:block/dungeon_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "bloodmagic:block/dungeon_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "bloodmagic:block/dungeon_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "bloodmagic:block/dungeon_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "bloodmagic:block/dungeon_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "bloodmagic:block/dungeon_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "bloodmagic:block/dungeon_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "bloodmagic:block/dungeon_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "bloodmagic:block/dungeon_brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "bloodmagic:block/dungeon_brick_stairs_outer" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick_wall.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick_wall.json new file mode 100644 index 00000000..9ffbb2d4 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_brick_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "when": { + "up": "true" + }, + "apply": { + "model": "bloodmagic:block/dungeon_brick_wall_post" + } + }, + { + "when": { + "east": "low" + }, + "apply": { + "model": "bloodmagic:block/dungeon_brick_wall_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "east": "tall" + }, + "apply": { + "model": "bloodmagic:block/dungeon_brick_wall_side_tall", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "north": "low" + }, + "apply": { + "model": "bloodmagic:block/dungeon_brick_wall_side", + "uvlock": true + } + }, + { + "when": { + "north": "tall" + }, + "apply": { + "model": "bloodmagic:block/dungeon_brick_wall_side_tall", + "uvlock": true + } + }, + { + "when": { + "south": "low" + }, + "apply": { + "model": "bloodmagic:block/dungeon_brick_wall_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "south": "tall" + }, + "apply": { + "model": "bloodmagic:block/dungeon_brick_wall_side_tall", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "low" + }, + "apply": { + "model": "bloodmagic:block/dungeon_brick_wall_side", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "west": "tall" + }, + "apply": { + "model": "bloodmagic:block/dungeon_brick_wall_side_tall", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_eye.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_eye.json new file mode 100644 index 00000000..baa1f6ce --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_eye.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/dungeon_eye" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_metal.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_metal.json new file mode 100644 index 00000000..bef6c3bf --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_metal.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/dungeon_metal" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_ore.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_ore.json new file mode 100644 index 00000000..a44ddeae --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/dungeon_ore" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_pillar_cap.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_pillar_cap.json new file mode 100644 index 00000000..cc2654a2 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_pillar_cap.json @@ -0,0 +1,22 @@ +{ + "variants": { + "facing=down": { + "model": "bloodmagic:block/dungeon_pillar_cap_down" + }, + "facing=up": { + "model": "bloodmagic:block/dungeon_pillar_cap" + }, + "facing=north": { + "model": "bloodmagic:block/dungeon_pillar_cap_north" + }, + "facing=south": { + "model": "bloodmagic:block/dungeon_pillar_cap_south" + }, + "facing=west": { + "model": "bloodmagic:block/dungeon_pillar_cap_west" + }, + "facing=east": { + "model": "bloodmagic:block/dungeon_pillar_cap_east" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_pillar_center.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_pillar_center.json new file mode 100644 index 00000000..56d64ff0 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_pillar_center.json @@ -0,0 +1,13 @@ +{ + "variants": { + "axis=x": { + "model": "bloodmagic:block/dungeon_pillar_center_x" + }, + "axis=y": { + "model": "bloodmagic:block/dungeon_pillar_center" + }, + "axis=z": { + "model": "bloodmagic:block/dungeon_pillar_center_z" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_pillar_special.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_pillar_special.json new file mode 100644 index 00000000..6b7e479d --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_pillar_special.json @@ -0,0 +1,13 @@ +{ + "variants": { + "axis=x": { + "model": "bloodmagic:block/dungeon_pillar_special_x" + }, + "axis=y": { + "model": "bloodmagic:block/dungeon_pillar_special" + }, + "axis=z": { + "model": "bloodmagic:block/dungeon_pillar_special_z" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_polished.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_polished.json new file mode 100644 index 00000000..0a334ab3 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_polished.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/dungeon_polished" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_polished_gate.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_polished_gate.json new file mode 100644 index 00000000..467dc35d --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_polished_gate.json @@ -0,0 +1,80 @@ +{ + "variants": { + "facing=north,in_wall=false,open=false": { + "model": "bloodmagic:block/dungeon_polished_gate", + "y": 180, + "uvlock": true + }, + "facing=south,in_wall=false,open=false": { + "model": "bloodmagic:block/dungeon_polished_gate", + "uvlock": true + }, + "facing=west,in_wall=false,open=false": { + "model": "bloodmagic:block/dungeon_polished_gate", + "y": 90, + "uvlock": true + }, + "facing=east,in_wall=false,open=false": { + "model": "bloodmagic:block/dungeon_polished_gate", + "y": 270, + "uvlock": true + }, + "facing=north,in_wall=true,open=false": { + "model": "bloodmagic:block/dungeon_polished_gate_wall", + "y": 180, + "uvlock": true + }, + "facing=south,in_wall=true,open=false": { + "model": "bloodmagic:block/dungeon_polished_gate_wall", + "uvlock": true + }, + "facing=west,in_wall=true,open=false": { + "model": "bloodmagic:block/dungeon_polished_gate_wall", + "y": 90, + "uvlock": true + }, + "facing=east,in_wall=true,open=false": { + "model": "bloodmagic:block/dungeon_polished_gate_wall", + "y": 270, + "uvlock": true + }, + "facing=north,in_wall=false,open=true": { + "model": "bloodmagic:block/dungeon_polished_gate_open", + "y": 180, + "uvlock": true + }, + "facing=south,in_wall=false,open=true": { + "model": "bloodmagic:block/dungeon_polished_gate_open", + "uvlock": true + }, + "facing=west,in_wall=false,open=true": { + "model": "bloodmagic:block/dungeon_polished_gate_open", + "y": 90, + "uvlock": true + }, + "facing=east,in_wall=false,open=true": { + "model": "bloodmagic:block/dungeon_polished_gate_open", + "y": 270, + "uvlock": true + }, + "facing=north,in_wall=true,open=true": { + "model": "bloodmagic:block/dungeon_polished_gate_wall_open", + "y": 180, + "uvlock": true + }, + "facing=south,in_wall=true,open=true": { + "model": "bloodmagic:block/dungeon_polished_gate_wall_open", + "uvlock": true + }, + "facing=west,in_wall=true,open=true": { + "model": "bloodmagic:block/dungeon_polished_gate_wall_open", + "y": 90, + "uvlock": true + }, + "facing=east,in_wall=true,open=true": { + "model": "bloodmagic:block/dungeon_polished_gate_wall_open", + "y": 270, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_polished_stairs.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_polished_stairs.json new file mode 100644 index 00000000..0b576e77 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_polished_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=north,half=top,shape=straight": { + "model": "bloodmagic:block/dungeon_polished_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "bloodmagic:block/dungeon_polished_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "bloodmagic:block/dungeon_polished_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "bloodmagic:block/dungeon_polished_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "bloodmagic:block/dungeon_polished_stairs", + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "bloodmagic:block/dungeon_polished_stairs", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "bloodmagic:block/dungeon_polished_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=straight": { + "model": "bloodmagic:block/dungeon_polished_stairs" + }, + "facing=north,half=top,shape=inner_left": { + "model": "bloodmagic:block/dungeon_polished_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "bloodmagic:block/dungeon_polished_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "bloodmagic:block/dungeon_polished_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "bloodmagic:block/dungeon_polished_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "bloodmagic:block/dungeon_polished_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "bloodmagic:block/dungeon_polished_stairs_inner" + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "bloodmagic:block/dungeon_polished_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "bloodmagic:block/dungeon_polished_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "bloodmagic:block/dungeon_polished_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "bloodmagic:block/dungeon_polished_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "bloodmagic:block/dungeon_polished_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "bloodmagic:block/dungeon_polished_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "bloodmagic:block/dungeon_polished_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "bloodmagic:block/dungeon_polished_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "bloodmagic:block/dungeon_polished_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "bloodmagic:block/dungeon_polished_stairs_inner" + }, + "facing=north,half=top,shape=outer_left": { + "model": "bloodmagic:block/dungeon_polished_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "bloodmagic:block/dungeon_polished_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "bloodmagic:block/dungeon_polished_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "bloodmagic:block/dungeon_polished_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "bloodmagic:block/dungeon_polished_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "bloodmagic:block/dungeon_polished_stairs_outer" + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "bloodmagic:block/dungeon_polished_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "bloodmagic:block/dungeon_polished_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "bloodmagic:block/dungeon_polished_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "bloodmagic:block/dungeon_polished_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "bloodmagic:block/dungeon_polished_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "bloodmagic:block/dungeon_polished_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "bloodmagic:block/dungeon_polished_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "bloodmagic:block/dungeon_polished_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "bloodmagic:block/dungeon_polished_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "bloodmagic:block/dungeon_polished_stairs_outer" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_polished_wall.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_polished_wall.json new file mode 100644 index 00000000..228f6735 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_polished_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "when": { + "up": "true" + }, + "apply": { + "model": "bloodmagic:block/dungeon_polished_wall_post" + } + }, + { + "when": { + "east": "low" + }, + "apply": { + "model": "bloodmagic:block/dungeon_polished_wall_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "east": "tall" + }, + "apply": { + "model": "bloodmagic:block/dungeon_polished_wall_side_tall", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "north": "low" + }, + "apply": { + "model": "bloodmagic:block/dungeon_polished_wall_side", + "uvlock": true + } + }, + { + "when": { + "north": "tall" + }, + "apply": { + "model": "bloodmagic:block/dungeon_polished_wall_side_tall", + "uvlock": true + } + }, + { + "when": { + "south": "low" + }, + "apply": { + "model": "bloodmagic:block/dungeon_polished_wall_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "south": "tall" + }, + "apply": { + "model": "bloodmagic:block/dungeon_polished_wall_side_tall", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "low" + }, + "apply": { + "model": "bloodmagic:block/dungeon_polished_wall_side", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "west": "tall" + }, + "apply": { + "model": "bloodmagic:block/dungeon_polished_wall_side_tall", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_smallbrick.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_smallbrick.json new file mode 100644 index 00000000..c9950639 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_smallbrick.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/dungeon_smallbrick" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_stone.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_stone.json new file mode 100644 index 00000000..7e4a6bec --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_stone.json @@ -0,0 +1,20 @@ +{ + "variants": { + "": [ + { + "model": "bloodmagic:block/dungeon_stone" + }, + { + "model": "bloodmagic:block/dungeon_stone_mirrored" + }, + { + "model": "bloodmagic:block/dungeon_stone", + "y": 180 + }, + { + "model": "bloodmagic:block/dungeon_stone_mirrored", + "y": 180 + } + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_tile.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_tile.json new file mode 100644 index 00000000..c34e5e71 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_tile.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/dungeon_tile" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/dungeon_tilespecial.json b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_tilespecial.json new file mode 100644 index 00000000..1204cd1d --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/dungeon_tilespecial.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/dungeon_tilespecial" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/duskritualstone.json b/src/generated/resources/assets/bloodmagic/blockstates/duskritualstone.json new file mode 100644 index 00000000..474324b4 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/duskritualstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/duskritualstone" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/earthritualstone.json b/src/generated/resources/assets/bloodmagic/blockstates/earthritualstone.json new file mode 100644 index 00000000..75d2c5eb --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/earthritualstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/earthritualstone" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/fireritualstone.json b/src/generated/resources/assets/bloodmagic/blockstates/fireritualstone.json new file mode 100644 index 00000000..33e7f1b2 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/fireritualstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/fireritualstone" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/fungal_charge.json b/src/generated/resources/assets/bloodmagic/blockstates/fungal_charge.json new file mode 100644 index 00000000..88c95e60 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/fungal_charge.json @@ -0,0 +1,29 @@ +{ + "variants": { + "attached=down": { + "model": "bloodmagic:block/fungal_charge", + "x": 180 + }, + "attached=up": { + "model": "bloodmagic:block/fungal_charge" + }, + "attached=north": { + "model": "bloodmagic:block/fungal_charge", + "x": 90 + }, + "attached=south": { + "model": "bloodmagic:block/fungal_charge", + "x": 270 + }, + "attached=west": { + "model": "bloodmagic:block/fungal_charge", + "x": 90, + "y": 270 + }, + "attached=east": { + "model": "bloodmagic:block/fungal_charge", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/largebloodstonebrick.json b/src/generated/resources/assets/bloodmagic/blockstates/largebloodstonebrick.json new file mode 100644 index 00000000..e7f7e853 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/largebloodstonebrick.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/largebloodstonebrick" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/lightritualstone.json b/src/generated/resources/assets/bloodmagic/blockstates/lightritualstone.json new file mode 100644 index 00000000..d198280b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/lightritualstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/lightritualstone" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/masterritualstone.json b/src/generated/resources/assets/bloodmagic/blockstates/masterritualstone.json new file mode 100644 index 00000000..c6276d28 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/masterritualstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/masterritualstone" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/nether_soil.json b/src/generated/resources/assets/bloodmagic/blockstates/nether_soil.json new file mode 100644 index 00000000..de25c31e --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/nether_soil.json @@ -0,0 +1,28 @@ +{ + "variants": { + "moisture=0": { + "model": "bloodmagic:block/nether_soil" + }, + "moisture=1": { + "model": "bloodmagic:block/nether_soil" + }, + "moisture=2": { + "model": "bloodmagic:block/nether_soil" + }, + "moisture=3": { + "model": "bloodmagic:block/nether_soil" + }, + "moisture=4": { + "model": "bloodmagic:block/nether_soil" + }, + "moisture=5": { + "model": "bloodmagic:block/nether_soil" + }, + "moisture=6": { + "model": "bloodmagic:block/nether_soil" + }, + "moisture=7": { + "model": "bloodmagic:block/nether_soil" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/obsidianbrickpath.json b/src/generated/resources/assets/bloodmagic/blockstates/obsidianbrickpath.json new file mode 100644 index 00000000..38e7c85f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/obsidianbrickpath.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/obsidianbrickpath" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/obsidiantilepath.json b/src/generated/resources/assets/bloodmagic/blockstates/obsidiantilepath.json new file mode 100644 index 00000000..185a1d06 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/obsidiantilepath.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/obsidiantilepath" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/orbcapacityrune.json b/src/generated/resources/assets/bloodmagic/blockstates/orbcapacityrune.json new file mode 100644 index 00000000..afa6fb84 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/orbcapacityrune.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/orbcapacityrune" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/rawdemoncrystal.json b/src/generated/resources/assets/bloodmagic/blockstates/rawdemoncrystal.json new file mode 100644 index 00000000..be9a5c2a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/rawdemoncrystal.json @@ -0,0 +1,431 @@ +{ + "multipart": [ + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal1", + "x": 180 + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal1" + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal1", + "x": 90 + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal1", + "x": 270 + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal1", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal1", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal2", + "x": 180 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal2" + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal2", + "x": 90 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal2", + "x": 270 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal2", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal2", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal3", + "x": 180 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal3" + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal3", + "x": 90 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal3", + "x": 270 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal3", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal3", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal4", + "x": 180 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal4" + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal4", + "x": 90 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal4", + "x": 270 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal4", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal4", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal5", + "x": 180 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal5" + } + }, + { + "when": { + "age": "4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal5", + "x": 90 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal5", + "x": 270 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal5", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal5", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal6", + "x": 180 + } + }, + { + "when": { + "age": "5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal6" + } + }, + { + "when": { + "age": "5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal6", + "x": 90 + } + }, + { + "when": { + "age": "5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal6", + "x": 270 + } + }, + { + "when": { + "age": "5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal6", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal6", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal7", + "x": 180 + } + }, + { + "when": { + "age": "6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal7" + } + }, + { + "when": { + "age": "6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal7", + "x": 90 + } + }, + { + "when": { + "age": "6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal7", + "x": 270 + } + }, + { + "when": { + "age": "6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal7", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/defaultcrystal7", + "x": 90, + "y": 90 + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/ritualstone.json b/src/generated/resources/assets/bloodmagic/blockstates/ritualstone.json new file mode 100644 index 00000000..8f09bcba --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/ritualstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/ritualstone" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/sacrificerune.json b/src/generated/resources/assets/bloodmagic/blockstates/sacrificerune.json new file mode 100644 index 00000000..1564fd64 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/sacrificerune.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/sacrificerune" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/selfsacrificerune.json b/src/generated/resources/assets/bloodmagic/blockstates/selfsacrificerune.json new file mode 100644 index 00000000..05620681 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/selfsacrificerune.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/selfsacrificerune" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/shaped_charge.json b/src/generated/resources/assets/bloodmagic/blockstates/shaped_charge.json new file mode 100644 index 00000000..8b918ec1 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/shaped_charge.json @@ -0,0 +1,29 @@ +{ + "variants": { + "attached=down": { + "model": "bloodmagic:block/shaped_charge", + "x": 180 + }, + "attached=up": { + "model": "bloodmagic:block/shaped_charge" + }, + "attached=north": { + "model": "bloodmagic:block/shaped_charge", + "x": 90 + }, + "attached=south": { + "model": "bloodmagic:block/shaped_charge", + "x": 270 + }, + "attached=west": { + "model": "bloodmagic:block/shaped_charge", + "x": 90, + "y": 270 + }, + "attached=east": { + "model": "bloodmagic:block/shaped_charge", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/speedrune.json b/src/generated/resources/assets/bloodmagic/blockstates/speedrune.json new file mode 100644 index 00000000..9ebf2703 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/speedrune.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/speedrune" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/steadfastdemoncrystal.json b/src/generated/resources/assets/bloodmagic/blockstates/steadfastdemoncrystal.json new file mode 100644 index 00000000..f886422f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/steadfastdemoncrystal.json @@ -0,0 +1,431 @@ +{ + "multipart": [ + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal1", + "x": 180 + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal1" + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal1", + "x": 90 + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal1", + "x": 270 + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal1", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal1", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal2", + "x": 180 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal2" + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal2", + "x": 90 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal2", + "x": 270 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal2", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal2", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal3", + "x": 180 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal3" + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal3", + "x": 90 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal3", + "x": 270 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal3", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal3", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal4", + "x": 180 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal4" + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal4", + "x": 90 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal4", + "x": 270 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal4", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal4", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal5", + "x": 180 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal5" + } + }, + { + "when": { + "age": "4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal5", + "x": 90 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal5", + "x": 270 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal5", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal5", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal6", + "x": 180 + } + }, + { + "when": { + "age": "5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal6" + } + }, + { + "when": { + "age": "5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal6", + "x": 90 + } + }, + { + "when": { + "age": "5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal6", + "x": 270 + } + }, + { + "when": { + "age": "5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal6", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal6", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal7", + "x": 180 + } + }, + { + "when": { + "age": "6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal7" + } + }, + { + "when": { + "age": "6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal7", + "x": 90 + } + }, + { + "when": { + "age": "6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal7", + "x": 270 + } + }, + { + "when": { + "age": "6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal7", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/steadfastcrystal7", + "x": 90, + "y": 90 + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/stonebrickpath.json b/src/generated/resources/assets/bloodmagic/blockstates/stonebrickpath.json new file mode 100644 index 00000000..dd693c22 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/stonebrickpath.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/stonebrickpath" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/stonetilepath.json b/src/generated/resources/assets/bloodmagic/blockstates/stonetilepath.json new file mode 100644 index 00000000..e3f65a05 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/stonetilepath.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/stonetilepath" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/veinmine_charge.json b/src/generated/resources/assets/bloodmagic/blockstates/veinmine_charge.json new file mode 100644 index 00000000..beb5ad11 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/veinmine_charge.json @@ -0,0 +1,29 @@ +{ + "variants": { + "attached=down": { + "model": "bloodmagic:block/veinmine_charge", + "x": 180 + }, + "attached=up": { + "model": "bloodmagic:block/veinmine_charge" + }, + "attached=north": { + "model": "bloodmagic:block/veinmine_charge", + "x": 90 + }, + "attached=south": { + "model": "bloodmagic:block/veinmine_charge", + "x": 270 + }, + "attached=west": { + "model": "bloodmagic:block/veinmine_charge", + "x": 90, + "y": 270 + }, + "attached=east": { + "model": "bloodmagic:block/veinmine_charge", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/vengefuldemoncrystal.json b/src/generated/resources/assets/bloodmagic/blockstates/vengefuldemoncrystal.json new file mode 100644 index 00000000..c4f8f825 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/vengefuldemoncrystal.json @@ -0,0 +1,431 @@ +{ + "multipart": [ + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal1", + "x": 180 + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal1" + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal1", + "x": 90 + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal1", + "x": 270 + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal1", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal1", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal2", + "x": 180 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal2" + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal2", + "x": 90 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal2", + "x": 270 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal2", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "1|2|3|4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal2", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal3", + "x": 180 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal3" + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal3", + "x": 90 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal3", + "x": 270 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal3", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "2|3|4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal3", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal4", + "x": 180 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal4" + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal4", + "x": 90 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal4", + "x": 270 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal4", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "3|4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal4", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal5", + "x": 180 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal5" + } + }, + { + "when": { + "age": "4|5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal5", + "x": 90 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal5", + "x": 270 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal5", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "4|5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal5", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "5|6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal6", + "x": 180 + } + }, + { + "when": { + "age": "5|6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal6" + } + }, + { + "when": { + "age": "5|6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal6", + "x": 90 + } + }, + { + "when": { + "age": "5|6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal6", + "x": 270 + } + }, + { + "when": { + "age": "5|6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal6", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "5|6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal6", + "x": 90, + "y": 90 + } + }, + { + "when": { + "age": "6", + "attached": "down" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal7", + "x": 180 + } + }, + { + "when": { + "age": "6", + "attached": "up" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal7" + } + }, + { + "when": { + "age": "6", + "attached": "north" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal7", + "x": 90 + } + }, + { + "when": { + "age": "6", + "attached": "south" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal7", + "x": 270 + } + }, + { + "when": { + "age": "6", + "attached": "west" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal7", + "x": 90, + "y": 270 + } + }, + { + "when": { + "age": "6", + "attached": "east" + }, + "apply": { + "model": "bloodmagic:block/crystal/vengefulcrystal7", + "x": 90, + "y": 90 + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/waterritualstone.json b/src/generated/resources/assets/bloodmagic/blockstates/waterritualstone.json new file mode 100644 index 00000000..35b1d3aa --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/waterritualstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/waterritualstone" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/woodbrickpath.json b/src/generated/resources/assets/bloodmagic/blockstates/woodbrickpath.json new file mode 100644 index 00000000..5b1d7ce2 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/woodbrickpath.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/woodbrickpath" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/woodtilepath.json b/src/generated/resources/assets/bloodmagic/blockstates/woodtilepath.json new file mode 100644 index 00000000..6439e3bc --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/woodtilepath.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/woodtilepath" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/wornstonebrickpath.json b/src/generated/resources/assets/bloodmagic/blockstates/wornstonebrickpath.json new file mode 100644 index 00000000..4c9539bf --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/wornstonebrickpath.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/wornstonebrickpath" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/wornstonetilepath.json b/src/generated/resources/assets/bloodmagic/blockstates/wornstonetilepath.json new file mode 100644 index 00000000..db7e680a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/wornstonetilepath.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/wornstonetilepath" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/lang/en_us.json b/src/generated/resources/assets/bloodmagic/lang/en_us.json new file mode 100644 index 00000000..32f01ab1 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/lang/en_us.json @@ -0,0 +1,503 @@ +{ + "anointment.bloodmagic.bow_power": "Heavy Shot", + "anointment.bloodmagic.fortune": "Fortunate", + "anointment.bloodmagic.hidden_knowledge": "Miner's Secrets", + "anointment.bloodmagic.holy_water": "Holy Light", + "anointment.bloodmagic.looting": "Plundering", + "anointment.bloodmagic.melee_damage": "Whetstone", + "anointment.bloodmagic.quick_draw": "Deft Hands", + "anointment.bloodmagic.silk_touch": "Soft Touch", + "anointment.bloodmagic.smelting": "Heated Tool", + "block.bloodmagic.accelerationrune": "Acceleration Rune", + "block.bloodmagic.airritualstone": "Air Ritual Stone", + "block.bloodmagic.alchemicalreactionchamber": "Alchemical Reaction Chamber", + "block.bloodmagic.alchemytable": "Alchemy Table", + "block.bloodmagic.altar": "Blood Altar", + "block.bloodmagic.altarcapacityrune": "Rune of Capacity", + "block.bloodmagic.bettercapacityrune": "Rune of Augmented Capacity", + "block.bloodmagic.blankrune": "Blank Rune", + "block.bloodmagic.bloodstonebrick": "Bloodstone Brick", + "block.bloodmagic.chargingrune": "Charging Rune", + "block.bloodmagic.corrosivedemoncrystal": "Corrosive Crystal Cluster", + "block.bloodmagic.deforester_charge": "Deforester Charge", + "block.bloodmagic.demoncrucible": "Demon Crucible", + "block.bloodmagic.demoncrystallizer": "Demon Crystallizer", + "block.bloodmagic.destructivedemoncrystal": "Destructive Crystal Cluster", + "block.bloodmagic.dislocationrune": "Displacement Rune", + "block.bloodmagic.dungeon_brick1": "Demon Bricks", + "block.bloodmagic.dungeon_brick2": "Offset Demon Bricks", + "block.bloodmagic.dungeon_brick3": "Long Demon Bricks", + "block.bloodmagic.dungeon_brick_assorted": "Assorted Demon Bricks", + "block.bloodmagic.dungeon_brick_gate": "Demon Brick Gate", + "block.bloodmagic.dungeon_brick_stairs": "Demon Brick Stairs", + "block.bloodmagic.dungeon_brick_wall": "Demon Brick Wall", + "block.bloodmagic.dungeon_eye": "Demon Eye", + "block.bloodmagic.dungeon_ore": "Demonite", + "block.bloodmagic.dungeon_pillar_cap": "Demon Stone Pillar Cap", + "block.bloodmagic.dungeon_pillar_center": "Demon Stone Pillar", + "block.bloodmagic.dungeon_pillar_special": "Accented Demon Stone Pillar", + "block.bloodmagic.dungeon_polished": "Polished Demon Stone", + "block.bloodmagic.dungeon_polished_gate": "Demon Stone Gate", + "block.bloodmagic.dungeon_polished_stairs": "Demon Stone Stairs", + "block.bloodmagic.dungeon_polished_wall": "Demon Stone Wall", + "block.bloodmagic.dungeon_smallbrick": "Small Demon Bricks", + "block.bloodmagic.dungeon_stone": "Demon Stone", + "block.bloodmagic.dungeon_tile": "Demon Stone Tiles", + "block.bloodmagic.dungeon_tilespecial": "Accented Demon Stone Tiles", + "block.bloodmagic.duskritualstone": "Dusk Ritual Stone", + "block.bloodmagic.earthritualstone": "Earth Ritual Stone", + "block.bloodmagic.fireritualstone": "Fire Ritual Stone", + "block.bloodmagic.fungal_charge": "Fungal Charge", + "block.bloodmagic.incensealtar": "Incense Altar", + "block.bloodmagic.largebloodstonebrick": "Large Bloodstone Brick", + "block.bloodmagic.lightritualstone": "Dawn Ritual Stone", + "block.bloodmagic.masterritualstone": "Master Ritual Stone", + "block.bloodmagic.obsidianbrickpath": "Obsidian Path", + "block.bloodmagic.obsidiantilepath": "Tiled Obsidian Path", + "block.bloodmagic.orbcapacityrune": "Rune of the Orb", + "block.bloodmagic.rawdemoncrystal": "Raw Crystal Cluster", + "block.bloodmagic.ritualstone": "Ritual Stone", + "block.bloodmagic.sacrificerune": "Rune of Sacrifice", + "block.bloodmagic.selfsacrificerune": "Rune of Self Sacrifice", + "block.bloodmagic.shaped_charge": "Shaped Charge", + "block.bloodmagic.soulforge": "Hellfire Forge", + "block.bloodmagic.speedrune": "Speed Rune", + "block.bloodmagic.steadfastdemoncrystal": "Steadfast Crystal Cluster", + "block.bloodmagic.stonebrickpath": "Stone Path", + "block.bloodmagic.stonetilepath": "Tiled Stone Path", + "block.bloodmagic.veinmine_charge": "Controlled Charge", + "block.bloodmagic.vengefuldemoncrystal": "Vengeful Crystal Cluster", + "block.bloodmagic.waterritualstone": "Water Ritual Stone", + "block.bloodmagic.woodbrickpath": "Wooden Path", + "block.bloodmagic.woodtilepath": "Tiled Wooden Path", + "block.bloodmagic.wornstonebrickpath": "Worn Stone Path", + "block.bloodmagic.wornstonetilepath": "Tiled Worn Stone Path", + "bloodmagic.keybind.cycle_holding_neg": "Cycle Sigil (-)", + "bloodmagic.keybind.cycle_holding_pos": "Cycle Sigil (+)", + "bloodmagic.keybind.open_holding": "Open Sigil of Holding", + "chat.bloodmagic.damageSource": "%s's soul became too weak", + "chat.bloodmagic.living_upgrade_level_increase": "%s has leveled up to %d", + "chat.bloodmagic.ritual.activate": "A rush of energy flows through the ritual!", + "chat.bloodmagic.ritual.notValid": "You feel that these runes are not configured correctly...", + "chat.bloodmagic.ritual.prevent": "The ritual is actively resisting you!", + "chat.bloodmagic.ritual.weak": "You feel a push, but are too weak to perform this ritual.", + "gui.bloodmagic.empty": "Empty", + "guide.bloodmagic.landing_text": "\"It is my dear hope that by holding this tome in your hands, I may impart the knowledge of the lost art that is Blood Magic\"$(br)$(o)- Magus Arcana$()", + "guide.bloodmagic.name": "Sanguine Scientiem", + "hud.bloodmagic.inactive": "Inactive", + "item.bloodmagic.activationcrystalawakened": "Awakened Activation Crystal", + "item.bloodmagic.activationcrystalcreative": "Creative Activation Crystal", + "item.bloodmagic.activationcrystalweak": "Weak Activation Crystal", + "item.bloodmagic.airscribetool": "Inscription Tool: Air", + "item.bloodmagic.airsigil": "Air Sigil", + "item.bloodmagic.apprenticebloodorb": "Apprentice Blood Orb", + "item.bloodmagic.arcaneashes": "Arcane Ashes", + "item.bloodmagic.basemonstersoul": "Demon Will", + "item.bloodmagic.basemonstersoul_corrosive": "Demon Will", + "item.bloodmagic.basemonstersoul_destructive": "Demon Will", + "item.bloodmagic.basemonstersoul_steadfast": "Demon Will", + "item.bloodmagic.basemonstersoul_vengeful": "Demon Will", + "item.bloodmagic.basiccuttingfluid": "Basic Cutting Fluid", + "item.bloodmagic.blankslate": "Blank Slate", + "item.bloodmagic.bloodlightsigil": "Sigil of the Blood Lamp", + "item.bloodmagic.bow_power_anointment": "Iron Tip", + "item.bloodmagic.coalsand": "Coal Sand", + "item.bloodmagic.corrosivecrystal": "Corrosive Will Crystal", + "item.bloodmagic.crystalline_resonator": "Crystalline Resonator", + "item.bloodmagic.daggerofsacrifice": "Dagger of Sacrifice", + "item.bloodmagic.defaultcrystal": "Demon Will Crystal", + "item.bloodmagic.demonslate": "Demonic Slate", + "item.bloodmagic.destructivecrystal": "Destructive Will Crystal", + "item.bloodmagic.divinationsigil": "Divination Sigil", + "item.bloodmagic.duskscribetool": "Inscription Tool: Dusk", + "item.bloodmagic.earthscribetool": "Inscription Tool: Earth", + "item.bloodmagic.etherealslate": "Ethereal Slate", + "item.bloodmagic.experiencebook": "Tome of Peritia", + "item.bloodmagic.explosivepowder": "Explosive Powder", + "item.bloodmagic.firescribetool": "Inscription Tool: Fire", + "item.bloodmagic.fortune_anointment": "Fortuna Extract", + "item.bloodmagic.fragment_netherite_scrap": "Ancient Debris Fragment", + "item.bloodmagic.furnacecell_primitive": "Primitive Fuel Cell", + "item.bloodmagic.goldfragment": "Gold Ore Fragment", + "item.bloodmagic.goldgravel": "Gold Gravel", + "item.bloodmagic.goldsand": "Gold Sand", + "item.bloodmagic.gravel_netherite_scrap": "Ancient Debris Gravel", + "item.bloodmagic.growthsigil": "Sigil of the Green Grove", + "item.bloodmagic.hidden_knowledge_anointment": "Miner's Secrets", + "item.bloodmagic.holy_water_anointment": "Holy Water", + "item.bloodmagic.icesigil": "Sigil of the Frozen Lake", + "item.bloodmagic.infusedslate": "Imbued Slate", + "item.bloodmagic.ironfragment": "Iron Ore Fragment", + "item.bloodmagic.irongravel": "Iron Gravel", + "item.bloodmagic.ironsand": "Iron Sand", + "item.bloodmagic.lavacrystal": "Lava Crystal", + "item.bloodmagic.lavasigil": "Lava Sigil", + "item.bloodmagic.life_essence_bucket": "Bucket of Life", + "item.bloodmagic.livingboots": "Living Boots", + "item.bloodmagic.livinghelmet": "Living Helmet", + "item.bloodmagic.livingleggings": "Living Leggings", + "item.bloodmagic.livingplate": "Living Chestplate", + "item.bloodmagic.looting_anointment": "Plunderer's Glint", + "item.bloodmagic.magicianbloodorb": "Magician Blood Orb", + "item.bloodmagic.masterbloodorb": "Master Blood Orb", + "item.bloodmagic.melee_anointment": "Honing Oil", + "item.bloodmagic.miningsigil": "Sigil of the Fast Miner", + "item.bloodmagic.plantoil": "Plant Oil", + "item.bloodmagic.primitive_crystalline_resonator": "Primitive Resonator", + "item.bloodmagic.primitive_explosive_cell": "Primitive Explosive Cell", + "item.bloodmagic.primitive_hydration_cell": "Primitive Hydration Cell", + "item.bloodmagic.quick_draw_anointment": "Dexterity Alkahest", + "item.bloodmagic.reagentair": "Air Reagent", + "item.bloodmagic.reagentbinding": "Binding Reagent", + "item.bloodmagic.reagentbloodlight": "Blood Lamp Reagent", + "item.bloodmagic.reagentfastminer": "Mining Reagent", + "item.bloodmagic.reagentgrowth": "Growth Reagent", + "item.bloodmagic.reagentholding": "Holding Reagent", + "item.bloodmagic.reagentlava": "Lava Reagent", + "item.bloodmagic.reagentmagnetism": "Magnetism Reagent", + "item.bloodmagic.reagentsight": "Sight Reagent", + "item.bloodmagic.reagentvoid": "Void Reagent", + "item.bloodmagic.reagentwater": "Water Reagent", + "item.bloodmagic.reinforcedslate": "Reinforced Slate", + "item.bloodmagic.ritualdiviner": "Ritual Diviner", + "item.bloodmagic.ritualdivinerdusk": "Ritual Diviner [Dusk]", + "item.bloodmagic.ritualtinkerer": "Ritual Tinkerer", + "item.bloodmagic.sacrificialdagger": "Sacrificial Knife", + "item.bloodmagic.saltpeter": "Saltpeter", + "item.bloodmagic.sand_netherite": "Netherite Scrap Sand", + "item.bloodmagic.sanguinereverter": "Sanguine Reverter", + "item.bloodmagic.seersigil": "Seer's Sigil", + "item.bloodmagic.sigilofholding": "Sigil of Holding", + "item.bloodmagic.sigilofmagnetism": "Sigil of Magnetism", + "item.bloodmagic.silk_touch_anointment": "Soft Coating", + "item.bloodmagic.slate_ampoule": "Slate Ampoule", + "item.bloodmagic.slate_vial": "Slate-infused Vial", + "item.bloodmagic.smelting_anointment": "Slow-burning Oil", + "item.bloodmagic.soulaxe": "Sentient Axe", + "item.bloodmagic.soulgemcommon": "Common Tartaric Gem", + "item.bloodmagic.soulgemgreater": "Greater Tartaric Gem", + "item.bloodmagic.soulgemlesser": "Lesser Tartaric Gem", + "item.bloodmagic.soulgempetty": "Petty Tartaric Gem", + "item.bloodmagic.soulpickaxe": "Sentient Pickaxe", + "item.bloodmagic.soulscythe": "Sentient Scythe", + "item.bloodmagic.soulshovel": "Sentient Shovel", + "item.bloodmagic.soulsnare": "Soul Snare", + "item.bloodmagic.soulsword": "Sentient Sword", + "item.bloodmagic.steadfastcrystal": "Steadfast Will Crystal", + "item.bloodmagic.sulfur": "Sulfur", + "item.bloodmagic.throwing_dagger": "Iron Throwing Dagger", + "item.bloodmagic.throwing_dagger_syringe": "Syringe Throwing Dagger", + "item.bloodmagic.upgradetome": "Living Armour Upgrade Tome", + "item.bloodmagic.vengefulcrystal": "Vengeful Will Crystal", + "item.bloodmagic.voidsigil": "Void Sigil", + "item.bloodmagic.waterscribetool": "Inscription Tool: Water", + "item.bloodmagic.watersigil": "Water Sigil", + "item.bloodmagic.weakbloodorb": "Weak Blood Orb", + "item.bloodmagic.weakbloodshard": "Weak Blood Shard", + "itemGroup.bloodmagic.creativeTab": "Blood Magic", + "itemGroup.bloodmagictab": "Blood Magic", + "jei.bloodmagic.recipe.alchemyarraycrafting": "Alchemy Array", + "jei.bloodmagic.recipe.alchemytable": "Alchemy Table", + "jei.bloodmagic.recipe.altar": "Blood Altar", + "jei.bloodmagic.recipe.arc": "ARC Recipe", + "jei.bloodmagic.recipe.arcfurnace": "ARC Furnace Recipe", + "jei.bloodmagic.recipe.consumptionrate": "Consumption: %s LP/t", + "jei.bloodmagic.recipe.drainrate": "Drain: %s LP/t", + "jei.bloodmagic.recipe.lpDrained": "Drained: %s LP", + "jei.bloodmagic.recipe.minimumsouls": "Minimum: %s Will", + "jei.bloodmagic.recipe.requiredlp": "LP: %d", + "jei.bloodmagic.recipe.requiredtier": "Tier: %d", + "jei.bloodmagic.recipe.soulforge": "Hellfire Forge", + "jei.bloodmagic.recipe.soulsdrained": "Drained: %s Will", + "jei.bloodmagic.recipe.ticksRequired": "Time: %sTicks", + "key.bloodmagic.category": "Blood Magic", + "living_upgrade.bloodmagic.arrow_protect": "Pin Cushion", + "living_upgrade.bloodmagic.arrow_shot": "Trick Shot", + "living_upgrade.bloodmagic.battleHunger": "Battle Hungry", + "living_upgrade.bloodmagic.crippledArm": "Crippled Arm", + "living_upgrade.bloodmagic.critical_strike": "True Strike", + "living_upgrade.bloodmagic.digSlowdown": "Weakened Pick", + "living_upgrade.bloodmagic.digging": "Dwarven Might", + "living_upgrade.bloodmagic.disoriented": "Disoriented", + "living_upgrade.bloodmagic.elytra": "Elytra", + "living_upgrade.bloodmagic.experienced": "Experienced", + "living_upgrade.bloodmagic.fall_protect": "Soft Fall", + "living_upgrade.bloodmagic.fire_resist": "Gift of Ignis", + "living_upgrade.bloodmagic.grave_digger": "Grave Digger", + "living_upgrade.bloodmagic.grim_reaper": "Grim Reaper's Sprint", + "living_upgrade.bloodmagic.health": "Healthy", + "living_upgrade.bloodmagic.jump": "Strong Legs", + "living_upgrade.bloodmagic.knockback_resist": "Body Builder", + "living_upgrade.bloodmagic.meleeDecrease": "Dulled Blade", + "living_upgrade.bloodmagic.melee_damage": "Fierce Strike", + "living_upgrade.bloodmagic.night_sight": "Nocturnal Prowess", + "living_upgrade.bloodmagic.physical_protect": "Tough", + "living_upgrade.bloodmagic.poison_resist": "Poison Resistance", + "living_upgrade.bloodmagic.quenched": "Quenched", + "living_upgrade.bloodmagic.repair": "Repairing", + "living_upgrade.bloodmagic.revealing": "Revealing", + "living_upgrade.bloodmagic.self_sacrifice": "Tough Palms", + "living_upgrade.bloodmagic.slippery": "Loose Traction", + "living_upgrade.bloodmagic.slowHeal": "Diseased", + "living_upgrade.bloodmagic.slowness": "Limp Leg", + "living_upgrade.bloodmagic.solar_powered": "Solar Powered", + "living_upgrade.bloodmagic.speed": "Quick Feet", + "living_upgrade.bloodmagic.sprint_attack": "Charging Strike", + "living_upgrade.bloodmagic.step_assist": "Step Assist", + "living_upgrade.bloodmagic.stormTrooper": "Storm Trooper", + "living_upgrade.bloodmagic.thaumRunicShielding": "Runic Shielding", + "ritual.bloodmagic.altarBuilderRitual": "The Assembly of the High Altar", + "ritual.bloodmagic.altarBuilderRitual.info": "Builds an altar out of the components inside of the connected inventory.", + "ritual.bloodmagic.animalGrowthRitual": "Ritual of the Shepherd", + "ritual.bloodmagic.animalGrowthRitual.chest.info": "(Chest) Chest for breeding items if properly augmented.", + "ritual.bloodmagic.animalGrowthRitual.corrosive.info": "(Corrosive) Unimplemented.", + "ritual.bloodmagic.animalGrowthRitual.default.info": "(Raw) Increases the speed of the ritual based on the total Will in the Aura.", + "ritual.bloodmagic.animalGrowthRitual.destructive.info": "(Destructive) Causes adults that have not bred lately to run at mobs and explode.", + "ritual.bloodmagic.animalGrowthRitual.growing.info": "(Growth) Animals within this range will grow much faster.", + "ritual.bloodmagic.animalGrowthRitual.info": "Increases the maturity rate of baby animals within its range.", + "ritual.bloodmagic.animalGrowthRitual.steadfast.info": "(Steadfast) Automatically breeds adults within its area using items in the connected chest.", + "ritual.bloodmagic.animalGrowthRitual.vengeful.info": "(Vengeful) Decreases the time it takes for adults to breed again.", + "ritual.bloodmagic.armourEvolveRitual": "Ritual of Living Evolution", + "ritual.bloodmagic.armourEvolveRitual.info": "Increases the amount of maximum Upgrade Points on your Living Armor to 300.", + "ritual.bloodmagic.blockRange.firstBlock": "First block for new range stored.", + "ritual.bloodmagic.blockRange.inactive": "The ritual stone is currently inactive, and cannot have its range modified.", + "ritual.bloodmagic.blockRange.noRange": "The range was not properly chosen.", + "ritual.bloodmagic.blockRange.success": "New range successfully set!", + "ritual.bloodmagic.blockRange.tooBig": "The block range given is too big! Needs to be at most %s blocks.", + "ritual.bloodmagic.blockRange.tooFar": "The block range given is too far! Needs to be within a vertical range of %s blocks and a horizontal range of %s blocks.", + "ritual.bloodmagic.cobblestoneRitual": "Le Vulcanos Frigius", + "ritual.bloodmagic.condorRitual.info": "Provides flight in an area around the ritual.", + "ritual.bloodmagic.containmentRitual": "Ritual of Containment", + "ritual.bloodmagic.containmentRitual.containmentRange.info": "(Containment) The area of the ritual where mobs will be pulled. All mobs are pulled towards the master ritual stone, regardless of where this area is.", + "ritual.bloodmagic.containmentRitual.info": "Pulls all mobs within its area towards the master ritual stone.", + "ritual.bloodmagic.crushingRitual": "Ritual of the Crusher", + "ritual.bloodmagic.crushingRitual.chest.info": "(Chest) The location of the inventory that the ritual will place the broken blocks into.", + "ritual.bloodmagic.crushingRitual.corrosive.info": "(Corrosive) All blocks are broken to be processed with a form of cutting fluid. Overrides Silk Touch where applicable.", + "ritual.bloodmagic.crushingRitual.crushingRange.info": "(Crushing) The blocks that the ritual will break.", + "ritual.bloodmagic.crushingRitual.default.info": "(Raw) Increases the speed of the ritual based on total Will.", + "ritual.bloodmagic.crushingRitual.destructive.info": "(Destructive) Blocks are broken down forcefully: all blocks broken are affected by Fortune III.", + "ritual.bloodmagic.crushingRitual.info": "Breaks blocks within its crushing range and places the items into the linked chest.", + "ritual.bloodmagic.crushingRitual.steadfast.info": "(Steadfast) Causes all blocks that are broken to be picked up with silk touch. Overrides Fortune where applicable.", + "ritual.bloodmagic.crushingRitual.vengeful.info": "(Vengeful) Compresses the inventory on successful operation. Currently only does one compression per operation.", + "ritual.bloodmagic.crystalHarvestRitual": "Crack of the Fractured Crystal", + "ritual.bloodmagic.crystalHarvestRitual.crystal.info": "(Crystal) All Demon Will crystal clusters have a single crystal broken off, spawning the crystal into the world. If there is only one crystal on the cluster, it will not break it.", + "ritual.bloodmagic.crystalHarvestRitual.info": "Breaks Demon Will crystal clusters within its range, dropping the results on top of the crystals.", + "ritual.bloodmagic.crystalSplitRitual": "Resonance of the Faceted Crystal", + "ritual.bloodmagic.crystalSplitRitual.info": "Splits apart a well-grown Raw crystal cluster into seperal aspected crystal clusters.", + "ritual.bloodmagic.ellipseRitual": "Focus of the Ellipsoid", + "ritual.bloodmagic.ellipseRitual.chest.info": "(Chest) The location of the inventory that the ritual will grab blocks from to place in the world.", + "ritual.bloodmagic.ellipseRitual.info": "Creates a hollow spheroid around the ritual using the blocks in the attached chest.", + "ritual.bloodmagic.ellipseRitual.spheroidRange.info": "(Placement) The range that the ritual will place its blocks in. Spheroid is centered on the ritual - if one side is shorter than the side opposite the spheroid is truncated.", + "ritual.bloodmagic.eternalSoulRitual.info": "Capable of transferring Life Essence from a Network back into an Altar at a cost.", + "ritual.bloodmagic.expulsionRitual": "Aura of Expulsion", + "ritual.bloodmagic.expulsionRitual.expulsionRange.info": "(Expulsion) The area from which players that are not owner or have an orb in the chest will be teleported away from.", + "ritual.bloodmagic.expulsionRitual.info": "Expels players from its range that are neither the owner nor have a bound blood orb in the chest on top of the master ritual stone.", + "ritual.bloodmagic.featheredKnifeRitual": "Ritual of the Feathered Knife", + "ritual.bloodmagic.featheredKnifeRitual.altar.info": "(Altar) This range defines the area that the ritual searches for the blood altar. Changing this will either expand or limit the range to a certain region.", + "ritual.bloodmagic.featheredKnifeRitual.corrosive.info": "(Corrosive) Uses the player's Incense to increase the yield.", + "ritual.bloodmagic.featheredKnifeRitual.damage.info": "(Damage) This defines where the ritual will damage a player. Players inside of this range will receive damage over time up to the specified limit.", + "ritual.bloodmagic.featheredKnifeRitual.default.info": "(Raw) Increases the speed of the ritual based on the total Will in the Aura.", + "ritual.bloodmagic.featheredKnifeRitual.destructive.info": "(Destructive) Increases the yield of the ritual based on total Will.", + "ritual.bloodmagic.featheredKnifeRitual.info": "Drains health from players in its area and puts the LP into a nearby blood altar.", + "ritual.bloodmagic.featheredKnifeRitual.steadfast.info": "(Steadfast) Sets the minimum health for sacrificing from 30%% to 70%%.", + "ritual.bloodmagic.featheredKnifeRitual.vengeful.info": "(Vengeful) Sets the minimum health for sacrificing to 10%%. Overridden by Steadfast for the Owner if active.", + "ritual.bloodmagic.fellingRitual": "The Timberman", + "ritual.bloodmagic.fellingRitual.chest.info": "(Chest) The location of the inventory that the ritual will place the results into.", + "ritual.bloodmagic.fellingRitual.fellingRange.info": "(Cutting) The range that the ritual will search out logs and leaves in order to cut down.", + "ritual.bloodmagic.fellingRitual.info": "A standard tree-cutting machine, this ritual will cut down all trees and leaves within its area and collect the drops.", + "ritual.bloodmagic.forsakenSoulRitual": "Gathering of the Forsaken Souls", + "ritual.bloodmagic.forsakenSoulRitual.crystal.info": "(Crystal) Demon Crystals in this range receive an increase in growth speed when a mob is killed by the ritual.", + "ritual.bloodmagic.forsakenSoulRitual.damage.info": "(Damage) Mobs within this range will be slowly damaged, and when killed will grow the crystals.", + "ritual.bloodmagic.forsakenSoulRitual.info": "Damages mobs within its damage range and when the mob dies a demon crystal within its crystal range will be grown.", + "ritual.bloodmagic.fullStomachRitual": "Ritual of the Satiated Stomach", + "ritual.bloodmagic.fullStomachRitual.chest.info": "(Chest) The location of the inventory that the ritual will grab food from to feed players in range.", + "ritual.bloodmagic.fullStomachRitual.fillRange.info": "(Feeding) The range that the ritual will look at to feed players.", + "ritual.bloodmagic.fullStomachRitual.info": "Takes food from the linked chest and fills the player's saturation with it.", + "ritual.bloodmagic.greenGroveRitual": "Ritual of the Green Grove", + "ritual.bloodmagic.greenGroveRitual.corrosive.info": "(Corrosive) Entities within range are attacked by nearby plants, leeching away their life.", + "ritual.bloodmagic.greenGroveRitual.default.info": "(Raw) Increases the speed of all of the ritual operations depending on the total Will in the Aura.", + "ritual.bloodmagic.greenGroveRitual.destructive.info": "(Destructive) Growing range is increased based on total Will.", + "ritual.bloodmagic.greenGroveRitual.growing.info": "(Growth) The area that the ritual will grow plants in.", + "ritual.bloodmagic.greenGroveRitual.hydrate.info": "(Steadfast) Blocks within this range are rehydrated into farmland, and seeds within the area are planted nearby.", + "ritual.bloodmagic.greenGroveRitual.info": "Grows crops within its area.", + "ritual.bloodmagic.greenGroveRitual.leech.info": "(Corrosive) Entities in this area have their life drained to grow nearby crops.", + "ritual.bloodmagic.greenGroveRitual.steadfast.info": "(Steadfast) Seeds are replanted and blocks are hydrated within the Hydration range.", + "ritual.bloodmagic.greenGroveRitual.vengeful.info": "(Vengeful) Increases the rate that a growth tick is successful.", + "ritual.bloodmagic.groundingRitual.corrosive.info": "(Corrosive) Disables gravity (+Vengeful) Applies Levitation.", + "ritual.bloodmagic.groundingRitual.default.info": "(Raw) Affects players.", + "ritual.bloodmagic.groundingRitual.destructive.info": "(Destructive) Applies Heavy Heart (increases fall damage) (+Vengeful) Stronger effect.", + "ritual.bloodmagic.groundingRitual.info": "Forces entities on the ground and prevents jumping.", + "ritual.bloodmagic.groundingRitual.steadfast.info": "(Steadfast) Affects Bosses. Doesn't affect bosses that are immune against motion change or immune against potions (except Wither and Ender Dragon).", + "ritual.bloodmagic.groundingRitual.vengeful.info": "(Vengeful) Makes effects stronger. (+Corrosive) Applies Levitation. (+Destructive) Higher Heavy Heart amplifier.", + "ritual.bloodmagic.harvestRitual": "Reap of the Harvest Moon", + "ritual.bloodmagic.harvestRitual.harvestRange.info": "(Harvesting) Plants within this range will be harvested.", + "ritual.bloodmagic.harvestRitual.info": "Harvests plants within its range, dropping the results on the ground.", + "ritual.bloodmagic.interdictionRitual": "Ritual of Interdiction", + "ritual.bloodmagic.interdictionRitual.info": "Pushes all mobs within its area away from the master ritual stone.", + "ritual.bloodmagic.interdictionRitual.interdictionRange.info": "(Push) The area of the ritual where mobs will be pushed. All mobs are pushed away from the master ritual stone, regardless of where this area is.", + "ritual.bloodmagic.jumpRitual": "Ritual of the High Jump", + "ritual.bloodmagic.jumpRitual.info": "Causes entities to leap up into the air.", + "ritual.bloodmagic.jumpRitual.jumpRange.info": "(Jumping) Entities in this range will be launched in the air.", + "ritual.bloodmagic.lavaRitual": "Serenade of the Nether", + "ritual.bloodmagic.lavaRitual.corrosive.info": "(Corrosive) Entities within range that are immune to fire are damaged severely.", + "ritual.bloodmagic.lavaRitual.default.info": "(Raw) Decreases the LP cost of placing lava and allows lava to be placed insided of a linked container.", + "ritual.bloodmagic.lavaRitual.destructive.info": "(Destructive) Lava placement range is increased based on total Will.", + "ritual.bloodmagic.lavaRitual.fireDamage.info": "(Corrosive) Entities within this range that are immune to fire damage are hurt proportional to the Will.", + "ritual.bloodmagic.lavaRitual.fireFuse.info": "(Vengeful) Entities in this range are afflicted by Fire Fuse.", + "ritual.bloodmagic.lavaRitual.fireResist.info": "(Steadfast) Players in this range have Fire Resist applied.", + "ritual.bloodmagic.lavaRitual.info": "Generates a source of lava from the master ritual stone.", + "ritual.bloodmagic.lavaRitual.lavaRange.info": "(Lava) The area that the ritual will place lava source blocks.", + "ritual.bloodmagic.lavaRitual.lavaTank.info": "(Raw) The tank that the ritual will place lava into.", + "ritual.bloodmagic.lavaRitual.steadfast.info": "(Steadfast) Players within a designated range have Fire Resistance applied to them.", + "ritual.bloodmagic.lavaRitual.vengeful.info": "(Vengeful) Entities within range have Fire Fuse applied to them.", + "ritual.bloodmagic.magneticRitual": "Ritual of Magnetism", + "ritual.bloodmagic.magneticRitual.info": "Pulls up ores from the ground and puts them into its placement range.", + "ritual.bloodmagic.magneticRitual.placementRange.info": "(Placement) The range that the ritual will place the grabbed ores into.", + "ritual.bloodmagic.meteorRitual.info": "Consumes an item inside of its item range to summon a meteor full of resources from the sky, aimed directly at the ritual.", + "ritual.bloodmagic.placerRitual": "The Filler", + "ritual.bloodmagic.placerRitual.chest.info": "(Chest) The location of the inventory that the ritual will grab blocks from to place in the world.", + "ritual.bloodmagic.placerRitual.info": "Grabs blocks that are inside of the connected inventory and places them into the world.", + "ritual.bloodmagic.placerRitual.placerRange.info": "(Placement) The range that the ritual will place its blocks in.", + "ritual.bloodmagic.portalRitual": "The Gate of the Fold", + "ritual.bloodmagic.portalRitual.info": "Creates a portal network based on the activator and the immediately surrounding blocks. Blocks can be changed after activation without changing the network of portals, and portals with the same \"key\" will link together.", + "ritual.bloodmagic.pumpRitual": "Hymn of Siphoning", + "ritual.bloodmagic.pumpRitual.info": "Looks around the world and grabs fluids from the defined area. Will only remove and put the fluid into the connected tank if the tank has at least a bucket's worth of the same fluid.", + "ritual.bloodmagic.pumpRitual.pumpRange.info": "(Pump) The region that the ritual will look for fluids to grab from the world.", + "ritual.bloodmagic.regenerationRitual": "Ritual of Regeneration", + "ritual.bloodmagic.regenerationRitual.corrosive.info": "(Corrosive) Steals health from non-players inside of its Vampirism range and directly heals players.", + "ritual.bloodmagic.regenerationRitual.default.info": "(Raw)", + "ritual.bloodmagic.regenerationRitual.destructive.info": "(Destructive)", + "ritual.bloodmagic.regenerationRitual.heal.info": "(Healing) Entities within this range will receive a regeneration buff.", + "ritual.bloodmagic.regenerationRitual.info": "Casts regeneration on entities within its range if they are missing health.", + "ritual.bloodmagic.regenerationRitual.steadfast.info": "(Steadfast)", + "ritual.bloodmagic.regenerationRitual.vampire.info": "(Vampirism) Mobs within this range have their health syphoned to heal players in the Healing range.", + "ritual.bloodmagic.regenerationRitual.vengeful.info": "(Vengeful)", + "ritual.bloodmagic.speedRitual": "Ritual of Speed", + "ritual.bloodmagic.speedRitual.default.info": "(Raw) Increases the velocity caused by the ritual based on total Will.", + "ritual.bloodmagic.speedRitual.destructive.info": "(Destructive) Prevents child mobs and players from being transported. Players are transported if paired with Vengeful.", + "ritual.bloodmagic.speedRitual.info": "Launches players within its range in the direction of the ritual.", + "ritual.bloodmagic.speedRitual.sanicRange.info": "(Speed) All entities within this area are launched in the direction of the arrow formed by the ritual.", + "ritual.bloodmagic.speedRitual.vengeful.info": "(Vengeful) Prevents adult mobs and players from being transported. Players are transported if paired with Destructive.", + "ritual.bloodmagic.suppressionRitual": "Ritual of Suppression", + "ritual.bloodmagic.suppressionRitual.info": "Suppresses fluids within its range - deactivating the ritual returns the fluids back to the world.", + "ritual.bloodmagic.suppressionRitual.suppressionRange.info": "(Suppress) All liquids within the range are suppressed.", + "ritual.bloodmagic.testRitual": "Test Ritual", + "ritual.bloodmagic.upgradeRemoveRitual": "Sound of the Cleansing Soul", + "ritual.bloodmagic.upgradeRemoveRitual.info": "Removes all upgrades (and downgrades) from your Living Armor and gives you the corresponding Upgrade (and Downgrade) Tomes. These Tomes can be used to be applied to your Living Armor again.", + "ritual.bloodmagic.waterRitual": "Ritual of the Full Spring", + "ritual.bloodmagic.waterRitual.info": "Generates a source of water from the master ritual stone.", + "ritual.bloodmagic.waterRitual.waterRange.info": "(Water) The area that the ritual will place water source blocks.", + "ritual.bloodmagic.waterRitual.waterTank.info": "(Raw) The tank that the ritual will place water into.", + "ritual.bloodmagic.wellOfSufferingRitual": "Well of Suffering", + "ritual.bloodmagic.wellOfSufferingRitual.altar.info": "(Altar) This range defines the area that the ritual searches for the blood altar. Changing this will either expand or limit the range to a certain region.", + "ritual.bloodmagic.wellOfSufferingRitual.damage.info": "(Damage) This defines where the ritual will damage a mob. All mobs inside of this range (except for players) will receive damage over time.", + "ritual.bloodmagic.wellOfSufferingRitual.info": "Attacks mobs within its damage zone and puts the LP into a nearby blood altar.", + "ritual.bloodmagic.willConfig.set": "The ritual will use these Demon Will types: %s", + "ritual.bloodmagic.willConfig.void": "The ritual no longer uses Demon Will", + "ritual.bloodmagic.zephyrRitual": "Call of the Zephyr", + "ritual.bloodmagic.zephyrRitual.chest.info": "(Chest) The location of the inventory that the ritual will place the picked up items into.", + "ritual.bloodmagic.zephyrRitual.info": "Picks up items within its range and places them into the linked chest.", + "ritual.bloodmagic.zephyrRitual.zephyrRange.info": "(Suction) Items within this range will be sucked into the linked chest.", + "tile.bloodmagic.alchemytable.name": "Alchemy Table", + "tile.bloodmagic.arc.name": "Alchemical Reaction Chamber", + "tile.bloodmagic.soulforge.name": "Hellfire Forge", + "tooltip.bloodmagic.activated": "Activated", + "tooltip.bloodmagic.activationcrystal.awakened": "Activates more powerful rituals", + "tooltip.bloodmagic.activationcrystal.creative": "Creative Only - Activates any ritual", + "tooltip.bloodmagic.activationcrystal.weak": "Activates low-level rituals", + "tooltip.bloodmagic.arcaneAshes": "Ashes used to draw an alchemy circle", + "tooltip.bloodmagic.arctool.additionaldrops": "Increases chance of additional outputs by: x%s", + "tooltip.bloodmagic.arctool.uses": "Uses remaining: %s", + "tooltip.bloodmagic.blood_provider.slate.desc": "A simple ampoule containing 500LP", + "tooltip.bloodmagic.config.disabled": "Currently disabled in the Config", + "tooltip.bloodmagic.currentBaseType.corrosive": "Corrosive", + "tooltip.bloodmagic.currentBaseType.default": "Raw", + "tooltip.bloodmagic.currentBaseType.destructive": "Destructive", + "tooltip.bloodmagic.currentBaseType.steadfast": "Steadfast", + "tooltip.bloodmagic.currentBaseType.vengeful": "Vengeful", + "tooltip.bloodmagic.currentOwner": "Current owner: %s", + "tooltip.bloodmagic.currentTier": "Current tier: %d", + "tooltip.bloodmagic.currentType.corrosive": "Contains: Corrosive Will", + "tooltip.bloodmagic.currentType.default": "Contains: Raw Will", + "tooltip.bloodmagic.currentType.destructive": "Contains: Destructive Will", + "tooltip.bloodmagic.currentType.steadfast": "Contains: Steadfast Will", + "tooltip.bloodmagic.currentType.vengeful": "Contains: Vengeful Will", + "tooltip.bloodmagic.deactivated": "Deactivated", + "tooltip.bloodmagic.decoration.notSafe": "Dangerous for decoration", + "tooltip.bloodmagic.decoration.safe": "Safe for decoration", + "tooltip.bloodmagic.diviner.airRune": "Air Runes: %d", + "tooltip.bloodmagic.diviner.blankRune": "Blank Runes: %d", + "tooltip.bloodmagic.diviner.currentDirection": "Current Direction: %s", + "tooltip.bloodmagic.diviner.currentRitual": "Current Ritual: %s", + "tooltip.bloodmagic.diviner.dawnRune": "Dawn Runes: %d", + "tooltip.bloodmagic.diviner.duskRune": "Dusk Runes: %d", + "tooltip.bloodmagic.diviner.earthRune": "Earth Runes: %d", + "tooltip.bloodmagic.diviner.extraExtraInfo": "-Hold shift + alt for augmentation info-", + "tooltip.bloodmagic.diviner.extraInfo": "Press shift for extra info", + "tooltip.bloodmagic.diviner.fireRune": "Fire Runes: %d", + "tooltip.bloodmagic.diviner.totalRune": "Total Runes: %d", + "tooltip.bloodmagic.diviner.waterRune": "Water Runes: %d", + "tooltip.bloodmagic.experienceTome": "A book used to store experience", + "tooltip.bloodmagic.experienceTome.exp": "Exp: %0.3f", + "tooltip.bloodmagic.experienceTome.expLevel": "Level: %d", + "tooltip.bloodmagic.extraInfo": "&9-Hold shift for more info-", + "tooltip.bloodmagic.holdShiftForInfo": "Press shift for extra info", + "tooltip.bloodmagic.inscriber.desc": "The writing is on the wall...", + "tooltip.bloodmagic.livingarmour.extraExtraInfo": "&9-Hold shift + M for progress info-", + "tooltip.bloodmagic.livingarmour.upgrade.level": "%s (Level %d)", + "tooltip.bloodmagic.livingarmour.upgrade.points": "Upgrade points: %s / %s", + "tooltip.bloodmagic.livingarmour.upgrade.progress": "%s (%d/100)", + "tooltip.bloodmagic.orb.desc": "Stores raw Life Essence", + "tooltip.bloodmagic.orb.owner": "Added by: %s", + "tooltip.bloodmagic.ritualReader.currentState": "Current mode: %s", + "tooltip.bloodmagic.ritualReader.desc.information": "Right click on an active Master Ritual Stone to gather basic information about the ritual.", + "tooltip.bloodmagic.ritualReader.desc.set_area": "Right click on an active Master Ritual stone to cycle what area of the ritual you want to modify. Then click on the two corners of the new range you want to set the range.", + "tooltip.bloodmagic.ritualReader.desc.set_will_types": "Set the types of demon will that the ritual will consume from the aura by right clicking on the MRS with the same types of crystals on your hotbar.", + "tooltip.bloodmagic.ritualReader.information": "Information", + "tooltip.bloodmagic.ritualReader.set_area": "Define Area", + "tooltip.bloodmagic.ritualReader.set_will_types": "Set Will Consumed", + "tooltip.bloodmagic.sacrificialdagger.desc": "Just a prick of the finger will suffice...", + "tooltip.bloodmagic.sentientAxe.desc": "Uses demon will to unleash its full potential.", + "tooltip.bloodmagic.sentientPickaxe.desc": "Uses demon will to unleash its full potential.", + "tooltip.bloodmagic.sentientShovel.desc": "Uses demon will to unleash its full potential.", + "tooltip.bloodmagic.sentientSword.desc": "Uses demon will to unleash its full potential.", + "tooltip.bloodmagic.sigil.air.desc": "I feel lighter already...", + "tooltip.bloodmagic.sigil.bloodlight.desc": "I see a light!", + "tooltip.bloodmagic.sigil.divination.currentAltarCapacity": "Current Capacity: %d LP", + "tooltip.bloodmagic.sigil.divination.currentAltarTier": "Current Tier: %d", + "tooltip.bloodmagic.sigil.divination.currentBonus": "Current Bonus: +%d%%", + "tooltip.bloodmagic.sigil.divination.currentEssence": "Current Essence: %d LP", + "tooltip.bloodmagic.sigil.divination.currentTranquility": "Current Tranquility: %d", + "tooltip.bloodmagic.sigil.divination.desc": "Peer into the soul", + "tooltip.bloodmagic.sigil.divination.otherNetwork": "Peering into the soul of %s", + "tooltip.bloodmagic.sigil.fastminer.desc": "Keep mining, and mining...", + "tooltip.bloodmagic.sigil.greengrove.desc": "Environmentally friendly", + "tooltip.bloodmagic.sigil.holding.desc": "Sigil-ception", + "tooltip.bloodmagic.sigil.holding.press": "Press %s to modify", + "tooltip.bloodmagic.sigil.holding.sigilInSlot": "Slot %d: %s", + "tooltip.bloodmagic.sigil.lava.desc": "HOT! DO NOT EAT", + "tooltip.bloodmagic.sigil.magnetism.desc": "I have a very magnetic personality", + "tooltip.bloodmagic.sigil.seer.currentAltarCapacity": "Current Capacity: %d LP", + "tooltip.bloodmagic.sigil.seer.currentAltarConsumptionRate": "Consumption Rate: %d LP", + "tooltip.bloodmagic.sigil.seer.currentAltarProgress": "Current Progress: %d LP/ %s LP", + "tooltip.bloodmagic.sigil.seer.currentAltarProgress.percent": "Current Progress: %s", + "tooltip.bloodmagic.sigil.seer.currentAltarTier": "Current Tier: %d", + "tooltip.bloodmagic.sigil.seer.currentBonus": "Current Bonus: +%d%%", + "tooltip.bloodmagic.sigil.seer.currentCharge": "Current Charge: %d", + "tooltip.bloodmagic.sigil.seer.currentEssence": "Current Essence: %d LP", + "tooltip.bloodmagic.sigil.seer.currentTranquility": "Current Tranquility: %d", + "tooltip.bloodmagic.sigil.seer.desc": "When seeing all is not enough", + "tooltip.bloodmagic.sigil.void.desc": "Better than a Swiffer\u00AE!", + "tooltip.bloodmagic.sigil.water.desc": "Infinite water, anyone?", + "tooltip.bloodmagic.slate.desc": "Infused stone inside of a Blood Altar", + "tooltip.bloodmagic.slate_vial": "A glass vial infused with a simple slate", + "tooltip.bloodmagic.soulGem.common": "A gem used to contain more will", + "tooltip.bloodmagic.soulGem.grand": "A gem used to contain a large amount of will", + "tooltip.bloodmagic.soulGem.greater": "A gem used to contain a greater amount of will", + "tooltip.bloodmagic.soulGem.lesser": "A gem used to contain some will", + "tooltip.bloodmagic.soulGem.petty": "A gem used to contain a little will", + "tooltip.bloodmagic.soulSnare.desc": "Throw at a monster and then kill them to obtain their demonic will", + "tooltip.bloodmagic.throwing_dagger.desc": "Not to be used in the kitchen", + "tooltip.bloodmagic.tier": "Tier %d", + "tooltip.bloodmagic.will": "Will Quality: %s" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/accelerationrune.json b/src/generated/resources/assets/bloodmagic/models/block/accelerationrune.json new file mode 100644 index 00000000..fd09a780 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/accelerationrune.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/accelerationrune" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/airritualstone.json b/src/generated/resources/assets/bloodmagic/models/block/airritualstone.json new file mode 100644 index 00000000..428b9552 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/airritualstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/airritualstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/alchemicalreactionchamber.json b/src/generated/resources/assets/bloodmagic/models/block/alchemicalreactionchamber.json new file mode 100644 index 00000000..84690dfc --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/alchemicalreactionchamber.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/orientable_with_bottom", + "textures": { + "side": "bloodmagic:block/arc_side", + "front": "bloodmagic:block/arc_front", + "bottom": "bloodmagic:block/arc_bottom", + "top": "bloodmagic:block/arc_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/altarcapacityrune.json b/src/generated/resources/assets/bloodmagic/models/block/altarcapacityrune.json new file mode 100644 index 00000000..c8a6d830 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/altarcapacityrune.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/altarcapacityrune" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/bettercapacityrune.json b/src/generated/resources/assets/bloodmagic/models/block/bettercapacityrune.json new file mode 100644 index 00000000..3ffccb3a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/bettercapacityrune.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/bettercapacityrune" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/blankrune.json b/src/generated/resources/assets/bloodmagic/models/block/blankrune.json new file mode 100644 index 00000000..ab6f65ac --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/blankrune.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/blankrune" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/bloodlight.json b/src/generated/resources/assets/bloodmagic/models/block/bloodlight.json new file mode 100644 index 00000000..1a06cf8d --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/bloodlight.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/bloodlight" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/bloodstonebrick.json b/src/generated/resources/assets/bloodmagic/models/block/bloodstonebrick.json new file mode 100644 index 00000000..b0eccad9 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/bloodstonebrick.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/bloodstonebrick" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/chargingrune.json b/src/generated/resources/assets/bloodmagic/models/block/chargingrune.json new file mode 100644 index 00000000..8a0996cf --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/chargingrune.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/chargingrune" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_1.json b/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_1.json new file mode 100644 index 00000000..2f9e67a5 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "bloodmagic:block/creeping_doubt_1" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_2.json b/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_2.json new file mode 100644 index 00000000..614b4b22 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "bloodmagic:block/creeping_doubt_2" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_3.json b/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_3.json new file mode 100644 index 00000000..b8c6af48 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "bloodmagic:block/creeping_doubt_3" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_4.json b/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_4.json new file mode 100644 index 00000000..a9f300dd --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "bloodmagic:block/creeping_doubt_4" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_5.json b/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_5.json new file mode 100644 index 00000000..cba7434f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_5.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "bloodmagic:block/creeping_doubt_5" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_6.json b/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_6.json new file mode 100644 index 00000000..ebe9679d --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_6.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "bloodmagic:block/creeping_doubt_6" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_7.json b/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_7.json new file mode 100644 index 00000000..d0b2d010 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_7.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "bloodmagic:block/creeping_doubt_7" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_8.json b/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_8.json new file mode 100644 index 00000000..9763321c --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/creeping_doubt_8.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "bloodmagic:block/creeping_doubt_8" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal1.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal1.json new file mode 100644 index 00000000..2b4aebed --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal1.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal1", + "textures": { + "crystal": "bloodmagic:models/corrosivecrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal2.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal2.json new file mode 100644 index 00000000..24b1ec69 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal2.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal2", + "textures": { + "crystal": "bloodmagic:models/corrosivecrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal3.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal3.json new file mode 100644 index 00000000..fc658c68 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal3.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal3", + "textures": { + "crystal": "bloodmagic:models/corrosivecrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal4.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal4.json new file mode 100644 index 00000000..5fc95052 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal4.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal4", + "textures": { + "crystal": "bloodmagic:models/corrosivecrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal5.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal5.json new file mode 100644 index 00000000..a39edf1b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal5.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal5", + "textures": { + "crystal": "bloodmagic:models/corrosivecrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal6.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal6.json new file mode 100644 index 00000000..40221914 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal6.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal6", + "textures": { + "crystal": "bloodmagic:models/corrosivecrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal7.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal7.json new file mode 100644 index 00000000..bb114d6c --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/corrosivecrystal7.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal7", + "textures": { + "crystal": "bloodmagic:models/corrosivecrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal1.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal1.json new file mode 100644 index 00000000..d6f96ee5 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal1.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal1", + "textures": { + "crystal": "bloodmagic:models/defaultcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal2.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal2.json new file mode 100644 index 00000000..64eb34d7 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal2.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal2", + "textures": { + "crystal": "bloodmagic:models/defaultcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal3.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal3.json new file mode 100644 index 00000000..985aa46e --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal3.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal3", + "textures": { + "crystal": "bloodmagic:models/defaultcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal4.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal4.json new file mode 100644 index 00000000..6832216d --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal4.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal4", + "textures": { + "crystal": "bloodmagic:models/defaultcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal5.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal5.json new file mode 100644 index 00000000..516a689d --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal5.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal5", + "textures": { + "crystal": "bloodmagic:models/defaultcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal6.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal6.json new file mode 100644 index 00000000..b1fd517f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal6.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal6", + "textures": { + "crystal": "bloodmagic:models/defaultcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal7.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal7.json new file mode 100644 index 00000000..058eca74 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/defaultcrystal7.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal7", + "textures": { + "crystal": "bloodmagic:models/defaultcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal1.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal1.json new file mode 100644 index 00000000..a94ae6dc --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal1.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal1", + "textures": { + "crystal": "bloodmagic:models/destructivecrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal2.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal2.json new file mode 100644 index 00000000..4f35bb55 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal2.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal2", + "textures": { + "crystal": "bloodmagic:models/destructivecrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal3.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal3.json new file mode 100644 index 00000000..a01fcd89 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal3.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal3", + "textures": { + "crystal": "bloodmagic:models/destructivecrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal4.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal4.json new file mode 100644 index 00000000..94865f70 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal4.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal4", + "textures": { + "crystal": "bloodmagic:models/destructivecrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal5.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal5.json new file mode 100644 index 00000000..94c1c39c --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal5.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal5", + "textures": { + "crystal": "bloodmagic:models/destructivecrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal6.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal6.json new file mode 100644 index 00000000..5d63f3ba --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal6.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal6", + "textures": { + "crystal": "bloodmagic:models/destructivecrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal7.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal7.json new file mode 100644 index 00000000..81eb3805 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/destructivecrystal7.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal7", + "textures": { + "crystal": "bloodmagic:models/destructivecrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal1.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal1.json new file mode 100644 index 00000000..ba1d5669 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal1.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal1", + "textures": { + "crystal": "bloodmagic:models/steadfastcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal2.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal2.json new file mode 100644 index 00000000..cce291fc --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal2.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal2", + "textures": { + "crystal": "bloodmagic:models/steadfastcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal3.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal3.json new file mode 100644 index 00000000..046018b9 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal3.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal3", + "textures": { + "crystal": "bloodmagic:models/steadfastcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal4.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal4.json new file mode 100644 index 00000000..1dc6165a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal4.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal4", + "textures": { + "crystal": "bloodmagic:models/steadfastcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal5.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal5.json new file mode 100644 index 00000000..3ea44bc5 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal5.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal5", + "textures": { + "crystal": "bloodmagic:models/steadfastcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal6.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal6.json new file mode 100644 index 00000000..6de624be --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal6.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal6", + "textures": { + "crystal": "bloodmagic:models/steadfastcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal7.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal7.json new file mode 100644 index 00000000..d66e329b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/steadfastcrystal7.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal7", + "textures": { + "crystal": "bloodmagic:models/steadfastcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal1.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal1.json new file mode 100644 index 00000000..9fa509cf --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal1.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal1", + "textures": { + "crystal": "bloodmagic:models/vengefulcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal2.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal2.json new file mode 100644 index 00000000..c6a89b2b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal2.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal2", + "textures": { + "crystal": "bloodmagic:models/vengefulcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal3.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal3.json new file mode 100644 index 00000000..83b5dd09 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal3.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal3", + "textures": { + "crystal": "bloodmagic:models/vengefulcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal4.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal4.json new file mode 100644 index 00000000..16322807 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal4.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal4", + "textures": { + "crystal": "bloodmagic:models/vengefulcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal5.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal5.json new file mode 100644 index 00000000..13d761b5 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal5.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal5", + "textures": { + "crystal": "bloodmagic:models/vengefulcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal6.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal6.json new file mode 100644 index 00000000..6c25cecf --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal6.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal6", + "textures": { + "crystal": "bloodmagic:models/vengefulcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal7.json b/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal7.json new file mode 100644 index 00000000..d3a5b678 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/crystal/vengefulcrystal7.json @@ -0,0 +1,6 @@ +{ + "parent": "bloodmagic:block/crystal7", + "textures": { + "crystal": "bloodmagic:models/vengefulcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/deforester_charge.json b/src/generated/resources/assets/bloodmagic/models/block/deforester_charge.json new file mode 100644 index 00000000..f441dc4e --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/deforester_charge.json @@ -0,0 +1,11 @@ +{ + "parent": "bloodmagic:block/sub/shaped_charge", + "textures": { + "1": "minecraft:block/oak_log_top", + "3": "minecraft:block/oak_log_top", + "4": "bloodmagic:block/blankrune", + "5": "minecraft:block/oak_planks", + "6": "bloodmagic:models/defaultcrystal", + "particle": "bloodmagic:models/defaultcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dislocationrune.json b/src/generated/resources/assets/bloodmagic/models/block/dislocationrune.json new file mode 100644 index 00000000..a4b7b5f3 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dislocationrune.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/dislocationrune" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick1.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick1.json new file mode 100644 index 00000000..67fd1fd3 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/dungeon/dungeon_brick1" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick2.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick2.json new file mode 100644 index 00000000..f928def2 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/dungeon/dungeon_brick2" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick3.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick3.json new file mode 100644 index 00000000..cde0ff61 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/dungeon/dungeon_brick3" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_gate.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_gate.json new file mode 100644 index 00000000..e31759c0 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_gate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate", + "textures": { + "texture": "bloodmagic:block/dungeon/dungeon_brick1" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_gate_open.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_gate_open.json new file mode 100644 index 00000000..d4a81aaa --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_gate_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_open", + "textures": { + "texture": "bloodmagic:block/dungeon/dungeon_brick1" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_gate_wall.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_gate_wall.json new file mode 100644 index 00000000..19ef409e --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_gate_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall", + "textures": { + "texture": "bloodmagic:block/dungeon/dungeon_brick1" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_gate_wall_open.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_gate_wall_open.json new file mode 100644 index 00000000..1d63b5c3 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_gate_wall_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall_open", + "textures": { + "texture": "bloodmagic:block/dungeon/dungeon_brick1" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_stairs.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_stairs.json new file mode 100644 index 00000000..97ec435b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "side": "bloodmagic:block/dungeon/dungeon_brick1", + "bottom": "bloodmagic:block/dungeon/dungeon_brick1", + "top": "bloodmagic:block/dungeon/dungeon_brick1" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_stairs_inner.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_stairs_inner.json new file mode 100644 index 00000000..ab8c305f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "side": "bloodmagic:block/dungeon/dungeon_brick1", + "bottom": "bloodmagic:block/dungeon/dungeon_brick1", + "top": "bloodmagic:block/dungeon/dungeon_brick1" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_stairs_outer.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_stairs_outer.json new file mode 100644 index 00000000..54284cbc --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "side": "bloodmagic:block/dungeon/dungeon_brick1", + "bottom": "bloodmagic:block/dungeon/dungeon_brick1", + "top": "bloodmagic:block/dungeon/dungeon_brick1" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_wall_inventory.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_wall_inventory.json new file mode 100644 index 00000000..c90f1034 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "bloodmagic:block/dungeon/dungeon_brick1" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_wall_post.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_wall_post.json new file mode 100644 index 00000000..1e2aa564 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "bloodmagic:block/dungeon/dungeon_brick1" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_wall_side.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_wall_side.json new file mode 100644 index 00000000..d68f15be --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "bloodmagic:block/dungeon/dungeon_brick1" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_wall_side_tall.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_wall_side_tall.json new file mode 100644 index 00000000..88c3bc4a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_brick_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "bloodmagic:block/dungeon/dungeon_brick1" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_eye.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_eye.json new file mode 100644 index 00000000..050b373a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_eye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/dungeon/dungeon_eye" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_metal.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_metal.json new file mode 100644 index 00000000..bad4f014 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_metal.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/dungeon/dungeon_metal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_ore.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_ore.json new file mode 100644 index 00000000..93254ada --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/dungeon/dungeon_ore" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_cap.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_cap.json new file mode 100644 index 00000000..80da11c8 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_cap.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "side": "bloodmagic:block/dungeon/dungeon_pillartop", + "bottom": "bloodmagic:block/dungeon/dungeon_pillarheart", + "top": "bloodmagic:block/dungeon/dungeon_pillarheart" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_cap_down.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_cap_down.json new file mode 100644 index 00000000..1c9c81fa --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_cap_down.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "side": "bloodmagic:block/dungeon/dungeon_pillarbottom", + "bottom": "bloodmagic:block/dungeon/dungeon_pillarheart", + "top": "bloodmagic:block/dungeon/dungeon_pillarheart" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_cap_east.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_cap_east.json new file mode 100644 index 00000000..ddca684f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_cap_east.json @@ -0,0 +1,59 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "particle": "bloodmagic:block/dungeon/dungeon_pillarheart", + "sideBottom": "bloodmagic:block/dungeon/dungeon_pillarbottom", + "end": "bloodmagic:block/dungeon/dungeon_pillarheart", + "sideTop": "bloodmagic:block/dungeon/dungeon_pillartop" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ], + "faces": { + "down": { + "texture": "#sideBottom", + "rotation": 270 + }, + "up": { + "texture": "#sideBottom", + "rotation": 270 + }, + "north": { + "texture": "#sideTop", + "rotation": 270 + }, + "south": { + "texture": "#sideBottom", + "rotation": 270 + }, + "west": { + "texture": "#end", + "uv": [ + 16.0, + 0.0, + 0.0, + 16.0 + ] + }, + "east": { + "texture": "#end", + "uv": [ + 16.0, + 0.0, + 0.0, + 16.0 + ] + } + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_cap_north.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_cap_north.json new file mode 100644 index 00000000..ba59597e --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_cap_north.json @@ -0,0 +1,57 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "particle": "bloodmagic:block/dungeon/dungeon_pillarheart", + "sideBottom": "bloodmagic:block/dungeon/dungeon_pillarbottom", + "end": "bloodmagic:block/dungeon/dungeon_pillarheart", + "sideTop": "bloodmagic:block/dungeon/dungeon_pillartop" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ], + "faces": { + "down": { + "texture": "#sideBottom" + }, + "up": { + "texture": "#sideTop" + }, + "north": { + "texture": "#end" + }, + "south": { + "texture": "#end" + }, + "west": { + "texture": "#sideTop", + "uv": [ + 16.0, + 0.0, + 0.0, + 16.0 + ], + "rotation": 270 + }, + "east": { + "texture": "#sideBottom", + "uv": [ + 16.0, + 0.0, + 0.0, + 16.0 + ], + "rotation": 270 + } + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_cap_south.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_cap_south.json new file mode 100644 index 00000000..643f943d --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_cap_south.json @@ -0,0 +1,57 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "particle": "bloodmagic:block/dungeon/dungeon_pillarheart", + "sideBottom": "bloodmagic:block/dungeon/dungeon_pillarbottom", + "end": "bloodmagic:block/dungeon/dungeon_pillarheart", + "sideTop": "bloodmagic:block/dungeon/dungeon_pillartop" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ], + "faces": { + "down": { + "texture": "#sideTop" + }, + "up": { + "texture": "#sideBottom" + }, + "north": { + "texture": "#end" + }, + "south": { + "texture": "#end" + }, + "west": { + "texture": "#sideBottom", + "uv": [ + 16.0, + 0.0, + 0.0, + 16.0 + ], + "rotation": 270 + }, + "east": { + "texture": "#sideTop", + "uv": [ + 16.0, + 0.0, + 0.0, + 16.0 + ], + "rotation": 270 + } + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_cap_west.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_cap_west.json new file mode 100644 index 00000000..d871f337 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_cap_west.json @@ -0,0 +1,59 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "particle": "bloodmagic:block/dungeon/dungeon_pillarheart", + "sideBottom": "bloodmagic:block/dungeon/dungeon_pillarbottom", + "end": "bloodmagic:block/dungeon/dungeon_pillarheart", + "sideTop": "bloodmagic:block/dungeon/dungeon_pillartop" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ], + "faces": { + "down": { + "texture": "#sideTop", + "rotation": 270 + }, + "up": { + "texture": "#sideTop", + "rotation": 270 + }, + "north": { + "texture": "#sideBottom", + "rotation": 270 + }, + "south": { + "texture": "#sideTop", + "rotation": 270 + }, + "west": { + "texture": "#end", + "uv": [ + 16.0, + 0.0, + 0.0, + 16.0 + ] + }, + "east": { + "texture": "#end", + "uv": [ + 16.0, + 0.0, + 0.0, + 16.0 + ] + } + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_center.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_center.json new file mode 100644 index 00000000..0ee75aa8 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_center.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "side": "bloodmagic:block/dungeon/dungeon_pillar", + "end": "bloodmagic:block/dungeon/dungeon_pillarheart" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_center_x.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_center_x.json new file mode 100644 index 00000000..dc0d116a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_center_x.json @@ -0,0 +1,58 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "particle": "bloodmagic:block/dungeon/dungeon_pillar", + "end": "bloodmagic:block/dungeon/dungeon_pillarheart", + "side": "bloodmagic:block/dungeon/dungeon_pillar" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ], + "faces": { + "down": { + "texture": "#side", + "rotation": 270 + }, + "up": { + "texture": "#side", + "rotation": 270 + }, + "north": { + "texture": "#side", + "rotation": 270 + }, + "south": { + "texture": "#side", + "rotation": 270 + }, + "west": { + "texture": "#end", + "uv": [ + 16.0, + 0.0, + 0.0, + 16.0 + ] + }, + "east": { + "texture": "#end", + "uv": [ + 16.0, + 0.0, + 0.0, + 16.0 + ] + } + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_center_z.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_center_z.json new file mode 100644 index 00000000..8cf66442 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_center_z.json @@ -0,0 +1,56 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "particle": "bloodmagic:block/dungeon/dungeon_pillar", + "end": "bloodmagic:block/dungeon/dungeon_pillarheart", + "side": "bloodmagic:block/dungeon/dungeon_pillar" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ], + "faces": { + "down": { + "texture": "#side" + }, + "up": { + "texture": "#side" + }, + "north": { + "texture": "#end" + }, + "south": { + "texture": "#end" + }, + "west": { + "texture": "#side", + "uv": [ + 16.0, + 0.0, + 0.0, + 16.0 + ], + "rotation": 270 + }, + "east": { + "texture": "#side", + "uv": [ + 16.0, + 0.0, + 0.0, + 16.0 + ], + "rotation": 270 + } + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_special.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_special.json new file mode 100644 index 00000000..3ad64eb6 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_special.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "side": "bloodmagic:block/dungeon/dungeon_pillarspecial", + "end": "bloodmagic:block/dungeon/dungeon_pillarheart" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_special_x.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_special_x.json new file mode 100644 index 00000000..4c04aa89 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_special_x.json @@ -0,0 +1,58 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "particle": "bloodmagic:block/dungeon/dungeon_pillarspecial", + "end": "bloodmagic:block/dungeon/dungeon_pillarheart", + "side": "bloodmagic:block/dungeon/dungeon_pillarspecial" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ], + "faces": { + "down": { + "texture": "#side", + "rotation": 270 + }, + "up": { + "texture": "#side", + "rotation": 270 + }, + "north": { + "texture": "#side", + "rotation": 270 + }, + "south": { + "texture": "#side", + "rotation": 270 + }, + "west": { + "texture": "#end", + "uv": [ + 16.0, + 0.0, + 0.0, + 16.0 + ] + }, + "east": { + "texture": "#end", + "uv": [ + 16.0, + 0.0, + 0.0, + 16.0 + ] + } + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_special_z.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_special_z.json new file mode 100644 index 00000000..5c198826 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_pillar_special_z.json @@ -0,0 +1,56 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "particle": "bloodmagic:block/dungeon/dungeon_pillarspecial", + "end": "bloodmagic:block/dungeon/dungeon_pillarheart", + "side": "bloodmagic:block/dungeon/dungeon_pillarspecial" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ], + "faces": { + "down": { + "texture": "#side" + }, + "up": { + "texture": "#side" + }, + "north": { + "texture": "#end" + }, + "south": { + "texture": "#end" + }, + "west": { + "texture": "#side", + "uv": [ + 16.0, + 0.0, + 0.0, + 16.0 + ], + "rotation": 270 + }, + "east": { + "texture": "#side", + "uv": [ + 16.0, + 0.0, + 0.0, + 16.0 + ], + "rotation": 270 + } + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished.json new file mode 100644 index 00000000..0cfce680 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/dungeon/dungeon_polished" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_gate.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_gate.json new file mode 100644 index 00000000..00d14be8 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_gate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate", + "textures": { + "texture": "bloodmagic:block/dungeon/dungeon_polished" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_gate_open.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_gate_open.json new file mode 100644 index 00000000..eeeb11e3 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_gate_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_open", + "textures": { + "texture": "bloodmagic:block/dungeon/dungeon_polished" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_gate_wall.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_gate_wall.json new file mode 100644 index 00000000..5a753921 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_gate_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall", + "textures": { + "texture": "bloodmagic:block/dungeon/dungeon_polished" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_gate_wall_open.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_gate_wall_open.json new file mode 100644 index 00000000..94f199d1 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_gate_wall_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall_open", + "textures": { + "texture": "bloodmagic:block/dungeon/dungeon_polished" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_stairs.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_stairs.json new file mode 100644 index 00000000..291e9cff --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "side": "bloodmagic:block/dungeon/dungeon_polished", + "bottom": "bloodmagic:block/dungeon/dungeon_polished", + "top": "bloodmagic:block/dungeon/dungeon_polished" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_stairs_inner.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_stairs_inner.json new file mode 100644 index 00000000..f74477bd --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "side": "bloodmagic:block/dungeon/dungeon_polished", + "bottom": "bloodmagic:block/dungeon/dungeon_polished", + "top": "bloodmagic:block/dungeon/dungeon_polished" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_stairs_outer.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_stairs_outer.json new file mode 100644 index 00000000..7df9f548 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "side": "bloodmagic:block/dungeon/dungeon_polished", + "bottom": "bloodmagic:block/dungeon/dungeon_polished", + "top": "bloodmagic:block/dungeon/dungeon_polished" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_wall_inventory.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_wall_inventory.json new file mode 100644 index 00000000..1b6724a7 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "bloodmagic:block/dungeon/dungeon_polished" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_wall_post.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_wall_post.json new file mode 100644 index 00000000..a65da079 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "bloodmagic:block/dungeon/dungeon_polished" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_wall_side.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_wall_side.json new file mode 100644 index 00000000..c2da5f14 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "bloodmagic:block/dungeon/dungeon_polished" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_wall_side_tall.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_wall_side_tall.json new file mode 100644 index 00000000..2d55b1bc --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_polished_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "bloodmagic:block/dungeon/dungeon_polished" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_smallbrick.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_smallbrick.json new file mode 100644 index 00000000..dd5793ed --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_smallbrick.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/dungeon/dungeon_smallbrick" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_stone.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_stone.json new file mode 100644 index 00000000..e76740d6 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_stone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/dungeon/dungeon_stone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_stone_mirrored.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_stone_mirrored.json new file mode 100644 index 00000000..3b579c73 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_stone_mirrored.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_mirrored_all", + "textures": { + "all": "bloodmagic:block/dungeon/dungeon_stone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_tile.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_tile.json new file mode 100644 index 00000000..8f93a06d --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_tile.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/dungeon/dungeon_tile" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/dungeon_tilespecial.json b/src/generated/resources/assets/bloodmagic/models/block/dungeon_tilespecial.json new file mode 100644 index 00000000..2fb38846 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/dungeon_tilespecial.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/dungeon/dungeon_tilespecial" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/duskritualstone.json b/src/generated/resources/assets/bloodmagic/models/block/duskritualstone.json new file mode 100644 index 00000000..ecfcfa10 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/duskritualstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/duskritualstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/earthritualstone.json b/src/generated/resources/assets/bloodmagic/models/block/earthritualstone.json new file mode 100644 index 00000000..e0949faa --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/earthritualstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/earthritualstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/etherealopaquemimic.json b/src/generated/resources/assets/bloodmagic/models/block/etherealopaquemimic.json new file mode 100644 index 00000000..71983d4a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/etherealopaquemimic.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/etherealopaquemimic" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/fireritualstone.json b/src/generated/resources/assets/bloodmagic/models/block/fireritualstone.json new file mode 100644 index 00000000..1661fe87 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/fireritualstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/fireritualstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/fungal_charge.json b/src/generated/resources/assets/bloodmagic/models/block/fungal_charge.json new file mode 100644 index 00000000..49b4c667 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/fungal_charge.json @@ -0,0 +1,11 @@ +{ + "parent": "bloodmagic:block/sub/shaped_charge", + "textures": { + "1": "minecraft:block/crimson_planks", + "3": "minecraft:block/nether_wart_block", + "4": "bloodmagic:block/blankrune", + "5": "minecraft:block/crimson_stem", + "6": "bloodmagic:models/defaultcrystal", + "particle": "bloodmagic:models/defaultcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/largebloodstonebrick.json b/src/generated/resources/assets/bloodmagic/models/block/largebloodstonebrick.json new file mode 100644 index 00000000..25aaa1a4 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/largebloodstonebrick.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/largebloodstonebrick" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/lightritualstone.json b/src/generated/resources/assets/bloodmagic/models/block/lightritualstone.json new file mode 100644 index 00000000..89bce579 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/lightritualstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/lightritualstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/masterritualstone.json b/src/generated/resources/assets/bloodmagic/models/block/masterritualstone.json new file mode 100644 index 00000000..cbb503be --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/masterritualstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/masterritualstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/nether_soil.json b/src/generated/resources/assets/bloodmagic/models/block/nether_soil.json new file mode 100644 index 00000000..9014e226 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/nether_soil.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_farmland", + "textures": { + "top": "bloodmagic:block/nether_soil", + "dirt": "minecraft:block/netherrack" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/obsidianbrickpath.json b/src/generated/resources/assets/bloodmagic/models/block/obsidianbrickpath.json new file mode 100644 index 00000000..77f2ba8e --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/obsidianbrickpath.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/obsidianbrickpath" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/obsidiantilepath.json b/src/generated/resources/assets/bloodmagic/models/block/obsidiantilepath.json new file mode 100644 index 00000000..40a85379 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/obsidiantilepath.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/obsidiantilepath" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/orbcapacityrune.json b/src/generated/resources/assets/bloodmagic/models/block/orbcapacityrune.json new file mode 100644 index 00000000..db85074a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/orbcapacityrune.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/orbcapacityrune" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/ritualstone.json b/src/generated/resources/assets/bloodmagic/models/block/ritualstone.json new file mode 100644 index 00000000..ca5b7b23 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/ritualstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/ritualstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/sacrificerune.json b/src/generated/resources/assets/bloodmagic/models/block/sacrificerune.json new file mode 100644 index 00000000..9f99851f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/sacrificerune.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/sacrificerune" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/selfsacrificerune.json b/src/generated/resources/assets/bloodmagic/models/block/selfsacrificerune.json new file mode 100644 index 00000000..bad7ca8e --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/selfsacrificerune.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/selfsacrificerune" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/sentientmimic.json b/src/generated/resources/assets/bloodmagic/models/block/sentientmimic.json new file mode 100644 index 00000000..09592433 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/sentientmimic.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/sentientmimic" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/shaped_charge.json b/src/generated/resources/assets/bloodmagic/models/block/shaped_charge.json new file mode 100644 index 00000000..75078a95 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/shaped_charge.json @@ -0,0 +1,11 @@ +{ + "parent": "bloodmagic:block/sub/shaped_charge", + "textures": { + "1": "bloodmagic:block/dungeon/dungeon_tile", + "3": "bloodmagic:block/dungeon/dungeon_stone", + "4": "bloodmagic:block/blankrune", + "5": "bloodmagic:block/largebloodstonebrick", + "6": "bloodmagic:models/defaultcrystal", + "particle": "bloodmagic:models/defaultcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/solidclearmimic.json b/src/generated/resources/assets/bloodmagic/models/block/solidclearmimic.json new file mode 100644 index 00000000..bed0be1c --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/solidclearmimic.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/solidclearmimic" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/solidlightmimic.json b/src/generated/resources/assets/bloodmagic/models/block/solidlightmimic.json new file mode 100644 index 00000000..7dbf0fc7 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/solidlightmimic.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/solidlightmimic" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/solidopaquemimic.json b/src/generated/resources/assets/bloodmagic/models/block/solidopaquemimic.json new file mode 100644 index 00000000..0028f9e4 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/solidopaquemimic.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/solidopaquemimic" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/speedrune.json b/src/generated/resources/assets/bloodmagic/models/block/speedrune.json new file mode 100644 index 00000000..d33d1f07 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/speedrune.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/speedrune" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/stonebrickpath.json b/src/generated/resources/assets/bloodmagic/models/block/stonebrickpath.json new file mode 100644 index 00000000..59ad054f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/stonebrickpath.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/stonebrickpath" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/stonetilepath.json b/src/generated/resources/assets/bloodmagic/models/block/stonetilepath.json new file mode 100644 index 00000000..380149f4 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/stonetilepath.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/stonetilepath" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/veinmine_charge.json b/src/generated/resources/assets/bloodmagic/models/block/veinmine_charge.json new file mode 100644 index 00000000..1c50bf82 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/veinmine_charge.json @@ -0,0 +1,11 @@ +{ + "parent": "bloodmagic:block/sub/shaped_charge", + "textures": { + "1": "minecraft:block/sandstone_bottom", + "3": "minecraft:block/sandstone_bottom", + "4": "bloodmagic:block/blankrune", + "5": "minecraft:block/sand", + "6": "bloodmagic:models/defaultcrystal", + "particle": "bloodmagic:models/defaultcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/waterritualstone.json b/src/generated/resources/assets/bloodmagic/models/block/waterritualstone.json new file mode 100644 index 00000000..1222a06c --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/waterritualstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/waterritualstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/woodbrickpath.json b/src/generated/resources/assets/bloodmagic/models/block/woodbrickpath.json new file mode 100644 index 00000000..32aa5bb7 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/woodbrickpath.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/woodbrickpath" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/woodtilepath.json b/src/generated/resources/assets/bloodmagic/models/block/woodtilepath.json new file mode 100644 index 00000000..b2a8fbe6 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/woodtilepath.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/woodtilepath" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/wornstonebrickpath.json b/src/generated/resources/assets/bloodmagic/models/block/wornstonebrickpath.json new file mode 100644 index 00000000..b4a3da7b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/wornstonebrickpath.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/wornstonebrickpath" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/wornstonetilepath.json b/src/generated/resources/assets/bloodmagic/models/block/wornstonetilepath.json new file mode 100644 index 00000000..b1e91317 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/wornstonetilepath.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/wornstonetilepath" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/accelerationrune.json b/src/generated/resources/assets/bloodmagic/models/item/accelerationrune.json new file mode 100644 index 00000000..4551c1a8 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/accelerationrune.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/accelerationrune" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/activationcrystalawakened.json b/src/generated/resources/assets/bloodmagic/models/item/activationcrystalawakened.json new file mode 100644 index 00000000..25f235a5 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/activationcrystalawakened.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/activationcrystalawakened" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/activationcrystalcreative.json b/src/generated/resources/assets/bloodmagic/models/item/activationcrystalcreative.json new file mode 100644 index 00000000..3b5983f3 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/activationcrystalcreative.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/activationcrystalcreative" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/activationcrystalweak.json b/src/generated/resources/assets/bloodmagic/models/item/activationcrystalweak.json new file mode 100644 index 00000000..fddc803a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/activationcrystalweak.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/activationcrystalweak" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/airritualstone.json b/src/generated/resources/assets/bloodmagic/models/item/airritualstone.json new file mode 100644 index 00000000..a32ef885 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/airritualstone.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/airritualstone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/airscribetool.json b/src/generated/resources/assets/bloodmagic/models/item/airscribetool.json new file mode 100644 index 00000000..000892ca --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/airscribetool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/airscribetool" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/airsigil.json b/src/generated/resources/assets/bloodmagic/models/item/airsigil.json new file mode 100644 index 00000000..b90cce51 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/airsigil.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/airsigil" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/alchemicalreactionchamber.json b/src/generated/resources/assets/bloodmagic/models/item/alchemicalreactionchamber.json new file mode 100644 index 00000000..bb6ed1e2 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/alchemicalreactionchamber.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/alchemicalreactionchamber" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/altarcapacityrune.json b/src/generated/resources/assets/bloodmagic/models/item/altarcapacityrune.json new file mode 100644 index 00000000..819ef814 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/altarcapacityrune.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/altarcapacityrune" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/apprenticebloodorb.json b/src/generated/resources/assets/bloodmagic/models/item/apprenticebloodorb.json new file mode 100644 index 00000000..e010d2b7 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/apprenticebloodorb.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/apprenticebloodorb" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/arcaneashes.json b/src/generated/resources/assets/bloodmagic/models/item/arcaneashes.json new file mode 100644 index 00000000..19120a51 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/arcaneashes.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/arcaneashes" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/basemonstersoul.json b/src/generated/resources/assets/bloodmagic/models/item/basemonstersoul.json new file mode 100644 index 00000000..5455472a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/basemonstersoul.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/basemonstersoul" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/basemonstersoul_corrosive.json b/src/generated/resources/assets/bloodmagic/models/item/basemonstersoul_corrosive.json new file mode 100644 index 00000000..bd22eb5f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/basemonstersoul_corrosive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/basemonstersoul_corrosive" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/basemonstersoul_destructive.json b/src/generated/resources/assets/bloodmagic/models/item/basemonstersoul_destructive.json new file mode 100644 index 00000000..3fcd9fd7 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/basemonstersoul_destructive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/basemonstersoul_destructive" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/basemonstersoul_steadfast.json b/src/generated/resources/assets/bloodmagic/models/item/basemonstersoul_steadfast.json new file mode 100644 index 00000000..db32c775 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/basemonstersoul_steadfast.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/basemonstersoul_steadfast" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/basemonstersoul_vengeful.json b/src/generated/resources/assets/bloodmagic/models/item/basemonstersoul_vengeful.json new file mode 100644 index 00000000..966c0f17 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/basemonstersoul_vengeful.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/basemonstersoul_vengeful" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/basiccuttingfluid.json b/src/generated/resources/assets/bloodmagic/models/item/basiccuttingfluid.json new file mode 100644 index 00000000..0d5d0cdc --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/basiccuttingfluid.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/basiccuttingfluid" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/bettercapacityrune.json b/src/generated/resources/assets/bloodmagic/models/item/bettercapacityrune.json new file mode 100644 index 00000000..f8b79342 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/bettercapacityrune.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/bettercapacityrune" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/blankrune.json b/src/generated/resources/assets/bloodmagic/models/item/blankrune.json new file mode 100644 index 00000000..7bf5795e --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/blankrune.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/blankrune" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/blankslate.json b/src/generated/resources/assets/bloodmagic/models/item/blankslate.json new file mode 100644 index 00000000..d3094597 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/blankslate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/blankslate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/bloodlightsigil.json b/src/generated/resources/assets/bloodmagic/models/item/bloodlightsigil.json new file mode 100644 index 00000000..4ae506f9 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/bloodlightsigil.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/bloodlightsigil" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/bloodstonebrick.json b/src/generated/resources/assets/bloodmagic/models/item/bloodstonebrick.json new file mode 100644 index 00000000..533f926a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/bloodstonebrick.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/bloodstonebrick" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/bow_power_anointment.json b/src/generated/resources/assets/bloodmagic/models/item/bow_power_anointment.json new file mode 100644 index 00000000..5d52447b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/bow_power_anointment.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/alchemic_vial", + "layer1": "bloodmagic:item/alchemic_liquid", + "layer2": "bloodmagic:item/alchemic_ribbon" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/chargingrune.json b/src/generated/resources/assets/bloodmagic/models/item/chargingrune.json new file mode 100644 index 00000000..ccd29652 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/chargingrune.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/chargingrune" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/coalsand.json b/src/generated/resources/assets/bloodmagic/models/item/coalsand.json new file mode 100644 index 00000000..12aaa0cc --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/coalsand.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/coalsand" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/corrosivecrystal.json b/src/generated/resources/assets/bloodmagic/models/item/corrosivecrystal.json new file mode 100644 index 00000000..d99e15f4 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/corrosivecrystal.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/corrosivecrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/corrosivedemoncrystal.json b/src/generated/resources/assets/bloodmagic/models/item/corrosivedemoncrystal.json new file mode 100644 index 00000000..5e739ff2 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/corrosivedemoncrystal.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/crystal/corrosivecrystal1" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/corrupted_dust.json b/src/generated/resources/assets/bloodmagic/models/item/corrupted_dust.json new file mode 100644 index 00000000..a5f430a4 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/corrupted_dust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/corrupted_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/corrupted_tinydust.json b/src/generated/resources/assets/bloodmagic/models/item/corrupted_tinydust.json new file mode 100644 index 00000000..a9ecf66f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/corrupted_tinydust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/corrupted_tinydust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/creeping_doubt.json b/src/generated/resources/assets/bloodmagic/models/item/creeping_doubt.json new file mode 100644 index 00000000..9763321c --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/creeping_doubt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "bloodmagic:block/creeping_doubt_8" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/crystalline_resonator.json b/src/generated/resources/assets/bloodmagic/models/item/crystalline_resonator.json new file mode 100644 index 00000000..44408cd6 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/crystalline_resonator.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/crystalline_resonator" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/daggerofsacrifice.json b/src/generated/resources/assets/bloodmagic/models/item/daggerofsacrifice.json new file mode 100644 index 00000000..762c92a7 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/daggerofsacrifice.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/daggerofsacrifice" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/defaultcrystal.json b/src/generated/resources/assets/bloodmagic/models/item/defaultcrystal.json new file mode 100644 index 00000000..630e05a5 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/defaultcrystal.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/defaultcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/deforester_charge.json b/src/generated/resources/assets/bloodmagic/models/item/deforester_charge.json new file mode 100644 index 00000000..64187a41 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/deforester_charge.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/deforester_charge" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/demonslate.json b/src/generated/resources/assets/bloodmagic/models/item/demonslate.json new file mode 100644 index 00000000..97d3e2f5 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/demonslate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/demonslate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/demonwillgauge.json b/src/generated/resources/assets/bloodmagic/models/item/demonwillgauge.json new file mode 100644 index 00000000..db062669 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/demonwillgauge.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/demonwillgauge" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/destructivecrystal.json b/src/generated/resources/assets/bloodmagic/models/item/destructivecrystal.json new file mode 100644 index 00000000..728b4dc5 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/destructivecrystal.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/destructivecrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/destructivedemoncrystal.json b/src/generated/resources/assets/bloodmagic/models/item/destructivedemoncrystal.json new file mode 100644 index 00000000..132afed7 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/destructivedemoncrystal.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/crystal/destructivecrystal1" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dislocationrune.json b/src/generated/resources/assets/bloodmagic/models/item/dislocationrune.json new file mode 100644 index 00000000..1ddb2946 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dislocationrune.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dislocationrune" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/divinationsigil.json b/src/generated/resources/assets/bloodmagic/models/item/divinationsigil.json new file mode 100644 index 00000000..364fb1ec --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/divinationsigil.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/divinationsigil" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick1.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick1.json new file mode 100644 index 00000000..11d3536b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick1.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_brick1" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick2.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick2.json new file mode 100644 index 00000000..5f9095c0 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick2.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_brick2" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick3.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick3.json new file mode 100644 index 00000000..fc97a2a2 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick3.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_brick3" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick_assorted.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick_assorted.json new file mode 100644 index 00000000..11d3536b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick_assorted.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_brick1" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick_gate.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick_gate.json new file mode 100644 index 00000000..818f37f8 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick_gate.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_brick_gate" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick_stairs.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick_stairs.json new file mode 100644 index 00000000..f4f7c835 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_brick_stairs" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick_wall.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick_wall.json new file mode 100644 index 00000000..ee594c7e --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_brick_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_brick_wall_inventory" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_eye.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_eye.json new file mode 100644 index 00000000..b306aa4e --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_eye.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_eye" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_metal.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_metal.json new file mode 100644 index 00000000..b4412870 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_metal.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_metal" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_ore.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_ore.json new file mode 100644 index 00000000..64362081 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_ore" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_pillar_cap.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_pillar_cap.json new file mode 100644 index 00000000..03211bec --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_pillar_cap.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_pillar_cap" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_pillar_center.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_pillar_center.json new file mode 100644 index 00000000..7a965604 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_pillar_center.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_pillar_center" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_pillar_special.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_pillar_special.json new file mode 100644 index 00000000..dcbe8148 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_pillar_special.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_pillar_special" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_polished.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_polished.json new file mode 100644 index 00000000..334777b9 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_polished.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_polished" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_polished_gate.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_polished_gate.json new file mode 100644 index 00000000..ec9c6b87 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_polished_gate.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_polished_gate" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_polished_stairs.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_polished_stairs.json new file mode 100644 index 00000000..cb02affc --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_polished_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_polished_stairs" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_polished_wall.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_polished_wall.json new file mode 100644 index 00000000..f02221cf --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_polished_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_polished_wall_inventory" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_smallbrick.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_smallbrick.json new file mode 100644 index 00000000..2ccf3f92 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_smallbrick.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_smallbrick" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_stone.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_stone.json new file mode 100644 index 00000000..4c9c2b6a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_stone.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_stone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_tester.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_tester.json new file mode 100644 index 00000000..f408e84c --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_tester.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/dungeon_tester" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_tile.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_tile.json new file mode 100644 index 00000000..4c80f99b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_tile.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_tile" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/dungeon_tilespecial.json b/src/generated/resources/assets/bloodmagic/models/item/dungeon_tilespecial.json new file mode 100644 index 00000000..98d6dc5a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/dungeon_tilespecial.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/dungeon_tilespecial" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/duskritualstone.json b/src/generated/resources/assets/bloodmagic/models/item/duskritualstone.json new file mode 100644 index 00000000..289ff1ee --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/duskritualstone.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/duskritualstone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/duskscribetool.json b/src/generated/resources/assets/bloodmagic/models/item/duskscribetool.json new file mode 100644 index 00000000..c95b2d43 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/duskscribetool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/duskscribetool" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/earthritualstone.json b/src/generated/resources/assets/bloodmagic/models/item/earthritualstone.json new file mode 100644 index 00000000..3758ede0 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/earthritualstone.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/earthritualstone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/earthscribetool.json b/src/generated/resources/assets/bloodmagic/models/item/earthscribetool.json new file mode 100644 index 00000000..4eb734a9 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/earthscribetool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/earthscribetool" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/ethereal_mimic.json b/src/generated/resources/assets/bloodmagic/models/item/ethereal_mimic.json new file mode 100644 index 00000000..caeb3a85 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/ethereal_mimic.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/etherealopaquemimic" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/etherealslate.json b/src/generated/resources/assets/bloodmagic/models/item/etherealslate.json new file mode 100644 index 00000000..c0f0f8a0 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/etherealslate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/etherealslate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/experiencebook.json b/src/generated/resources/assets/bloodmagic/models/item/experiencebook.json new file mode 100644 index 00000000..693287c2 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/experiencebook.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/experiencebook" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/explosivepowder.json b/src/generated/resources/assets/bloodmagic/models/item/explosivepowder.json new file mode 100644 index 00000000..25c7aa64 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/explosivepowder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/explosivepowder" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/fireritualstone.json b/src/generated/resources/assets/bloodmagic/models/item/fireritualstone.json new file mode 100644 index 00000000..6eef57c2 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/fireritualstone.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/fireritualstone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/firescribetool.json b/src/generated/resources/assets/bloodmagic/models/item/firescribetool.json new file mode 100644 index 00000000..9eb63402 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/firescribetool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/firescribetool" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/fortune_anointment.json b/src/generated/resources/assets/bloodmagic/models/item/fortune_anointment.json new file mode 100644 index 00000000..5d52447b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/fortune_anointment.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/alchemic_vial", + "layer1": "bloodmagic:item/alchemic_liquid", + "layer2": "bloodmagic:item/alchemic_ribbon" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/fragment_netherite_scrap.json b/src/generated/resources/assets/bloodmagic/models/item/fragment_netherite_scrap.json new file mode 100644 index 00000000..791fa55c --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/fragment_netherite_scrap.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/fragment_netherite_scrap" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/fungal_charge.json b/src/generated/resources/assets/bloodmagic/models/item/fungal_charge.json new file mode 100644 index 00000000..59b1be87 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/fungal_charge.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/fungal_charge" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/furnacecell_primitive.json b/src/generated/resources/assets/bloodmagic/models/item/furnacecell_primitive.json new file mode 100644 index 00000000..cefb8192 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/furnacecell_primitive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/furnacecell_primitive" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/goldfragment.json b/src/generated/resources/assets/bloodmagic/models/item/goldfragment.json new file mode 100644 index 00000000..d8024eaf --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/goldfragment.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/goldfragment" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/goldgravel.json b/src/generated/resources/assets/bloodmagic/models/item/goldgravel.json new file mode 100644 index 00000000..c104e0f5 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/goldgravel.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/goldgravel" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/goldsand.json b/src/generated/resources/assets/bloodmagic/models/item/goldsand.json new file mode 100644 index 00000000..29106249 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/goldsand.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/goldsand" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/gravel_netherite_scrap.json b/src/generated/resources/assets/bloodmagic/models/item/gravel_netherite_scrap.json new file mode 100644 index 00000000..79f99443 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/gravel_netherite_scrap.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/gravel_netherite_scrap" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/growthsigil.json b/src/generated/resources/assets/bloodmagic/models/item/growthsigil.json new file mode 100644 index 00000000..545030bf --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/growthsigil.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "predicate": { + "bloodmagic:active": 0.0 + }, + "model": "bloodmagic:item/variants/growthsigil_deactivated" + }, + { + "predicate": { + "bloodmagic:active": 1.0 + }, + "model": "bloodmagic:item/variants/growthsigil_activated" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/hidden_knowledge_anointment.json b/src/generated/resources/assets/bloodmagic/models/item/hidden_knowledge_anointment.json new file mode 100644 index 00000000..5d52447b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/hidden_knowledge_anointment.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/alchemic_vial", + "layer1": "bloodmagic:item/alchemic_liquid", + "layer2": "bloodmagic:item/alchemic_ribbon" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/holy_water_anointment.json b/src/generated/resources/assets/bloodmagic/models/item/holy_water_anointment.json new file mode 100644 index 00000000..5d52447b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/holy_water_anointment.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/alchemic_vial", + "layer1": "bloodmagic:item/alchemic_liquid", + "layer2": "bloodmagic:item/alchemic_ribbon" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/icesigil.json b/src/generated/resources/assets/bloodmagic/models/item/icesigil.json new file mode 100644 index 00000000..67d4348e --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/icesigil.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "predicate": { + "bloodmagic:active": 0.0 + }, + "model": "bloodmagic:item/variants/icesigil_deactivated" + }, + { + "predicate": { + "bloodmagic:active": 1.0 + }, + "model": "bloodmagic:item/variants/icesigil_activated" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/infusedslate.json b/src/generated/resources/assets/bloodmagic/models/item/infusedslate.json new file mode 100644 index 00000000..057c0fc7 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/infusedslate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/infusedslate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/ingot_hellforged.json b/src/generated/resources/assets/bloodmagic/models/item/ingot_hellforged.json new file mode 100644 index 00000000..6f2132df --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/ingot_hellforged.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/ingot_hellforged" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/ironfragment.json b/src/generated/resources/assets/bloodmagic/models/item/ironfragment.json new file mode 100644 index 00000000..acd23d13 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/ironfragment.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/ironfragment" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/irongravel.json b/src/generated/resources/assets/bloodmagic/models/item/irongravel.json new file mode 100644 index 00000000..cd5e0c4d --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/irongravel.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/irongravel" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/ironsand.json b/src/generated/resources/assets/bloodmagic/models/item/ironsand.json new file mode 100644 index 00000000..9ad179b8 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/ironsand.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/ironsand" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/largebloodstonebrick.json b/src/generated/resources/assets/bloodmagic/models/item/largebloodstonebrick.json new file mode 100644 index 00000000..c048956c --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/largebloodstonebrick.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/largebloodstonebrick" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/lavacrystal.json b/src/generated/resources/assets/bloodmagic/models/item/lavacrystal.json new file mode 100644 index 00000000..663eee3d --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/lavacrystal.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/lavacrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/lavasigil.json b/src/generated/resources/assets/bloodmagic/models/item/lavasigil.json new file mode 100644 index 00000000..78803529 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/lavasigil.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/lavasigil" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/lightritualstone.json b/src/generated/resources/assets/bloodmagic/models/item/lightritualstone.json new file mode 100644 index 00000000..96ca64a5 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/lightritualstone.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/lightritualstone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/livingboots.json b/src/generated/resources/assets/bloodmagic/models/item/livingboots.json new file mode 100644 index 00000000..6fc62fe4 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/livingboots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/livingboots" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/livinghelmet.json b/src/generated/resources/assets/bloodmagic/models/item/livinghelmet.json new file mode 100644 index 00000000..26231b72 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/livinghelmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/livinghelmet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/livingleggings.json b/src/generated/resources/assets/bloodmagic/models/item/livingleggings.json new file mode 100644 index 00000000..9f9e8220 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/livingleggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/livingleggings" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/livingplate.json b/src/generated/resources/assets/bloodmagic/models/item/livingplate.json new file mode 100644 index 00000000..ffcf6a31 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/livingplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/livingplate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/looting_anointment.json b/src/generated/resources/assets/bloodmagic/models/item/looting_anointment.json new file mode 100644 index 00000000..5d52447b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/looting_anointment.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/alchemic_vial", + "layer1": "bloodmagic:item/alchemic_liquid", + "layer2": "bloodmagic:item/alchemic_ribbon" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/magicianbloodorb.json b/src/generated/resources/assets/bloodmagic/models/item/magicianbloodorb.json new file mode 100644 index 00000000..218986d2 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/magicianbloodorb.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/magicianbloodorb" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/masterbloodorb.json b/src/generated/resources/assets/bloodmagic/models/item/masterbloodorb.json new file mode 100644 index 00000000..63d243a6 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/masterbloodorb.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/masterbloodorb" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/masterritualstone.json b/src/generated/resources/assets/bloodmagic/models/item/masterritualstone.json new file mode 100644 index 00000000..84e36366 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/masterritualstone.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/masterritualstone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/melee_anointment.json b/src/generated/resources/assets/bloodmagic/models/item/melee_anointment.json new file mode 100644 index 00000000..5d52447b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/melee_anointment.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/alchemic_vial", + "layer1": "bloodmagic:item/alchemic_liquid", + "layer2": "bloodmagic:item/alchemic_ribbon" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/mimic.json b/src/generated/resources/assets/bloodmagic/models/item/mimic.json new file mode 100644 index 00000000..82d7c08b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/mimic.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/solidopaquemimic" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/miningsigil.json b/src/generated/resources/assets/bloodmagic/models/item/miningsigil.json new file mode 100644 index 00000000..f2f8923a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/miningsigil.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "predicate": { + "bloodmagic:active": 0.0 + }, + "model": "bloodmagic:item/variants/miningsigil_deactivated" + }, + { + "predicate": { + "bloodmagic:active": 1.0 + }, + "model": "bloodmagic:item/variants/miningsigil_activated" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/nether_soil.json b/src/generated/resources/assets/bloodmagic/models/item/nether_soil.json new file mode 100644 index 00000000..e26c6db7 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/nether_soil.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/nether_soil" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/obsidianbrickpath.json b/src/generated/resources/assets/bloodmagic/models/item/obsidianbrickpath.json new file mode 100644 index 00000000..03c76b69 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/obsidianbrickpath.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/obsidianbrickpath" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/obsidiantilepath.json b/src/generated/resources/assets/bloodmagic/models/item/obsidiantilepath.json new file mode 100644 index 00000000..3db5658a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/obsidiantilepath.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/obsidiantilepath" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/orbcapacityrune.json b/src/generated/resources/assets/bloodmagic/models/item/orbcapacityrune.json new file mode 100644 index 00000000..c851584c --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/orbcapacityrune.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/orbcapacityrune" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/plantoil.json b/src/generated/resources/assets/bloodmagic/models/item/plantoil.json new file mode 100644 index 00000000..f61b1551 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/plantoil.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/plantoil" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/primitive_crystalline_resonator.json b/src/generated/resources/assets/bloodmagic/models/item/primitive_crystalline_resonator.json new file mode 100644 index 00000000..71d561ab --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/primitive_crystalline_resonator.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/primitive_crystalline_resonator" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/primitive_explosive_cell.json b/src/generated/resources/assets/bloodmagic/models/item/primitive_explosive_cell.json new file mode 100644 index 00000000..29f8d0f1 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/primitive_explosive_cell.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/primitive_explosive_cell" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/primitive_hydration_cell.json b/src/generated/resources/assets/bloodmagic/models/item/primitive_hydration_cell.json new file mode 100644 index 00000000..73f64a0c --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/primitive_hydration_cell.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/primitive_hydration_cell" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/quick_draw_anointment.json b/src/generated/resources/assets/bloodmagic/models/item/quick_draw_anointment.json new file mode 100644 index 00000000..5d52447b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/quick_draw_anointment.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/alchemic_vial", + "layer1": "bloodmagic:item/alchemic_liquid", + "layer2": "bloodmagic:item/alchemic_ribbon" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/rawdemoncrystal.json b/src/generated/resources/assets/bloodmagic/models/item/rawdemoncrystal.json new file mode 100644 index 00000000..d1f4da91 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/rawdemoncrystal.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/crystal/defaultcrystal1" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/reagentair.json b/src/generated/resources/assets/bloodmagic/models/item/reagentair.json new file mode 100644 index 00000000..3cdc9d64 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/reagentair.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/reagentair" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/reagentbinding.json b/src/generated/resources/assets/bloodmagic/models/item/reagentbinding.json new file mode 100644 index 00000000..e8409a07 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/reagentbinding.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/reagentbinding" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/reagentbloodlight.json b/src/generated/resources/assets/bloodmagic/models/item/reagentbloodlight.json new file mode 100644 index 00000000..54d4afa2 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/reagentbloodlight.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/reagentbloodlight" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/reagentfastminer.json b/src/generated/resources/assets/bloodmagic/models/item/reagentfastminer.json new file mode 100644 index 00000000..3c4434b7 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/reagentfastminer.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/reagentfastminer" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/reagentgrowth.json b/src/generated/resources/assets/bloodmagic/models/item/reagentgrowth.json new file mode 100644 index 00000000..3d4ee45c --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/reagentgrowth.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/reagentgrowth" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/reagentholding.json b/src/generated/resources/assets/bloodmagic/models/item/reagentholding.json new file mode 100644 index 00000000..b84ea6fb --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/reagentholding.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/reagentholding" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/reagentlava.json b/src/generated/resources/assets/bloodmagic/models/item/reagentlava.json new file mode 100644 index 00000000..d6139efe --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/reagentlava.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/reagentlava" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/reagentmagnetism.json b/src/generated/resources/assets/bloodmagic/models/item/reagentmagnetism.json new file mode 100644 index 00000000..121d0018 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/reagentmagnetism.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/reagentmagnetism" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/reagentsight.json b/src/generated/resources/assets/bloodmagic/models/item/reagentsight.json new file mode 100644 index 00000000..37f60639 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/reagentsight.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/reagentsight" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/reagentvoid.json b/src/generated/resources/assets/bloodmagic/models/item/reagentvoid.json new file mode 100644 index 00000000..4f6564c8 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/reagentvoid.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/reagentvoid" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/reagentwater.json b/src/generated/resources/assets/bloodmagic/models/item/reagentwater.json new file mode 100644 index 00000000..b5730d1a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/reagentwater.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/reagentwater" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/reinforcedslate.json b/src/generated/resources/assets/bloodmagic/models/item/reinforcedslate.json new file mode 100644 index 00000000..3299a6a5 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/reinforcedslate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/reinforcedslate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/ritualdiviner.json b/src/generated/resources/assets/bloodmagic/models/item/ritualdiviner.json new file mode 100644 index 00000000..39b88d5c --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/ritualdiviner.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/ritualdiviner" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/ritualdivinerdusk.json b/src/generated/resources/assets/bloodmagic/models/item/ritualdivinerdusk.json new file mode 100644 index 00000000..48ee296e --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/ritualdivinerdusk.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/ritualdivinerdusk" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/ritualstone.json b/src/generated/resources/assets/bloodmagic/models/item/ritualstone.json new file mode 100644 index 00000000..4dea1d50 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/ritualstone.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/ritualstone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/ritualtinkerer.json b/src/generated/resources/assets/bloodmagic/models/item/ritualtinkerer.json new file mode 100644 index 00000000..31fcff20 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/ritualtinkerer.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/ritualtinkerer" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/sacrificerune.json b/src/generated/resources/assets/bloodmagic/models/item/sacrificerune.json new file mode 100644 index 00000000..dcbe6138 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/sacrificerune.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/sacrificerune" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/sacrificialdagger.json b/src/generated/resources/assets/bloodmagic/models/item/sacrificialdagger.json new file mode 100644 index 00000000..08eefb43 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/sacrificialdagger.json @@ -0,0 +1,20 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/sacrificialdagger" + }, + "overrides": [ + { + "predicate": { + "bloodmagic:incense": 0.0 + }, + "model": "bloodmagic:item/variants/sacrificialdagger" + }, + { + "predicate": { + "bloodmagic:incense": 1.0 + }, + "model": "bloodmagic:item/variants/sacrificialdagger_ceremonial" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/saltpeter.json b/src/generated/resources/assets/bloodmagic/models/item/saltpeter.json new file mode 100644 index 00000000..b9ba71f1 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/saltpeter.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/saltpeter" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/sand_hellforged.json b/src/generated/resources/assets/bloodmagic/models/item/sand_hellforged.json new file mode 100644 index 00000000..03c5f26d --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/sand_hellforged.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/sand_hellforged" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/sand_netherite.json b/src/generated/resources/assets/bloodmagic/models/item/sand_netherite.json new file mode 100644 index 00000000..99d41148 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/sand_netherite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/sand_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/sanguinereverter.json b/src/generated/resources/assets/bloodmagic/models/item/sanguinereverter.json new file mode 100644 index 00000000..2e6c6de6 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/sanguinereverter.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/sanguinereverter" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/seersigil.json b/src/generated/resources/assets/bloodmagic/models/item/seersigil.json new file mode 100644 index 00000000..f513120b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/seersigil.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/seersigil" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/selfsacrificerune.json b/src/generated/resources/assets/bloodmagic/models/item/selfsacrificerune.json new file mode 100644 index 00000000..ab853e7b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/selfsacrificerune.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/selfsacrificerune" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/shaped_charge.json b/src/generated/resources/assets/bloodmagic/models/item/shaped_charge.json new file mode 100644 index 00000000..de035a33 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/shaped_charge.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/shaped_charge" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/sigilofholding.json b/src/generated/resources/assets/bloodmagic/models/item/sigilofholding.json new file mode 100644 index 00000000..32760a59 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/sigilofholding.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/sigilofholding" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/sigilofmagnetism.json b/src/generated/resources/assets/bloodmagic/models/item/sigilofmagnetism.json new file mode 100644 index 00000000..8a5253db --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/sigilofmagnetism.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "predicate": { + "bloodmagic:active": 0.0 + }, + "model": "bloodmagic:item/variants/sigilofmagnetism_deactivated" + }, + { + "predicate": { + "bloodmagic:active": 1.0 + }, + "model": "bloodmagic:item/variants/sigilofmagnetism_activated" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/silk_touch_anointment.json b/src/generated/resources/assets/bloodmagic/models/item/silk_touch_anointment.json new file mode 100644 index 00000000..5d52447b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/silk_touch_anointment.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/alchemic_vial", + "layer1": "bloodmagic:item/alchemic_liquid", + "layer2": "bloodmagic:item/alchemic_ribbon" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/slate_ampoule.json b/src/generated/resources/assets/bloodmagic/models/item/slate_ampoule.json new file mode 100644 index 00000000..bfabb3e6 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/slate_ampoule.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/slate_ampoule" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/slate_vial.json b/src/generated/resources/assets/bloodmagic/models/item/slate_vial.json new file mode 100644 index 00000000..1dfb1022 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/slate_vial.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/alchemic_vial", + "layer1": "bloodmagic:item/alchemic_ribbon" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/smelting_anointment.json b/src/generated/resources/assets/bloodmagic/models/item/smelting_anointment.json new file mode 100644 index 00000000..5d52447b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/smelting_anointment.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/alchemic_vial", + "layer1": "bloodmagic:item/alchemic_liquid", + "layer2": "bloodmagic:item/alchemic_ribbon" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/soulaxe.json b/src/generated/resources/assets/bloodmagic/models/item/soulaxe.json new file mode 100644 index 00000000..7a752a51 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/soulaxe.json @@ -0,0 +1,34 @@ +{ + "overrides": [ + { + "predicate": { + "bloodmagic:type": 0.0 + }, + "model": "bloodmagic:item/variants/soulaxe" + }, + { + "predicate": { + "bloodmagic:type": 1.0 + }, + "model": "bloodmagic:item/variants/soulaxe_corrosive" + }, + { + "predicate": { + "bloodmagic:type": 2.0 + }, + "model": "bloodmagic:item/variants/soulaxe_destructive" + }, + { + "predicate": { + "bloodmagic:type": 3.0 + }, + "model": "bloodmagic:item/variants/soulaxe_vengeful" + }, + { + "predicate": { + "bloodmagic:type": 4.0 + }, + "model": "bloodmagic:item/variants/soulaxe_steadfast" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/soulgemcommon.json b/src/generated/resources/assets/bloodmagic/models/item/soulgemcommon.json new file mode 100644 index 00000000..7629117a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/soulgemcommon.json @@ -0,0 +1,34 @@ +{ + "overrides": [ + { + "predicate": { + "bloodmagic:type": 0.0 + }, + "model": "bloodmagic:item/variants/soulgemcommon" + }, + { + "predicate": { + "bloodmagic:type": 1.0 + }, + "model": "bloodmagic:item/variants/soulgemcommon_corrosive" + }, + { + "predicate": { + "bloodmagic:type": 2.0 + }, + "model": "bloodmagic:item/variants/soulgemcommon_destructive" + }, + { + "predicate": { + "bloodmagic:type": 3.0 + }, + "model": "bloodmagic:item/variants/soulgemcommon_vengeful" + }, + { + "predicate": { + "bloodmagic:type": 4.0 + }, + "model": "bloodmagic:item/variants/soulgemcommon_steadfast" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/soulgemgreater.json b/src/generated/resources/assets/bloodmagic/models/item/soulgemgreater.json new file mode 100644 index 00000000..8c237764 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/soulgemgreater.json @@ -0,0 +1,34 @@ +{ + "overrides": [ + { + "predicate": { + "bloodmagic:type": 0.0 + }, + "model": "bloodmagic:item/variants/soulgemgreater" + }, + { + "predicate": { + "bloodmagic:type": 1.0 + }, + "model": "bloodmagic:item/variants/soulgemgreater_corrosive" + }, + { + "predicate": { + "bloodmagic:type": 2.0 + }, + "model": "bloodmagic:item/variants/soulgemgreater_destructive" + }, + { + "predicate": { + "bloodmagic:type": 3.0 + }, + "model": "bloodmagic:item/variants/soulgemgreater_vengeful" + }, + { + "predicate": { + "bloodmagic:type": 4.0 + }, + "model": "bloodmagic:item/variants/soulgemgreater_steadfast" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/soulgemlesser.json b/src/generated/resources/assets/bloodmagic/models/item/soulgemlesser.json new file mode 100644 index 00000000..3489ce2f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/soulgemlesser.json @@ -0,0 +1,34 @@ +{ + "overrides": [ + { + "predicate": { + "bloodmagic:type": 0.0 + }, + "model": "bloodmagic:item/variants/soulgemlesser" + }, + { + "predicate": { + "bloodmagic:type": 1.0 + }, + "model": "bloodmagic:item/variants/soulgemlesser_corrosive" + }, + { + "predicate": { + "bloodmagic:type": 2.0 + }, + "model": "bloodmagic:item/variants/soulgemlesser_destructive" + }, + { + "predicate": { + "bloodmagic:type": 3.0 + }, + "model": "bloodmagic:item/variants/soulgemlesser_vengeful" + }, + { + "predicate": { + "bloodmagic:type": 4.0 + }, + "model": "bloodmagic:item/variants/soulgemlesser_steadfast" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/soulgempetty.json b/src/generated/resources/assets/bloodmagic/models/item/soulgempetty.json new file mode 100644 index 00000000..b8c2358c --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/soulgempetty.json @@ -0,0 +1,34 @@ +{ + "overrides": [ + { + "predicate": { + "bloodmagic:type": 0.0 + }, + "model": "bloodmagic:item/variants/soulgempetty" + }, + { + "predicate": { + "bloodmagic:type": 1.0 + }, + "model": "bloodmagic:item/variants/soulgempetty_corrosive" + }, + { + "predicate": { + "bloodmagic:type": 2.0 + }, + "model": "bloodmagic:item/variants/soulgempetty_destructive" + }, + { + "predicate": { + "bloodmagic:type": 3.0 + }, + "model": "bloodmagic:item/variants/soulgempetty_vengeful" + }, + { + "predicate": { + "bloodmagic:type": 4.0 + }, + "model": "bloodmagic:item/variants/soulgempetty_steadfast" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/soulpickaxe.json b/src/generated/resources/assets/bloodmagic/models/item/soulpickaxe.json new file mode 100644 index 00000000..14619409 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/soulpickaxe.json @@ -0,0 +1,34 @@ +{ + "overrides": [ + { + "predicate": { + "bloodmagic:type": 0.0 + }, + "model": "bloodmagic:item/variants/soulpickaxe" + }, + { + "predicate": { + "bloodmagic:type": 1.0 + }, + "model": "bloodmagic:item/variants/soulpickaxe_corrosive" + }, + { + "predicate": { + "bloodmagic:type": 2.0 + }, + "model": "bloodmagic:item/variants/soulpickaxe_destructive" + }, + { + "predicate": { + "bloodmagic:type": 3.0 + }, + "model": "bloodmagic:item/variants/soulpickaxe_vengeful" + }, + { + "predicate": { + "bloodmagic:type": 4.0 + }, + "model": "bloodmagic:item/variants/soulpickaxe_steadfast" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/soulscythe.json b/src/generated/resources/assets/bloodmagic/models/item/soulscythe.json new file mode 100644 index 00000000..54c81982 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/soulscythe.json @@ -0,0 +1,34 @@ +{ + "overrides": [ + { + "predicate": { + "bloodmagic:type": 0.0 + }, + "model": "bloodmagic:item/variants/soulscythe" + }, + { + "predicate": { + "bloodmagic:type": 1.0 + }, + "model": "bloodmagic:item/variants/soulscythe_corrosive" + }, + { + "predicate": { + "bloodmagic:type": 2.0 + }, + "model": "bloodmagic:item/variants/soulscythe_destructive" + }, + { + "predicate": { + "bloodmagic:type": 3.0 + }, + "model": "bloodmagic:item/variants/soulscythe_vengeful" + }, + { + "predicate": { + "bloodmagic:type": 4.0 + }, + "model": "bloodmagic:item/variants/soulscythe_steadfast" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/soulshovel.json b/src/generated/resources/assets/bloodmagic/models/item/soulshovel.json new file mode 100644 index 00000000..b6d3c67e --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/soulshovel.json @@ -0,0 +1,34 @@ +{ + "overrides": [ + { + "predicate": { + "bloodmagic:type": 0.0 + }, + "model": "bloodmagic:item/variants/soulshovel" + }, + { + "predicate": { + "bloodmagic:type": 1.0 + }, + "model": "bloodmagic:item/variants/soulshovel_corrosive" + }, + { + "predicate": { + "bloodmagic:type": 2.0 + }, + "model": "bloodmagic:item/variants/soulshovel_destructive" + }, + { + "predicate": { + "bloodmagic:type": 3.0 + }, + "model": "bloodmagic:item/variants/soulshovel_vengeful" + }, + { + "predicate": { + "bloodmagic:type": 4.0 + }, + "model": "bloodmagic:item/variants/soulshovel_steadfast" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/soulsnare.json b/src/generated/resources/assets/bloodmagic/models/item/soulsnare.json new file mode 100644 index 00000000..91fa098e --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/soulsnare.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/soulsnare" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/soulsword.json b/src/generated/resources/assets/bloodmagic/models/item/soulsword.json new file mode 100644 index 00000000..47e58c18 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/soulsword.json @@ -0,0 +1,74 @@ +{ + "overrides": [ + { + "predicate": { + "bloodmagic:type": 0.0, + "bloodmagic:active": 0.0 + }, + "model": "bloodmagic:item/variants/soulsword_deactivated" + }, + { + "predicate": { + "bloodmagic:type": 1.0, + "bloodmagic:active": 0.0 + }, + "model": "bloodmagic:item/variants/soulsword_corrosive_deactivated" + }, + { + "predicate": { + "bloodmagic:type": 2.0, + "bloodmagic:active": 0.0 + }, + "model": "bloodmagic:item/variants/soulsword_destructive_deactivated" + }, + { + "predicate": { + "bloodmagic:type": 3.0, + "bloodmagic:active": 0.0 + }, + "model": "bloodmagic:item/variants/soulsword_vengeful_deactivated" + }, + { + "predicate": { + "bloodmagic:type": 4.0, + "bloodmagic:active": 0.0 + }, + "model": "bloodmagic:item/variants/soulsword_steadfast_deactivated" + }, + { + "predicate": { + "bloodmagic:type": 0.0, + "bloodmagic:active": 1.0 + }, + "model": "bloodmagic:item/variants/soulsword_activated" + }, + { + "predicate": { + "bloodmagic:type": 1.0, + "bloodmagic:active": 1.0 + }, + "model": "bloodmagic:item/variants/soulsword_corrosive_activated" + }, + { + "predicate": { + "bloodmagic:type": 2.0, + "bloodmagic:active": 1.0 + }, + "model": "bloodmagic:item/variants/soulsword_destructive_activated" + }, + { + "predicate": { + "bloodmagic:type": 3.0, + "bloodmagic:active": 1.0 + }, + "model": "bloodmagic:item/variants/soulsword_vengeful_activated" + }, + { + "predicate": { + "bloodmagic:type": 4.0, + "bloodmagic:active": 1.0 + }, + "model": "bloodmagic:item/variants/soulsword_steadfast_activated" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/speedrune.json b/src/generated/resources/assets/bloodmagic/models/item/speedrune.json new file mode 100644 index 00000000..d2bec661 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/speedrune.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/speedrune" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/steadfastcrystal.json b/src/generated/resources/assets/bloodmagic/models/item/steadfastcrystal.json new file mode 100644 index 00000000..5a4fee55 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/steadfastcrystal.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/steadfastcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/steadfastdemoncrystal.json b/src/generated/resources/assets/bloodmagic/models/item/steadfastdemoncrystal.json new file mode 100644 index 00000000..d874984d --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/steadfastdemoncrystal.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/crystal/steadfastcrystal1" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/stonebrickpath.json b/src/generated/resources/assets/bloodmagic/models/item/stonebrickpath.json new file mode 100644 index 00000000..f7f36e89 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/stonebrickpath.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/stonebrickpath" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/stonetilepath.json b/src/generated/resources/assets/bloodmagic/models/item/stonetilepath.json new file mode 100644 index 00000000..42594e88 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/stonetilepath.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/stonetilepath" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/sulfur.json b/src/generated/resources/assets/bloodmagic/models/item/sulfur.json new file mode 100644 index 00000000..c52f67e0 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/sulfur.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/sulfur" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/throwing_dagger.json b/src/generated/resources/assets/bloodmagic/models/item/throwing_dagger.json new file mode 100644 index 00000000..59297614 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/throwing_dagger.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/throwing_dagger" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/throwing_dagger_syringe.json b/src/generated/resources/assets/bloodmagic/models/item/throwing_dagger_syringe.json new file mode 100644 index 00000000..2e98d782 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/throwing_dagger_syringe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/throwing_dagger_syringe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/upgradetome.json b/src/generated/resources/assets/bloodmagic/models/item/upgradetome.json new file mode 100644 index 00000000..674756d4 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/upgradetome.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/upgradetome" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/growthsigil_activated.json b/src/generated/resources/assets/bloodmagic/models/item/variants/growthsigil_activated.json new file mode 100644 index 00000000..0f5b60bd --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/growthsigil_activated.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/growthsigil_activated" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/growthsigil_deactivated.json b/src/generated/resources/assets/bloodmagic/models/item/variants/growthsigil_deactivated.json new file mode 100644 index 00000000..5d14ea40 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/growthsigil_deactivated.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/growthsigil_deactivated" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/icesigil_activated.json b/src/generated/resources/assets/bloodmagic/models/item/variants/icesigil_activated.json new file mode 100644 index 00000000..9f6e940a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/icesigil_activated.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/icesigil_activated" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/icesigil_deactivated.json b/src/generated/resources/assets/bloodmagic/models/item/variants/icesigil_deactivated.json new file mode 100644 index 00000000..5a461a5d --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/icesigil_deactivated.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/icesigil_deactivated" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/miningsigil_activated.json b/src/generated/resources/assets/bloodmagic/models/item/variants/miningsigil_activated.json new file mode 100644 index 00000000..12877c52 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/miningsigil_activated.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/miningsigil_activated" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/miningsigil_deactivated.json b/src/generated/resources/assets/bloodmagic/models/item/variants/miningsigil_deactivated.json new file mode 100644 index 00000000..858e701f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/miningsigil_deactivated.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/miningsigil_deactivated" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/sacrificialdagger.json b/src/generated/resources/assets/bloodmagic/models/item/variants/sacrificialdagger.json new file mode 100644 index 00000000..20e1c9f1 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/sacrificialdagger.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/sacrificialdagger" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/sacrificialdagger_ceremonial.json b/src/generated/resources/assets/bloodmagic/models/item/variants/sacrificialdagger_ceremonial.json new file mode 100644 index 00000000..ba8ea9db --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/sacrificialdagger_ceremonial.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/sacrificialdagger_ceremonial" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/sigilofmagnetism_activated.json b/src/generated/resources/assets/bloodmagic/models/item/variants/sigilofmagnetism_activated.json new file mode 100644 index 00000000..b49d9096 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/sigilofmagnetism_activated.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/sigilofmagnetism_activated" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/sigilofmagnetism_deactivated.json b/src/generated/resources/assets/bloodmagic/models/item/variants/sigilofmagnetism_deactivated.json new file mode 100644 index 00000000..f0b2fa42 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/sigilofmagnetism_deactivated.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/sigilofmagnetism_deactivated" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulaxe.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulaxe.json new file mode 100644 index 00000000..30fdc78b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulaxe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulaxe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulaxe_corrosive.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulaxe_corrosive.json new file mode 100644 index 00000000..a55f906f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulaxe_corrosive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulaxe_corrosive" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulaxe_destructive.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulaxe_destructive.json new file mode 100644 index 00000000..8df2b5f9 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulaxe_destructive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulaxe_destructive" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulaxe_steadfast.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulaxe_steadfast.json new file mode 100644 index 00000000..d67ffdc2 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulaxe_steadfast.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulaxe_steadfast" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulaxe_vengeful.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulaxe_vengeful.json new file mode 100644 index 00000000..57f65f4c --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulaxe_vengeful.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulaxe_vengeful" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemcommon.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemcommon.json new file mode 100644 index 00000000..460ba68b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemcommon.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulgemcommon" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemcommon_corrosive.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemcommon_corrosive.json new file mode 100644 index 00000000..0fa3a377 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemcommon_corrosive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulgemcommon_corrosive" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemcommon_destructive.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemcommon_destructive.json new file mode 100644 index 00000000..2e30b739 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemcommon_destructive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulgemcommon_destructive" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemcommon_steadfast.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemcommon_steadfast.json new file mode 100644 index 00000000..56b5b375 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemcommon_steadfast.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulgemcommon_steadfast" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemcommon_vengeful.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemcommon_vengeful.json new file mode 100644 index 00000000..fc3b3fd5 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemcommon_vengeful.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulgemcommon_vengeful" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemgreater.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemgreater.json new file mode 100644 index 00000000..00ffd7ea --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemgreater.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulgemgreater" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemgreater_corrosive.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemgreater_corrosive.json new file mode 100644 index 00000000..bdbcf609 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemgreater_corrosive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulgemgreater_corrosive" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemgreater_destructive.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemgreater_destructive.json new file mode 100644 index 00000000..285cff8e --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemgreater_destructive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulgemgreater_destructive" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemgreater_steadfast.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemgreater_steadfast.json new file mode 100644 index 00000000..beb0d2a7 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemgreater_steadfast.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulgemgreater_steadfast" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemgreater_vengeful.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemgreater_vengeful.json new file mode 100644 index 00000000..2808693f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemgreater_vengeful.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulgemgreater_vengeful" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemlesser.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemlesser.json new file mode 100644 index 00000000..7a253c28 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemlesser.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulgemlesser" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemlesser_corrosive.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemlesser_corrosive.json new file mode 100644 index 00000000..a191b1f6 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemlesser_corrosive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulgemlesser_corrosive" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemlesser_destructive.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemlesser_destructive.json new file mode 100644 index 00000000..241d5b93 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemlesser_destructive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulgemlesser_destructive" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemlesser_steadfast.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemlesser_steadfast.json new file mode 100644 index 00000000..9ea458c2 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemlesser_steadfast.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulgemlesser_steadfast" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemlesser_vengeful.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemlesser_vengeful.json new file mode 100644 index 00000000..dbc3cc32 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgemlesser_vengeful.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulgemlesser_vengeful" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulgempetty.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgempetty.json new file mode 100644 index 00000000..3085ac3b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgempetty.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulgempetty" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulgempetty_corrosive.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgempetty_corrosive.json new file mode 100644 index 00000000..b5c185ea --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgempetty_corrosive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulgempetty_corrosive" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulgempetty_destructive.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgempetty_destructive.json new file mode 100644 index 00000000..955e2c62 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgempetty_destructive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulgempetty_destructive" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulgempetty_steadfast.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgempetty_steadfast.json new file mode 100644 index 00000000..5031e33f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgempetty_steadfast.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulgempetty_steadfast" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulgempetty_vengeful.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgempetty_vengeful.json new file mode 100644 index 00000000..e7ae0df4 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulgempetty_vengeful.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulgempetty_vengeful" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulpickaxe.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulpickaxe.json new file mode 100644 index 00000000..fe117924 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulpickaxe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulpickaxe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulpickaxe_corrosive.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulpickaxe_corrosive.json new file mode 100644 index 00000000..1e88cff5 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulpickaxe_corrosive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulpickaxe_corrosive" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulpickaxe_destructive.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulpickaxe_destructive.json new file mode 100644 index 00000000..2aaac132 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulpickaxe_destructive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulpickaxe_destructive" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulpickaxe_steadfast.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulpickaxe_steadfast.json new file mode 100644 index 00000000..8f6ed094 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulpickaxe_steadfast.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulpickaxe_steadfast" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulpickaxe_vengeful.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulpickaxe_vengeful.json new file mode 100644 index 00000000..bd938ace --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulpickaxe_vengeful.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulpickaxe_vengeful" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulscythe.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulscythe.json new file mode 100644 index 00000000..c6ada5af --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulscythe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulscythe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulscythe_corrosive.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulscythe_corrosive.json new file mode 100644 index 00000000..9da5186f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulscythe_corrosive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulscythe_corrosive" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulscythe_destructive.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulscythe_destructive.json new file mode 100644 index 00000000..a9e5999b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulscythe_destructive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulscythe_destructive" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulscythe_steadfast.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulscythe_steadfast.json new file mode 100644 index 00000000..9a8e1765 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulscythe_steadfast.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulscythe_steadfast" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulscythe_vengeful.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulscythe_vengeful.json new file mode 100644 index 00000000..e0a42699 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulscythe_vengeful.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulscythe_vengeful" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulshovel.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulshovel.json new file mode 100644 index 00000000..ad3f0972 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulshovel.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulshovel" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulshovel_corrosive.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulshovel_corrosive.json new file mode 100644 index 00000000..93b102a0 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulshovel_corrosive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulshovel_corrosive" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulshovel_destructive.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulshovel_destructive.json new file mode 100644 index 00000000..34bbd132 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulshovel_destructive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulshovel_destructive" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulshovel_steadfast.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulshovel_steadfast.json new file mode 100644 index 00000000..3da6185d --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulshovel_steadfast.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulshovel_steadfast" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulshovel_vengeful.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulshovel_vengeful.json new file mode 100644 index 00000000..2a9bbdf2 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulshovel_vengeful.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulshovel_vengeful" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_activated.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_activated.json new file mode 100644 index 00000000..9ade5a1a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_activated.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulsword_activated" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_corrosive_activated.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_corrosive_activated.json new file mode 100644 index 00000000..55c0bb87 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_corrosive_activated.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulsword_corrosive_activated" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_corrosive_deactivated.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_corrosive_deactivated.json new file mode 100644 index 00000000..610f36ce --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_corrosive_deactivated.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulsword_corrosive_deactivated" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_deactivated.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_deactivated.json new file mode 100644 index 00000000..c87c8ee7 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_deactivated.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulsword_deactivated" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_destructive_activated.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_destructive_activated.json new file mode 100644 index 00000000..e34becaa --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_destructive_activated.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulsword_destructive_activated" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_destructive_deactivated.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_destructive_deactivated.json new file mode 100644 index 00000000..78ddb49b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_destructive_deactivated.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulsword_destructive_deactivated" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_steadfast_activated.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_steadfast_activated.json new file mode 100644 index 00000000..40313e52 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_steadfast_activated.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulsword_steadfast_activated" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_steadfast_deactivated.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_steadfast_deactivated.json new file mode 100644 index 00000000..13aa70f1 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_steadfast_deactivated.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulsword_steadfast_deactivated" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_vengeful_activated.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_vengeful_activated.json new file mode 100644 index 00000000..1547ea7e --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_vengeful_activated.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulsword_vengeful_activated" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_vengeful_deactivated.json b/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_vengeful_deactivated.json new file mode 100644 index 00000000..64c72e95 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/soulsword_vengeful_deactivated.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/soulsword_vengeful_deactivated" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/veinmine_charge.json b/src/generated/resources/assets/bloodmagic/models/item/veinmine_charge.json new file mode 100644 index 00000000..d4e412ca --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/veinmine_charge.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/veinmine_charge" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/vengefulcrystal.json b/src/generated/resources/assets/bloodmagic/models/item/vengefulcrystal.json new file mode 100644 index 00000000..1256032a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/vengefulcrystal.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/vengefulcrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/vengefuldemoncrystal.json b/src/generated/resources/assets/bloodmagic/models/item/vengefuldemoncrystal.json new file mode 100644 index 00000000..b116d448 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/vengefuldemoncrystal.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/crystal/vengefulcrystal1" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/voidsigil.json b/src/generated/resources/assets/bloodmagic/models/item/voidsigil.json new file mode 100644 index 00000000..41dac6e2 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/voidsigil.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/voidsigil" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/waterritualstone.json b/src/generated/resources/assets/bloodmagic/models/item/waterritualstone.json new file mode 100644 index 00000000..4c02099f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/waterritualstone.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/waterritualstone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/waterscribetool.json b/src/generated/resources/assets/bloodmagic/models/item/waterscribetool.json new file mode 100644 index 00000000..658f9c03 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/waterscribetool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/waterscribetool" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/watersigil.json b/src/generated/resources/assets/bloodmagic/models/item/watersigil.json new file mode 100644 index 00000000..12a3f053 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/watersigil.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/watersigil" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/weakbloodorb.json b/src/generated/resources/assets/bloodmagic/models/item/weakbloodorb.json new file mode 100644 index 00000000..93800f41 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/weakbloodorb.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/weakbloodorb" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/weakbloodshard.json b/src/generated/resources/assets/bloodmagic/models/item/weakbloodshard.json new file mode 100644 index 00000000..8cc8378f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/weakbloodshard.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/weakbloodshard" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/will_power_anointment.json b/src/generated/resources/assets/bloodmagic/models/item/will_power_anointment.json new file mode 100644 index 00000000..057dedef --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/will_power_anointment.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "bloodmagic:item/alchemic_vial_will", + "layer1": "bloodmagic:item/alchemic_liquid", + "layer2": "bloodmagic:item/alchemic_ribbon_will" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/woodbrickpath.json b/src/generated/resources/assets/bloodmagic/models/item/woodbrickpath.json new file mode 100644 index 00000000..d598f8f7 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/woodbrickpath.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/woodbrickpath" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/woodtilepath.json b/src/generated/resources/assets/bloodmagic/models/item/woodtilepath.json new file mode 100644 index 00000000..fd20da53 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/woodtilepath.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/woodtilepath" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/wornstonebrickpath.json b/src/generated/resources/assets/bloodmagic/models/item/wornstonebrickpath.json new file mode 100644 index 00000000..78f2ee16 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/wornstonebrickpath.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/wornstonebrickpath" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/wornstonetilepath.json b/src/generated/resources/assets/bloodmagic/models/item/wornstonetilepath.json new file mode 100644 index 00000000..7394723f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/wornstonetilepath.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/wornstonetilepath" +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/alchemy_table.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/alchemy_table.json new file mode 100644 index 00000000..6f38ef77 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/alchemy_table.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:alchemy_table" + ] + }, + "criteria": { + "has_blank_slate": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:blankslate" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:alchemy_table" + } + } + }, + "requirements": [ + [ + "has_blank_slate", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/arc.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/arc.json new file mode 100644 index 00000000..8fdd602b --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/arc.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:arc" + ] + }, + "criteria": { + "has_magician_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:magicianbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:arc" + } + } + }, + "requirements": [ + [ + "has_magician_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_altar.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_altar.json new file mode 100644 index 00000000..7eff31d1 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_altar.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:blood_altar" + ] + }, + "criteria": { + "has_gold": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gold_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:blood_altar" + } + } + }, + "requirements": [ + [ + "has_gold", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_acceleration.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_acceleration.json new file mode 100644 index 00000000..e0555e28 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_acceleration.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:blood_rune_acceleration" + ] + }, + "criteria": { + "has_master_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:masterbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:blood_rune_acceleration" + } + } + }, + "requirements": [ + [ + "has_master_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_aug_capacity.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_aug_capacity.json new file mode 100644 index 00000000..4de0eed5 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_aug_capacity.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:blood_rune_aug_capacity" + ] + }, + "criteria": { + "has_master_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:masterbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:blood_rune_aug_capacity" + } + } + }, + "requirements": [ + [ + "has_master_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_blank.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_blank.json new file mode 100644 index 00000000..3de3b9d5 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_blank.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:blood_rune_blank" + ] + }, + "criteria": { + "has_weak_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:weakbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:blood_rune_blank" + } + } + }, + "requirements": [ + [ + "has_weak_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_capacity.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_capacity.json new file mode 100644 index 00000000..85b29fb4 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_capacity.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:blood_rune_capacity" + ] + }, + "criteria": { + "has_imbued_slate": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:infusedslate" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:blood_rune_capacity" + } + } + }, + "requirements": [ + [ + "has_imbued_slate", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_charging.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_charging.json new file mode 100644 index 00000000..c2add425 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_charging.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:blood_rune_charging" + ] + }, + "criteria": { + "has_master_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:masterbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:blood_rune_charging" + } + } + }, + "requirements": [ + [ + "has_master_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_displacement.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_displacement.json new file mode 100644 index 00000000..6e77a0e8 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_displacement.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:blood_rune_displacement" + ] + }, + "criteria": { + "has_imbued_slate": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:infusedslate" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:blood_rune_displacement" + } + } + }, + "requirements": [ + [ + "has_imbued_slate", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_orb.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_orb.json new file mode 100644 index 00000000..46aaf95c --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_orb.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:blood_rune_orb" + ] + }, + "criteria": { + "has_master_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:masterbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:blood_rune_orb" + } + } + }, + "requirements": [ + [ + "has_master_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_sacrifice.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_sacrifice.json new file mode 100644 index 00000000..2b7ee148 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_sacrifice.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:blood_rune_sacrifice" + ] + }, + "criteria": { + "has_apprentice_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:apprenticebloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:blood_rune_sacrifice" + } + } + }, + "requirements": [ + [ + "has_apprentice_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_self_sacrifice.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_self_sacrifice.json new file mode 100644 index 00000000..076daaee --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_self_sacrifice.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:blood_rune_self_sacrifice" + ] + }, + "criteria": { + "has_apprentice_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:apprenticebloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:blood_rune_self_sacrifice" + } + } + }, + "requirements": [ + [ + "has_apprentice_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_speed.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_speed.json new file mode 100644 index 00000000..7a866e04 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_speed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:blood_rune_speed" + ] + }, + "criteria": { + "has_blank_rune": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:blankrune" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:blood_rune_speed" + } + } + }, + "requirements": [ + [ + "has_blank_rune", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/bloodstonebrick.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/bloodstonebrick.json new file mode 100644 index 00000000..37f650c6 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/bloodstonebrick.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:bloodstonebrick" + ] + }, + "criteria": { + "has_weak_shard": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:weakbloodshard" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:bloodstonebrick" + } + } + }, + "requirements": [ + [ + "has_weak_shard", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/corrupted_dust.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/corrupted_dust.json new file mode 100644 index 00000000..885b1b2f --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/corrupted_dust.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:corrupted_dust" + ] + }, + "criteria": { + "has_tiny": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:corrupted_tinydust" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:corrupted_dust" + } + } + }, + "requirements": [ + [ + "has_tiny", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/experience_tome.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/experience_tome.json new file mode 100644 index 00000000..16e94029 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/experience_tome.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:experience_tome" + ] + }, + "criteria": { + "has_magician_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:magicianbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:experience_tome" + } + } + }, + "requirements": [ + [ + "has_magician_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/hellforged_block.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/hellforged_block.json new file mode 100644 index 00000000..cf79dc99 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/hellforged_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:hellforged_block" + ] + }, + "criteria": { + "has_hellforged": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:ingot_hellforged" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:hellforged_block" + } + } + }, + "requirements": [ + [ + "has_hellforged", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/incense_altar.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/incense_altar.json new file mode 100644 index 00000000..cc469b58 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/incense_altar.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:incense_altar" + ] + }, + "criteria": { + "has_weak_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:weakbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:incense_altar" + } + } + }, + "requirements": [ + [ + "has_weak_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/largebloodstonebrick.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/largebloodstonebrick.json new file mode 100644 index 00000000..cef9ce21 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/largebloodstonebrick.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:largebloodstonebrick" + ] + }, + "criteria": { + "has_weak_shard": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:weakbloodshard" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:largebloodstonebrick" + } + } + }, + "requirements": [ + [ + "has_weak_shard", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/lava_crystal.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/lava_crystal.json new file mode 100644 index 00000000..84bc8f36 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/lava_crystal.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:lava_crystal" + ] + }, + "criteria": { + "has_weak_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:weakbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:lava_crystal" + } + } + }, + "requirements": [ + [ + "has_weak_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_stone.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_stone.json new file mode 100644 index 00000000..c4388608 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_stone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:path/path_stone" + ] + }, + "criteria": { + "has_magician_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:magicianbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:path/path_stone" + } + } + }, + "requirements": [ + [ + "has_magician_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_stonetile.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_stonetile.json new file mode 100644 index 00000000..e89a4e06 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_stonetile.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:path/path_stonetile" + ] + }, + "criteria": { + "has_magician_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:magicianbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:path/path_stonetile" + } + } + }, + "requirements": [ + [ + "has_magician_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wood.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wood.json new file mode 100644 index 00000000..dd6dc1ec --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wood.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:path/path_wood" + ] + }, + "criteria": { + "has_apprentice_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:apprenticebloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:path/path_wood" + } + } + }, + "requirements": [ + [ + "has_apprentice_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_woodtile.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_woodtile.json new file mode 100644 index 00000000..1e7d7d71 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_woodtile.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:path/path_woodtile" + ] + }, + "criteria": { + "has_apprentice_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:apprenticebloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:path/path_woodtile" + } + } + }, + "requirements": [ + [ + "has_apprentice_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wornstone.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wornstone.json new file mode 100644 index 00000000..cde914c3 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wornstone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:path/path_wornstone" + ] + }, + "criteria": { + "has_master_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:masterbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:path/path_wornstone" + } + } + }, + "requirements": [ + [ + "has_master_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wornstonetile.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wornstonetile.json new file mode 100644 index 00000000..658edfb7 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wornstonetile.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:path/path_wornstonetile" + ] + }, + "criteria": { + "has_master_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:masterbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:path/path_wornstonetile" + } + } + }, + "requirements": [ + [ + "has_master_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/primitive_furnace_cell.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/primitive_furnace_cell.json new file mode 100644 index 00000000..801f59f1 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/primitive_furnace_cell.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:primitive_furnace_cell" + ] + }, + "criteria": { + "has_magician_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:magicianbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:primitive_furnace_cell" + } + } + }, + "requirements": [ + [ + "has_magician_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/primitive_hydration_cell.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/primitive_hydration_cell.json new file mode 100644 index 00000000..69a0f6b6 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/primitive_hydration_cell.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:primitive_hydration_cell" + ] + }, + "criteria": { + "has_magician_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:magicianbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:primitive_hydration_cell" + } + } + }, + "requirements": [ + [ + "has_magician_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/ritual_diviner_0.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/ritual_diviner_0.json new file mode 100644 index 00000000..ac4dd373 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/ritual_diviner_0.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:ritual_diviner_0" + ] + }, + "criteria": { + "has_scribe": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:airscribetool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:ritual_diviner_0" + } + } + }, + "requirements": [ + [ + "has_scribe", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/ritual_diviner_1.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/ritual_diviner_1.json new file mode 100644 index 00000000..b671e3bd --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/ritual_diviner_1.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:ritual_diviner_1" + ] + }, + "criteria": { + "has_demon_slate": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:demonslate" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:ritual_diviner_1" + } + } + }, + "requirements": [ + [ + "has_demon_slate", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/ritual_reader.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/ritual_reader.json new file mode 100644 index 00000000..f6f08c7a --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/ritual_reader.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:ritual_reader" + ] + }, + "criteria": { + "has_master_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:masterbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:ritual_reader" + } + } + }, + "requirements": [ + [ + "has_master_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/ritual_stone_blank.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/ritual_stone_blank.json new file mode 100644 index 00000000..ef6c9fdb --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/ritual_stone_blank.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:ritual_stone_blank" + ] + }, + "criteria": { + "has_apprentice_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:apprenticebloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:ritual_stone_blank" + } + } + }, + "requirements": [ + [ + "has_apprentice_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/ritual_stone_master.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/ritual_stone_master.json new file mode 100644 index 00000000..878c9ebb --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/ritual_stone_master.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:ritual_stone_master" + ] + }, + "criteria": { + "has_magician_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:magicianbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:ritual_stone_master" + } + } + }, + "requirements": [ + [ + "has_magician_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/sacrificial_dagger.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/sacrificial_dagger.json new file mode 100644 index 00000000..744c16e1 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/sacrificial_dagger.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:sacrificial_dagger" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:sacrificial_dagger" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/smelting/ingot_hellforged.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/smelting/ingot_hellforged.json new file mode 100644 index 00000000..bd8021ec --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/smelting/ingot_hellforged.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:smelting/ingot_hellforged" + ] + }, + "criteria": { + "has_hellforged_dust": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:sand_hellforged" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:smelting/ingot_hellforged" + } + } + }, + "requirements": [ + [ + "has_hellforged_dust", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/soul_forge.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/soul_forge.json new file mode 100644 index 00000000..262a22ec --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/soul_forge.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:soul_forge" + ] + }, + "criteria": { + "has_blank_slate": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:blankslate" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:soul_forge" + } + } + }, + "requirements": [ + [ + "has_blank_slate", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/misc/smelting/ingot_gold.json b/src/generated/resources/data/bloodmagic/advancements/recipes/misc/smelting/ingot_gold.json new file mode 100644 index 00000000..aceef4c7 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/misc/smelting/ingot_gold.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:smelting/ingot_gold" + ] + }, + "criteria": { + "has_gold_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:goldsand" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:smelting/ingot_gold" + } + } + }, + "requirements": [ + [ + "has_gold_sand", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/misc/smelting/ingot_iron.json b/src/generated/resources/data/bloodmagic/advancements/recipes/misc/smelting/ingot_iron.json new file mode 100644 index 00000000..444757df --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/misc/smelting/ingot_iron.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:smelting/ingot_iron" + ] + }, + "criteria": { + "has_iron_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:ironsand" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:smelting/ingot_iron" + } + } + }, + "requirements": [ + [ + "has_iron_sand", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/misc/smelting/ingot_netherite_scrap.json b/src/generated/resources/data/bloodmagic/advancements/recipes/misc/smelting/ingot_netherite_scrap.json new file mode 100644 index 00000000..5265d945 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/misc/smelting/ingot_netherite_scrap.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:smelting/ingot_netherite_scrap" + ] + }, + "criteria": { + "has_netherite_dust": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:sand_netherite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:smelting/ingot_netherite_scrap" + } + } + }, + "requirements": [ + [ + "has_netherite_dust", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/accelerationrune.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/accelerationrune.json new file mode 100644 index 00000000..bff0c94d --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/accelerationrune.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:accelerationrune" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/airritualstone.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/airritualstone.json new file mode 100644 index 00000000..e8935390 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/airritualstone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:ritualstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/alchemicalreactionchamber.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/alchemicalreactionchamber.json new file mode 100644 index 00000000..e3d6ee73 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/alchemicalreactionchamber.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:alchemicalreactionchamber" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/alchemyarray.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/alchemyarray.json new file mode 100644 index 00000000..f27b7f82 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/alchemyarray.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "name": "bloodmagic:alchemyarray", + "rolls": 1.0, + "entries": [] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/alchemytable.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/alchemytable.json new file mode 100644 index 00000000..35297d28 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/alchemytable.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:alchemytable" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/altar.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/altar.json new file mode 100644 index 00000000..49c1cf36 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/altar.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:altar" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/altarcapacityrune.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/altarcapacityrune.json new file mode 100644 index 00000000..a71126ce --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/altarcapacityrune.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:altarcapacityrune" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/bettercapacityrune.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/bettercapacityrune.json new file mode 100644 index 00000000..eb0cce26 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/bettercapacityrune.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:bettercapacityrune" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/blankrune.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/blankrune.json new file mode 100644 index 00000000..80a59b7a --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/blankrune.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:blankrune" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/bloodlight.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/bloodlight.json new file mode 100644 index 00000000..20e1ab88 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/bloodlight.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "name": "bloodmagic:bloodlight", + "rolls": 1.0, + "entries": [] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/bloodstonebrick.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/bloodstonebrick.json new file mode 100644 index 00000000..3f2c2b35 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/bloodstonebrick.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:bloodstonebrick" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/chargingrune.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/chargingrune.json new file mode 100644 index 00000000..66c32d3f --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/chargingrune.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:chargingrune" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/corrosivedemoncrystal.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/corrosivedemoncrystal.json new file mode 100644 index 00000000..d2cad931 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/corrosivedemoncrystal.json @@ -0,0 +1,173 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:corrosivedemoncrystal", + "properties": { + "age": "0" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "bloodmagic:corrosivecrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:corrosivedemoncrystal", + "properties": { + "age": "1" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 2 + } + ], + "name": "bloodmagic:corrosivecrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:corrosivedemoncrystal", + "properties": { + "age": "2" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 3 + } + ], + "name": "bloodmagic:corrosivecrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:corrosivedemoncrystal", + "properties": { + "age": "3" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 4 + } + ], + "name": "bloodmagic:corrosivecrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:corrosivedemoncrystal", + "properties": { + "age": "4" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 5 + } + ], + "name": "bloodmagic:corrosivecrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:corrosivedemoncrystal", + "properties": { + "age": "5" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 6 + } + ], + "name": "bloodmagic:corrosivecrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:corrosivedemoncrystal", + "properties": { + "age": "6" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 7 + } + ], + "name": "bloodmagic:corrosivecrystal" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/creeping_doubt.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/creeping_doubt.json new file mode 100644 index 00000000..2c5b9549 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/creeping_doubt.json @@ -0,0 +1,173 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:creeping_doubt", + "properties": { + "age": "0" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "bloodmagic:weakbloodshard" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:creeping_doubt", + "properties": { + "age": "1" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "bloodmagic:weakbloodshard" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:creeping_doubt", + "properties": { + "age": "2" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "bloodmagic:weakbloodshard" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:creeping_doubt", + "properties": { + "age": "3" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "bloodmagic:weakbloodshard" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:creeping_doubt", + "properties": { + "age": "4" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "bloodmagic:weakbloodshard" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:creeping_doubt", + "properties": { + "age": "5" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "bloodmagic:weakbloodshard" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:creeping_doubt", + "properties": { + "age": "6" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "bloodmagic:weakbloodshard" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/deforester_charge.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/deforester_charge.json new file mode 100644 index 00000000..78e28375 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/deforester_charge.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "name": "bloodmagic:deforester_charge", + "rolls": 1.0, + "entries": [] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/demoncrucible.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/demoncrucible.json new file mode 100644 index 00000000..3e3a8d39 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/demoncrucible.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:demoncrucible" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/demoncrystallizer.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/demoncrystallizer.json new file mode 100644 index 00000000..55cce224 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/demoncrystallizer.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:demoncrystallizer" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/destructivedemoncrystal.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/destructivedemoncrystal.json new file mode 100644 index 00000000..a42c22e1 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/destructivedemoncrystal.json @@ -0,0 +1,173 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:destructivedemoncrystal", + "properties": { + "age": "0" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "bloodmagic:destructivecrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:destructivedemoncrystal", + "properties": { + "age": "1" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 2 + } + ], + "name": "bloodmagic:destructivecrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:destructivedemoncrystal", + "properties": { + "age": "2" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 3 + } + ], + "name": "bloodmagic:destructivecrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:destructivedemoncrystal", + "properties": { + "age": "3" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 4 + } + ], + "name": "bloodmagic:destructivecrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:destructivedemoncrystal", + "properties": { + "age": "4" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 5 + } + ], + "name": "bloodmagic:destructivecrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:destructivedemoncrystal", + "properties": { + "age": "5" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 6 + } + ], + "name": "bloodmagic:destructivecrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:destructivedemoncrystal", + "properties": { + "age": "6" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 7 + } + ], + "name": "bloodmagic:destructivecrystal" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dislocationrune.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dislocationrune.json new file mode 100644 index 00000000..d158c403 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dislocationrune.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dislocationrune" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick1.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick1.json new file mode 100644 index 00000000..5bf91c81 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick1.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_brick1" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick2.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick2.json new file mode 100644 index 00000000..491a46ec --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick2.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_brick2" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick3.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick3.json new file mode 100644 index 00000000..ef502cb0 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick3.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_brick3" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick_assorted.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick_assorted.json new file mode 100644 index 00000000..01211879 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick_assorted.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_brick_assorted" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick_gate.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick_gate.json new file mode 100644 index 00000000..bd9af9b7 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick_gate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_brick_gate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick_stairs.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick_stairs.json new file mode 100644 index 00000000..8df43bad --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_brick_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick_wall.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick_wall.json new file mode 100644 index 00000000..f047c0cd --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_brick_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_brick_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_eye.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_eye.json new file mode 100644 index 00000000..d7a703f1 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_eye.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_eye" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_metal.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_metal.json new file mode 100644 index 00000000..6b57213b --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_metal.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_metal" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_ore.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_ore.json new file mode 100644 index 00000000..666396e2 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_ore.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_ore" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_pillar_cap.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_pillar_cap.json new file mode 100644 index 00000000..29906c2d --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_pillar_cap.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_pillar_cap" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_pillar_center.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_pillar_center.json new file mode 100644 index 00000000..5aa43bb8 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_pillar_center.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_pillar_center" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_pillar_special.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_pillar_special.json new file mode 100644 index 00000000..bde90c58 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_pillar_special.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_pillar_special" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_polished.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_polished.json new file mode 100644 index 00000000..fa0436f5 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_polished.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_polished" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_polished_gate.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_polished_gate.json new file mode 100644 index 00000000..46d3c924 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_polished_gate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_polished_gate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_polished_stairs.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_polished_stairs.json new file mode 100644 index 00000000..fc7d93be --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_polished_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_polished_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_polished_wall.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_polished_wall.json new file mode 100644 index 00000000..e3c69dbb --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_polished_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_polished_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_smallbrick.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_smallbrick.json new file mode 100644 index 00000000..872ac5de --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_smallbrick.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_smallbrick" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_stone.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_stone.json new file mode 100644 index 00000000..7fc9228d --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_stone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_stone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_tile.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_tile.json new file mode 100644 index 00000000..b8211e0f --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_tile.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_tile" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_tilespecial.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_tilespecial.json new file mode 100644 index 00000000..3f90bc80 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/dungeon_tilespecial.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:dungeon_tilespecial" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/duskritualstone.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/duskritualstone.json new file mode 100644 index 00000000..e8935390 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/duskritualstone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:ritualstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/earthritualstone.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/earthritualstone.json new file mode 100644 index 00000000..e8935390 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/earthritualstone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:ritualstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/ethereal_mimic.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/ethereal_mimic.json new file mode 100644 index 00000000..abe50fb6 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/ethereal_mimic.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:ethereal_mimic" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/fireritualstone.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/fireritualstone.json new file mode 100644 index 00000000..e8935390 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/fireritualstone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:ritualstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/fungal_charge.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/fungal_charge.json new file mode 100644 index 00000000..0344f5a2 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/fungal_charge.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "name": "bloodmagic:fungal_charge", + "rolls": 1.0, + "entries": [] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/incensealtar.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/incensealtar.json new file mode 100644 index 00000000..b588d41d --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/incensealtar.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:incensealtar" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/largebloodstonebrick.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/largebloodstonebrick.json new file mode 100644 index 00000000..ee4181fc --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/largebloodstonebrick.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:largebloodstonebrick" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/lightritualstone.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/lightritualstone.json new file mode 100644 index 00000000..e8935390 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/lightritualstone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:ritualstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/masterritualstone.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/masterritualstone.json new file mode 100644 index 00000000..8b9eb94d --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/masterritualstone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:masterritualstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/mimic.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/mimic.json new file mode 100644 index 00000000..5e904859 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/mimic.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:mimic" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/nether_soil.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/nether_soil.json new file mode 100644 index 00000000..5cf5a8ce --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/nether_soil.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:netherrack" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/obsidianbrickpath.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/obsidianbrickpath.json new file mode 100644 index 00000000..6eb3eea4 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/obsidianbrickpath.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:obsidianbrickpath" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/obsidiantilepath.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/obsidiantilepath.json new file mode 100644 index 00000000..ee7bbbf2 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/obsidiantilepath.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:obsidiantilepath" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/orbcapacityrune.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/orbcapacityrune.json new file mode 100644 index 00000000..239dcb53 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/orbcapacityrune.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:orbcapacityrune" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/rawdemoncrystal.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/rawdemoncrystal.json new file mode 100644 index 00000000..6774eb52 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/rawdemoncrystal.json @@ -0,0 +1,173 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:rawdemoncrystal", + "properties": { + "age": "0" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "bloodmagic:defaultcrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:rawdemoncrystal", + "properties": { + "age": "1" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 2 + } + ], + "name": "bloodmagic:defaultcrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:rawdemoncrystal", + "properties": { + "age": "2" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 3 + } + ], + "name": "bloodmagic:defaultcrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:rawdemoncrystal", + "properties": { + "age": "3" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 4 + } + ], + "name": "bloodmagic:defaultcrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:rawdemoncrystal", + "properties": { + "age": "4" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 5 + } + ], + "name": "bloodmagic:defaultcrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:rawdemoncrystal", + "properties": { + "age": "5" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 6 + } + ], + "name": "bloodmagic:defaultcrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:rawdemoncrystal", + "properties": { + "age": "6" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 7 + } + ], + "name": "bloodmagic:defaultcrystal" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/ritualstone.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/ritualstone.json new file mode 100644 index 00000000..e8935390 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/ritualstone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:ritualstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/sacrificerune.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/sacrificerune.json new file mode 100644 index 00000000..30afc854 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/sacrificerune.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:sacrificerune" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/selfsacrificerune.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/selfsacrificerune.json new file mode 100644 index 00000000..edbac39e --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/selfsacrificerune.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:selfsacrificerune" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/shaped_charge.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/shaped_charge.json new file mode 100644 index 00000000..c34bb043 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/shaped_charge.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "name": "bloodmagic:shaped_charge", + "rolls": 1.0, + "entries": [] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/soulforge.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/soulforge.json new file mode 100644 index 00000000..32b39be4 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/soulforge.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:soulforge" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/speedrune.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/speedrune.json new file mode 100644 index 00000000..37341278 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/speedrune.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:speedrune" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/steadfastdemoncrystal.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/steadfastdemoncrystal.json new file mode 100644 index 00000000..dea3fee2 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/steadfastdemoncrystal.json @@ -0,0 +1,173 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:steadfastdemoncrystal", + "properties": { + "age": "0" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "bloodmagic:steadfastcrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:steadfastdemoncrystal", + "properties": { + "age": "1" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 2 + } + ], + "name": "bloodmagic:steadfastcrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:steadfastdemoncrystal", + "properties": { + "age": "2" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 3 + } + ], + "name": "bloodmagic:steadfastcrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:steadfastdemoncrystal", + "properties": { + "age": "3" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 4 + } + ], + "name": "bloodmagic:steadfastcrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:steadfastdemoncrystal", + "properties": { + "age": "4" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 5 + } + ], + "name": "bloodmagic:steadfastcrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:steadfastdemoncrystal", + "properties": { + "age": "5" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 6 + } + ], + "name": "bloodmagic:steadfastcrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:steadfastdemoncrystal", + "properties": { + "age": "6" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 7 + } + ], + "name": "bloodmagic:steadfastcrystal" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/stonebrickpath.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/stonebrickpath.json new file mode 100644 index 00000000..3a9b4289 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/stonebrickpath.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:stonebrickpath" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/stonetilepath.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/stonetilepath.json new file mode 100644 index 00000000..7796876b --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/stonetilepath.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:stonetilepath" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/veinmine_charge.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/veinmine_charge.json new file mode 100644 index 00000000..e7f06266 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/veinmine_charge.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "name": "bloodmagic:veinmine_charge", + "rolls": 1.0, + "entries": [] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/vengefuldemoncrystal.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/vengefuldemoncrystal.json new file mode 100644 index 00000000..c0801fe5 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/vengefuldemoncrystal.json @@ -0,0 +1,173 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:vengefuldemoncrystal", + "properties": { + "age": "0" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "bloodmagic:vengefulcrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:vengefuldemoncrystal", + "properties": { + "age": "1" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 2 + } + ], + "name": "bloodmagic:vengefulcrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:vengefuldemoncrystal", + "properties": { + "age": "2" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 3 + } + ], + "name": "bloodmagic:vengefulcrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:vengefuldemoncrystal", + "properties": { + "age": "3" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 4 + } + ], + "name": "bloodmagic:vengefulcrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:vengefuldemoncrystal", + "properties": { + "age": "4" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 5 + } + ], + "name": "bloodmagic:vengefulcrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:vengefuldemoncrystal", + "properties": { + "age": "5" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 6 + } + ], + "name": "bloodmagic:vengefulcrystal" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "bloodmagic:vengefuldemoncrystal", + "properties": { + "age": "6" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 7 + } + ], + "name": "bloodmagic:vengefulcrystal" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/waterritualstone.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/waterritualstone.json new file mode 100644 index 00000000..e8935390 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/waterritualstone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:ritualstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/woodbrickpath.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/woodbrickpath.json new file mode 100644 index 00000000..d4116d40 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/woodbrickpath.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:woodbrickpath" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/woodtilepath.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/woodtilepath.json new file mode 100644 index 00000000..fd8a04c6 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/woodtilepath.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:woodtilepath" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/wornstonebrickpath.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/wornstonebrickpath.json new file mode 100644 index 00000000..d66e2617 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/wornstonebrickpath.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:wornstonebrickpath" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/wornstonetilepath.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/wornstonetilepath.json new file mode 100644 index 00000000..4de9ffb8 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/wornstonetilepath.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:wornstonetilepath" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/test.json b/src/generated/resources/data/bloodmagic/loot_tables/test.json new file mode 100644 index 00000000..86acee43 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/test.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "name": "test", + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ], + "name": "minecraft:book" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemy_table.json b/src/generated/resources/data/bloodmagic/recipes/alchemy_table.json new file mode 100644 index 00000000..6c9bc44a --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemy_table.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "sss", + "wbw", + "gog" + ], + "key": { + "b": { + "tag": "forge:ingots/iron" + }, + "s": { + "tag": "forge:stone" + }, + "w": { + "tag": "minecraft:planks" + }, + "g": { + "tag": "forge:ingots/gold" + }, + "o": { + "item": "bloodmagic:blankslate" + } + }, + "result": { + "item": "bloodmagic:alchemytable" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/arcane_ash.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/arcane_ash.json new file mode 100644 index 00000000..24f98096 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/arcane_ash.json @@ -0,0 +1,24 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "tag": "forge:dusts/redstone" + }, + { + "tag": "forge:dyes/white" + }, + { + "tag": "forge:gunpowder" + }, + { + "tag": "minecraft:coals" + } + ], + "output": { + "item": "bloodmagic:arcaneashes", + "nbt": "{Damage:0}" + }, + "syphon": 500, + "ticks": 200, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/basic_cutting_fluid.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/basic_cutting_fluid.json new file mode 100644 index 00000000..bf555741 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/basic_cutting_fluid.json @@ -0,0 +1,30 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "bloodmagic:plantoil" + }, + { + "tag": "forge:dusts/redstone" + }, + { + "tag": "forge:gunpowder" + }, + { + "item": "minecraft:sugar" + }, + { + "tag": "forge:dusts/coal" + }, + { + "item": "minecraft:potion" + } + ], + "output": { + "item": "bloodmagic:basiccuttingfluid", + "nbt": "{Damage:0}" + }, + "syphon": 1000, + "ticks": 200, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/bow_power_anointment.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/bow_power_anointment.json new file mode 100644 index 00000000..e8eac2dc --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/bow_power_anointment.json @@ -0,0 +1,23 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "bloodmagic:slate_vial" + }, + { + "tag": "forge:crops/nether_wart" + }, + { + "tag": "forge:ingots/iron" + }, + { + "item": "minecraft:bow" + } + ], + "output": { + "item": "bloodmagic:bow_power_anointment" + }, + "syphon": 500, + "ticks": 100, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/bread.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/bread.json new file mode 100644 index 00000000..5e30f8ec --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/bread.json @@ -0,0 +1,17 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "tag": "forge:crops/wheat" + }, + { + "item": "minecraft:sugar" + } + ], + "output": { + "item": "minecraft:bread" + }, + "syphon": 100, + "ticks": 100, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/clay_from_sand.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/clay_from_sand.json new file mode 100644 index 00000000..8cd302ff --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/clay_from_sand.json @@ -0,0 +1,21 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "tag": "forge:sand" + }, + { + "tag": "forge:sand" + }, + { + "item": "minecraft:water_bucket" + } + ], + "output": { + "item": "minecraft:clay_ball", + "count": 2 + }, + "syphon": 50, + "ticks": 100, + "upgradeLevel": 2 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/cobweb.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/cobweb.json new file mode 100644 index 00000000..847b555a --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/cobweb.json @@ -0,0 +1,20 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "tag": "forge:string" + }, + { + "tag": "forge:string" + }, + { + "tag": "forge:string" + } + ], + "output": { + "item": "minecraft:cobweb" + }, + "syphon": 50, + "ticks": 50, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/explosive_powder.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/explosive_powder.json new file mode 100644 index 00000000..87b3103b --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/explosive_powder.json @@ -0,0 +1,21 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "tag": "forge:gunpowder" + }, + { + "tag": "forge:gunpowder" + }, + { + "tag": "forge:dusts/coal" + } + ], + "output": { + "item": "bloodmagic:explosivepowder", + "nbt": "{Damage:0}" + }, + "syphon": 500, + "ticks": 200, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/flint_from_gravel.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/flint_from_gravel.json new file mode 100644 index 00000000..ffe0ce43 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/flint_from_gravel.json @@ -0,0 +1,18 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:flint" + } + ], + "output": { + "item": "minecraft:flint", + "count": 2 + }, + "syphon": 50, + "ticks": 20, + "upgradeLevel": 0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/fortune_anointment.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/fortune_anointment.json new file mode 100644 index 00000000..2f66bc4e --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/fortune_anointment.json @@ -0,0 +1,23 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "bloodmagic:slate_vial" + }, + { + "tag": "forge:crops/nether_wart" + }, + { + "tag": "forge:dusts/redstone" + }, + { + "tag": "forge:dusts/coal" + } + ], + "output": { + "item": "bloodmagic:fortune_anointment" + }, + "syphon": 500, + "ticks": 100, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/gold_ore_from_gilded.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/gold_ore_from_gilded.json new file mode 100644 index 00000000..bf34285f --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/gold_ore_from_gilded.json @@ -0,0 +1,15 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "minecraft:gilded_blackstone" + } + ], + "output": { + "item": "minecraft:gold_nugget", + "count": 9 + }, + "syphon": 200, + "ticks": 100, + "upgradeLevel": 2 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/grass_block.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/grass_block.json new file mode 100644 index 00000000..03e6aee6 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/grass_block.json @@ -0,0 +1,20 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "minecraft:dirt" + }, + { + "item": "minecraft:bone_meal" + }, + { + "item": "minecraft:wheat_seeds" + } + ], + "output": { + "item": "minecraft:grass_block" + }, + "syphon": 200, + "ticks": 200, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/gunpowder.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/gunpowder.json new file mode 100644 index 00000000..aec2762a --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/gunpowder.json @@ -0,0 +1,21 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "tag": "forge:dusts/sulfur" + }, + { + "tag": "forge:dusts/saltpeter" + }, + { + "tag": "minecraft:coals" + } + ], + "output": { + "item": "minecraft:gunpowder", + "count": 3 + }, + "syphon": 0, + "ticks": 100, + "upgradeLevel": 0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/hidden_knowledge_anointment.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/hidden_knowledge_anointment.json new file mode 100644 index 00000000..228e57a5 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/hidden_knowledge_anointment.json @@ -0,0 +1,23 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "bloodmagic:slate_vial" + }, + { + "tag": "forge:crops/nether_wart" + }, + { + "item": "minecraft:glass_bottle" + }, + { + "item": "minecraft:enchanted_book" + } + ], + "output": { + "item": "bloodmagic:hidden_knowledge_anointment" + }, + "syphon": 500, + "ticks": 100, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/holy_water_anointment.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/holy_water_anointment.json new file mode 100644 index 00000000..126bd5aa --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/holy_water_anointment.json @@ -0,0 +1,23 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "bloodmagic:slate_vial" + }, + { + "tag": "forge:crops/nether_wart" + }, + { + "item": "minecraft:glistering_melon_slice" + }, + { + "tag": "forge:gems/quartz" + } + ], + "output": { + "item": "bloodmagic:holy_water_anointment" + }, + "syphon": 500, + "ticks": 100, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/leather_from_flesh.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/leather_from_flesh.json new file mode 100644 index 00000000..6fd3738b --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/leather_from_flesh.json @@ -0,0 +1,30 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "minecraft:rotten_flesh" + }, + { + "item": "minecraft:rotten_flesh" + }, + { + "item": "minecraft:rotten_flesh" + }, + { + "item": "minecraft:rotten_flesh" + }, + { + "item": "minecraft:flint" + }, + { + "item": "minecraft:water_bucket" + } + ], + "output": { + "item": "minecraft:leather", + "count": 4 + }, + "syphon": 100, + "ticks": 200, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/looting_anointment.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/looting_anointment.json new file mode 100644 index 00000000..cdec19e3 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/looting_anointment.json @@ -0,0 +1,23 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "bloodmagic:slate_vial" + }, + { + "tag": "forge:crops/nether_wart" + }, + { + "tag": "forge:gems/lapis" + }, + { + "tag": "forge:bones" + } + ], + "output": { + "item": "bloodmagic:looting_anointment" + }, + "syphon": 500, + "ticks": 100, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/melee_damage_anointment.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/melee_damage_anointment.json new file mode 100644 index 00000000..496abd4b --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/melee_damage_anointment.json @@ -0,0 +1,23 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "bloodmagic:slate_vial" + }, + { + "tag": "forge:crops/nether_wart" + }, + { + "item": "minecraft:blaze_powder" + }, + { + "tag": "forge:gems/quartz" + } + ], + "output": { + "item": "bloodmagic:melee_anointment" + }, + "syphon": 500, + "ticks": 100, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/nether_wart_from_block.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/nether_wart_from_block.json new file mode 100644 index 00000000..10442cb7 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/nether_wart_from_block.json @@ -0,0 +1,14 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "minecraft:nether_wart_block" + } + ], + "output": { + "item": "minecraft:nether_wart" + }, + "syphon": 50, + "ticks": 40, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/plantoil_from_beets.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/plantoil_from_beets.json new file mode 100644 index 00000000..718a1062 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/plantoil_from_beets.json @@ -0,0 +1,23 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "tag": "forge:crops/beetroot" + }, + { + "tag": "forge:crops/beetroot" + }, + { + "tag": "forge:crops/beetroot" + }, + { + "item": "minecraft:bone_meal" + } + ], + "output": { + "item": "bloodmagic:plantoil" + }, + "syphon": 100, + "ticks": 100, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/plantoil_from_carrots.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/plantoil_from_carrots.json new file mode 100644 index 00000000..51ca6f26 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/plantoil_from_carrots.json @@ -0,0 +1,23 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "tag": "forge:crops/carrot" + }, + { + "tag": "forge:crops/carrot" + }, + { + "tag": "forge:crops/carrot" + }, + { + "item": "minecraft:bone_meal" + } + ], + "output": { + "item": "bloodmagic:plantoil" + }, + "syphon": 100, + "ticks": 100, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/plantoil_from_taters.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/plantoil_from_taters.json new file mode 100644 index 00000000..8c0f281b --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/plantoil_from_taters.json @@ -0,0 +1,20 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "tag": "forge:crops/potato" + }, + { + "tag": "forge:crops/potato" + }, + { + "item": "minecraft:bone_meal" + } + ], + "output": { + "item": "bloodmagic:plantoil" + }, + "syphon": 100, + "ticks": 100, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/plantoil_from_wheat.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/plantoil_from_wheat.json new file mode 100644 index 00000000..af4e9e80 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/plantoil_from_wheat.json @@ -0,0 +1,20 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "tag": "forge:crops/wheat" + }, + { + "tag": "forge:crops/wheat" + }, + { + "item": "minecraft:bone_meal" + } + ], + "output": { + "item": "bloodmagic:plantoil" + }, + "syphon": 100, + "ticks": 100, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/quick_draw_anointment.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/quick_draw_anointment.json new file mode 100644 index 00000000..629a12f4 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/quick_draw_anointment.json @@ -0,0 +1,23 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "bloodmagic:slate_vial" + }, + { + "tag": "forge:crops/nether_wart" + }, + { + "tag": "forge:string" + }, + { + "item": "minecraft:spectral_arrow" + } + ], + "output": { + "item": "bloodmagic:quick_draw_anointment" + }, + "syphon": 500, + "ticks": 100, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_air.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_air.json new file mode 100644 index 00000000..3ac1e251 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_air.json @@ -0,0 +1,20 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "minecraft:ghast_tear" + }, + { + "tag": "forge:feathers" + }, + { + "tag": "forge:feathers" + } + ], + "output": { + "item": "bloodmagic:reagentair" + }, + "syphon": 2000, + "ticks": 200, + "upgradeLevel": 2 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_binding.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_binding.json new file mode 100644 index 00000000..fb49418e --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_binding.json @@ -0,0 +1,23 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "tag": "forge:dusts/glowstone" + }, + { + "tag": "forge:dusts/redstone" + }, + { + "tag": "forge:gunpowder" + }, + { + "tag": "forge:nuggets/gold" + } + ], + "output": { + "item": "bloodmagic:reagentbinding" + }, + "syphon": 1000, + "ticks": 200, + "upgradeLevel": 3 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_blood_light.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_blood_light.json new file mode 100644 index 00000000..c9f119f9 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_blood_light.json @@ -0,0 +1,23 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "tag": "forge:dusts/glowstone" + }, + { + "item": "minecraft:torch" + }, + { + "tag": "forge:dusts/redstone" + }, + { + "tag": "forge:dusts/redstone" + } + ], + "output": { + "item": "bloodmagic:reagentbloodlight" + }, + "syphon": 1000, + "ticks": 200, + "upgradeLevel": 3 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_fastminer.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_fastminer.json new file mode 100644 index 00000000..7e90329b --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_fastminer.json @@ -0,0 +1,23 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "minecraft:iron_pickaxe" + }, + { + "item": "minecraft:iron_axe" + }, + { + "item": "minecraft:iron_shovel" + }, + { + "tag": "forge:gunpowder" + } + ], + "output": { + "item": "bloodmagic:reagentfastminer" + }, + "syphon": 2000, + "ticks": 200, + "upgradeLevel": 2 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_growth.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_growth.json new file mode 100644 index 00000000..8707950f --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_growth.json @@ -0,0 +1,23 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "tag": "minecraft:saplings" + }, + { + "tag": "minecraft:saplings" + }, + { + "item": "minecraft:sugar_cane" + }, + { + "item": "minecraft:sugar" + } + ], + "output": { + "item": "bloodmagic:reagentgrowth" + }, + "syphon": 2000, + "ticks": 200, + "upgradeLevel": 2 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_holding.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_holding.json new file mode 100644 index 00000000..d293e725 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_holding.json @@ -0,0 +1,23 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "tag": "forge:chests" + }, + { + "tag": "forge:leather" + }, + { + "tag": "forge:string" + }, + { + "tag": "forge:string" + } + ], + "output": { + "item": "bloodmagic:reagentholding" + }, + "syphon": 2000, + "ticks": 200, + "upgradeLevel": 2 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_lava.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_lava.json new file mode 100644 index 00000000..6618996f --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_lava.json @@ -0,0 +1,23 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "minecraft:lava_bucket" + }, + { + "tag": "forge:dusts/redstone" + }, + { + "tag": "forge:cobblestone" + }, + { + "tag": "forge:storage_blocks/coal" + } + ], + "output": { + "item": "bloodmagic:reagentlava" + }, + "syphon": 1000, + "ticks": 200, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_magnetism.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_magnetism.json new file mode 100644 index 00000000..4fb4d117 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_magnetism.json @@ -0,0 +1,23 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "tag": "forge:string" + }, + { + "tag": "forge:ingots/gold" + }, + { + "tag": "forge:ingots/gold" + }, + { + "tag": "forge:storage_blocks/iron" + } + ], + "output": { + "item": "bloodmagic:reagentmagnetism" + }, + "syphon": 1000, + "ticks": 200, + "upgradeLevel": 3 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_sight.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_sight.json new file mode 100644 index 00000000..fb57653d --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_sight.json @@ -0,0 +1,23 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "tag": "forge:dusts/glowstone" + }, + { + "tag": "forge:glass" + }, + { + "tag": "forge:glass" + }, + { + "item": "bloodmagic:divinationsigil" + } + ], + "output": { + "item": "bloodmagic:reagentsight" + }, + "syphon": 500, + "ticks": 200, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_void.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_void.json new file mode 100644 index 00000000..d549746e --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_void.json @@ -0,0 +1,23 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "minecraft:bucket" + }, + { + "tag": "forge:string" + }, + { + "tag": "forge:string" + }, + { + "tag": "forge:gunpowder" + } + ], + "output": { + "item": "bloodmagic:reagentvoid" + }, + "syphon": 1000, + "ticks": 200, + "upgradeLevel": 2 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_water.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_water.json new file mode 100644 index 00000000..93a5b884 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/reagent_water.json @@ -0,0 +1,20 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "minecraft:sugar" + }, + { + "item": "minecraft:water_bucket" + }, + { + "item": "minecraft:water_bucket" + } + ], + "output": { + "item": "bloodmagic:reagentwater" + }, + "syphon": 300, + "ticks": 200, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/sand_coal.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/sand_coal.json new file mode 100644 index 00000000..a3fb3e74 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/sand_coal.json @@ -0,0 +1,21 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "minecraft:coal" + }, + { + "item": "minecraft:coal" + }, + { + "item": "minecraft:flint" + } + ], + "output": { + "item": "bloodmagic:coalsand", + "count": 4 + }, + "syphon": 400, + "ticks": 200, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/sand_gold.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/sand_gold.json new file mode 100644 index 00000000..618980ef --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/sand_gold.json @@ -0,0 +1,18 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "tag": "forge:ores/gold" + }, + { + "tag": "bloodmagic:arc/cuttingfluid" + } + ], + "output": { + "item": "bloodmagic:goldsand", + "count": 2 + }, + "syphon": 400, + "ticks": 200, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/sand_iron.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/sand_iron.json new file mode 100644 index 00000000..29fd3e67 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/sand_iron.json @@ -0,0 +1,18 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "tag": "forge:ores/iron" + }, + { + "tag": "bloodmagic:arc/cuttingfluid" + } + ], + "output": { + "item": "bloodmagic:ironsand", + "count": 2 + }, + "syphon": 400, + "ticks": 200, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/silk_touch_anointment.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/silk_touch_anointment.json new file mode 100644 index 00000000..764753f6 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/silk_touch_anointment.json @@ -0,0 +1,23 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "bloodmagic:slate_vial" + }, + { + "tag": "forge:crops/nether_wart" + }, + { + "item": "minecraft:cobweb" + }, + { + "tag": "forge:nuggets/gold" + } + ], + "output": { + "item": "bloodmagic:silk_touch_anointment" + }, + "syphon": 500, + "ticks": 100, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/slate_vial.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/slate_vial.json new file mode 100644 index 00000000..2a613dbe --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/slate_vial.json @@ -0,0 +1,30 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "bloodmagic:blankslate" + }, + { + "tag": "forge:glass" + }, + { + "tag": "forge:glass" + }, + { + "tag": "forge:glass" + }, + { + "tag": "forge:glass" + }, + { + "tag": "forge:glass" + } + ], + "output": { + "item": "bloodmagic:slate_vial", + "count": 8 + }, + "syphon": 500, + "ticks": 200, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/smelting_anointment.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/smelting_anointment.json new file mode 100644 index 00000000..a23514d9 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/smelting_anointment.json @@ -0,0 +1,28 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "item": "bloodmagic:slate_vial" + }, + { + "tag": "forge:crops/nether_wart" + }, + { + "item": "minecraft:furnace" + }, + [ + { + "item": "minecraft:charcoal" + }, + { + "item": "minecraft:coal" + } + ] + ], + "output": { + "item": "bloodmagic:smelting_anointment" + }, + "syphon": 500, + "ticks": 100, + "upgradeLevel": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/alchemytable/string.json b/src/generated/resources/data/bloodmagic/recipes/alchemytable/string.json new file mode 100644 index 00000000..0455b315 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/alchemytable/string.json @@ -0,0 +1,18 @@ +{ + "type": "bloodmagic:alchemytable", + "input": [ + { + "tag": "minecraft:wool" + }, + { + "item": "minecraft:flint" + } + ], + "output": { + "item": "minecraft:string", + "count": 4 + }, + "syphon": 100, + "ticks": 100, + "upgradeLevel": 0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/altar/air_tool.json b/src/generated/resources/data/bloodmagic/recipes/altar/air_tool.json new file mode 100644 index 00000000..a34cb046 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/altar/air_tool.json @@ -0,0 +1,14 @@ +{ + "type": "bloodmagic:altar", + "input": { + "item": "minecraft:ghast_tear" + }, + "output": { + "item": "bloodmagic:airscribetool", + "nbt": "{Damage:0}" + }, + "upgradeLevel": 2, + "altarSyphon": 1000, + "consumptionRate": 5, + "drainRate": 5 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/altar/apprenticebloodorb.json b/src/generated/resources/data/bloodmagic/recipes/altar/apprenticebloodorb.json new file mode 100644 index 00000000..3637afb8 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/altar/apprenticebloodorb.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:altar", + "input": { + "tag": "forge:storage_blocks/redstone" + }, + "output": { + "item": "bloodmagic:apprenticebloodorb" + }, + "upgradeLevel": 1, + "altarSyphon": 5000, + "consumptionRate": 5, + "drainRate": 5 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/altar/bucket_life.json b/src/generated/resources/data/bloodmagic/recipes/altar/bucket_life.json new file mode 100644 index 00000000..6902924e --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/altar/bucket_life.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:altar", + "input": { + "item": "minecraft:bucket" + }, + "output": { + "item": "bloodmagic:life_essence_bucket" + }, + "upgradeLevel": 0, + "altarSyphon": 1000, + "consumptionRate": 5, + "drainRate": 0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/altar/daggerofsacrifice.json b/src/generated/resources/data/bloodmagic/recipes/altar/daggerofsacrifice.json new file mode 100644 index 00000000..f1d7fc16 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/altar/daggerofsacrifice.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:altar", + "input": { + "item": "minecraft:iron_sword" + }, + "output": { + "item": "bloodmagic:daggerofsacrifice" + }, + "upgradeLevel": 1, + "altarSyphon": 3000, + "consumptionRate": 5, + "drainRate": 5 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/altar/demonicslate.json b/src/generated/resources/data/bloodmagic/recipes/altar/demonicslate.json new file mode 100644 index 00000000..60a29822 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/altar/demonicslate.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:altar", + "input": { + "item": "bloodmagic:infusedslate" + }, + "output": { + "item": "bloodmagic:demonslate" + }, + "upgradeLevel": 3, + "altarSyphon": 15000, + "consumptionRate": 20, + "drainRate": 20 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/altar/dusk_tool.json b/src/generated/resources/data/bloodmagic/recipes/altar/dusk_tool.json new file mode 100644 index 00000000..a8a08519 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/altar/dusk_tool.json @@ -0,0 +1,14 @@ +{ + "type": "bloodmagic:altar", + "input": { + "tag": "forge:storage_blocks/coal" + }, + "output": { + "item": "bloodmagic:duskscribetool", + "nbt": "{Damage:0}" + }, + "upgradeLevel": 3, + "altarSyphon": 2000, + "consumptionRate": 20, + "drainRate": 10 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/altar/earth_tool.json b/src/generated/resources/data/bloodmagic/recipes/altar/earth_tool.json new file mode 100644 index 00000000..72ddfcc8 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/altar/earth_tool.json @@ -0,0 +1,14 @@ +{ + "type": "bloodmagic:altar", + "input": { + "tag": "forge:obsidian" + }, + "output": { + "item": "bloodmagic:earthscribetool", + "nbt": "{Damage:0}" + }, + "upgradeLevel": 2, + "altarSyphon": 1000, + "consumptionRate": 5, + "drainRate": 5 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/altar/fire_tool.json b/src/generated/resources/data/bloodmagic/recipes/altar/fire_tool.json new file mode 100644 index 00000000..859c6e17 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/altar/fire_tool.json @@ -0,0 +1,14 @@ +{ + "type": "bloodmagic:altar", + "input": { + "item": "minecraft:magma_cream" + }, + "output": { + "item": "bloodmagic:firescribetool", + "nbt": "{Damage:0}" + }, + "upgradeLevel": 2, + "altarSyphon": 1000, + "consumptionRate": 5, + "drainRate": 5 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/altar/imbuedslate.json b/src/generated/resources/data/bloodmagic/recipes/altar/imbuedslate.json new file mode 100644 index 00000000..b1a577b1 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/altar/imbuedslate.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:altar", + "input": { + "item": "bloodmagic:reinforcedslate" + }, + "output": { + "item": "bloodmagic:infusedslate" + }, + "upgradeLevel": 2, + "altarSyphon": 5000, + "consumptionRate": 15, + "drainRate": 10 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/altar/magicianbloodorb.json b/src/generated/resources/data/bloodmagic/recipes/altar/magicianbloodorb.json new file mode 100644 index 00000000..941c312f --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/altar/magicianbloodorb.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:altar", + "input": { + "tag": "forge:storage_blocks/gold" + }, + "output": { + "item": "bloodmagic:magicianbloodorb" + }, + "upgradeLevel": 2, + "altarSyphon": 25000, + "consumptionRate": 20, + "drainRate": 20 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/altar/masterbloodorb.json b/src/generated/resources/data/bloodmagic/recipes/altar/masterbloodorb.json new file mode 100644 index 00000000..f40e0229 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/altar/masterbloodorb.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:altar", + "input": { + "item": "bloodmagic:weakbloodshard" + }, + "output": { + "item": "bloodmagic:masterbloodorb" + }, + "upgradeLevel": 3, + "altarSyphon": 40000, + "consumptionRate": 30, + "drainRate": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/altar/reinforcedslate.json b/src/generated/resources/data/bloodmagic/recipes/altar/reinforcedslate.json new file mode 100644 index 00000000..52a37c81 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/altar/reinforcedslate.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:altar", + "input": { + "item": "bloodmagic:blankslate" + }, + "output": { + "item": "bloodmagic:reinforcedslate" + }, + "upgradeLevel": 1, + "altarSyphon": 2000, + "consumptionRate": 5, + "drainRate": 5 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/altar/slate.json b/src/generated/resources/data/bloodmagic/recipes/altar/slate.json new file mode 100644 index 00000000..3be29e67 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/altar/slate.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:altar", + "input": { + "tag": "forge:stone" + }, + "output": { + "item": "bloodmagic:blankslate" + }, + "upgradeLevel": 0, + "altarSyphon": 1000, + "consumptionRate": 5, + "drainRate": 5 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/altar/soul_snare.json b/src/generated/resources/data/bloodmagic/recipes/altar/soul_snare.json new file mode 100644 index 00000000..ffa64e8f --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/altar/soul_snare.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:altar", + "input": { + "tag": "forge:string" + }, + "output": { + "item": "bloodmagic:soulsnare" + }, + "upgradeLevel": 0, + "altarSyphon": 500, + "consumptionRate": 5, + "drainRate": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/altar/water_tool.json b/src/generated/resources/data/bloodmagic/recipes/altar/water_tool.json new file mode 100644 index 00000000..95508bc1 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/altar/water_tool.json @@ -0,0 +1,14 @@ +{ + "type": "bloodmagic:altar", + "input": { + "tag": "forge:storage_blocks/lapis" + }, + "output": { + "item": "bloodmagic:waterscribetool", + "nbt": "{Damage:0}" + }, + "upgradeLevel": 2, + "altarSyphon": 1000, + "consumptionRate": 5, + "drainRate": 5 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/altar/weakbloodorb.json b/src/generated/resources/data/bloodmagic/recipes/altar/weakbloodorb.json new file mode 100644 index 00000000..16769109 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/altar/weakbloodorb.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:altar", + "input": { + "tag": "forge:gems/diamond" + }, + "output": { + "item": "bloodmagic:weakbloodorb" + }, + "upgradeLevel": 0, + "altarSyphon": 2000, + "consumptionRate": 5, + "drainRate": 1 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc.json b/src/generated/resources/data/bloodmagic/recipes/arc.json new file mode 100644 index 00000000..2b02de09 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "sss", + "SoS", + "IfI" + ], + "key": { + "s": { + "tag": "forge:stone" + }, + "f": { + "item": "minecraft:furnace" + }, + "o": { + "type": "bloodmagic:bloodorb", + "orb_tier": 3 + }, + "I": { + "tag": "forge:storage_blocks/iron" + }, + "S": { + "item": "bloodmagic:infusedslate" + } + }, + "result": { + "item": "bloodmagic:alchemicalreactionchamber" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/clay_from_sand.json b/src/generated/resources/data/bloodmagic/recipes/arc/clay_from_sand.json new file mode 100644 index 00000000..4843ce04 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/clay_from_sand.json @@ -0,0 +1,25 @@ +{ + "type": "bloodmagic:arc", + "input": { + "tag": "forge:sand" + }, + "tool": { + "tag": "bloodmagic:arc/hydrate" + }, + "inputfluid": { + "amount": 200, + "fluid": "minecraft:water" + }, + "addedoutput": [ + { + "chance": 0.5, + "type": { + "item": "minecraft:clay_ball" + } + } + ], + "output": { + "item": "minecraft:clay_ball" + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/clay_from_terracotta.json b/src/generated/resources/data/bloodmagic/recipes/arc/clay_from_terracotta.json new file mode 100644 index 00000000..da406447 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/clay_from_terracotta.json @@ -0,0 +1,17 @@ +{ + "type": "bloodmagic:arc", + "input": { + "item": "minecraft:terracotta" + }, + "tool": { + "tag": "bloodmagic:arc/hydrate" + }, + "inputfluid": { + "amount": 200, + "fluid": "minecraft:water" + }, + "output": { + "item": "minecraft:clay" + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_gravel_gold.json b/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_gravel_gold.json new file mode 100644 index 00000000..c77dec87 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_gravel_gold.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:arc", + "input": { + "tag": "bloodmagic:gravels/gold" + }, + "tool": { + "tag": "bloodmagic:arc/cuttingfluid" + }, + "output": { + "item": "bloodmagic:goldsand" + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_gravel_iron.json b/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_gravel_iron.json new file mode 100644 index 00000000..f2b834b7 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_gravel_iron.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:arc", + "input": { + "tag": "bloodmagic:gravels/iron" + }, + "tool": { + "tag": "bloodmagic:arc/cuttingfluid" + }, + "output": { + "item": "bloodmagic:ironsand" + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_gravel_netherite_scrap.json b/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_gravel_netherite_scrap.json new file mode 100644 index 00000000..498f1d0f --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_gravel_netherite_scrap.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:arc", + "input": { + "tag": "bloodmagic:gravels/netherite_scrap" + }, + "tool": { + "tag": "bloodmagic:arc/cuttingfluid" + }, + "output": { + "item": "bloodmagic:sand_netherite" + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_ingot_gold.json b/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_ingot_gold.json new file mode 100644 index 00000000..c1cdecc1 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_ingot_gold.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:arc", + "input": { + "tag": "forge:ingots/gold" + }, + "tool": { + "tag": "bloodmagic:arc/explosive" + }, + "output": { + "item": "bloodmagic:goldsand" + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_ingot_iron.json b/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_ingot_iron.json new file mode 100644 index 00000000..7c4e0afd --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_ingot_iron.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:arc", + "input": { + "tag": "forge:ingots/iron" + }, + "tool": { + "tag": "bloodmagic:arc/explosive" + }, + "output": { + "item": "bloodmagic:ironsand" + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_ingot_netherite_scrap.json b/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_ingot_netherite_scrap.json new file mode 100644 index 00000000..fc4af18a --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_ingot_netherite_scrap.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:arc", + "input": { + "item": "minecraft:netherite_scrap" + }, + "tool": { + "tag": "bloodmagic:arc/explosive" + }, + "output": { + "item": "bloodmagic:sand_netherite" + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_ore_gold.json b/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_ore_gold.json new file mode 100644 index 00000000..8aa0031c --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_ore_gold.json @@ -0,0 +1,14 @@ +{ + "type": "bloodmagic:arc", + "input": { + "tag": "forge:ores/gold" + }, + "tool": { + "tag": "bloodmagic:arc/cuttingfluid" + }, + "output": { + "item": "bloodmagic:goldsand", + "count": 2 + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_ore_iron.json b/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_ore_iron.json new file mode 100644 index 00000000..6afdf627 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_ore_iron.json @@ -0,0 +1,14 @@ +{ + "type": "bloodmagic:arc", + "input": { + "tag": "forge:ores/iron" + }, + "tool": { + "tag": "bloodmagic:arc/cuttingfluid" + }, + "output": { + "item": "bloodmagic:ironsand", + "count": 2 + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_ore_netherite_scrap.json b/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_ore_netherite_scrap.json new file mode 100644 index 00000000..cfc195d4 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/dustsfrom_ore_netherite_scrap.json @@ -0,0 +1,14 @@ +{ + "type": "bloodmagic:arc", + "input": { + "tag": "forge:ores/netherite_scrap" + }, + "tool": { + "tag": "bloodmagic:arc/cuttingfluid" + }, + "output": { + "item": "bloodmagic:sand_netherite", + "count": 2 + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/fragmentsgold.json b/src/generated/resources/data/bloodmagic/recipes/arc/fragmentsgold.json new file mode 100644 index 00000000..74ed09a7 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/fragmentsgold.json @@ -0,0 +1,14 @@ +{ + "type": "bloodmagic:arc", + "input": { + "tag": "forge:ores/gold" + }, + "tool": { + "tag": "bloodmagic:arc/explosive" + }, + "output": { + "item": "bloodmagic:goldfragment", + "count": 3 + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/fragmentsiron.json b/src/generated/resources/data/bloodmagic/recipes/arc/fragmentsiron.json new file mode 100644 index 00000000..bdd4aad2 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/fragmentsiron.json @@ -0,0 +1,14 @@ +{ + "type": "bloodmagic:arc", + "input": { + "tag": "forge:ores/iron" + }, + "tool": { + "tag": "bloodmagic:arc/explosive" + }, + "output": { + "item": "bloodmagic:ironfragment", + "count": 3 + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/fragmentsnetherite_scrap.json b/src/generated/resources/data/bloodmagic/recipes/arc/fragmentsnetherite_scrap.json new file mode 100644 index 00000000..2f2e64a0 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/fragmentsnetherite_scrap.json @@ -0,0 +1,14 @@ +{ + "type": "bloodmagic:arc", + "input": { + "tag": "forge:ores/netherite_scrap" + }, + "tool": { + "tag": "bloodmagic:arc/explosive" + }, + "output": { + "item": "bloodmagic:fragment_netherite_scrap", + "count": 3 + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/gravelsgold.json b/src/generated/resources/data/bloodmagic/recipes/arc/gravelsgold.json new file mode 100644 index 00000000..0920bb12 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/gravelsgold.json @@ -0,0 +1,27 @@ +{ + "type": "bloodmagic:arc", + "input": { + "tag": "bloodmagic:fragments/gold" + }, + "tool": { + "tag": "bloodmagic:arc/resonator" + }, + "addedoutput": [ + { + "chance": 0.05, + "type": { + "item": "bloodmagic:corrupted_tinydust" + } + }, + { + "chance": 0.01, + "type": { + "item": "bloodmagic:corrupted_tinydust" + } + } + ], + "output": { + "item": "bloodmagic:goldgravel" + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/gravelsiron.json b/src/generated/resources/data/bloodmagic/recipes/arc/gravelsiron.json new file mode 100644 index 00000000..980da2fa --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/gravelsiron.json @@ -0,0 +1,27 @@ +{ + "type": "bloodmagic:arc", + "input": { + "tag": "bloodmagic:fragments/iron" + }, + "tool": { + "tag": "bloodmagic:arc/resonator" + }, + "addedoutput": [ + { + "chance": 0.05, + "type": { + "item": "bloodmagic:corrupted_tinydust" + } + }, + { + "chance": 0.01, + "type": { + "item": "bloodmagic:corrupted_tinydust" + } + } + ], + "output": { + "item": "bloodmagic:irongravel" + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/gravelsnetherite_scrap.json b/src/generated/resources/data/bloodmagic/recipes/arc/gravelsnetherite_scrap.json new file mode 100644 index 00000000..86971ad1 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/gravelsnetherite_scrap.json @@ -0,0 +1,27 @@ +{ + "type": "bloodmagic:arc", + "input": { + "tag": "bloodmagic:fragments/netherite_scrap" + }, + "tool": { + "tag": "bloodmagic:arc/resonator" + }, + "addedoutput": [ + { + "chance": 0.05, + "type": { + "item": "bloodmagic:corrupted_tinydust" + } + }, + { + "chance": 0.01, + "type": { + "item": "bloodmagic:corrupted_tinydust" + } + } + ], + "output": { + "item": "bloodmagic:gravel_netherite_scrap" + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/netherrack_to_sulfer.json b/src/generated/resources/data/bloodmagic/recipes/arc/netherrack_to_sulfer.json new file mode 100644 index 00000000..ee5e9bdc --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/netherrack_to_sulfer.json @@ -0,0 +1,17 @@ +{ + "type": "bloodmagic:arc", + "input": { + "tag": "forge:netherrack" + }, + "tool": { + "tag": "bloodmagic:arc/explosive" + }, + "outputfluid": { + "fluid": "minecraft:lava", + "amount": 5 + }, + "output": { + "item": "bloodmagic:sulfur" + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/ore/dustgold.json b/src/generated/resources/data/bloodmagic/recipes/arc/ore/dustgold.json new file mode 100644 index 00000000..284985ab --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/ore/dustgold.json @@ -0,0 +1,14 @@ +{ + "type": "bloodmagic:arc", + "input": { + "item": "minecraft:gold_ore" + }, + "tool": { + "tag": "bloodmagic:arc/cuttingfluid" + }, + "output": { + "item": "bloodmagic:goldsand", + "count": 2 + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/ore/dustiron.json b/src/generated/resources/data/bloodmagic/recipes/arc/ore/dustiron.json new file mode 100644 index 00000000..185879fb --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/ore/dustiron.json @@ -0,0 +1,14 @@ +{ + "type": "bloodmagic:arc", + "input": { + "item": "minecraft:iron_ore" + }, + "tool": { + "tag": "bloodmagic:arc/cuttingfluid" + }, + "output": { + "item": "bloodmagic:ironsand", + "count": 2 + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/reversion/apprentice_blood_orb.json b/src/generated/resources/data/bloodmagic/recipes/arc/reversion/apprentice_blood_orb.json new file mode 100644 index 00000000..393c065a --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/reversion/apprentice_blood_orb.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:arc", + "input": { + "item": "bloodmagic:apprenticebloodorb" + }, + "tool": { + "tag": "bloodmagic:arc/reverter" + }, + "output": { + "item": "minecraft:redstone_block" + }, + "consumeingredient": true +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/reversion/magician_blood_orb.json b/src/generated/resources/data/bloodmagic/recipes/arc/reversion/magician_blood_orb.json new file mode 100644 index 00000000..4ddb9c5c --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/reversion/magician_blood_orb.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:arc", + "input": { + "item": "bloodmagic:magicianbloodorb" + }, + "tool": { + "tag": "bloodmagic:arc/reverter" + }, + "output": { + "item": "minecraft:gold_block" + }, + "consumeingredient": true +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/reversion/master_blood_orb.json b/src/generated/resources/data/bloodmagic/recipes/arc/reversion/master_blood_orb.json new file mode 100644 index 00000000..a258faa9 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/reversion/master_blood_orb.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:arc", + "input": { + "item": "bloodmagic:masterbloodorb" + }, + "tool": { + "tag": "bloodmagic:arc/reverter" + }, + "output": { + "item": "bloodmagic:weakbloodshard" + }, + "consumeingredient": true +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/reversion/weak_blood_orb.json b/src/generated/resources/data/bloodmagic/recipes/arc/reversion/weak_blood_orb.json new file mode 100644 index 00000000..52823f43 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/reversion/weak_blood_orb.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:arc", + "input": { + "item": "bloodmagic:weakbloodorb" + }, + "tool": { + "tag": "bloodmagic:arc/reverter" + }, + "output": { + "item": "minecraft:diamond" + }, + "consumeingredient": true +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/weakbloodshard.json b/src/generated/resources/data/bloodmagic/recipes/arc/weakbloodshard.json new file mode 100644 index 00000000..806f31b2 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/weakbloodshard.json @@ -0,0 +1,21 @@ +{ + "type": "bloodmagic:arc", + "input": { + "item": "bloodmagic:infusedslate" + }, + "tool": { + "tag": "bloodmagic:arc/reverter" + }, + "addedoutput": [ + { + "chance": 0.2, + "type": { + "item": "bloodmagic:weakbloodshard" + } + } + ], + "output": { + "item": "bloodmagic:weakbloodshard" + }, + "consumeingredient": false +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/airsigil.json b/src/generated/resources/data/bloodmagic/recipes/array/airsigil.json new file mode 100644 index 00000000..7cd5e7ff --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/airsigil.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/airsigil.png", + "baseinput": { + "item": "bloodmagic:reagentair" + }, + "addedinput": { + "item": "bloodmagic:reinforcedslate" + }, + "output": { + "item": "bloodmagic:airsigil" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/bloodlightsigil.json b/src/generated/resources/data/bloodmagic/recipes/array/bloodlightsigil.json new file mode 100644 index 00000000..2e6e3e48 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/bloodlightsigil.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/lightsigil.png", + "baseinput": { + "item": "bloodmagic:reagentbloodlight" + }, + "addedinput": { + "item": "bloodmagic:infusedslate" + }, + "output": { + "item": "bloodmagic:bloodlightsigil" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/bounce.json b/src/generated/resources/data/bloodmagic/recipes/array/bounce.json new file mode 100644 index 00000000..d15b0de6 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/bounce.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/bouncearray.png", + "baseinput": { + "tag": "forge:slimeballs" + }, + "addedinput": { + "tag": "forge:dusts/redstone" + }, + "output": { + "item": "minecraft:air" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/day.json b/src/generated/resources/data/bloodmagic/recipes/array/day.json new file mode 100644 index 00000000..32c6212b --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/day.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/sunarray.png", + "baseinput": { + "item": "minecraft:coal" + }, + "addedinput": { + "item": "minecraft:coal" + }, + "output": { + "item": "minecraft:air" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/divinationsigil.json b/src/generated/resources/data/bloodmagic/recipes/array/divinationsigil.json new file mode 100644 index 00000000..b7b8d0bf --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/divinationsigil.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/divinationsigil.png", + "baseinput": { + "item": "minecraft:redstone" + }, + "addedinput": { + "item": "bloodmagic:blankslate" + }, + "output": { + "item": "bloodmagic:divinationsigil" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/fastminersigil.json b/src/generated/resources/data/bloodmagic/recipes/array/fastminersigil.json new file mode 100644 index 00000000..b3644330 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/fastminersigil.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/fastminersigil.png", + "baseinput": { + "item": "bloodmagic:reagentfastminer" + }, + "addedinput": { + "item": "bloodmagic:reinforcedslate" + }, + "output": { + "item": "bloodmagic:miningsigil" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/grove.json b/src/generated/resources/data/bloodmagic/recipes/array/grove.json new file mode 100644 index 00000000..f09741a3 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/grove.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/growthsigil.png", + "baseinput": { + "tag": "forge:bones" + }, + "addedinput": { + "tag": "forge:bones" + }, + "output": { + "item": "minecraft:air" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/growthsigil.json b/src/generated/resources/data/bloodmagic/recipes/array/growthsigil.json new file mode 100644 index 00000000..22e90ecc --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/growthsigil.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/growthsigil.png", + "baseinput": { + "item": "bloodmagic:reagentgrowth" + }, + "addedinput": { + "item": "bloodmagic:reinforcedslate" + }, + "output": { + "item": "bloodmagic:growthsigil" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/holdingsigil.json b/src/generated/resources/data/bloodmagic/recipes/array/holdingsigil.json new file mode 100644 index 00000000..9aa7670a --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/holdingsigil.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/sightsigil.png", + "baseinput": { + "item": "bloodmagic:reagentholding" + }, + "addedinput": { + "item": "bloodmagic:infusedslate" + }, + "output": { + "item": "bloodmagic:sigilofholding" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/lavasigil.json b/src/generated/resources/data/bloodmagic/recipes/array/lavasigil.json new file mode 100644 index 00000000..f71cd318 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/lavasigil.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/lavasigil.png", + "baseinput": { + "item": "bloodmagic:reagentlava" + }, + "addedinput": { + "item": "bloodmagic:blankslate" + }, + "output": { + "item": "bloodmagic:lavasigil" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/living_boots.json b/src/generated/resources/data/bloodmagic/recipes/array/living_boots.json new file mode 100644 index 00000000..6150d54b --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/living_boots.json @@ -0,0 +1,14 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/bindingarray.png", + "baseinput": { + "item": "bloodmagic:reagentbinding" + }, + "addedinput": { + "item": "minecraft:iron_boots" + }, + "output": { + "item": "bloodmagic:livingboots", + "nbt": "{Damage:0}" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/living_helmet.json b/src/generated/resources/data/bloodmagic/recipes/array/living_helmet.json new file mode 100644 index 00000000..b11c33dc --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/living_helmet.json @@ -0,0 +1,14 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/bindingarray.png", + "baseinput": { + "item": "bloodmagic:reagentbinding" + }, + "addedinput": { + "item": "minecraft:iron_helmet" + }, + "output": { + "item": "bloodmagic:livinghelmet", + "nbt": "{Damage:0}" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/living_leggings.json b/src/generated/resources/data/bloodmagic/recipes/array/living_leggings.json new file mode 100644 index 00000000..28e8f5ce --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/living_leggings.json @@ -0,0 +1,14 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/bindingarray.png", + "baseinput": { + "item": "bloodmagic:reagentbinding" + }, + "addedinput": { + "item": "minecraft:iron_leggings" + }, + "output": { + "item": "bloodmagic:livingleggings", + "nbt": "{Damage:0}" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/living_plate.json b/src/generated/resources/data/bloodmagic/recipes/array/living_plate.json new file mode 100644 index 00000000..803b429c --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/living_plate.json @@ -0,0 +1,14 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/bindingarray.png", + "baseinput": { + "item": "bloodmagic:reagentbinding" + }, + "addedinput": { + "item": "minecraft:iron_chestplate" + }, + "output": { + "item": "bloodmagic:livingplate", + "nbt": "{Damage:0}" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/magnetismsigil.json b/src/generated/resources/data/bloodmagic/recipes/array/magnetismsigil.json new file mode 100644 index 00000000..324ec177 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/magnetismsigil.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/magnetismsigil.png", + "baseinput": { + "item": "bloodmagic:reagentmagnetism" + }, + "addedinput": { + "item": "bloodmagic:infusedslate" + }, + "output": { + "item": "bloodmagic:sigilofmagnetism" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/movement.json b/src/generated/resources/data/bloodmagic/recipes/array/movement.json new file mode 100644 index 00000000..2d4f6309 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/movement.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/movementarray.png", + "baseinput": { + "item": "minecraft:feather" + }, + "addedinput": { + "tag": "forge:dusts/redstone" + }, + "output": { + "item": "minecraft:air" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/night.json b/src/generated/resources/data/bloodmagic/recipes/array/night.json new file mode 100644 index 00000000..c0130213 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/night.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/moonarray.png", + "baseinput": { + "item": "minecraft:lapis_lazuli" + }, + "addedinput": { + "item": "minecraft:lapis_lazuli" + }, + "output": { + "item": "minecraft:air" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/seersigil.json b/src/generated/resources/data/bloodmagic/recipes/array/seersigil.json new file mode 100644 index 00000000..3441514b --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/seersigil.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/sightsigil.png", + "baseinput": { + "item": "bloodmagic:reagentsight" + }, + "addedinput": { + "item": "bloodmagic:reinforcedslate" + }, + "output": { + "item": "bloodmagic:seersigil" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/spike.json b/src/generated/resources/data/bloodmagic/recipes/array/spike.json new file mode 100644 index 00000000..88ce4ff5 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/spike.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/spikearray.png", + "baseinput": { + "item": "minecraft:cobblestone" + }, + "addedinput": { + "tag": "forge:ingots/iron" + }, + "output": { + "item": "minecraft:air" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/updraft.json b/src/generated/resources/data/bloodmagic/recipes/array/updraft.json new file mode 100644 index 00000000..700967ce --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/updraft.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/updraftarray.png", + "baseinput": { + "item": "minecraft:feather" + }, + "addedinput": { + "tag": "forge:dusts/glowstone" + }, + "output": { + "item": "minecraft:air" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/voidsigil.json b/src/generated/resources/data/bloodmagic/recipes/array/voidsigil.json new file mode 100644 index 00000000..4d10c446 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/voidsigil.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/voidsigil.png", + "baseinput": { + "item": "bloodmagic:reagentvoid" + }, + "addedinput": { + "item": "bloodmagic:reinforcedslate" + }, + "output": { + "item": "bloodmagic:voidsigil" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/watersigil.json b/src/generated/resources/data/bloodmagic/recipes/array/watersigil.json new file mode 100644 index 00000000..0862f909 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/watersigil.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/watersigil.png", + "baseinput": { + "item": "bloodmagic:reagentwater" + }, + "addedinput": { + "item": "bloodmagic:blankslate" + }, + "output": { + "item": "bloodmagic:watersigil" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/blood_altar.json b/src/generated/resources/data/bloodmagic/recipes/blood_altar.json new file mode 100644 index 00000000..aa83901e --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/blood_altar.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "a a", + "aba", + "cdc" + ], + "key": { + "a": { + "tag": "forge:stone" + }, + "b": { + "item": "minecraft:furnace" + }, + "c": { + "tag": "forge:ingots/gold" + }, + "d": { + "item": "minecraft:gold_ingot" + } + }, + "result": { + "item": "bloodmagic:altar" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/blood_rune_acceleration.json b/src/generated/resources/data/bloodmagic/recipes/blood_rune_acceleration.json new file mode 100644 index 00000000..a7e0d300 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/blood_rune_acceleration.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "aba", + "cdc", + "aea" + ], + "key": { + "a": { + "item": "minecraft:bucket" + }, + "b": { + "item": "bloodmagic:demonslate" + }, + "c": { + "tag": "forge:ingots/gold" + }, + "d": { + "item": "bloodmagic:speedrune" + }, + "e": { + "type": "bloodmagic:bloodorb", + "orb_tier": 4 + } + }, + "result": { + "item": "bloodmagic:accelerationrune" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/blood_rune_aug_capacity.json b/src/generated/resources/data/bloodmagic/recipes/blood_rune_aug_capacity.json new file mode 100644 index 00000000..7a79f948 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/blood_rune_aug_capacity.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "aba", + "cdc", + "aea" + ], + "key": { + "a": { + "tag": "forge:obsidian" + }, + "b": { + "item": "bloodmagic:demonslate" + }, + "c": { + "item": "minecraft:bucket" + }, + "d": { + "item": "bloodmagic:altarcapacityrune" + }, + "e": { + "type": "bloodmagic:bloodorb", + "orb_tier": 4 + } + }, + "result": { + "item": "bloodmagic:bettercapacityrune" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/blood_rune_blank.json b/src/generated/resources/data/bloodmagic/recipes/blood_rune_blank.json new file mode 100644 index 00000000..dba609b8 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/blood_rune_blank.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "asa", + "aoa", + "aaa" + ], + "key": { + "a": { + "tag": "forge:stone" + }, + "s": { + "item": "bloodmagic:blankslate" + }, + "o": { + "type": "bloodmagic:bloodorb", + "orb_tier": 1 + } + }, + "result": { + "item": "bloodmagic:blankrune" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/blood_rune_capacity.json b/src/generated/resources/data/bloodmagic/recipes/blood_rune_capacity.json new file mode 100644 index 00000000..daf3fef6 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/blood_rune_capacity.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "aba", + "bcb", + "ada" + ], + "key": { + "a": { + "tag": "forge:stone" + }, + "b": { + "item": "minecraft:bucket" + }, + "c": { + "item": "bloodmagic:blankrune" + }, + "d": { + "item": "bloodmagic:infusedslate" + } + }, + "result": { + "item": "bloodmagic:altarcapacityrune" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/blood_rune_charging.json b/src/generated/resources/data/bloodmagic/recipes/blood_rune_charging.json new file mode 100644 index 00000000..acd341f6 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/blood_rune_charging.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "RsR", + "GrG", + "ReR" + ], + "key": { + "R": { + "tag": "forge:dusts/redstone" + }, + "r": { + "item": "bloodmagic:blankrune" + }, + "s": { + "item": "bloodmagic:demonslate" + }, + "e": { + "type": "bloodmagic:bloodorb", + "orb_tier": 4 + }, + "G": { + "tag": "forge:dusts/glowstone" + } + }, + "result": { + "item": "bloodmagic:chargingrune" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/blood_rune_displacement.json b/src/generated/resources/data/bloodmagic/recipes/blood_rune_displacement.json new file mode 100644 index 00000000..b43644d9 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/blood_rune_displacement.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "aba", + "bcb", + "ada" + ], + "key": { + "a": { + "tag": "forge:stone" + }, + "b": { + "item": "minecraft:water_bucket" + }, + "c": { + "item": "bloodmagic:blankrune" + }, + "d": { + "item": "bloodmagic:infusedslate" + } + }, + "result": { + "item": "bloodmagic:dislocationrune" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/blood_rune_orb.json b/src/generated/resources/data/bloodmagic/recipes/blood_rune_orb.json new file mode 100644 index 00000000..1ca7d126 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/blood_rune_orb.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "aba", + "cdc", + "aba" + ], + "key": { + "a": { + "tag": "forge:stone" + }, + "b": { + "type": "bloodmagic:bloodorb", + "orb_tier": 1 + }, + "c": { + "item": "bloodmagic:blankrune" + }, + "d": { + "type": "bloodmagic:bloodorb", + "orb_tier": 4 + } + }, + "result": { + "item": "bloodmagic:orbcapacityrune" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/blood_rune_sacrifice.json b/src/generated/resources/data/bloodmagic/recipes/blood_rune_sacrifice.json new file mode 100644 index 00000000..3d43229b --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/blood_rune_sacrifice.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "aba", + "cdc", + "aea" + ], + "key": { + "a": { + "tag": "forge:stone" + }, + "b": { + "item": "bloodmagic:reinforcedslate" + }, + "c": { + "tag": "forge:ingots/gold" + }, + "d": { + "item": "bloodmagic:blankrune" + }, + "e": { + "type": "bloodmagic:bloodorb", + "orb_tier": 2 + } + }, + "result": { + "item": "bloodmagic:sacrificerune" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/blood_rune_self_sacrifice.json b/src/generated/resources/data/bloodmagic/recipes/blood_rune_self_sacrifice.json new file mode 100644 index 00000000..054a70d8 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/blood_rune_self_sacrifice.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "aba", + "cdc", + "aea" + ], + "key": { + "a": { + "tag": "forge:stone" + }, + "b": { + "item": "bloodmagic:reinforcedslate" + }, + "c": { + "item": "minecraft:glowstone_dust" + }, + "d": { + "item": "bloodmagic:blankrune" + }, + "e": { + "type": "bloodmagic:bloodorb", + "orb_tier": 2 + } + }, + "result": { + "item": "bloodmagic:selfsacrificerune" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/blood_rune_speed.json b/src/generated/resources/data/bloodmagic/recipes/blood_rune_speed.json new file mode 100644 index 00000000..7ef75bfc --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/blood_rune_speed.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "aba", + "cdc", + "aba" + ], + "key": { + "a": { + "tag": "forge:stone" + }, + "b": { + "item": "bloodmagic:blankslate" + }, + "c": { + "item": "minecraft:sugar" + }, + "d": { + "item": "bloodmagic:blankrune" + } + }, + "result": { + "item": "bloodmagic:speedrune" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/bloodstonebrick.json b/src/generated/resources/data/bloodmagic/recipes/bloodstonebrick.json new file mode 100644 index 00000000..44fbc33d --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/bloodstonebrick.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "ss", + "ss" + ], + "key": { + "s": { + "item": "bloodmagic:largebloodstonebrick" + } + }, + "result": { + "item": "bloodmagic:bloodstonebrick", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/corrupted_dust.json b/src/generated/resources/data/bloodmagic/recipes/corrupted_dust.json new file mode 100644 index 00000000..cdcfdbab --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/corrupted_dust.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "sss", + "sss", + "sss" + ], + "key": { + "s": { + "tag": "bloodmagic:tiny_dusts/corrupted" + } + }, + "result": { + "item": "bloodmagic:corrupted_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/experience_tome.json b/src/generated/resources/data/bloodmagic/recipes/experience_tome.json new file mode 100644 index 00000000..633dbd55 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/experience_tome.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "ses", + "lbl", + "gog" + ], + "key": { + "b": { + "item": "minecraft:enchanted_book" + }, + "s": { + "tag": "forge:string" + }, + "e": { + "tag": "forge:storage_blocks/lapis" + }, + "g": { + "tag": "forge:ingots/gold" + }, + "l": { + "item": "bloodmagic:infusedslate" + }, + "o": { + "type": "bloodmagic:bloodorb", + "orb_tier": 3 + } + }, + "result": { + "item": "bloodmagic:experiencebook" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/hellforged_block.json b/src/generated/resources/data/bloodmagic/recipes/hellforged_block.json new file mode 100644 index 00000000..3c7c8bbb --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/hellforged_block.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "sss", + "sss", + "sss" + ], + "key": { + "s": { + "tag": "forge:ingots/hellforged" + } + }, + "result": { + "item": "bloodmagic:dungeon_metal" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/incense_altar.json b/src/generated/resources/data/bloodmagic/recipes/incense_altar.json new file mode 100644 index 00000000..95826002 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/incense_altar.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "s s", + "shs", + "coc" + ], + "key": { + "s": { + "tag": "forge:stone" + }, + "c": { + "tag": "forge:cobblestone" + }, + "h": { + "item": "minecraft:charcoal" + }, + "o": { + "type": "bloodmagic:bloodorb", + "orb_tier": 1 + } + }, + "result": { + "item": "bloodmagic:incensealtar" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/largebloodstonebrick.json b/src/generated/resources/data/bloodmagic/recipes/largebloodstonebrick.json new file mode 100644 index 00000000..915b47ef --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/largebloodstonebrick.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "tag": "forge:stone" + }, + { + "item": "bloodmagic:weakbloodshard" + } + ], + "result": { + "item": "bloodmagic:largebloodstonebrick", + "count": 8 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/lava_crystal.json b/src/generated/resources/data/bloodmagic/recipes/lava_crystal.json new file mode 100644 index 00000000..7a96e775 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/lava_crystal.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "aba", + "bcb", + "ded" + ], + "key": { + "a": { + "tag": "forge:glass" + }, + "b": { + "item": "minecraft:lava_bucket" + }, + "c": { + "type": "bloodmagic:bloodorb", + "orb_tier": 1 + }, + "d": { + "tag": "forge:obsidian" + }, + "e": { + "tag": "forge:gems/diamond" + } + }, + "result": { + "item": "bloodmagic:lavacrystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/path/path_stone.json b/src/generated/resources/data/bloodmagic/recipes/path/path_stone.json new file mode 100644 index 00000000..3bcdf018 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/path/path_stone.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "tag": "forge:stone" + }, + { + "tag": "forge:stone" + }, + { + "tag": "forge:stone" + }, + { + "tag": "forge:stone" + }, + { + "type": "bloodmagic:bloodorb", + "orb_tier": 3 + } + ], + "result": { + "item": "bloodmagic:stonebrickpath", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/path/path_stonetile.json b/src/generated/resources/data/bloodmagic/recipes/path/path_stonetile.json new file mode 100644 index 00000000..64521902 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/path/path_stonetile.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "bloodmagic:stonebrickpath" + }, + { + "item": "bloodmagic:stonebrickpath" + }, + { + "item": "bloodmagic:stonebrickpath" + }, + { + "item": "bloodmagic:stonebrickpath" + } + ], + "result": { + "item": "bloodmagic:stonetilepath", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/path/path_wood.json b/src/generated/resources/data/bloodmagic/recipes/path/path_wood.json new file mode 100644 index 00000000..d04415bf --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/path/path_wood.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "tag": "minecraft:planks" + }, + { + "tag": "minecraft:planks" + }, + { + "tag": "minecraft:planks" + }, + { + "tag": "minecraft:planks" + }, + { + "type": "bloodmagic:bloodorb", + "orb_tier": 2 + } + ], + "result": { + "item": "bloodmagic:woodbrickpath", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/path/path_woodtile.json b/src/generated/resources/data/bloodmagic/recipes/path/path_woodtile.json new file mode 100644 index 00000000..2d0a2641 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/path/path_woodtile.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "bloodmagic:woodbrickpath" + }, + { + "item": "bloodmagic:woodbrickpath" + }, + { + "item": "bloodmagic:woodbrickpath" + }, + { + "item": "bloodmagic:woodbrickpath" + } + ], + "result": { + "item": "bloodmagic:woodtilepath", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/path/path_wornstone.json b/src/generated/resources/data/bloodmagic/recipes/path/path_wornstone.json new file mode 100644 index 00000000..6a43f7e0 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/path/path_wornstone.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "bloodmagic:stonebrickpath" + }, + { + "item": "bloodmagic:stonebrickpath" + }, + { + "item": "bloodmagic:stonebrickpath" + }, + { + "item": "bloodmagic:stonebrickpath" + }, + { + "type": "bloodmagic:bloodorb", + "orb_tier": 4 + } + ], + "result": { + "item": "bloodmagic:wornstonebrickpath", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/path/path_wornstonetile.json b/src/generated/resources/data/bloodmagic/recipes/path/path_wornstonetile.json new file mode 100644 index 00000000..1efd2976 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/path/path_wornstonetile.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "bloodmagic:wornstonebrickpath" + }, + { + "item": "bloodmagic:wornstonebrickpath" + }, + { + "item": "bloodmagic:wornstonebrickpath" + }, + { + "item": "bloodmagic:wornstonebrickpath" + } + ], + "result": { + "item": "bloodmagic:wornstonetilepath", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/primitive_furnace_cell.json b/src/generated/resources/data/bloodmagic/recipes/primitive_furnace_cell.json new file mode 100644 index 00000000..501b146b --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/primitive_furnace_cell.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "csc", + "cfc", + "coc" + ], + "key": { + "c": { + "tag": "forge:cobblestone" + }, + "f": { + "tag": "forge:storage_blocks/coal" + }, + "s": { + "item": "bloodmagic:blankslate" + }, + "o": { + "type": "bloodmagic:bloodorb", + "orb_tier": 3 + } + }, + "result": { + "item": "bloodmagic:furnacecell_primitive" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/primitive_hydration_cell.json b/src/generated/resources/data/bloodmagic/recipes/primitive_hydration_cell.json new file mode 100644 index 00000000..241d455f --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/primitive_hydration_cell.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "csc", + "cBc", + "coc" + ], + "key": { + "B": { + "item": "minecraft:water_bucket" + }, + "c": { + "tag": "forge:cobblestone" + }, + "o": { + "type": "bloodmagic:bloodorb", + "orb_tier": 3 + }, + "s": { + "item": "bloodmagic:blankslate" + } + }, + "result": { + "item": "bloodmagic:primitive_hydration_cell" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/ritual_diviner_0.json b/src/generated/resources/data/bloodmagic/recipes/ritual_diviner_0.json new file mode 100644 index 00000000..5806cf36 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/ritual_diviner_0.json @@ -0,0 +1,31 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "dfd", + "ase", + "dwd" + ], + "key": { + "a": { + "item": "bloodmagic:airscribetool" + }, + "s": { + "tag": "forge:rods/wooden" + }, + "d": { + "tag": "forge:gems/diamond" + }, + "e": { + "item": "bloodmagic:earthscribetool" + }, + "f": { + "item": "bloodmagic:firescribetool" + }, + "w": { + "item": "bloodmagic:waterscribetool" + } + }, + "result": { + "item": "bloodmagic:ritualdiviner" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/ritual_diviner_1.json b/src/generated/resources/data/bloodmagic/recipes/ritual_diviner_1.json new file mode 100644 index 00000000..46a797ed --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/ritual_diviner_1.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " S ", + "tdt", + " S " + ], + "key": { + "S": { + "item": "bloodmagic:demonslate" + }, + "t": { + "item": "bloodmagic:duskscribetool" + }, + "d": { + "item": "bloodmagic:ritualdiviner" + } + }, + "result": { + "item": "bloodmagic:ritualdivinerdusk" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/ritual_reader.json b/src/generated/resources/data/bloodmagic/recipes/ritual_reader.json new file mode 100644 index 00000000..27805eff --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/ritual_reader.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "gog", + "isi", + " s " + ], + "key": { + "s": { + "item": "bloodmagic:demonslate" + }, + "g": { + "tag": "forge:glass" + }, + "i": { + "tag": "forge:ingots/gold" + }, + "o": { + "type": "bloodmagic:bloodorb", + "orb_tier": 4 + } + }, + "result": { + "item": "bloodmagic:ritualtinkerer" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/ritual_stone_blank.json b/src/generated/resources/data/bloodmagic/recipes/ritual_stone_blank.json new file mode 100644 index 00000000..aa493752 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/ritual_stone_blank.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "aba", + "bcb", + "aba" + ], + "key": { + "a": { + "tag": "forge:obsidian" + }, + "b": { + "item": "bloodmagic:reinforcedslate" + }, + "c": { + "type": "bloodmagic:bloodorb", + "orb_tier": 2 + } + }, + "result": { + "item": "bloodmagic:ritualstone", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/ritual_stone_master.json b/src/generated/resources/data/bloodmagic/recipes/ritual_stone_master.json new file mode 100644 index 00000000..4cdb269e --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/ritual_stone_master.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "aba", + "bcb", + "aba" + ], + "key": { + "a": { + "tag": "forge:obsidian" + }, + "b": { + "item": "bloodmagic:ritualstone" + }, + "c": { + "type": "bloodmagic:bloodorb", + "orb_tier": 3 + } + }, + "result": { + "item": "bloodmagic:masterritualstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/sacrificial_dagger.json b/src/generated/resources/data/bloodmagic/recipes/sacrificial_dagger.json new file mode 100644 index 00000000..23a4dcab --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/sacrificial_dagger.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "ggg", + " Gg", + "i g" + ], + "key": { + "g": { + "tag": "forge:glass" + }, + "G": { + "tag": "forge:ingots/gold" + }, + "i": { + "tag": "forge:ingots/iron" + } + }, + "result": { + "item": "bloodmagic:sacrificialdagger" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/smelting/ingot_gold.json b/src/generated/resources/data/bloodmagic/recipes/smelting/ingot_gold.json new file mode 100644 index 00000000..e8bbf60c --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/smelting/ingot_gold.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "tag": "forge:dusts/gold" + }, + "result": "minecraft:gold_ingot", + "experience": 0.0, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/smelting/ingot_hellforged.json b/src/generated/resources/data/bloodmagic/recipes/smelting/ingot_hellforged.json new file mode 100644 index 00000000..6a06b2a3 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/smelting/ingot_hellforged.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "tag": "forge:dusts/hellforged" + }, + "result": "bloodmagic:ingot_hellforged", + "experience": 0.0, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/smelting/ingot_iron.json b/src/generated/resources/data/bloodmagic/recipes/smelting/ingot_iron.json new file mode 100644 index 00000000..7ca7a664 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/smelting/ingot_iron.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "tag": "forge:dusts/iron" + }, + "result": "minecraft:iron_ingot", + "experience": 0.0, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/smelting/ingot_netherite_scrap.json b/src/generated/resources/data/bloodmagic/recipes/smelting/ingot_netherite_scrap.json new file mode 100644 index 00000000..2edc11a3 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/smelting/ingot_netherite_scrap.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "tag": "forge:dusts/netherite_scrap" + }, + "result": "minecraft:netherite_scrap", + "experience": 0.0, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soul_forge.json b/src/generated/resources/data/bloodmagic/recipes/soul_forge.json new file mode 100644 index 00000000..1b03fe65 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soul_forge.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "i i", + "sSs", + "sos" + ], + "key": { + "s": { + "tag": "forge:stone" + }, + "S": { + "item": "bloodmagic:blankslate" + }, + "i": { + "tag": "forge:ingots/iron" + }, + "o": { + "tag": "forge:storage_blocks/iron" + } + }, + "result": { + "item": "bloodmagic:soulforge" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/commontartaricgem.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/commontartaricgem.json new file mode 100644 index 00000000..c87b1cc0 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/commontartaricgem.json @@ -0,0 +1,20 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:soulgemlesser" + }, + "input1": { + "tag": "forge:gems/diamond" + }, + "input2": { + "tag": "forge:storage_blocks/gold" + }, + "input3": { + "item": "bloodmagic:infusedslate" + }, + "output": { + "item": "bloodmagic:soulgemcommon" + }, + "minimumDrain": 240.0, + "drain": 50.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/corrosive_crystal_block.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/corrosive_crystal_block.json new file mode 100644 index 00000000..11d80db6 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/corrosive_crystal_block.json @@ -0,0 +1,20 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:corrosivecrystal" + }, + "input1": { + "item": "bloodmagic:corrosivecrystal" + }, + "input2": { + "item": "bloodmagic:corrosivecrystal" + }, + "input3": { + "item": "bloodmagic:corrosivecrystal" + }, + "output": { + "item": "bloodmagic:corrosivedemoncrystal" + }, + "minimumDrain": 1200.0, + "drain": 100.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/deforester_charge.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/deforester_charge.json new file mode 100644 index 00000000..b8478f16 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/deforester_charge.json @@ -0,0 +1,21 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "tag": "forge:cobblestone" + }, + "input1": { + "item": "minecraft:charcoal" + }, + "input2": { + "tag": "minecraft:logs" + }, + "input3": { + "tag": "minecraft:planks" + }, + "output": { + "item": "bloodmagic:deforester_charge", + "count": 8 + }, + "minimumDrain": 10.0, + "drain": 0.5 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/deforester_charge_fortune_1.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/deforester_charge_fortune_1.json new file mode 100644 index 00000000..9902d84e --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/deforester_charge_fortune_1.json @@ -0,0 +1,21 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:deforester_charge" + }, + "input1": { + "tag": "forge:crops/nether_wart" + }, + "input2": { + "tag": "forge:dusts/redstone" + }, + "input3": { + "tag": "forge:dusts/coal" + }, + "output": { + "item": "bloodmagic:deforester_charge", + "nbt": "{anointment_holder:{anointments:[{damage:1,max_damage:1,level:1,key:\"bloodmagic:fortune\"}]}}" + }, + "minimumDrain": 60.0, + "drain": 1.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/deforester_charge_silk_touch.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/deforester_charge_silk_touch.json new file mode 100644 index 00000000..95be85d4 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/deforester_charge_silk_touch.json @@ -0,0 +1,21 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:deforester_charge" + }, + "input1": { + "tag": "forge:crops/nether_wart" + }, + "input2": { + "item": "minecraft:cobweb" + }, + "input3": { + "tag": "forge:nuggets/gold" + }, + "output": { + "item": "bloodmagic:deforester_charge", + "nbt": "{anointment_holder:{anointments:[{damage:1,max_damage:1,level:1,key:\"bloodmagic:silk_touch\"}]}}" + }, + "minimumDrain": 60.0, + "drain": 1.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/deforester_charge_smelting.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/deforester_charge_smelting.json new file mode 100644 index 00000000..3ed21416 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/deforester_charge_smelting.json @@ -0,0 +1,26 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:deforester_charge" + }, + "input1": { + "tag": "forge:crops/nether_wart" + }, + "input2": { + "item": "minecraft:furnace" + }, + "input3": [ + { + "item": "minecraft:charcoal" + }, + { + "item": "minecraft:coal" + } + ], + "output": { + "item": "bloodmagic:deforester_charge", + "nbt": "{anointment_holder:{anointments:[{damage:1,max_damage:1,level:1,key:\"bloodmagic:smelting\"}]}}" + }, + "minimumDrain": 60.0, + "drain": 1.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/demon_crucible.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/demon_crucible.json new file mode 100644 index 00000000..57f6fe29 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/demon_crucible.json @@ -0,0 +1,20 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "minecraft:cauldron" + }, + "input1": { + "tag": "forge:stone" + }, + "input2": { + "tag": "forge:gems/lapis" + }, + "input3": { + "tag": "forge:gems/diamond" + }, + "output": { + "item": "bloodmagic:demoncrucible" + }, + "minimumDrain": 400.0, + "drain": 100.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/demon_crystallizer.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/demon_crystallizer.json new file mode 100644 index 00000000..1283b4e1 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/demon_crystallizer.json @@ -0,0 +1,20 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:soulforge" + }, + "input1": { + "tag": "forge:stone" + }, + "input2": { + "tag": "forge:gems/lapis" + }, + "input3": { + "tag": "forge:glass" + }, + "output": { + "item": "bloodmagic:demoncrystallizer" + }, + "minimumDrain": 500.0, + "drain": 100.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/destructive_crystal_block.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/destructive_crystal_block.json new file mode 100644 index 00000000..6423e1a6 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/destructive_crystal_block.json @@ -0,0 +1,20 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:destructivecrystal" + }, + "input1": { + "item": "bloodmagic:destructivecrystal" + }, + "input2": { + "item": "bloodmagic:destructivecrystal" + }, + "input3": { + "item": "bloodmagic:destructivecrystal" + }, + "output": { + "item": "bloodmagic:destructivedemoncrystal" + }, + "minimumDrain": 1200.0, + "drain": 100.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/fungal_charge.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/fungal_charge.json new file mode 100644 index 00000000..9a849f6d --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/fungal_charge.json @@ -0,0 +1,21 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "tag": "forge:cobblestone" + }, + "input1": { + "item": "minecraft:charcoal" + }, + "input2": { + "tag": "minecraft:mushroom_hyphae" + }, + "input3": { + "tag": "forge:mushrooms" + }, + "output": { + "item": "bloodmagic:fungal_charge", + "count": 8 + }, + "minimumDrain": 10.0, + "drain": 0.5 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/fungal_charge_fortune_1.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/fungal_charge_fortune_1.json new file mode 100644 index 00000000..b913ba14 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/fungal_charge_fortune_1.json @@ -0,0 +1,21 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:fungal_charge" + }, + "input1": { + "tag": "forge:crops/nether_wart" + }, + "input2": { + "tag": "forge:dusts/redstone" + }, + "input3": { + "tag": "forge:dusts/coal" + }, + "output": { + "item": "bloodmagic:fungal_charge", + "nbt": "{anointment_holder:{anointments:[{damage:1,max_damage:1,level:1,key:\"bloodmagic:fortune\"}]}}" + }, + "minimumDrain": 60.0, + "drain": 1.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/fungal_charge_silk_touch.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/fungal_charge_silk_touch.json new file mode 100644 index 00000000..50c7537b --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/fungal_charge_silk_touch.json @@ -0,0 +1,21 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:fungal_charge" + }, + "input1": { + "tag": "forge:crops/nether_wart" + }, + "input2": { + "item": "minecraft:cobweb" + }, + "input3": { + "tag": "forge:nuggets/gold" + }, + "output": { + "item": "bloodmagic:fungal_charge", + "nbt": "{anointment_holder:{anointments:[{damage:1,max_damage:1,level:1,key:\"bloodmagic:silk_touch\"}]}}" + }, + "minimumDrain": 60.0, + "drain": 1.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/fungal_charge_smelting.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/fungal_charge_smelting.json new file mode 100644 index 00000000..a47141b1 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/fungal_charge_smelting.json @@ -0,0 +1,26 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:fungal_charge" + }, + "input1": { + "tag": "forge:crops/nether_wart" + }, + "input2": { + "item": "minecraft:furnace" + }, + "input3": [ + { + "item": "minecraft:charcoal" + }, + { + "item": "minecraft:coal" + } + ], + "output": { + "item": "bloodmagic:fungal_charge", + "nbt": "{anointment_holder:{anointments:[{damage:1,max_damage:1,level:1,key:\"bloodmagic:smelting\"}]}}" + }, + "minimumDrain": 60.0, + "drain": 1.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/greatertartaricgem.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/greatertartaricgem.json new file mode 100644 index 00000000..a46a9f6d --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/greatertartaricgem.json @@ -0,0 +1,20 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:soulgemcommon" + }, + "input1": { + "item": "bloodmagic:demonslate" + }, + "input2": { + "item": "bloodmagic:weakbloodshard" + }, + "input3": { + "tag": "bloodmagic:crystals/demon" + }, + "output": { + "item": "bloodmagic:soulgemgreater" + }, + "minimumDrain": 1000.0, + "drain": 100.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/lessertartaricgem.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/lessertartaricgem.json new file mode 100644 index 00000000..cf5f5b19 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/lessertartaricgem.json @@ -0,0 +1,20 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:soulgempetty" + }, + "input1": { + "tag": "forge:gems/diamond" + }, + "input2": { + "tag": "forge:storage_blocks/redstone" + }, + "input3": { + "tag": "forge:storage_blocks/lapis" + }, + "output": { + "item": "bloodmagic:soulgemlesser" + }, + "minimumDrain": 60.0, + "drain": 20.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/pettytartaricgem.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/pettytartaricgem.json new file mode 100644 index 00000000..10c7417a --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/pettytartaricgem.json @@ -0,0 +1,20 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "tag": "forge:dusts/redstone" + }, + "input1": { + "tag": "forge:ingots/gold" + }, + "input2": { + "tag": "forge:glass" + }, + "input3": { + "tag": "forge:gems/lapis" + }, + "output": { + "item": "bloodmagic:soulgempetty" + }, + "minimumDrain": 1.0, + "drain": 1.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/primitive_crystalline_resonator.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/primitive_crystalline_resonator.json new file mode 100644 index 00000000..833978f6 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/primitive_crystalline_resonator.json @@ -0,0 +1,21 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "tag": "forge:stone" + }, + "input1": { + "tag": "forge:ingots" + }, + "input2": { + "item": "bloodmagic:defaultcrystal" + }, + "input3": { + "item": "bloodmagic:defaultcrystal" + }, + "output": { + "item": "bloodmagic:primitive_crystalline_resonator", + "nbt": "{Damage:0}" + }, + "minimumDrain": 1200.0, + "drain": 200.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/raw_crystal_block.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/raw_crystal_block.json new file mode 100644 index 00000000..6d9a3a3b --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/raw_crystal_block.json @@ -0,0 +1,20 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:defaultcrystal" + }, + "input1": { + "item": "bloodmagic:defaultcrystal" + }, + "input2": { + "item": "bloodmagic:defaultcrystal" + }, + "input3": { + "item": "bloodmagic:defaultcrystal" + }, + "output": { + "item": "bloodmagic:rawdemoncrystal" + }, + "minimumDrain": 1200.0, + "drain": 100.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/sanguine_reverter.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/sanguine_reverter.json new file mode 100644 index 00000000..ee37a2fb --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/sanguine_reverter.json @@ -0,0 +1,21 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "minecraft:shears" + }, + "input1": { + "tag": "forge:stone" + }, + "input2": { + "item": "bloodmagic:infusedslate" + }, + "input3": { + "tag": "forge:ingots/iron" + }, + "output": { + "item": "bloodmagic:sanguinereverter", + "nbt": "{Damage:0}" + }, + "minimumDrain": 350.0, + "drain": 30.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/sentientaxe.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/sentientaxe.json new file mode 100644 index 00000000..ee04cc66 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/sentientaxe.json @@ -0,0 +1,15 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:soulgempetty" + }, + "input1": { + "item": "minecraft:iron_axe" + }, + "output": { + "item": "bloodmagic:soulaxe", + "nbt": "{Damage:0}" + }, + "minimumDrain": 0.0, + "drain": 0.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/sentientpickaxe.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/sentientpickaxe.json new file mode 100644 index 00000000..c553a505 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/sentientpickaxe.json @@ -0,0 +1,15 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:soulgempetty" + }, + "input1": { + "item": "minecraft:iron_pickaxe" + }, + "output": { + "item": "bloodmagic:soulpickaxe", + "nbt": "{Damage:0}" + }, + "minimumDrain": 0.0, + "drain": 0.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/sentientscythe.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/sentientscythe.json new file mode 100644 index 00000000..77c85c8b --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/sentientscythe.json @@ -0,0 +1,15 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:soulgempetty" + }, + "input1": { + "item": "minecraft:iron_hoe" + }, + "output": { + "item": "bloodmagic:soulscythe", + "nbt": "{Damage:0}" + }, + "minimumDrain": 0.0, + "drain": 0.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/sentientshovel.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/sentientshovel.json new file mode 100644 index 00000000..205d060e --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/sentientshovel.json @@ -0,0 +1,15 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:soulgempetty" + }, + "input1": { + "item": "minecraft:iron_shovel" + }, + "output": { + "item": "bloodmagic:soulshovel", + "nbt": "{Damage:0}" + }, + "minimumDrain": 0.0, + "drain": 0.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/sentientsword.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/sentientsword.json new file mode 100644 index 00000000..ca642e55 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/sentientsword.json @@ -0,0 +1,15 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:soulgempetty" + }, + "input1": { + "item": "minecraft:iron_sword" + }, + "output": { + "item": "bloodmagic:soulsword", + "nbt": "{Damage:0}" + }, + "minimumDrain": 0.0, + "drain": 0.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/shaped_charge.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/shaped_charge.json new file mode 100644 index 00000000..b7c7fa04 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/shaped_charge.json @@ -0,0 +1,21 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "tag": "forge:cobblestone" + }, + "input1": { + "item": "minecraft:charcoal" + }, + "input2": { + "tag": "forge:sand" + }, + "input3": { + "tag": "forge:stone" + }, + "output": { + "item": "bloodmagic:shaped_charge", + "count": 8 + }, + "minimumDrain": 10.0, + "drain": 0.5 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/shaped_charge_fortune_1.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/shaped_charge_fortune_1.json new file mode 100644 index 00000000..d8a1c3db --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/shaped_charge_fortune_1.json @@ -0,0 +1,21 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:shaped_charge" + }, + "input1": { + "tag": "forge:crops/nether_wart" + }, + "input2": { + "tag": "forge:dusts/redstone" + }, + "input3": { + "tag": "forge:dusts/coal" + }, + "output": { + "item": "bloodmagic:shaped_charge", + "nbt": "{anointment_holder:{anointments:[{damage:1,max_damage:1,level:1,key:\"bloodmagic:fortune\"}]}}" + }, + "minimumDrain": 60.0, + "drain": 1.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/shaped_charge_silk_touch.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/shaped_charge_silk_touch.json new file mode 100644 index 00000000..380a43ac --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/shaped_charge_silk_touch.json @@ -0,0 +1,21 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:shaped_charge" + }, + "input1": { + "tag": "forge:crops/nether_wart" + }, + "input2": { + "item": "minecraft:cobweb" + }, + "input3": { + "tag": "forge:nuggets/gold" + }, + "output": { + "item": "bloodmagic:shaped_charge", + "nbt": "{anointment_holder:{anointments:[{damage:1,max_damage:1,level:1,key:\"bloodmagic:silk_touch\"}]}}" + }, + "minimumDrain": 60.0, + "drain": 1.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/shaped_charge_smelting.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/shaped_charge_smelting.json new file mode 100644 index 00000000..0fb26bc8 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/shaped_charge_smelting.json @@ -0,0 +1,26 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:shaped_charge" + }, + "input1": { + "tag": "forge:crops/nether_wart" + }, + "input2": { + "item": "minecraft:furnace" + }, + "input3": [ + { + "item": "minecraft:charcoal" + }, + { + "item": "minecraft:coal" + } + ], + "output": { + "item": "bloodmagic:shaped_charge", + "nbt": "{anointment_holder:{anointments:[{damage:1,max_damage:1,level:1,key:\"bloodmagic:smelting\"}]}}" + }, + "minimumDrain": 60.0, + "drain": 1.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/steadfast_crystal_block.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/steadfast_crystal_block.json new file mode 100644 index 00000000..90efc02e --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/steadfast_crystal_block.json @@ -0,0 +1,20 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:steadfastcrystal" + }, + "input1": { + "item": "bloodmagic:steadfastcrystal" + }, + "input2": { + "item": "bloodmagic:steadfastcrystal" + }, + "input3": { + "item": "bloodmagic:steadfastcrystal" + }, + "output": { + "item": "bloodmagic:steadfastdemoncrystal" + }, + "minimumDrain": 1200.0, + "drain": 100.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/throwing_dagger.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/throwing_dagger.json new file mode 100644 index 00000000..b173f229 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/throwing_dagger.json @@ -0,0 +1,18 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "tag": "forge:ingots/iron" + }, + "input1": { + "tag": "forge:ingots/iron" + }, + "input2": { + "tag": "forge:string" + }, + "output": { + "item": "bloodmagic:throwing_dagger", + "count": 16 + }, + "minimumDrain": 32.0, + "drain": 5.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/throwing_dagger_syringe.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/throwing_dagger_syringe.json new file mode 100644 index 00000000..c7fadcb8 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/throwing_dagger_syringe.json @@ -0,0 +1,15 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "tag": "forge:stone" + }, + "input1": { + "tag": "forge:glass" + }, + "output": { + "item": "bloodmagic:throwing_dagger_syringe", + "count": 8 + }, + "minimumDrain": 10.0, + "drain": 2.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/vein_charge.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/vein_charge.json new file mode 100644 index 00000000..eadea857 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/vein_charge.json @@ -0,0 +1,21 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "tag": "forge:cobblestone" + }, + "input1": { + "item": "minecraft:charcoal" + }, + "input2": { + "tag": "forge:sandstone" + }, + "input3": { + "tag": "forge:sand" + }, + "output": { + "item": "bloodmagic:veinmine_charge", + "count": 8 + }, + "minimumDrain": 10.0, + "drain": 0.5 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/vein_charge_fortune_1.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/vein_charge_fortune_1.json new file mode 100644 index 00000000..4790182d --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/vein_charge_fortune_1.json @@ -0,0 +1,21 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:veinmine_charge" + }, + "input1": { + "tag": "forge:crops/nether_wart" + }, + "input2": { + "tag": "forge:dusts/redstone" + }, + "input3": { + "tag": "forge:dusts/coal" + }, + "output": { + "item": "bloodmagic:veinmine_charge", + "nbt": "{anointment_holder:{anointments:[{damage:1,max_damage:1,level:1,key:\"bloodmagic:fortune\"}]}}" + }, + "minimumDrain": 60.0, + "drain": 1.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/vein_charge_silk_touch.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/vein_charge_silk_touch.json new file mode 100644 index 00000000..ccf0709a --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/vein_charge_silk_touch.json @@ -0,0 +1,21 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:veinmine_charge" + }, + "input1": { + "tag": "forge:crops/nether_wart" + }, + "input2": { + "item": "minecraft:cobweb" + }, + "input3": { + "tag": "forge:nuggets/gold" + }, + "output": { + "item": "bloodmagic:veinmine_charge", + "nbt": "{anointment_holder:{anointments:[{damage:1,max_damage:1,level:1,key:\"bloodmagic:silk_touch\"}]}}" + }, + "minimumDrain": 60.0, + "drain": 1.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/vein_charge_smelting.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/vein_charge_smelting.json new file mode 100644 index 00000000..4c46a2cd --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/vein_charge_smelting.json @@ -0,0 +1,26 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:veinmine_charge" + }, + "input1": { + "tag": "forge:crops/nether_wart" + }, + "input2": { + "item": "minecraft:furnace" + }, + "input3": [ + { + "item": "minecraft:charcoal" + }, + { + "item": "minecraft:coal" + } + ], + "output": { + "item": "bloodmagic:veinmine_charge", + "nbt": "{anointment_holder:{anointments:[{damage:1,max_damage:1,level:1,key:\"bloodmagic:smelting\"}]}}" + }, + "minimumDrain": 60.0, + "drain": 1.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/vengeful_crystal_block.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/vengeful_crystal_block.json new file mode 100644 index 00000000..96fed3ca --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/vengeful_crystal_block.json @@ -0,0 +1,20 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "bloodmagic:vengefulcrystal" + }, + "input1": { + "item": "bloodmagic:vengefulcrystal" + }, + "input2": { + "item": "bloodmagic:vengefulcrystal" + }, + "input3": { + "item": "bloodmagic:vengefulcrystal" + }, + "output": { + "item": "bloodmagic:vengefuldemoncrystal" + }, + "minimumDrain": 1200.0, + "drain": 100.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/weak_activation_crystal.json b/src/generated/resources/data/bloodmagic/recipes/weak_activation_crystal.json new file mode 100644 index 00000000..ba19a174 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/weak_activation_crystal.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:altar", + "input": { + "item": "bloodmagic:lavacrystal" + }, + "output": { + "item": "bloodmagic:activationcrystalweak" + }, + "upgradeLevel": 2, + "altarSyphon": 10000, + "consumptionRate": 20, + "drainRate": 10 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/arc/cuttingfluid.json b/src/generated/resources/data/bloodmagic/tags/items/arc/cuttingfluid.json new file mode 100644 index 00000000..c111d035 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/tags/items/arc/cuttingfluid.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:basiccuttingfluid" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/arc/explosive.json b/src/generated/resources/data/bloodmagic/tags/items/arc/explosive.json new file mode 100644 index 00000000..7488cf64 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/tags/items/arc/explosive.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "bloodmagic:explosivepowder", + "bloodmagic:primitive_explosive_cell" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/arc/furnace.json b/src/generated/resources/data/bloodmagic/tags/items/arc/furnace.json new file mode 100644 index 00000000..40b104b1 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/tags/items/arc/furnace.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "bloodmagic:furnacecell_primitive", + "bloodmagic:lavacrystal" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/arc/hydrate.json b/src/generated/resources/data/bloodmagic/tags/items/arc/hydrate.json new file mode 100644 index 00000000..dba4afa1 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/tags/items/arc/hydrate.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:primitive_hydration_cell" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/arc/resonator.json b/src/generated/resources/data/bloodmagic/tags/items/arc/resonator.json new file mode 100644 index 00000000..5ed4cd52 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/tags/items/arc/resonator.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "bloodmagic:primitive_crystalline_resonator", + "bloodmagic:crystalline_resonator" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/arc/reverter.json b/src/generated/resources/data/bloodmagic/tags/items/arc/reverter.json new file mode 100644 index 00000000..ab081891 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/tags/items/arc/reverter.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:sanguinereverter" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/arc/sieve.json b/src/generated/resources/data/bloodmagic/tags/items/arc/sieve.json new file mode 100644 index 00000000..7d46ac2c --- /dev/null +++ b/src/generated/resources/data/bloodmagic/tags/items/arc/sieve.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:airscribetool" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/arc/tool.json b/src/generated/resources/data/bloodmagic/tags/items/arc/tool.json new file mode 100644 index 00000000..46ccea84 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/tags/items/arc/tool.json @@ -0,0 +1,12 @@ +{ + "replace": false, + "values": [ + "#bloodmagic:arc/furnace", + "#bloodmagic:arc/reverter", + "#bloodmagic:arc/sieve", + "#bloodmagic:arc/explosive", + "#bloodmagic:arc/hydrate", + "#bloodmagic:arc/resonator", + "#bloodmagic:arc/cuttingfluid" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/crystals/demon.json b/src/generated/resources/data/bloodmagic/tags/items/crystals/demon.json new file mode 100644 index 00000000..0ad4148e --- /dev/null +++ b/src/generated/resources/data/bloodmagic/tags/items/crystals/demon.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "bloodmagic:defaultcrystal", + "bloodmagic:corrosivecrystal", + "bloodmagic:destructivecrystal", + "bloodmagic:vengefulcrystal", + "bloodmagic:steadfastcrystal" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/dusts/corrupted.json b/src/generated/resources/data/bloodmagic/tags/items/dusts/corrupted.json new file mode 100644 index 00000000..a84e11a0 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/tags/items/dusts/corrupted.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:corrupted_dust" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/fragments/gold.json b/src/generated/resources/data/bloodmagic/tags/items/fragments/gold.json new file mode 100644 index 00000000..be036261 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/tags/items/fragments/gold.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:goldfragment" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/fragments/iron.json b/src/generated/resources/data/bloodmagic/tags/items/fragments/iron.json new file mode 100644 index 00000000..9bc54fba --- /dev/null +++ b/src/generated/resources/data/bloodmagic/tags/items/fragments/iron.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:ironfragment" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/fragments/netherite_scrap.json b/src/generated/resources/data/bloodmagic/tags/items/fragments/netherite_scrap.json new file mode 100644 index 00000000..1f0d5a35 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/tags/items/fragments/netherite_scrap.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:fragment_netherite_scrap" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/gravels/gold.json b/src/generated/resources/data/bloodmagic/tags/items/gravels/gold.json new file mode 100644 index 00000000..8c75a5af --- /dev/null +++ b/src/generated/resources/data/bloodmagic/tags/items/gravels/gold.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:goldgravel" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/gravels/iron.json b/src/generated/resources/data/bloodmagic/tags/items/gravels/iron.json new file mode 100644 index 00000000..5c317952 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/tags/items/gravels/iron.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:irongravel" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/gravels/netherite_scrap.json b/src/generated/resources/data/bloodmagic/tags/items/gravels/netherite_scrap.json new file mode 100644 index 00000000..a957a0e3 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/tags/items/gravels/netherite_scrap.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:gravel_netherite_scrap" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/tiny_dusts/corrupted.json b/src/generated/resources/data/bloodmagic/tags/items/tiny_dusts/corrupted.json new file mode 100644 index 00000000..e792ed30 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/tags/items/tiny_dusts/corrupted.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:corrupted_tinydust" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/fluids/life.json b/src/generated/resources/data/forge/tags/fluids/life.json new file mode 100644 index 00000000..59895a90 --- /dev/null +++ b/src/generated/resources/data/forge/tags/fluids/life.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "bloodmagic:life_essence_fluid", + "bloodmagic:life_essence_fluid_flowing" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/items/dusts/coal.json b/src/generated/resources/data/forge/tags/items/dusts/coal.json new file mode 100644 index 00000000..c9d575d6 --- /dev/null +++ b/src/generated/resources/data/forge/tags/items/dusts/coal.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:coalsand" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/items/dusts/gold.json b/src/generated/resources/data/forge/tags/items/dusts/gold.json new file mode 100644 index 00000000..959fcf7a --- /dev/null +++ b/src/generated/resources/data/forge/tags/items/dusts/gold.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:goldsand" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/items/dusts/hellforged.json b/src/generated/resources/data/forge/tags/items/dusts/hellforged.json new file mode 100644 index 00000000..129c8f3d --- /dev/null +++ b/src/generated/resources/data/forge/tags/items/dusts/hellforged.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:sand_hellforged" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/items/dusts/iron.json b/src/generated/resources/data/forge/tags/items/dusts/iron.json new file mode 100644 index 00000000..d3d71370 --- /dev/null +++ b/src/generated/resources/data/forge/tags/items/dusts/iron.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:ironsand" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/items/dusts/netherite_scrap.json b/src/generated/resources/data/forge/tags/items/dusts/netherite_scrap.json new file mode 100644 index 00000000..3d4d11de --- /dev/null +++ b/src/generated/resources/data/forge/tags/items/dusts/netherite_scrap.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:sand_netherite" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/items/dusts/saltpeter.json b/src/generated/resources/data/forge/tags/items/dusts/saltpeter.json new file mode 100644 index 00000000..5313e4e2 --- /dev/null +++ b/src/generated/resources/data/forge/tags/items/dusts/saltpeter.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:saltpeter" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/items/dusts/sulfur.json b/src/generated/resources/data/forge/tags/items/dusts/sulfur.json new file mode 100644 index 00000000..092ad725 --- /dev/null +++ b/src/generated/resources/data/forge/tags/items/dusts/sulfur.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:sulfur" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/items/ingots/hellforged.json b/src/generated/resources/data/forge/tags/items/ingots/hellforged.json new file mode 100644 index 00000000..d71afc0c --- /dev/null +++ b/src/generated/resources/data/forge/tags/items/ingots/hellforged.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:ingot_hellforged" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/items/ores/copper.json b/src/generated/resources/data/forge/tags/items/ores/copper.json new file mode 100644 index 00000000..5e8aecc9 --- /dev/null +++ b/src/generated/resources/data/forge/tags/items/ores/copper.json @@ -0,0 +1,4 @@ +{ + "replace": false, + "values": [] +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/items/ores/lead.json b/src/generated/resources/data/forge/tags/items/ores/lead.json new file mode 100644 index 00000000..5e8aecc9 --- /dev/null +++ b/src/generated/resources/data/forge/tags/items/ores/lead.json @@ -0,0 +1,4 @@ +{ + "replace": false, + "values": [] +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/items/ores/osmium.json b/src/generated/resources/data/forge/tags/items/ores/osmium.json new file mode 100644 index 00000000..5e8aecc9 --- /dev/null +++ b/src/generated/resources/data/forge/tags/items/ores/osmium.json @@ -0,0 +1,4 @@ +{ + "replace": false, + "values": [] +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/items/ores/silver.json b/src/generated/resources/data/forge/tags/items/ores/silver.json new file mode 100644 index 00000000..5e8aecc9 --- /dev/null +++ b/src/generated/resources/data/forge/tags/items/ores/silver.json @@ -0,0 +1,4 @@ +{ + "replace": false, + "values": [] +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/items/ores/tin.json b/src/generated/resources/data/forge/tags/items/ores/tin.json new file mode 100644 index 00000000..5e8aecc9 --- /dev/null +++ b/src/generated/resources/data/forge/tags/items/ores/tin.json @@ -0,0 +1,4 @@ +{ + "replace": false, + "values": [] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/mushroom_hyphae.json b/src/generated/resources/data/minecraft/tags/blocks/mushroom_hyphae.json new file mode 100644 index 00000000..f8f96ad1 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/mushroom_hyphae.json @@ -0,0 +1,14 @@ +{ + "replace": false, + "values": [ + "minecraft:brown_mushroom_block", + "minecraft:red_mushroom_block", + "minecraft:crimson_hyphae", + "minecraft:warped_hyphae", + "minecraft:stripped_crimson_hyphae", + "minecraft:stripped_warped_hyphae", + "minecraft:nether_wart_block", + "minecraft:warped_wart_block", + "minecraft:shroomlight" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/mushroom_stem.json b/src/generated/resources/data/minecraft/tags/blocks/mushroom_stem.json new file mode 100644 index 00000000..8055c89d --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/mushroom_stem.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:mushroom_stem", + "minecraft:crimson_stem", + "minecraft:warped_stem" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/walls.json b/src/generated/resources/data/minecraft/tags/blocks/walls.json new file mode 100644 index 00000000..a79e9654 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/walls.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "bloodmagic:dungeon_brick_wall", + "bloodmagic:dungeon_polished_wall" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/items/mushroom_hyphae.json b/src/generated/resources/data/minecraft/tags/items/mushroom_hyphae.json new file mode 100644 index 00000000..f8f96ad1 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/items/mushroom_hyphae.json @@ -0,0 +1,14 @@ +{ + "replace": false, + "values": [ + "minecraft:brown_mushroom_block", + "minecraft:red_mushroom_block", + "minecraft:crimson_hyphae", + "minecraft:warped_hyphae", + "minecraft:stripped_crimson_hyphae", + "minecraft:stripped_warped_hyphae", + "minecraft:nether_wart_block", + "minecraft:warped_wart_block", + "minecraft:shroomlight" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/items/mushroom_stem.json b/src/generated/resources/data/minecraft/tags/items/mushroom_stem.json new file mode 100644 index 00000000..8055c89d --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/items/mushroom_stem.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:mushroom_stem", + "minecraft:crimson_stem", + "minecraft:warped_stem" + ] +} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java b/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java deleted file mode 100644 index a76b1bad..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java +++ /dev/null @@ -1,1876 +0,0 @@ -package WayofTime.alchemicalWizardry; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.List; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; - -import WayofTime.alchemicalWizardry.common.potion.*; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.Item.ToolMaterial; -import net.minecraft.item.ItemArmor.ArmorMaterial; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.Potion; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.WeightedRandomChestContent; -import net.minecraftforge.common.ChestGenHooks; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.util.EnumHelper; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fml.common.FMLCommonHandler; -import net.minecraftforge.fml.common.Loader; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.Mod.EventHandler; -import net.minecraftforge.fml.common.Mod.Instance; -import net.minecraftforge.fml.common.ModContainer; -import net.minecraftforge.fml.common.SidedProxy; -import net.minecraftforge.fml.common.event.FMLInitializationEvent; -import net.minecraftforge.fml.common.event.FMLInterModComms; -import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; -import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; -import net.minecraftforge.fml.common.network.NetworkRegistry; -import net.minecraftforge.fml.common.registry.EntityRegistry; -import net.minecraftforge.fml.common.registry.GameRegistry; -import net.minecraftforge.oredict.OreDictionary; -import net.minecraftforge.oredict.RecipeSorter; -import net.minecraftforge.oredict.RecipeSorter.Category; - -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -//import thaumcraft.api.ItemApi; -//import thaumcraft.api.ThaumcraftApi; -//import thaumcraft.api.aspects.Aspect; -//import thaumcraft.api.aspects.AspectList; -import WayofTime.alchemicalWizardry.api.alchemy.AlchemicalPotionCreationHandler; -import WayofTime.alchemicalWizardry.api.alchemy.AlchemyRecipeRegistry; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; -import WayofTime.alchemicalWizardry.api.altarRecipeRegistry.AltarRecipeRegistry; -import WayofTime.alchemicalWizardry.api.bindingRegistry.BindingRegistry; -import WayofTime.alchemicalWizardry.api.bindingRegistry.UnbindingRegistry; -import WayofTime.alchemicalWizardry.api.compress.CompressionRegistry; -import WayofTime.alchemicalWizardry.api.harvest.HarvestRegistry; -import WayofTime.alchemicalWizardry.api.items.ShapedBloodOrbRecipe; -import WayofTime.alchemicalWizardry.api.items.ShapelessBloodOrbRecipe; -import WayofTime.alchemicalWizardry.api.rituals.Rituals; -import WayofTime.alchemicalWizardry.api.soulNetwork.ComplexNetworkHandler; -import WayofTime.alchemicalWizardry.api.spell.SpellEffectRegistry; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmMelee; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmProjectile; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmSelf; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmTool; -import WayofTime.alchemicalWizardry.api.summoningRegistry.SummoningRegistry; -import WayofTime.alchemicalWizardry.common.AlchemicalWizardryEventHooks; -import WayofTime.alchemicalWizardry.common.AlchemicalWizardryFuelHandler; -import WayofTime.alchemicalWizardry.common.ClientToServerPacketHandler; -import WayofTime.alchemicalWizardry.common.CommonProxy; -import WayofTime.alchemicalWizardry.common.LifeBucketHandler; -import WayofTime.alchemicalWizardry.common.LifeEssence; -import WayofTime.alchemicalWizardry.common.ModLivingDropsEvent; -import WayofTime.alchemicalWizardry.common.NewPacketHandler; -import WayofTime.alchemicalWizardry.common.achievements.ModAchievements; -import WayofTime.alchemicalWizardry.common.alchemy.CombinedPotionRegistry; -import WayofTime.alchemicalWizardry.common.block.BlockArmourForge; -import WayofTime.alchemicalWizardry.common.bloodAltarUpgrade.UpgradedAltars; -import WayofTime.alchemicalWizardry.common.compress.AdvancedCompressionHandler; -import WayofTime.alchemicalWizardry.common.compress.BaseCompressionHandler; -import WayofTime.alchemicalWizardry.common.compress.StorageBlockCraftingManager; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.DemonPacketMinorGrunt; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.DemonPacketRegistry; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGrunt; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntEarth; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntFire; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardian; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianEarth; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianFire; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianIce; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianWind; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntIce; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntWind; -import WayofTime.alchemicalWizardry.common.demonVillage.loot.DemonVillageLootRegistry; -import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.TEDemonChest; -import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.TEDemonPortal; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityAirElemental; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityBileDemon; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityBoulderFist; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityEarthElemental; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityFallenAngel; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityFireElemental; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityHolyElemental; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityIceDemon; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityLowerGuardian; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityShade; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityShadeElemental; -import WayofTime.alchemicalWizardry.common.entity.mob.EntitySmallEarthGolem; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityWaterElemental; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityWingedFireDemon; -import WayofTime.alchemicalWizardry.common.harvest.BloodMagicHarvestHandler; -import WayofTime.alchemicalWizardry.common.harvest.CactusReedHarvestHandler; -import WayofTime.alchemicalWizardry.common.harvest.GourdHarvestHandler; -import WayofTime.alchemicalWizardry.common.items.ItemIncense; -import WayofTime.alchemicalWizardry.common.items.ItemRitualDiviner; -import WayofTime.alchemicalWizardry.common.items.armour.OmegaArmour; -//import WayofTime.alchemicalWizardry.common.items.forestry.ItemBloodFrame; -import WayofTime.alchemicalWizardry.common.items.sigil.holding.HoldingPacketHandler; -import WayofTime.alchemicalWizardry.common.omega.OmegaParadigmEarth; -import WayofTime.alchemicalWizardry.common.omega.OmegaParadigmFire; -import WayofTime.alchemicalWizardry.common.omega.OmegaParadigmWater; -import WayofTime.alchemicalWizardry.common.omega.OmegaParadigmWind; -import WayofTime.alchemicalWizardry.common.omega.OmegaRegistry; -import WayofTime.alchemicalWizardry.common.renderer.AlchemyCircleRenderer; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectAnimalGrowth; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectAutoAlchemy; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectBinding; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectBiomeChanger; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectContainment; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectCrafting; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectCrushing; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectDemonPortal; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectEllipsoid; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectEvaporation; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectExpulsion; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectFeatheredEarth; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectFeatheredKnife; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectFlight; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectFullStomach; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectGrowth; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectHarvest; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectHealing; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectInterdiction; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectItemRouting; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectItemSuction; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectJumping; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectLava; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectLeap; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectLifeConduit; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectMagnetic; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectOmegaStalling; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectOmegaTest; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSpawnWard; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSphereCreator; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSummonMeteor; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSupression; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectUnbinding; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectVeilOfEvil; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectWater; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectWellOfSuffering; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSEMeleeDefaultEarth; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSEMeleeDefensiveEarth; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSEMeleeEnvironmentalEarth; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSEMeleeOffensiveEarth; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSEProjectileDefaultEarth; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSEProjectileDefensiveEarth; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSEProjectileEnvironmentalEarth; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSEProjectileOffensiveEarth; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSESelfDefaultEarth; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSESelfDefensiveEarth; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSESelfEnvironmentalEarth; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSESelfOffensiveEarth; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSEToolDefaultEarth; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSEToolDefensiveEarth; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSEToolEnvironmentalEarth; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSEToolOffensiveEarth; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire.CSEMeleeDefaultFire; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire.CSEMeleeDefensiveFire; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire.CSEMeleeEnvironmentalFire; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire.CSEMeleeOffensiveFire; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire.CSEProjectileDefaultFire; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire.CSEProjectileDefensiveFire; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire.CSEProjectileEnvironmentalFire; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire.CSEProjectileOffensiveFire; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire.CSESelfDefaultFire; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire.CSESelfDefensiveFire; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire.CSESelfEnvironmentalFire; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire.CSESelfOffensiveFire; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire.CSEToolDefaultFire; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire.CSEToolDefensiveFire; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire.CSEToolEnvironmentalFire; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire.CSEToolOffensiveFire; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice.CSEMeleeDefaultIce; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice.CSEMeleeDefensiveIce; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice.CSEMeleeEnvironmentalIce; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice.CSEMeleeOffensiveIce; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice.CSEProjectileDefaultIce; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice.CSEProjectileDefensiveIce; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice.CSEProjectileEnvironmentalIce; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice.CSEProjectileOffensiveIce; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice.CSESelfDefaultIce; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice.CSESelfDefensiveIce; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice.CSESelfEnvironmentalIce; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice.CSESelfOffensiveIce; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice.CSEToolDefaultIce; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice.CSEToolDefensiveIce; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice.CSEToolEnvironmentalIce; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice.CSEToolOffensiveIce; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind.CSEMeleeDefaultWind; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind.CSEMeleeDefensiveWind; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind.CSEMeleeEnvironmentalWind; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind.CSEMeleeOffensiveWind; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind.CSEProjectileDefaultWind; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind.CSEProjectileDefensiveWind; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind.CSEProjectileEnvironmentalWind; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind.CSEProjectileOffensiveWind; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind.CSESelfDefaultWind; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind.CSESelfDefensiveWind; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind.CSESelfEnvironmentalWind; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind.CSESelfOffensiveWind; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind.CSEToolDefaultWind; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind.CSEToolDefensiveWind; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind.CSEToolEnvironmentalWind; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind.CSEToolOffensiveWind; -import WayofTime.alchemicalWizardry.common.spell.simple.HomSpellRegistry; -import WayofTime.alchemicalWizardry.common.spell.simple.SpellEarthBender; -import WayofTime.alchemicalWizardry.common.spell.simple.SpellExplosions; -import WayofTime.alchemicalWizardry.common.spell.simple.SpellFireBurst; -import WayofTime.alchemicalWizardry.common.spell.simple.SpellFrozenWater; -import WayofTime.alchemicalWizardry.common.spell.simple.SpellHolyBlast; -import WayofTime.alchemicalWizardry.common.spell.simple.SpellLightningBolt; -import WayofTime.alchemicalWizardry.common.spell.simple.SpellTeleport; -import WayofTime.alchemicalWizardry.common.spell.simple.SpellWateryGrave; -import WayofTime.alchemicalWizardry.common.spell.simple.SpellWindGust; -import WayofTime.alchemicalWizardry.common.summoning.SummoningHelperAW; -import WayofTime.alchemicalWizardry.common.summoning.meteor.MeteorRegistry; -import WayofTime.alchemicalWizardry.common.tileEntity.TEAlchemicalCalcinator; -import WayofTime.alchemicalWizardry.common.tileEntity.TEAltar; -import WayofTime.alchemicalWizardry.common.tileEntity.TEBelljar; -import WayofTime.alchemicalWizardry.common.tileEntity.TEConduit; -import WayofTime.alchemicalWizardry.common.tileEntity.TECrucible; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpellTable; -import WayofTime.alchemicalWizardry.common.tileEntity.TEMasterStone; -import WayofTime.alchemicalWizardry.common.tileEntity.TEMimicBlock; -import WayofTime.alchemicalWizardry.common.tileEntity.TEOrientable; -import WayofTime.alchemicalWizardry.common.tileEntity.TEPedestal; -import WayofTime.alchemicalWizardry.common.tileEntity.TEPlinth; -import WayofTime.alchemicalWizardry.common.tileEntity.TEReagentConduit; -import WayofTime.alchemicalWizardry.common.tileEntity.TESchematicSaver; -import WayofTime.alchemicalWizardry.common.tileEntity.TESocket; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpectralBlock; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpectralContainer; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpellEffectBlock; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpellEnhancementBlock; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpellModifierBlock; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpellParadigmBlock; -import WayofTime.alchemicalWizardry.common.tileEntity.TETeleposer; -import WayofTime.alchemicalWizardry.common.tileEntity.TEChemistrySet; -import WayofTime.alchemicalWizardry.common.tileEntity.gui.GuiHandler; -//import WayofTime.alchemicalWizardry.common.tweaker.MineTweakerIntegration; - - -@Mod(modid = "AWWayofTime", name = "AlchemicalWizardry", version = "v1.3.3", guiFactory = "WayofTime.alchemicalWizardry.client.gui.ConfigGuiFactory") -public class AlchemicalWizardry -{ - public static String MODID = "AWWayofTime"; //Temporary - - public static boolean parseTextFiles = false; - - public static boolean doMeteorsDestroyBlocks = true; - public static String[] diamondMeteorArray; - public static int diamondMeteorRadius; - public static String[] stoneMeteorArray; - public static int stoneMeteorRadius; - public static String[] ironBlockMeteorArray; - public static int ironBlockMeteorRadius; - public static String[] netherStarMeteorArray; - public static int netherStarMeteorRadius; - - public static String[] allowedCrushedOresArray; - - public static Potion customPotionDrowning; - public static Potion customPotionBoost; - public static Potion customPotionProjProt; - public static Potion customPotionInhibit; - public static Potion customPotionFlight; - public static Potion customPotionReciprocation; - public static Potion customPotionFlameCloak; - public static Potion customPotionIceCloak; - public static Potion customPotionHeavyHeart; - public static Potion customPotionFireFuse; - public static Potion customPotionPlanarBinding; - public static Potion customPotionSoulFray; - public static Potion customPotionSoulHarden; - public static Potion customPotionDeaf; - public static Potion customPotionFeatherFall; - public static Potion customPotionDemonCloak; - public static Potion customPotionAmphibian; - - public static int customPotionDrowningID; - public static int customPotionBoostID; - public static int customPotionProjProtID; - public static int customPotionInhibitID; - public static int customPotionFlightID; - public static int customPotionReciprocationID; - public static int customPotionFlameCloakID; - public static int customPotionIceCloakID; - public static int customPotionHeavyHeartID; - public static int customPotionFireFuseID; - public static int customPotionPlanarBindingID; - public static int customPotionSoulFrayID; - public static int customPotionSoulHardenID; - public static int customPotionDeafID; - public static int customPotionFeatherFallID; - public static int customPotionDemonCloakID; - public static int customPotionAmphibianID; - - public static boolean ritualDisabledWater; - public static boolean ritualDisabledLava; - public static boolean ritualDisabledGreenGrove; - public static boolean ritualDisabledInterdiction; - public static boolean ritualDisabledContainment; - public static boolean ritualDisabledBinding; - public static boolean ritualDisabledUnbinding; - public static boolean ritualDisabledHighJump; - public static boolean ritualDisabledMagnetism; - public static boolean ritualDisabledCrusher; - public static boolean ritualDisabledSpeed; - public static boolean ritualDisabledAnimalGrowth; - public static boolean ritualDisabledSuffering; - public static boolean ritualDisabledRegen; - public static boolean ritualDisabledFeatheredKnife; - public static boolean ritualDisabledFeatheredEarth; - public static boolean ritualDisabledGaia; - public static boolean ritualDisabledCondor; - public static boolean ritualDisabledFallingTower; - public static boolean ritualDisabledBalladOfAlchemy; - public static boolean ritualDisabledExpulsion; - public static boolean ritualDisabledSuppression; - public static boolean ritualDisabledZephyr; - public static boolean ritualDisabledHarvest; - public static boolean ritualDisabledConduit; - public static boolean ritualDisabledEllipsoid; - public static boolean ritualDisabledEvaporation; - public static boolean ritualDisabledSpawnWard; - public static boolean ritualDisabledVeilOfEvil; - public static boolean ritualDisabledFullStomach; - public static boolean ritualDisabledConvocation; - public static boolean ritualDisabledSymmetry; - public static boolean ritualDisabledStalling; - public static boolean ritualDisabledCrafting; - public static boolean ritualDisabledPhantomHands; - public static boolean ritualDisabledSphereIsland; - - public static boolean potionDisableRegen; - public static boolean potionDisableNightVision; - public static boolean potionDisableFireResistance; - public static boolean potionDisableWaterBreathing; - public static boolean potionDisableMoveSpeed; - public static boolean potionDisableInstantHealth; - public static boolean potionDisablePoison; - public static boolean potionDisableBlindness; - public static boolean potionDisableWeakness; - public static boolean potionDisableStrength; - public static boolean potionDisableJumpBoost; - public static boolean potionDisableSlowness; - public static boolean potionDisableMining; - public static boolean potionDisableDrowning; - public static boolean potionDisableInvisibility; - public static boolean potionDisableResistance; - public static boolean potionDisableSaturation; - public static boolean potionDisableHealthBoost; - public static boolean potionDisableAbsorption; - public static boolean potionDisableBoost; - public static boolean potionDisableFlight; - public static boolean potionDisableReciprocation; - public static boolean potionDisablePlanarBinding; - public static boolean potionDisableSoulFray; - public static boolean potionDisableSoulHarden; - public static boolean potionDisableDeafness; - - public static boolean isThaumcraftLoaded; - public static boolean isForestryLoaded; - public static boolean isBotaniaLoaded; - public static boolean isFMPLoaded; - public static boolean isPneumaticCraftLoaded; - - public static boolean wimpySettings; - public static boolean respawnWithDebuff; - public static boolean lockdownAltar; - public static boolean causeHungerWithRegen; - public static boolean causeHungerChatMessage = true; - - public static List wellBlacklist; - - public static Logger logger = LogManager.getLogger("BloodMagic"); - public static CreativeTabs tabBloodMagic = new CreativeTabs("tabBloodMagic") - { - @Override - public ItemStack getIconItemStack() - { - return new ItemStack(ModItems.weakBloodOrb, 1, 0); - } - - @Override - public Item getTabIconItem() - { - return ModItems.weakBloodOrb; - } - }; - - public static ToolMaterial bloodBoundToolMaterial = EnumHelper.addToolMaterial("BoundBlood", 4, 1000, 12.0f, 8.0f, 50); - public static ArmorMaterial sanguineArmourArmourMaterial = EnumHelper.addArmorMaterial("SanguineArmour", "test", 33, new int[]{3, 8, 6, 3}, 30); - - //Dungeon loot chances - public static int standardBindingAgentDungeonChance; - public static int mundanePowerCatalystDungeonChance; - public static int averagePowerCatalystDungeonChance; - public static int greaterPowerCatalystDungeonChance; - public static int mundaneLengtheningCatalystDungeonChance; - public static int averageLengtheningCatalystDungeonChance; - public static int greaterLengtheningCatalystDungeonChance; - - //Mob IDs - public static String entityFallenAngelID = "AW001FallenAngel"; - public static String entityLowerGuardianID = "AW002"; - public static String entityBileDemonID = "AW003"; - public static String entityWingedFireDemonID = "AW004"; - public static String entitySmallEarthGolemID = "AW005"; - public static String entityIceDemonID = "AW006"; - public static String entityBoulderFistID = "AW007"; - public static String entityShadeID = "AW008"; - public static String entityAirElementalID = "AW009"; - public static String entityWaterElementalID = "AW010"; - public static String entityEarthElementalID = "AW011"; - public static String entityFireElementalID = "AW012"; - public static String entityShadeElementalID = "AW013"; - public static String entityHolyElementalID = "AW014"; - public static String entityMinorDemonGruntID = "AW015"; - public static String entityMinorDemonGruntFireID = "AW016"; - public static String entityMinorDemonGruntWindID = "AW017"; - public static String entityMinorDemonGruntIceID = "AW018"; - public static String entityMinorDemonGruntEarthID = "AW019"; - public static String entityMinorDemonGruntGuardianID = "AW020"; - public static String entityMinorDemonGruntGuardianFireID = "AW021"; - public static String entityMinorDemonGruntGuardianWindID = "AW022"; - public static String entityMinorDemonGruntGuardianIceID = "AW023"; - public static String entityMinorDemonGruntGuardianEarthID = "AW024"; - - public static boolean isDemonRitualCreativeOnly = false; - - public static Fluid lifeEssenceFluid; - - // The instance of your mod that Forge uses. - @Instance("AWWayofTime") - public static AlchemicalWizardry instance; - - // Says where the client and server 'proxy' code is loaded. - @SidedProxy(clientSide = "WayofTime.alchemicalWizardry.client.ClientProxy", serverSide = "WayofTime.alchemicalWizardry.common.CommonProxy") - public static CommonProxy proxy; - - public static final HoldingPacketHandler packetPipeline = new HoldingPacketHandler(); - - @EventHandler - public void preInit(FMLPreInitializationEvent event) - { - File bmDirectory = new File("config/BloodMagic/schematics"); - - if (!bmDirectory.exists() && bmDirectory.mkdirs()) - { - try - { - InputStream in = AlchemicalWizardry.class.getResourceAsStream("/assets/alchemicalwizardry/schematics/building/buildings.zip"); - logger.info("none yet!"); - if (in != null) - { - logger.info("I have found a zip!"); - ZipInputStream zipStream = new ZipInputStream(in); - ZipEntry entry; - - while ((entry = zipStream.getNextEntry()) != null) - { - File file = new File(bmDirectory, entry.getName()); - if (file.exists() && file.length() > 3L) - { - continue; - } - FileOutputStream out = new FileOutputStream(file); - - byte[] buffer = new byte[8192]; - int len; - while ((len = zipStream.read(buffer)) != -1) - { - out.write(buffer, 0, len); - } - out.close(); - } - } - } catch (Exception e) - { - } - } - - TEDemonPortal.loadBuildingList(); - - ComplexNetworkHandler.load(); - - MinecraftForge.EVENT_BUS.register(new LifeBucketHandler()); - BloodMagicConfiguration.init(new File(event.getModConfigurationDirectory(), "AWWayofTime.cfg")); - - //Custom config stuff goes here - Potion[] potionTypes; - - for (Field f : Potion.class.getDeclaredFields()) - { - f.setAccessible(true); - - try - { - if (f.getName().equals("potionTypes") || f.getName().equals("field_76425_a")) - { - Field modfield = Field.class.getDeclaredField("modifiers"); - modfield.setAccessible(true); - modfield.setInt(f, f.getModifiers() & ~Modifier.FINAL); - potionTypes = (Potion[]) f.get(null); - final Potion[] newPotionTypes = new Potion[256]; - System.arraycopy(potionTypes, 0, newPotionTypes, 0, potionTypes.length); - f.set(null, newPotionTypes); - } - } catch (Exception e) - { - System.err.println("Severe error, please report this to the mod author:"); - System.err.println(e); - } - } - AlchemicalWizardry.lifeEssenceFluid = new LifeEssence("Life Essence"); - FluidRegistry.registerFluid(lifeEssenceFluid); - - ModBlocks.init(); - ModItems.init(); - - RecipeSorter.register("AWWayofTime:shapedorb", ShapedBloodOrbRecipe.class, Category.SHAPED, "before:minecraft:shapeless"); - RecipeSorter.register("AWWayofTime:shapelessorb", ShapelessBloodOrbRecipe.class, Category.SHAPELESS, "after:minecraft:shapeless"); - - Object eventHook = new AlchemicalWizardryEventHooks(); - FMLCommonHandler.instance().bus().register(eventHook); - MinecraftForge.EVENT_BUS.register(eventHook); - NewPacketHandler.INSTANCE.ordinal(); - HoldingPacketHandler.init(); - ClientToServerPacketHandler.init(); - ModAchievements.init(); - } - - @EventHandler - public void load(FMLInitializationEvent event) - { - int craftingConstant = OreDictionary.WILDCARD_VALUE; - - ModBlocks.init(); - //blocks - - proxy.registerRenderers(); - proxy.registerEntities(); - proxy.registerEntityTrackers(); - proxy.registerEvents(); - - //ItemStacks used for crafting go here - ItemStack lapisStack = new ItemStack(Items.dye, 1, 4); - ItemStack lavaBucketStack = new ItemStack(Items.lava_bucket); - ItemStack cobblestoneStack = new ItemStack(Blocks.cobblestone, 1, craftingConstant); - ItemStack glassStack = new ItemStack(Blocks.glass, 1, craftingConstant); - ItemStack ironIngotStack = new ItemStack(Items.iron_ingot); - ItemStack diamondStack = new ItemStack(Items.diamond, 1, craftingConstant); - ItemStack goldNuggetStack = new ItemStack(Items.gold_nugget); - ItemStack stoneStack = new ItemStack(Blocks.stone, 1, craftingConstant); - ItemStack redstoneStack = new ItemStack(Items.redstone); - ItemStack glowstoneBlockStack = new ItemStack(Blocks.glowstone); - ItemStack ironBlockStack = new ItemStack(Blocks.iron_block); - ItemStack waterBucketStack = new ItemStack(Items.water_bucket); - ItemStack emptyBucketStack = new ItemStack(Items.bucket); - ItemStack magmaCreamStack = new ItemStack(Items.magma_cream); - ItemStack stringStack = new ItemStack(Items.string); - ItemStack obsidianStack = new ItemStack(Blocks.obsidian); - ItemStack goldIngotStack = new ItemStack(Items.gold_ingot); - ItemStack furnaceStack = new ItemStack(Blocks.furnace); - ItemStack sugarStack = new ItemStack(Items.sugar); - ItemStack featherStack = new ItemStack(Items.feather); - ItemStack ghastTearStack = new ItemStack(Items.ghast_tear); - ItemStack ironPickaxeStack = new ItemStack(Items.iron_pickaxe); - ItemStack ironAxeStack = new ItemStack(Items.iron_axe); - ItemStack ironShovelStack = new ItemStack(Items.iron_shovel); - ItemStack glowstoneDustStack = new ItemStack(Items.glowstone_dust); - ItemStack saplingStack = new ItemStack(Blocks.sapling); - ItemStack reedStack = new ItemStack(Items.reeds); - ItemStack blankSlateStack = new ItemStack(ModItems.blankSlate, 1, craftingConstant); - ItemStack reinforcedSlateStack = new ItemStack(ModItems.reinforcedSlate, 1, craftingConstant); - ItemStack weakBloodOrbStack = new ItemStack(ModItems.weakBloodOrb, 1, craftingConstant); - ItemStack imbuedSlateStack = new ItemStack(ModItems.imbuedSlate, 1, craftingConstant); - ItemStack demonSlateStack = new ItemStack(ModItems.demonicSlate, 1, craftingConstant); - ItemStack apprenticeBloodOrbStack = new ItemStack(ModItems.apprenticeBloodOrb, 1, craftingConstant); - ItemStack magicianBloodOrbStack = new ItemStack(ModItems.magicianBloodOrb, 1, craftingConstant); - ItemStack waterSigilStackCrafted = new ItemStack(ModItems.waterSigil); - ItemStack lavaSigilStackCrafted = new ItemStack(ModItems.lavaSigil); - ItemStack voidSigilStackCrafted = new ItemStack(ModItems.voidSigil); - ItemStack airSigilStack = new ItemStack(ModItems.airSigil); - ItemStack lavaCrystalStackCrafted = new ItemStack(ModItems.lavaCrystal); - ItemStack lavaCrystalStack = new ItemStack(ModItems.lavaCrystal); - ItemStack sacrificialDaggerStack = new ItemStack(ModItems.sacrificialDagger); - ItemStack bloodAltarStack = new ItemStack(ModBlocks.blockAltar, 1, 0); - ItemStack bloodRuneCraftedStack = new ItemStack(ModBlocks.bloodRune, 1); - ItemStack bloodRuneStack = new ItemStack(ModBlocks.bloodRune); - ItemStack speedRuneStack = new ItemStack(ModBlocks.speedRune); - ItemStack runeOfSacrificeStack = new ItemStack(ModBlocks.runeOfSacrifice); - ItemStack runeOfSelfSacrificeStack = new ItemStack(ModBlocks.runeOfSelfSacrifice); - ItemStack miningSigilStackCrafted = new ItemStack(ModItems.sigilOfTheFastMiner); - ItemStack divinationSigilStackCrafted = new ItemStack(ModItems.divinationSigil); - ItemStack seerSigilStackCrafted = new ItemStack(ModItems.itemSeerSigil); - ItemStack ritualStoneStackCrafted = new ItemStack(ModBlocks.ritualStone, 4); - ItemStack ritualStoneStack = new ItemStack(ModBlocks.ritualStone); - ItemStack masterRitualStoneStack = new ItemStack(ModBlocks.blockMasterStone); - ItemStack imperfectRitualStoneStack = new ItemStack(ModBlocks.imperfectRitualStone); - ItemStack sigilOfElementalAffinityStackCrafted = new ItemStack(ModItems.sigilOfElementalAffinity); - ItemStack lavaSigilStack = new ItemStack(ModItems.lavaSigil); - ItemStack waterSigilStack = new ItemStack(ModItems.waterSigil); - ItemStack sigilOfHoldingStack = new ItemStack(ModItems.sigilOfHolding); - ItemStack weakBloodShardStack = new ItemStack(ModItems.weakBloodShard); - ItemStack emptySocketStack = new ItemStack(ModBlocks.emptySocket); - ItemStack bloodSocketStack = new ItemStack(ModBlocks.bloodSocket); - ItemStack armourForgeStack = new ItemStack(ModBlocks.armourForge); - ItemStack largeBloodStoneBrickStackCrafted = new ItemStack(ModBlocks.largeBloodStoneBrick, 32); - ItemStack largeBloodStoneBrickStack = new ItemStack(ModBlocks.largeBloodStoneBrick); - ItemStack bloodStoneBrickStackCrafted = new ItemStack(ModBlocks.bloodStoneBrick, 4); - ItemStack growthSigilStack = new ItemStack(ModItems.growthSigil); - ItemStack blockHomHeartStack = new ItemStack(ModBlocks.blockSpellTable); - ItemStack redWoolStack = new ItemStack(Blocks.wool, 1, 14); - ItemStack simpleCatalystStack = new ItemStack(ModItems.simpleCatalyst); - ItemStack duskRitualDivinerStack = new ItemStack(ModItems.itemRitualDiviner); - ((ItemRitualDiviner) duskRitualDivinerStack.getItem()).setMaxRuneDisplacement(duskRitualDivinerStack, 1); - ItemStack dawnRitualDivinerStack = new ItemStack(ModItems.itemRitualDiviner); - ((ItemRitualDiviner) dawnRitualDivinerStack.getItem()).setMaxRuneDisplacement(dawnRitualDivinerStack, 2); - waterSigilStackCrafted.setItemDamage(waterSigilStackCrafted.getMaxDamage()); - lavaSigilStackCrafted.setItemDamage(lavaSigilStackCrafted.getMaxDamage()); - voidSigilStackCrafted.setItemDamage(voidSigilStackCrafted.getMaxDamage()); - lavaCrystalStackCrafted.setItemDamage(lavaCrystalStackCrafted.getMaxDamage()); - miningSigilStackCrafted.setItemDamage(miningSigilStackCrafted.getMaxDamage()); - sigilOfElementalAffinityStackCrafted.setItemDamage(sigilOfElementalAffinityStackCrafted.getMaxDamage()); - ItemStack archmageBloodOrbStack = new ItemStack(ModItems.archmageBloodOrb); - ItemStack sanctusStack = new ItemStack(ModItems.sanctus); - ItemStack aetherStack = new ItemStack(ModItems.aether); - ItemStack terraeStack = new ItemStack(ModItems.terrae); - ItemStack incendiumStack = new ItemStack(ModItems.incendium); - ItemStack tennebraeStack = new ItemStack(ModItems.tennebrae); - ItemStack aquasalusStack = new ItemStack(ModItems.aquasalus); - ItemStack crystallosStack = new ItemStack(ModItems.crystallos); - ItemStack crepitousStack = new ItemStack(ModItems.crepitous); - ItemStack magicalesStack = new ItemStack(ModItems.magicales); - //All crafting goes here - GameRegistry.addRecipe(sacrificialDaggerStack, "ggg", " dg", "i g", 'g', glassStack, 'd', goldIngotStack, 'i', ironIngotStack); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(lavaCrystalStackCrafted, "glg", "lbl", "odo", 'g', glassStack, 'l', lavaBucketStack, 'b', weakBloodOrbStack, 'd', diamondStack, 'o', obsidianStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(waterSigilStackCrafted, "www", "wbw", "wow", 'w', waterBucketStack, 'b', blankSlateStack, 'o', weakBloodOrbStack)); - GameRegistry.addRecipe(lavaSigilStackCrafted, "lml", "lbl", "lcl", 'l', lavaBucketStack, 'b', blankSlateStack, 'm', magmaCreamStack, 'c', lavaCrystalStack); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(voidSigilStackCrafted, "ese", "ere", "eoe", 'e', emptyBucketStack, 'r', reinforcedSlateStack, 'o', apprenticeBloodOrbStack, 's', stringStack)); - GameRegistry.addRecipe(bloodAltarStack, "s s", "scs", "gdg", 's', stoneStack, 'c', furnaceStack, 'd', diamondStack, 'g', goldIngotStack); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(bloodRuneCraftedStack, "sss", "ror", "sss", 's', stoneStack, 'o', weakBloodOrbStack, 'r', blankSlateStack)); - GameRegistry.addRecipe(speedRuneStack, "sbs", "uru", "sbs", 'u', sugarStack, 's', stoneStack, 'r', bloodRuneStack, 'b', blankSlateStack); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModBlocks.bloodRune, 1, 1), "sbs", "bob", "srs", 's', stoneStack, 'o', magicianBloodOrbStack, 'b', emptyBucketStack, 'r', new ItemStack(ModItems.imbuedSlate))); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModBlocks.bloodRune, 1, 2), "sbs", "bob", "srs", 's', stoneStack, 'o', magicianBloodOrbStack, 'b', waterBucketStack, 'r', new ItemStack(ModItems.imbuedSlate))); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModBlocks.bloodRune, 1, 3), "sws", "ror", "sws", 's', stoneStack, 'o', new ItemStack(ModItems.masterBloodOrb), 'w', weakBloodOrbStack, 'r', new ItemStack(ModItems.demonicSlate))); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModBlocks.bloodRune, 1, 4), "srs", "beb", "sos", 's', obsidianStack, 'o', new ItemStack(ModItems.masterBloodOrb), 'r', new ItemStack(ModItems.demonicSlate), 'b', emptyBucketStack, 'e', new ItemStack(ModBlocks.bloodRune, 1, 1))); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(airSigilStack, "fgf", "fsf", "fof", 'f', featherStack, 'g', ghastTearStack, 's', reinforcedSlateStack, 'o', apprenticeBloodOrbStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(miningSigilStackCrafted, "sps", "hra", "sos", 'o', apprenticeBloodOrbStack, 's', stoneStack, 'p', ironPickaxeStack, 'h', ironShovelStack, 'a', ironAxeStack, 'r', reinforcedSlateStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(runeOfSacrificeStack, "srs", "gog", "srs", 's', stoneStack, 'g', goldIngotStack, 'o', apprenticeBloodOrbStack, 'r', reinforcedSlateStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(runeOfSelfSacrificeStack, "srs", "gog", "srs", 's', stoneStack, 'g', glowstoneDustStack, 'o', apprenticeBloodOrbStack, 'r', reinforcedSlateStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(divinationSigilStackCrafted, "ggg", "gsg", "gog", 'g', glassStack, 's', blankSlateStack, 'o', weakBloodOrbStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(seerSigilStackCrafted, "gbg", "gsg", "gog", 'g', glassStack, 's', divinationSigilStackCrafted, 'o', apprenticeBloodOrbStack, 'b', new ItemStack(ModItems.bucketLife))); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(ritualStoneStackCrafted, "srs", "ror", "srs", 's', obsidianStack, 'o', apprenticeBloodOrbStack, 'r', reinforcedSlateStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(masterRitualStoneStack, "brb", "ror", "brb", 'b', obsidianStack, 'o', magicianBloodOrbStack, 'r', ritualStoneStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(imperfectRitualStoneStack, "bsb", "sos", "bsb", 's', stoneStack, 'b', obsidianStack, 'o', weakBloodOrbStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(sigilOfElementalAffinityStackCrafted, "oao", "wsl", "oro", 'o', obsidianStack, 'a', airSigilStack, 'w', waterSigilStack, 'l', lavaSigilStack, 'r', magicianBloodOrbStack, 's', imbuedSlateStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(sigilOfHoldingStack, "asa", "srs", "aoa", 'a', blankSlateStack, 's', stoneStack, 'r', imbuedSlateStack, 'o', magicianBloodOrbStack)); - GameRegistry.addRecipe(emptySocketStack, "bgb", "gdg", "bgb", 'b', weakBloodShardStack, 'g', glassStack, 'd', diamondStack); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(armourForgeStack, "sfs", "fof", "sfs", 'f', bloodSocketStack, 's', stoneStack, 'o', magicianBloodOrbStack)); - GameRegistry.addShapelessRecipe(largeBloodStoneBrickStackCrafted, weakBloodShardStack, stoneStack); - GameRegistry.addRecipe(bloodStoneBrickStackCrafted, "bb", "bb", 'b', largeBloodStoneBrickStack); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(growthSigilStack, "srs", "rer", "sos", 's', saplingStack, 'r', reedStack, 'o', apprenticeBloodOrbStack, 'e', reinforcedSlateStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(blockHomHeartStack, "www", "srs", "sos", 'w', redWoolStack, 's', stoneStack, 'r', bloodRuneStack, 'o', apprenticeBloodOrbStack)); - GameRegistry.addShapelessRecipe(new ItemStack(Items.skull, 1, 2), new ItemStack(Items.skull, 1, 1), new ItemStack(Items.rotten_flesh), new ItemStack(Items.iron_ingot), new ItemStack(Items.leather)); - GameRegistry.addShapelessRecipe(new ItemStack(Items.skull, 1, 0), new ItemStack(Items.skull, 1, 1), new ItemStack(Items.bow, 1, 0), new ItemStack(Items.arrow, 1, 0), new ItemStack(Items.bone)); - GameRegistry.addShapelessRecipe(new ItemStack(Items.skull, 1, 4), new ItemStack(Items.skull, 1, 1), new ItemStack(Items.gunpowder), new ItemStack(Blocks.dirt), new ItemStack(Blocks.sand)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModBlocks.blockWritingTable), " s ", "ror", 's', new ItemStack(Items.brewing_stand), 'r', obsidianStack, 'o', weakBloodOrbStack)); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockPedestal), "ooo", " c ", "ooo", 'o', obsidianStack, 'c', weakBloodShardStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockPlinth), "iii", " p ", "iii", 'i', ironBlockStack, 'p', new ItemStack(ModBlocks.blockPedestal)); - GameRegistry.addShapelessRecipe(new ItemStack(ModItems.alchemyFlask, 1, 0), new ItemStack(ModItems.alchemyFlask, 1, craftingConstant), new ItemStack(Items.nether_wart), redstoneStack, glowstoneDustStack); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModItems.sigilOfHaste), "csc", "sts", "ror", 'c', new ItemStack(Items.cookie), 's', new ItemStack(Items.sugar), 't', ModItems.demonicSlate, 'r', obsidianStack, 'o', new ItemStack(ModItems.masterBloodOrb))); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModItems.sigilOfWind), "faf", "grg", "fof", 'f', featherStack, 'g', ghastTearStack, 'a', new ItemStack(ModItems.airSigil), 'o', new ItemStack(ModItems.masterBloodOrb), 'r', ModItems.demonicSlate)); - GameRegistry.addRecipe(new ShapelessBloodOrbRecipe(new ItemStack(ModItems.weakBloodShard, 5, 0), new ItemStack(ModItems.masterBloodOrb), new ItemStack(ModItems.weakBloodShard), imbuedSlateStack)); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockTeleposer), "ggg", "efe", "ggg", 'g', goldIngotStack, 'f', new ItemStack(ModItems.telepositionFocus), 'e', new ItemStack(Items.ender_pearl)); - GameRegistry.addShapelessRecipe(new ItemStack(ModItems.reinforcedTelepositionFocus), new ItemStack(ModItems.enhancedTelepositionFocus), new ItemStack(ModItems.weakBloodShard)); - GameRegistry.addShapelessRecipe(new ItemStack(ModItems.demonicTelepositionFocus), new ItemStack(ModItems.reinforcedTelepositionFocus), new ItemStack(ModItems.demonBloodShard)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModItems.sigilOfTheBridge), "nnn", "nsn", "ror", 'n', stoneStack, 'r', new ItemStack(Blocks.soul_sand), 's', imbuedSlateStack, 'o', magicianBloodOrbStack)); - GameRegistry.addRecipe(new ItemStack(ModItems.armourInhibitor), " gg", "gsg", "gg ", 'g', goldIngotStack, 's', new ItemStack(ModItems.weakBloodShard)); - GameRegistry.addRecipe(new ItemStack(ModItems.itemRitualDiviner), "d1d", "2e3", "d4d", '1', new ItemStack(ModItems.airScribeTool), '2', new ItemStack(ModItems.waterScribeTool), '3', new ItemStack(ModItems.fireScribeTool), '4', new ItemStack(ModItems.earthScribeTool), 'd', diamondStack, 'e', new ItemStack(Items.emerald)); - GameRegistry.addRecipe(duskRitualDivinerStack, " d ", "srs", " d ", 'd', new ItemStack(ModItems.duskScribeTool), 's', new ItemStack(ModItems.demonicSlate), 'r', new ItemStack(ModItems.itemRitualDiviner)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModItems.sigilOfMagnetism), "bgb", "gsg", "bob", 'b', new ItemStack(Blocks.iron_block), 'g', goldIngotStack, 's', new ItemStack(ModItems.imbuedSlate), 'o', magicianBloodOrbStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModItems.energyBazooka), "Ocd", "cb ", "d w", 'O', archmageBloodOrbStack, 'c', crepitousStack, 'b', new ItemStack(ModItems.energyBlaster), 'd', diamondStack, 'w', new ItemStack(ModItems.weakBloodShard))); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModItems.itemBloodLightSigil), "btb", "sss", "bob", 'o', magicianBloodOrbStack, 'b', glowstoneBlockStack, 't', new ItemStack(Blocks.torch), 's', imbuedSlateStack)); - GameRegistry.addRecipe(new ItemStack(ModItems.itemKeyOfDiablo), " gw", "gdg", "wg ", 'w', weakBloodShardStack, 'g', goldIngotStack, 'd', diamondStack); - GameRegistry.addRecipe(new ItemStack(ModItems.itemBloodPack), "gbg","flf","gsg",'s', blankSlateStack,'g', glassStack,'f',new ItemStack(Items.flint,1,craftingConstant),'b', emptyBucketStack, 'l', new ItemStack(Items.leather_chestplate)); - customPotionDrowning = (new PotionBloodMagic(customPotionDrowningID, true, 0)).setIconIndex(0, 0).setPotionName("Drowning"); - customPotionBoost = (new PotionBloodMagic(customPotionBoostID, false, 0)).setIconIndex(0, 0).setPotionName("Boost"); - customPotionProjProt = (new PotionBloodMagic(customPotionProjProtID, false, 0)).setIconIndex(0, 0).setPotionName("Whirlwind"); - customPotionInhibit = (new PotionBloodMagic(customPotionInhibitID, false, 0)).setIconIndex(0, 0).setPotionName("Inhibit"); - customPotionFlight = (new PotionBloodMagic(customPotionFlightID, false, 0)).setIconIndex(0, 0).setPotionName("Flight"); - customPotionReciprocation = (new PotionBloodMagic(customPotionReciprocationID, false, 0xFFFFFF)).setIconIndex(0, 0).setPotionName("Reciprocation"); - customPotionFlameCloak = (new PotionBloodMagic(customPotionFlameCloakID, false, 0).setIconIndex(0, 0).setPotionName("Flame Cloak")); - customPotionIceCloak = (new PotionBloodMagic(customPotionIceCloakID, false, 0).setIconIndex(0, 0).setPotionName("Ice Cloak")); - customPotionHeavyHeart = (new PotionBloodMagic(customPotionHeavyHeartID, true, 0).setIconIndex(0, 0).setPotionName("Heavy Heart")); - customPotionFireFuse = (new PotionBloodMagic(customPotionFireFuseID, true, 0).setIconIndex(0, 0).setPotionName("Fire Fuse")); - customPotionPlanarBinding = (new PotionBloodMagic(customPotionPlanarBindingID, true, 0).setIconIndex(0, 0).setPotionName("Planar Binding")); - customPotionSoulFray = (new PotionBloodMagic(customPotionSoulFrayID, true, 0).setIconIndex(0, 0).setPotionName("Soul Fray")); - customPotionSoulHarden = (new PotionBloodMagic(customPotionSoulHardenID, false, 0).setIconIndex(0, 0).setPotionName("Soul Harden")); - customPotionDeaf = (new PotionBloodMagic(customPotionDeafID, true, 0).setIconIndex(0, 0).setPotionName("Deafness")); - customPotionFeatherFall = (new PotionBloodMagic(customPotionFeatherFallID, false, 0).setIconIndex(0, 0).setPotionName("Feather Fall")); - customPotionDemonCloak = (new PotionBloodMagic(customPotionDemonCloakID, false, 0).setIconIndex(0, 0).setPotionName("Demon Cloaking")); - customPotionAmphibian = (new PotionBloodMagic(customPotionAmphibianID, false, 0).setIconIndex(0, 0).setPotionName("Amphibian")); - - ItemStack masterBloodOrbStack = new ItemStack(ModItems.masterBloodOrb); - ItemStack transcendentBloodOrbStack = new ItemStack(ModItems.transcendentBloodOrb); - -// ModBlocks.blockLifeEssence.setUnlocalizedName("lifeEssenceBlock"); - FluidContainerRegistry.registerFluidContainer(lifeEssenceFluid, new ItemStack(ModItems.bucketLife), FluidContainerRegistry.EMPTY_BUCKET); - ModBlocks.blockAltar.setHarvestLevel("pickaxe", 1); - - //Register Tile Entity - GameRegistry.registerTileEntity(TEAltar.class, "containerAltar"); - GameRegistry.registerTileEntity(TEMasterStone.class, "containerMasterStone"); - GameRegistry.registerTileEntity(TESocket.class, "containerSocket"); - GameRegistry.registerTileEntity(TEChemistrySet.class, "containerWritingTable"); - GameRegistry.registerTileEntity(TESpellTable.class, "containerHomHeart"); - GameRegistry.registerTileEntity(TEPedestal.class, "containerPedestal"); - GameRegistry.registerTileEntity(TEPlinth.class, "containerPlinth"); - GameRegistry.registerTileEntity(TETeleposer.class, "containerTeleposer"); - GameRegistry.registerTileEntity(TEConduit.class, "containerConduit"); - GameRegistry.registerTileEntity(TEOrientable.class, "containerOrientable"); - GameRegistry.registerTileEntity(TESpellParadigmBlock.class, "containerSpellParadigmBlock"); - GameRegistry.registerTileEntity(TESpellEffectBlock.class, "containerSpellEffectBlock"); - GameRegistry.registerTileEntity(TESpellModifierBlock.class, "containerSpellModifierBlock"); - GameRegistry.registerTileEntity(TESpellEnhancementBlock.class, "containerSpellEnhancementBlock"); - GameRegistry.registerTileEntity(TESpectralContainer.class, "spectralContainerTileEntity"); - GameRegistry.registerTileEntity(TEDemonPortal.class, "containerDemonPortal"); - GameRegistry.registerTileEntity(TESchematicSaver.class, "containerSchematicSaver"); - GameRegistry.registerTileEntity(TESpectralBlock.class, "containerSpectralBlock"); - GameRegistry.registerTileEntity(TEReagentConduit.class, "containerReagentConduit"); - GameRegistry.registerTileEntity(TEBelljar.class, "containerBellJar"); - GameRegistry.registerTileEntity(TEAlchemicalCalcinator.class, "containerAlchemicCalcinator"); - GameRegistry.registerTileEntity(TEDemonChest.class, "containerDemonChest"); - GameRegistry.registerTileEntity(TEMimicBlock.class, "containerMimic"); - GameRegistry.registerTileEntity(TECrucible.class, "containerCrucible"); - ModBlocks.bloodRune.setHarvestLevel("pickaxe", 2); - ModBlocks.speedRune.setHarvestLevel("pickaxe", 2); - ModBlocks.efficiencyRune.setHarvestLevel("pickaxe", 2); - ModBlocks.runeOfSacrifice.setHarvestLevel("pickaxe", 2); - ModBlocks.runeOfSelfSacrifice.setHarvestLevel("pickaxe", 2); - ModBlocks.ritualStone.setHarvestLevel("pickaxe", 2); - ModBlocks.bloodSocket.setHarvestLevel("pickaxe", 2); - ModBlocks.ritualStone.setHarvestLevel("pickaxe", 2); - ModBlocks.imperfectRitualStone.setHarvestLevel("pickaxe", 2); - ModBlocks.blockMasterStone.setHarvestLevel("pickaxe", 2); - ModBlocks.emptySocket.setHarvestLevel("pickaxe", 2); - ModBlocks.bloodStoneBrick.setHarvestLevel("pickaxe", 0); - ModBlocks.largeBloodStoneBrick.setHarvestLevel("pickaxe", 0); - ModBlocks.blockWritingTable.setHarvestLevel("pickaxe", 1); - ModBlocks.blockSpellTable.setHarvestLevel("pickaxe", 1); - ModBlocks.blockPedestal.setHarvestLevel("pickaxe", 2); - ModBlocks.blockPlinth.setHarvestLevel("pickaxe", 2); - ModBlocks.blockTeleposer.setHarvestLevel("pickaxe", 2); - - //Fuel handler - GameRegistry.registerFuelHandler(new AlchemicalWizardryFuelHandler()); - - //Gui registration - UpgradedAltars.loadAltars(); - BlockArmourForge.initializeRecipes(); - TEPlinth.initialize(); - - initAlchemyPotionRecipes(); - initAltarRecipes(); - - initBindingRecipes(); - initHarvestRegistry(); - initCombinedAlchemyPotionRecipes(); - - ReagentRegistry.initReagents(); - initReagentRegistries(); - initRituals(); - - initDemonPacketRegistiry(); - initiateRegistry(); - - blacklistDemons(); - - blacklistAccelerators(); - - MinecraftForge.EVENT_BUS.register(new ModLivingDropsEvent()); - proxy.initRendering(); - NetworkRegistry.INSTANCE.registerGuiHandler(this, new GuiHandler()); - - ItemStack gunpowderStack = new ItemStack(Items.gunpowder); - ItemStack offensaStack = new ItemStack(ModItems.baseAlchemyItems, 1, 0); - ItemStack praesidiumStack = new ItemStack(ModItems.baseAlchemyItems, 1, 1); - ItemStack orbisTerraeStack = new ItemStack(ModItems.baseAlchemyItems, 1, 2); - ItemStack strengthenedCatalystStack = new ItemStack(ModItems.baseAlchemyItems, 1, 3); - ItemStack concentratedCatalystStack = new ItemStack(ModItems.baseAlchemyItems, 1, 4); - ItemStack fracturedBoneStack = new ItemStack(ModItems.baseAlchemyItems, 1, 5); - ItemStack virtusStack = new ItemStack(ModItems.baseAlchemyItems, 1, 6); - ItemStack reductusStack = new ItemStack(ModItems.baseAlchemyItems, 1, 7); - ItemStack potentiaStack = new ItemStack(ModItems.baseAlchemyItems, 1, 8); - - ItemStack strengthenedCatalystStackCrafted = new ItemStack(ModItems.baseAlchemyItems, 2, 3); - ItemStack fracturedBoneStackCrafted = new ItemStack(ModItems.baseAlchemyItems, 4, 5); - //TODO NEW RECIPES! - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.weakBindingAgent), 10, new ItemStack[]{simpleCatalystStack, simpleCatalystStack, new ItemStack(Items.clay_ball)}, 2); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.standardBindingAgent), 15, new ItemStack[]{new ItemStack(ModItems.weakBindingAgent), sanctusStack, new ItemStack(ModItems.crystallos)}, 3); - AlchemyRecipeRegistry.registerRecipe(simpleCatalystStack, 2, new ItemStack[]{sugarStack, redstoneStack, redstoneStack, glowstoneDustStack, new ItemStack(Items.gunpowder)}, 1); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.incendium), 5, new ItemStack[]{lavaBucketStack, new ItemStack(Items.blaze_powder), new ItemStack(Items.blaze_powder), new ItemStack(Blocks.netherrack), simpleCatalystStack}, 2); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.aether), 5, new ItemStack[]{featherStack, featherStack, glowstoneDustStack, ghastTearStack, simpleCatalystStack}, 2); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.sanctus), 5, new ItemStack[]{glowstoneDustStack, new ItemStack(Items.gold_nugget), glowstoneDustStack, glassStack, simpleCatalystStack}, 2); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.crepitous), 5, new ItemStack[]{new ItemStack(Items.gunpowder), new ItemStack(Items.gunpowder), cobblestoneStack, cobblestoneStack, simpleCatalystStack}, 2); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.crystallos), 5, new ItemStack[]{new ItemStack(Blocks.ice), new ItemStack(Blocks.ice), new ItemStack(Blocks.snow), new ItemStack(Blocks.snow), simpleCatalystStack}, 2); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.terrae), 5, new ItemStack[]{new ItemStack(Blocks.dirt), new ItemStack(Blocks.sand), obsidianStack, obsidianStack, simpleCatalystStack}, 2); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.aquasalus), 5, new ItemStack[]{simpleCatalystStack, new ItemStack(Items.dye, 1, 0), new ItemStack(Items.potionitem, 1, 0), new ItemStack(Items.potionitem, 1, 0), new ItemStack(Items.potionitem, 1, 0)}, 2); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.tennebrae), 5, new ItemStack[]{simpleCatalystStack, new ItemStack(Items.coal), new ItemStack(Items.coal), new ItemStack(Blocks.obsidian), new ItemStack(Items.clay_ball)}, 2); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.magicales), 5, new ItemStack[]{redstoneStack, simpleCatalystStack, new ItemStack(Items.gunpowder), new ItemStack(Items.glowstone_dust), new ItemStack(Items.glowstone_dust)}, 2); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.mundanePowerCatalyst), 10, new ItemStack[]{glowstoneDustStack, glowstoneDustStack, glowstoneDustStack, new ItemStack(ModItems.weakBindingAgent), simpleCatalystStack}, 3); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.mundaneLengtheningCatalyst), 10, new ItemStack[]{redstoneStack, redstoneStack, redstoneStack, new ItemStack(ModItems.weakBindingAgent), simpleCatalystStack}, 3); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.averagePowerCatalyst), 20, new ItemStack[]{new ItemStack(ModItems.mundanePowerCatalyst), new ItemStack(ModItems.mundanePowerCatalyst), new ItemStack(ModItems.standardBindingAgent)}, 4); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.averageLengtheningCatalyst), 20, new ItemStack[]{new ItemStack(ModItems.mundaneLengtheningCatalyst), new ItemStack(ModItems.mundaneLengtheningCatalyst), new ItemStack(ModItems.standardBindingAgent)}, 4); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.greaterPowerCatalyst), 30, new ItemStack[]{new ItemStack(ModItems.averagePowerCatalyst), new ItemStack(ModItems.averagePowerCatalyst), new ItemStack(ModItems.incendium)}, 4); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.greaterLengtheningCatalyst), 30, new ItemStack[]{new ItemStack(ModItems.averageLengtheningCatalyst), new ItemStack(ModItems.averageLengtheningCatalyst), new ItemStack(ModItems.aquasalus)}, 4); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.weakFillingAgent), 5, new ItemStack[]{simpleCatalystStack, new ItemStack(Items.nether_wart), redstoneStack, glowstoneDustStack}, 3); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.standardFillingAgent), 10, new ItemStack[]{new ItemStack(ModItems.weakFillingAgent), new ItemStack(ModItems.terrae)}, 3); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.enhancedFillingAgent), 25, new ItemStack[]{new ItemStack(ModItems.standardFillingAgent), new ItemStack(ModItems.aquasalus), new ItemStack(ModItems.magicales)}, 4); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.activationCrystal, 1, 1), 100, new ItemStack[]{new ItemStack(ModItems.activationCrystal, 1, 0), new ItemStack(ModItems.demonBloodShard), incendiumStack, aquasalusStack, aetherStack}, 4); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(ModItems.activationCrystal, 1, 1), 100, new ItemStack[]{new ItemStack(ModItems.activationCrystal, 1, 0), new ItemStack(Items.nether_star), incendiumStack, aquasalusStack, aetherStack}, 4); - - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Blocks.web), 2, new ItemStack[]{new ItemStack(Items.string), new ItemStack(Items.string), new ItemStack(Items.string), new ItemStack(Items.string), new ItemStack(Items.string)}, 1); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Items.gunpowder, 2, 0), 2, new ItemStack[]{gunpowderStack, new ItemStack(Items.coal), new ItemStack(Blocks.sand)}, 1); - - AlchemyRecipeRegistry.registerRecipe(strengthenedCatalystStackCrafted, 10, new ItemStack[]{simpleCatalystStack, simpleCatalystStack, new ItemStack(Items.dye, 1, 15), new ItemStack(Items.nether_wart)}, 3); - AlchemyRecipeRegistry.registerRecipe(offensaStack, 10, new ItemStack[]{strengthenedCatalystStack, incendiumStack, new ItemStack(Items.arrow), new ItemStack(Items.flint), new ItemStack(Items.arrow)}, 3); - AlchemyRecipeRegistry.registerRecipe(praesidiumStack, 10, new ItemStack[]{strengthenedCatalystStack, tennebraeStack, ironIngotStack, new ItemStack(Blocks.web), redstoneStack}, 3); - AlchemyRecipeRegistry.registerRecipe(orbisTerraeStack, 10, new ItemStack[]{strengthenedCatalystStack, terraeStack, gunpowderStack, new ItemStack(Blocks.netherrack), new ItemStack(Blocks.sand)}, 3); - AlchemyRecipeRegistry.registerRecipe(concentratedCatalystStack, 10, new ItemStack[]{strengthenedCatalystStack, fracturedBoneStack, goldNuggetStack}, 4); - AlchemyRecipeRegistry.registerRecipe(fracturedBoneStackCrafted, 2, new ItemStack[]{new ItemStack(Items.bone), new ItemStack(Items.bone), new ItemStack(Items.bone), new ItemStack(Items.bone), gunpowderStack}, 1); - AlchemyRecipeRegistry.registerRecipe(virtusStack, 20, new ItemStack[]{redstoneStack, new ItemStack(Items.coal), strengthenedCatalystStack, redstoneStack, gunpowderStack}, 3); - AlchemyRecipeRegistry.registerRecipe(reductusStack, 20, new ItemStack[]{redstoneStack, goldIngotStack, strengthenedCatalystStack, new ItemStack(Blocks.soul_sand), new ItemStack(Items.carrot)}, 3); - AlchemyRecipeRegistry.registerRecipe(potentiaStack, 20, new ItemStack[]{glowstoneDustStack, strengthenedCatalystStack, lapisStack, lapisStack, new ItemStack(Items.quartz)}, 3); - - HomSpellRegistry.registerBasicSpell(new ItemStack(Items.flint_and_steel), new SpellFireBurst()); - HomSpellRegistry.registerBasicSpell(new ItemStack(Blocks.ice), new SpellFrozenWater()); - HomSpellRegistry.registerBasicSpell(new ItemStack(Blocks.tnt), new SpellExplosions()); - HomSpellRegistry.registerBasicSpell(new ItemStack(ModItems.apprenticeBloodOrb), new SpellHolyBlast()); - HomSpellRegistry.registerBasicSpell(new ItemStack(Items.ghast_tear), new SpellWindGust()); - HomSpellRegistry.registerBasicSpell(new ItemStack(Items.glowstone_dust), new SpellLightningBolt()); - HomSpellRegistry.registerBasicSpell(new ItemStack(Items.water_bucket), new SpellWateryGrave()); - HomSpellRegistry.registerBasicSpell(new ItemStack(Blocks.obsidian), new SpellEarthBender()); - HomSpellRegistry.registerBasicSpell(new ItemStack(Items.ender_pearl), new SpellTeleport()); - SummoningRegistry.registerSummon(new SummoningHelperAW(entityFallenAngelID), new ItemStack[]{sanctusStack, sanctusStack, sanctusStack, aetherStack, tennebraeStack, terraeStack}, new ItemStack[]{}, new ItemStack[]{}, 0, 4); - SummoningRegistry.registerSummon(new SummoningHelperAW(entityLowerGuardianID), new ItemStack[]{cobblestoneStack, cobblestoneStack, terraeStack, tennebraeStack, new ItemStack(Items.iron_ingot), new ItemStack(Items.gold_nugget)}, new ItemStack[]{}, new ItemStack[]{}, 0, 4); - SummoningRegistry.registerSummon(new SummoningHelperAW(entityBileDemonID), new ItemStack[]{new ItemStack(Items.poisonous_potato), tennebraeStack, terraeStack, new ItemStack(Items.porkchop), new ItemStack(Items.egg), new ItemStack(Items.beef)}, new ItemStack[]{crepitousStack, crepitousStack, terraeStack, ironBlockStack, ironBlockStack, diamondStack}, new ItemStack[]{}, 0, 5); - SummoningRegistry.registerSummon(new SummoningHelperAW(entityWingedFireDemonID), new ItemStack[]{aetherStack, incendiumStack, incendiumStack, incendiumStack, tennebraeStack, new ItemStack(Blocks.netherrack)}, new ItemStack[]{diamondStack, new ItemStack(Blocks.gold_block), magicalesStack, magicalesStack, new ItemStack(Items.fire_charge), new ItemStack(Blocks.coal_block)}, new ItemStack[]{}, 0, 5); - SummoningRegistry.registerSummon(new SummoningHelperAW(entitySmallEarthGolemID), new ItemStack[]{new ItemStack(Items.clay_ball), terraeStack, terraeStack}, new ItemStack[]{}, new ItemStack[]{}, 0, 4); - SummoningRegistry.registerSummon(new SummoningHelperAW(entityIceDemonID), new ItemStack[]{crystallosStack, crystallosStack, aquasalusStack, crystallosStack, sanctusStack, terraeStack}, new ItemStack[]{}, new ItemStack[]{}, 0, 4); - SummoningRegistry.registerSummon(new SummoningHelperAW(entityBoulderFistID), new ItemStack[]{terraeStack, sanctusStack, tennebraeStack, new ItemStack(Items.bone), new ItemStack(Items.cooked_beef), new ItemStack(Items.cooked_beef)}, new ItemStack[]{}, new ItemStack[]{}, 0, 4); - SummoningRegistry.registerSummon(new SummoningHelperAW(entityShadeID), new ItemStack[]{tennebraeStack, tennebraeStack, tennebraeStack, aetherStack, glassStack, new ItemStack(Items.glass_bottle)}, new ItemStack[]{}, new ItemStack[]{}, 0, 4); - SummoningRegistry.registerSummon(new SummoningHelperAW(entityAirElementalID), new ItemStack[]{aetherStack, aetherStack, aetherStack, aetherStack, aetherStack, aetherStack}, new ItemStack[]{}, new ItemStack[]{}, 0, 4); - SummoningRegistry.registerSummon(new SummoningHelperAW(entityWaterElementalID), new ItemStack[]{aquasalusStack, aquasalusStack, aquasalusStack, aquasalusStack, aquasalusStack, aquasalusStack}, new ItemStack[]{}, new ItemStack[]{}, 0, 4); - SummoningRegistry.registerSummon(new SummoningHelperAW(entityEarthElementalID), new ItemStack[]{terraeStack, terraeStack, terraeStack, terraeStack, terraeStack, terraeStack}, new ItemStack[]{}, new ItemStack[]{}, 0, 4); - SummoningRegistry.registerSummon(new SummoningHelperAW(entityFireElementalID), new ItemStack[]{incendiumStack, incendiumStack, incendiumStack, incendiumStack, incendiumStack, incendiumStack}, new ItemStack[]{}, new ItemStack[]{}, 0, 4); - SummoningRegistry.registerSummon(new SummoningHelperAW(entityShadeElementalID), new ItemStack[]{tennebraeStack, tennebraeStack, tennebraeStack, tennebraeStack, tennebraeStack, tennebraeStack}, new ItemStack[]{}, new ItemStack[]{}, 0, 4); - SummoningRegistry.registerSummon(new SummoningHelperAW(entityHolyElementalID), new ItemStack[]{sanctusStack, sanctusStack, sanctusStack, sanctusStack, sanctusStack, sanctusStack}, new ItemStack[]{}, new ItemStack[]{}, 0, 4); -// SummoningRegistry.registerSummon(new SummoningHelperAW(this.entityMinorDemonGruntID), new ItemStack[]{incendiumStack, sanctusStack, sanctusStack, sanctusStack, sanctusStack, sanctusStack}, new ItemStack[]{}, new ItemStack[]{}, 0, 4); - - //Custom mobs - EntityRegistry.registerModEntity(EntityFallenAngel.class, "FallenAngel", 20, this, 80, 3, true); - EntityRegistry.registerModEntity(EntityLowerGuardian.class, "LowerGuardian", 21, this, 80, 3, true); - EntityRegistry.registerModEntity(EntityBileDemon.class, "BileDemon", 22, this, 80, 3, true); - EntityRegistry.registerModEntity(EntityWingedFireDemon.class, "WingedFireDemon", 23, this, 80, 3, true); - EntityRegistry.registerModEntity(EntitySmallEarthGolem.class, "SmallEarthGolem", 24, this, 80, 3, true); - EntityRegistry.registerModEntity(EntityIceDemon.class, "IceDemon", 25, this, 80, 3, true); - EntityRegistry.registerModEntity(EntityBoulderFist.class, "BoulderFist", 26, this, 80, 3, true); - EntityRegistry.registerModEntity(EntityShade.class, "Shade", 27, this, 80, 3, true); - EntityRegistry.registerModEntity(EntityAirElemental.class, "AirElemental", 28, this, 120, 3, true); - EntityRegistry.registerModEntity(EntityWaterElemental.class, "WaterElemental", 29, this, 120, 3, true); - EntityRegistry.registerModEntity(EntityEarthElemental.class, "EarthElemental", 30, this, 120, 3, true); - EntityRegistry.registerModEntity(EntityFireElemental.class, "FireElemental", 31, this, 120, 3, true); - EntityRegistry.registerModEntity(EntityShadeElemental.class, "ShadeElemental", 32, this, 120, 3, true); - EntityRegistry.registerModEntity(EntityHolyElemental.class, "HolyElemental", 33, this, 120, 3, true); - EntityRegistry.registerModEntity(EntityMinorDemonGrunt.class, "MinorDemonGrunt", 34, this, 80, 3, true); - EntityRegistry.registerModEntity(EntityMinorDemonGruntFire.class, "MinorDemonGruntFire", 35, this, 80, 3, true); - EntityRegistry.registerModEntity(EntityMinorDemonGruntWind.class, "MinorDemonGruntWind", 36, this, 80, 3, true); - EntityRegistry.registerModEntity(EntityMinorDemonGruntIce.class, "MinorDemonGruntIce", 37, this, 80, 3, true); - EntityRegistry.registerModEntity(EntityMinorDemonGruntEarth.class, "MinorDemonGruntEarth", 38, this, 80, 3, true); - EntityRegistry.registerModEntity(EntityMinorDemonGruntGuardian.class, "MinorDemonGruntGuardian", 39, this, 80, 3, true); - EntityRegistry.registerModEntity(EntityMinorDemonGruntGuardianFire.class, "MinorDemonGruntGuardianFire", 40, this, 80, 3, true); - EntityRegistry.registerModEntity(EntityMinorDemonGruntGuardianWind.class, "MinorDemonGruntGuardianWind", 41, this, 80, 3, true); - EntityRegistry.registerModEntity(EntityMinorDemonGruntGuardianIce.class, "MinorDemonGruntGuardianIce", 42, this, 80, 3, true); - EntityRegistry.registerModEntity(EntityMinorDemonGruntGuardianEarth.class, "MinorDemonGruntGuardianEarth", 43, this, 80, 3, true); - - ChestGenHooks.getInfo(ChestGenHooks.DUNGEON_CHEST).addItem(new WeightedRandomChestContent(new ItemStack(ModItems.standardBindingAgent), 1, 3, this.standardBindingAgentDungeonChance / 5)); - ChestGenHooks.getInfo(ChestGenHooks.DUNGEON_CHEST).addItem(new WeightedRandomChestContent(new ItemStack(ModItems.mundanePowerCatalyst), 1, 1, this.mundanePowerCatalystDungeonChance / 5)); - ChestGenHooks.getInfo(ChestGenHooks.DUNGEON_CHEST).addItem(new WeightedRandomChestContent(new ItemStack(ModItems.mundaneLengtheningCatalyst), 1, 1, this.mundaneLengtheningCatalystDungeonChance / 5)); - ChestGenHooks.getInfo(ChestGenHooks.DUNGEON_CHEST).addItem(new WeightedRandomChestContent(new ItemStack(ModItems.averagePowerCatalyst), 1, 1, this.averagePowerCatalystDungeonChance / 5)); - ChestGenHooks.getInfo(ChestGenHooks.DUNGEON_CHEST).addItem(new WeightedRandomChestContent(new ItemStack(ModItems.averageLengtheningCatalyst), 1, 1, this.averageLengtheningCatalystDungeonChance / 5)); - ChestGenHooks.getInfo(ChestGenHooks.DUNGEON_CHEST).addItem(new WeightedRandomChestContent(new ItemStack(ModItems.greaterPowerCatalyst), 1, 1, this.greaterPowerCatalystDungeonChance / 5)); - ChestGenHooks.getInfo(ChestGenHooks.DUNGEON_CHEST).addItem(new WeightedRandomChestContent(new ItemStack(ModItems.greaterLengtheningCatalyst), 1, 1, this.greaterLengtheningCatalystDungeonChance / 5)); - - //Ore Dictionary Registration - OreDictionary.registerOre("oreCoal", Blocks.coal_ore); - MeteorRegistry.registerMeteorParadigm(diamondStack, diamondMeteorArray, diamondMeteorRadius); - MeteorRegistry.registerMeteorParadigm(stoneStack, stoneMeteorArray, stoneMeteorRadius); - MeteorRegistry.registerMeteorParadigm(ironBlockStack, ironBlockMeteorArray, ironBlockMeteorRadius); - MeteorRegistry.registerMeteorParadigm(new ItemStack(Items.nether_star), netherStarMeteorArray, netherStarMeteorRadius); - - ItemStack stickStack = new ItemStack(Items.stick, 1, craftingConstant); - - //Register spell component recipes - ItemStack complexSpellCrystalStack = new ItemStack(ModItems.itemComplexSpellCrystal); - ItemStack quartzRodStack = new ItemStack(ModItems.baseItems, 1, 0); - ItemStack emptyCoreStack = new ItemStack(ModItems.baseItems, 1, 1); - ItemStack magicalesCableStack = new ItemStack(ModItems.baseItems, 1, 2); - ItemStack woodBraceStack = new ItemStack(ModItems.baseItems, 1, 3); - ItemStack stoneBraceStack = new ItemStack(ModItems.baseItems, 1, 4); - ItemStack projectileCoreStack = new ItemStack(ModItems.baseItems, 1, 5); - ItemStack selfCoreStack = new ItemStack(ModItems.baseItems, 1, 6); - ItemStack meleeCoreStack = new ItemStack(ModItems.baseItems, 1, 7); - ItemStack toolCoreStack = new ItemStack(ModItems.baseItems, 1, 26); - ItemStack paradigmBackPlateStack = new ItemStack(ModItems.baseItems, 1, 8); - ItemStack outputCableStack = new ItemStack(ModItems.baseItems, 1, 9); - ItemStack flameCoreStack = new ItemStack(ModItems.baseItems, 1, 10); - ItemStack iceCoreStack = new ItemStack(ModItems.baseItems, 1, 11); - ItemStack windCoreStack = new ItemStack(ModItems.baseItems, 1, 12); - ItemStack earthCoreStack = new ItemStack(ModItems.baseItems, 1, 13); - ItemStack inputCableStack = new ItemStack(ModItems.baseItems, 1, 14); - ItemStack crackedRunicPlateStack = new ItemStack(ModItems.baseItems, 1, 15); - ItemStack runicPlateStack = new ItemStack(ModItems.baseItems, 1, 16); - ItemStack imbuedRunicPlateStack = new ItemStack(ModItems.baseItems, 1, 17); - ItemStack defaultCoreStack = new ItemStack(ModItems.baseItems, 1, 18); - ItemStack offenseCoreStack = new ItemStack(ModItems.baseItems, 1, 19); - ItemStack defensiveCoreStack = new ItemStack(ModItems.baseItems, 1, 20); - ItemStack environmentalCoreStack = new ItemStack(ModItems.baseItems, 1, 21); - ItemStack powerCoreStack = new ItemStack(ModItems.baseItems, 1, 22); - ItemStack costCoreStack = new ItemStack(ModItems.baseItems, 1, 23); - ItemStack potencyCoreStack = new ItemStack(ModItems.baseItems, 1, 24); - ItemStack obsidianBraceStack = new ItemStack(ModItems.baseItems, 1, 25); - ItemStack etherealSlateStack = new ItemStack(ModItems.baseItems, 1, 27); - ItemStack lifeShardStack = new ItemStack(ModItems.baseItems, 1, 28); - ItemStack soulShardStack = new ItemStack(ModItems.baseItems, 1, 29); - ItemStack soulRunicPlateStack = new ItemStack(ModItems.baseItems, 1, 30); - ItemStack livingBraceStack = new ItemStack(ModItems.baseItems, 1, 31); - ItemStack enderShardStack = new ItemStack(ModItems.baseItems, 1, 32); - ItemStack enderShardCraftedStack = new ItemStack(ModItems.baseItems, 8, 32); - - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockCrystal), "lsl", "sls", "lsl", 'l', lifeShardStack, 's', soulShardStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockCrystal, 4, 1), "ss", "ss", 's', new ItemStack(ModBlocks.blockCrystal, 1, 0)); - - ItemStack magicalesCraftedCableStack = new ItemStack(ModItems.baseItems, 5, 2); - ItemStack crackedRunicPlateStackCrafted = new ItemStack(ModItems.baseItems, 2, 15); - - GameRegistry.addRecipe(quartzRodStack, "qqq", 'q', new ItemStack(Items.quartz)); - GameRegistry.addRecipe(emptyCoreStack, "gig", "nrn", "gig", 'n', goldIngotStack, 'i', ironIngotStack, 'g', glassStack, 'r', simpleCatalystStack); - GameRegistry.addRecipe(magicalesCraftedCableStack, "sss", "mmm", "sss", 's', new ItemStack(Items.string), 'm', magicalesStack); - GameRegistry.addRecipe(woodBraceStack, " il", "ili", "li ", 'l', new ItemStack(Blocks.log, 1, craftingConstant), 'i', new ItemStack(Items.string)); - GameRegistry.addRecipe(stoneBraceStack, " is", "isi", "si ", 'i', ironIngotStack, 's', reinforcedSlateStack); - GameRegistry.addRecipe(obsidianBraceStack, " is", "ibi", "si ", 'i', obsidianStack, 's', reinforcedSlateStack, 'b', stoneBraceStack); - GameRegistry.addRecipe(livingBraceStack, " gc", "gog", "sg ", 'g', goldIngotStack, 'o', obsidianBraceStack, 'c', lifeShardStack, 's', demonSlateStack); - - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(projectileCoreStack, "mbm", "aca", "mom", 'c', emptyCoreStack, 'b', weakBloodShardStack, 'm', magicalesStack, 'o', magicianBloodOrbStack, 'a', new ItemStack(Items.arrow))); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(selfCoreStack, "sbs", "ncn", "sos", 'c', emptyCoreStack, 's', sanctusStack, 'b', weakBloodShardStack, 'o', magicianBloodOrbStack, 'n', glowstoneDustStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(meleeCoreStack, "sbs", "ncn", "sos", 'c', emptyCoreStack, 's', incendiumStack, 'b', weakBloodShardStack, 'o', magicianBloodOrbStack, 'n', new ItemStack(Items.fire_charge))); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(toolCoreStack, "sbs", "ncn", "sos", 'c', emptyCoreStack, 's', terraeStack, 'b', weakBloodShardStack, 'o', magicianBloodOrbStack, 'n', new ItemStack(Blocks.obsidian))); - - GameRegistry.addRecipe(paradigmBackPlateStack, "isi", "rgr", "isi", 'i', ironIngotStack, 'r', stoneStack, 'g', goldIngotStack, 's', reinforcedSlateStack); - GameRegistry.addRecipe(outputCableStack, " si", "s c", " si", 's', stoneStack, 'i', ironIngotStack, 'c', simpleCatalystStack); - - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(flameCoreStack, "mdm", "scs", "mom", 'm', incendiumStack, 'c', emptyCoreStack, 'o', magicianBloodOrbStack, 'd', diamondStack, 's', weakBloodShardStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(iceCoreStack, "mdm", "scs", "mom", 'm', crystallosStack, 'c', emptyCoreStack, 'o', magicianBloodOrbStack, 'd', diamondStack, 's', weakBloodShardStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(windCoreStack, "mdm", "scs", "mom", 'm', aetherStack, 'c', emptyCoreStack, 'o', magicianBloodOrbStack, 'd', diamondStack, 's', weakBloodShardStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(earthCoreStack, "mdm", "scs", "mom", 'm', terraeStack, 'c', emptyCoreStack, 'o', magicianBloodOrbStack, 'd', diamondStack, 's', weakBloodShardStack)); - - GameRegistry.addRecipe(inputCableStack, "ws ", "rcs", "ws ", 'w', blankSlateStack, 's', stoneStack, 'r', imbuedSlateStack, 'c', simpleCatalystStack); - - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(defaultCoreStack, "msm", "geg", "mom", 'm', strengthenedCatalystStack, 'e', emptyCoreStack, 'o', magicianBloodOrbStack, 's', weakBloodShardStack, 'g', goldIngotStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(offenseCoreStack, "msm", "geg", "mom", 'm', offensaStack, 'e', emptyCoreStack, 'o', magicianBloodOrbStack, 's', weakBloodShardStack, 'g', goldIngotStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(defensiveCoreStack, "msm", "geg", "mom", 'm', praesidiumStack, 'e', emptyCoreStack, 'o', magicianBloodOrbStack, 's', weakBloodShardStack, 'g', goldIngotStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(environmentalCoreStack, "msm", "geg", "mom", 'm', orbisTerraeStack, 'e', emptyCoreStack, 'o', magicianBloodOrbStack, 's', weakBloodShardStack, 'g', goldIngotStack)); - - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(powerCoreStack, "msm", "geg", "mom", 'm', virtusStack, 'e', emptyCoreStack, 'o', masterBloodOrbStack, 's', weakBloodShardStack, 'g', goldIngotStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(costCoreStack, "msm", "geg", "mom", 'm', reductusStack, 'e', emptyCoreStack, 'o', masterBloodOrbStack, 's', weakBloodShardStack, 'g', goldIngotStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(potencyCoreStack, "msm", "geg", "mom", 'm', potentiaStack, 'e', emptyCoreStack, 'o', masterBloodOrbStack, 's', weakBloodShardStack, 'g', goldIngotStack)); - - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModItems.itemHarvestSigil), "mgm", "gsg", "mom", 's', etherealSlateStack, 'o', archmageBloodOrbStack, 'g', new ItemStack(Items.golden_hoe), 'm', new ItemStack(Blocks.dirt))); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModBlocks.bloodRune, 1, 5), "bsb", "grg", "bob", 's', etherealSlateStack, 'o', archmageBloodOrbStack, 'r', speedRuneStack, 'b', emptyBucketStack, 'g', goldIngotStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModItems.itemCompressionSigil), "pop", "csc", "obo", 'b', masterBloodOrbStack, 'p', new ItemStack(Blocks.piston), 'c', new ItemStack(Blocks.crafting_table), 's', demonSlateStack, 'o', obsidianStack)); - - AlchemyRecipeRegistry.registerRecipe(crackedRunicPlateStackCrafted, 10, new ItemStack[]{imbuedSlateStack, imbuedSlateStack, concentratedCatalystStack}, 4); - AlchemyRecipeRegistry.registerRecipe(runicPlateStack, 30, new ItemStack[]{crackedRunicPlateStack, terraeStack}, 5); - AlchemyRecipeRegistry.registerRecipe(imbuedRunicPlateStack, 100, new ItemStack[]{magicalesStack, incendiumStack, runicPlateStack, runicPlateStack, aquasalusStack}, 5); - AlchemyRecipeRegistry.registerRecipe(complexSpellCrystalStack, 50, new ItemStack[]{new ItemStack(ModItems.blankSpell), weakBloodShardStack, weakBloodShardStack, diamondStack, goldIngotStack}, 3); - AlchemyRecipeRegistry.registerRecipe(soulRunicPlateStack, 150, new ItemStack[]{imbuedRunicPlateStack, soulShardStack, soulShardStack, weakBloodShardStack, diamondStack}, 6); - - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockConduit, 1, 0), "q q", "ccc", "q q", 'q', quartzRodStack, 'c', magicalesCableStack); - - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellParadigm, 1, 0), "gb ", "pcw", "gb ", 'p', paradigmBackPlateStack, 'c', projectileCoreStack, 'g', goldIngotStack, 'b', stoneBraceStack, 'w', outputCableStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellParadigm, 1, 1), "gb ", "pcw", "gb ", 'p', paradigmBackPlateStack, 'c', selfCoreStack, 'g', goldIngotStack, 'b', stoneBraceStack, 'w', outputCableStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellParadigm, 1, 2), "gb ", "pcw", "gb ", 'p', paradigmBackPlateStack, 'c', meleeCoreStack, 'g', goldIngotStack, 'b', stoneBraceStack, 'w', outputCableStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellParadigm, 1, 3), "gb ", "pcw", "gb ", 'p', paradigmBackPlateStack, 'c', toolCoreStack, 'g', goldIngotStack, 'b', stoneBraceStack, 'w', outputCableStack); - - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEffect, 1, 0), "bgb", "ico", "bgb", 'c', flameCoreStack, 'b', stoneBraceStack, 'g', goldIngotStack, 'i', inputCableStack, 'o', outputCableStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEffect, 1, 1), "bgb", "ico", "bgb", 'c', iceCoreStack, 'b', stoneBraceStack, 'g', goldIngotStack, 'i', inputCableStack, 'o', outputCableStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEffect, 1, 2), "bgb", "ico", "bgb", 'c', windCoreStack, 'b', stoneBraceStack, 'g', goldIngotStack, 'i', inputCableStack, 'o', outputCableStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEffect, 1, 3), "bgb", "ico", "bgb", 'c', earthCoreStack, 'b', stoneBraceStack, 'g', goldIngotStack, 'i', inputCableStack, 'o', outputCableStack); - - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellModifier, 1, 0), "bgb", "ico", "bgb", 'c', defaultCoreStack, 'i', inputCableStack, 'o', outputCableStack, 'b', stoneBraceStack, 'g', ironIngotStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellModifier, 1, 1), "bgb", "ico", "bgb", 'c', offenseCoreStack, 'i', inputCableStack, 'o', outputCableStack, 'b', stoneBraceStack, 'g', ironIngotStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellModifier, 1, 2), "bgb", "ico", "bgb", 'c', defensiveCoreStack, 'i', inputCableStack, 'o', outputCableStack, 'b', stoneBraceStack, 'g', ironIngotStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellModifier, 1, 3), "bgb", "ico", "bgb", 'c', environmentalCoreStack, 'i', inputCableStack, 'o', outputCableStack, 'b', stoneBraceStack, 'g', ironIngotStack); - - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 0), "bpb", "ico", "bpb", 'c', powerCoreStack, 'b', woodBraceStack, 'p', crackedRunicPlateStack, 'i', inputCableStack, 'o', outputCableStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 1), "bpb", "ico", "bpb", 'c', powerCoreStack, 'b', stoneBraceStack, 'p', runicPlateStack, 'i', inputCableStack, 'o', outputCableStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 2), "bpb", "ico", "bpb", 'c', powerCoreStack, 'b', obsidianBraceStack, 'p', imbuedRunicPlateStack, 'i', inputCableStack, 'o', outputCableStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 3), "bpb", "ico", "bpb", 'c', powerCoreStack, 'b', livingBraceStack, 'p', soulRunicPlateStack, 'i', inputCableStack, 'o', outputCableStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 5), "bpb", "ico", "bpb", 'c', costCoreStack, 'b', woodBraceStack, 'p', crackedRunicPlateStack, 'i', inputCableStack, 'o', outputCableStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 6), "bpb", "ico", "bpb", 'c', costCoreStack, 'b', stoneBraceStack, 'p', runicPlateStack, 'i', inputCableStack, 'o', outputCableStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 7), "bpb", "ico", "bpb", 'c', costCoreStack, 'b', obsidianBraceStack, 'p', imbuedRunicPlateStack, 'i', inputCableStack, 'o', outputCableStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 8), "bpb", "ico", "bpb", 'c', costCoreStack, 'b', livingBraceStack, 'p', soulRunicPlateStack, 'i', inputCableStack, 'o', outputCableStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 10), "bpb", "ico", "bpb", 'c', potencyCoreStack, 'b', woodBraceStack, 'p', crackedRunicPlateStack, 'i', inputCableStack, 'o', outputCableStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 11), "bpb", "ico", "bpb", 'c', potencyCoreStack, 'b', stoneBraceStack, 'p', runicPlateStack, 'i', inputCableStack, 'o', outputCableStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 12), "bpb", "ico", "bpb", 'c', potencyCoreStack, 'b', obsidianBraceStack, 'p', imbuedRunicPlateStack, 'i', inputCableStack, 'o', outputCableStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 13), "bpb", "ico", "bpb", 'c', potencyCoreStack, 'b', livingBraceStack, 'p', soulRunicPlateStack, 'i', inputCableStack, 'o', outputCableStack); - - GameRegistry.addRecipe(new ItemStack(ModItems.itemAttunedCrystal), "Sr ", " ar", "s S", 'r', quartzRodStack, 's', new ItemStack(Items.stick, 1, craftingConstant), 'a', strengthenedCatalystStack, 'S', stoneStack); - GameRegistry.addRecipe(new ItemStack(ModItems.itemTankSegmenter), "gqi", " rq", "q g", 'q', quartzRodStack, 'i', ironIngotStack, 'r', strengthenedCatalystStack, 'g', goldIngotStack); - GameRegistry.addRecipe(new ItemStack(ModItems.itemDestinationClearer), "qcq", "c c", "qcq", 'q', quartzRodStack, 'c', simpleCatalystStack); - - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockAlchemicalCalcinator), "pgp", "gsg", "ccc", 'p', crackedRunicPlateStack, 'g', glassStack, 's', strengthenedCatalystStack, 'c', cobblestoneStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockCrystalBelljar), "GGG", "GcG", "www", 'G', glassStack, 'c', concentratedCatalystStack, 'w', new ItemStack(Blocks.wooden_slab, 1, craftingConstant)); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockReagentConduit), "isi", "scs", "isi", 'c', concentratedCatalystStack, 's', stringStack, 'i', ironIngotStack); - - GameRegistry.addRecipe(new ItemStack(ModItems.ritualDismantler), "a a", " b ", 'a', Blocks.redstone_torch, 'b', ModItems.itemRitualDiviner); - - GameRegistry.addShapelessRecipe(new ItemStack(Items.dye, 5, 15), fracturedBoneStack); - - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModItems.itemSigilOfSupression), "wtl", "wvl", "wol", 'v', new ItemStack(ModItems.voidSigil), 't', new ItemStack(ModBlocks.blockTeleposer), 'o', masterBloodOrbStack, 'l', lavaBucketStack, 'w', waterBucketStack)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModItems.itemSigilOfEnderSeverance), "ptp", "ese", "pop", 's', new ItemStack(ModItems.demonicSlate), 't', weakBloodShardStack, 'o', masterBloodOrbStack, 'e', new ItemStack(Items.ender_eye), 'p', new ItemStack(Items.ender_pearl))); - - GameRegistry.addShapelessRecipe(enderShardCraftedStack, weakBloodShardStack, new ItemStack(Items.ender_pearl)); - - GameRegistry.addRecipe(new ItemStack(ModItems.inputRoutingFocus), "sgs", "geg", "sgs", 'e', enderShardStack, 's', stickStack, 'g', glassStack); - GameRegistry.addRecipe(new ItemStack(ModItems.outputRoutingFocus, 1, 0), "sgs", "geg", "sgs", 'e', enderShardStack, 's', stickStack, 'g', stoneStack); - GameRegistry.addRecipe(new ItemStack(ModItems.outputRoutingFocus, 1, 1), "sgs", "geg", "sgs", 'e', enderShardStack, 's', stickStack, 'g', new ItemStack(Blocks.sandstone)); - GameRegistry.addRecipe(new ItemStack(ModItems.outputRoutingFocus, 1, 2), "sgs", "geg", "sgs", 'e', enderShardStack, 's', stickStack, 'g', new ItemStack(Items.dye, 1, craftingConstant)); - GameRegistry.addRecipe(new ItemStack(ModItems.outputRoutingFocus, 1, 3), "sgs", "geg", "sgs", 'e', enderShardStack, 's', stickStack, 'g', obsidianStack); - GameRegistry.addRecipe(new ItemStack(ModItems.outputRoutingFocus, 1, 4), "sgs", "geg", "sgs", 'e', enderShardStack, 's', stickStack, 'g', stringStack); - - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockStabilityGlyph), "1s1", "grg", "bob", 'o', transcendentBloodOrbStack, 'r', bloodRuneStack, '1', crepitousStack, 'g', etherealSlateStack, 'b', praesidiumStack, 's', magicalesStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockEnchantmentGlyph, 1, 0), "1s1", "grg", "bob", 'o', transcendentBloodOrbStack, 'r', bloodRuneStack, 'g', etherealSlateStack, 'b', magicalesStack, '1', offensaStack, 's', lifeShardStack); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockEnchantmentGlyph, 1, 1), "1s1", "grg", "bob", 'o', transcendentBloodOrbStack, 'r', bloodRuneStack, 'g', etherealSlateStack, 'b', magicalesStack, '1', virtusStack, 's', soulShardStack); - - GameRegistry.addRecipe(dawnRitualDivinerStack, " d ", "srs", " d ", 'd', new ItemStack(ModItems.dawnScribeTool), 's', etherealSlateStack, 'r', duskRitualDivinerStack); - - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Items.flint, 2, 0), 1, new ItemStack[]{new ItemStack(Blocks.gravel), new ItemStack(Items.flint)}, 1); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Blocks.grass), 2, new ItemStack[]{new ItemStack(Blocks.dirt), new ItemStack(Items.dye, 1, 15), new ItemStack(Items.wheat_seeds), new ItemStack(Items.wheat_seeds)}, 1); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Items.leather, 3, 0), 2, new ItemStack[]{new ItemStack(Items.rotten_flesh), new ItemStack(Items.rotten_flesh), new ItemStack(Items.rotten_flesh), waterBucketStack, new ItemStack(Items.flint)}, 1); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Items.bread), 1, new ItemStack[]{new ItemStack(Items.wheat), new ItemStack(Items.sugar)}, 1); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Items.fire_charge, 5, 0), 3, new ItemStack[]{new ItemStack(Items.coal), new ItemStack(Items.blaze_powder), gunpowderStack}, 1); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Blocks.sand, 2, 0), 1, new ItemStack[]{new ItemStack(Blocks.cobblestone), gunpowderStack}, 1); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Blocks.clay, 4, 0), 2, new ItemStack[]{new ItemStack(Blocks.hardened_clay, 1, craftingConstant), new ItemStack(Blocks.hardened_clay, 1, craftingConstant), new ItemStack(Blocks.hardened_clay, 1, craftingConstant), new ItemStack(Blocks.hardened_clay, 1, craftingConstant), waterBucketStack}, 1); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Items.string, 4, 0), 1, new ItemStack[]{new ItemStack(Blocks.wool, 1, craftingConstant), new ItemStack(Items.flint)}, 1); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Blocks.gravel, 2, 0), 1, new ItemStack[]{new ItemStack(Blocks.stone), gunpowderStack}, 1); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Blocks.obsidian), 1, new ItemStack[]{waterBucketStack, lavaBucketStack}, 1); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Items.paper), 1, new ItemStack[]{new ItemStack(Items.reeds)}, 1); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Blocks.soul_sand, 3, 0), 3, new ItemStack[]{new ItemStack(Blocks.sand), new ItemStack(Blocks.sand), new ItemStack(Blocks.sand), waterBucketStack, weakBloodShardStack}, 3); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Blocks.mycelium, 1, 0), 5, new ItemStack[]{new ItemStack(Blocks.grass), new ItemStack(Blocks.brown_mushroom), new ItemStack(Blocks.red_mushroom)}, 2); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Blocks.ice), 2, new ItemStack[]{waterBucketStack, new ItemStack(Items.snowball)}, 1); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Items.potionitem, 1, 0), 1, new ItemStack[]{new ItemStack(Items.glass_bottle), new ItemStack(Blocks.cactus)}, 1); - AlchemyRecipeRegistry.registerRecipe(waterBucketStack, 1, new ItemStack[]{emptyBucketStack, new ItemStack(Blocks.cactus)}, 1); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Items.glass_bottle, 3), 1, new ItemStack[]{glassStack, glassStack, glassStack}, 1); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Items.ghast_tear, 2), 100, new ItemStack[]{ghastTearStack, concentratedCatalystStack, weakBloodShardStack, new ItemStack(Blocks.soul_sand), new ItemStack(Blocks.soul_sand)}, 5); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Items.coal, 5), 1, new ItemStack[]{new ItemStack(Items.coal, 1, 1), new ItemStack(Items.coal, 1, 1), new ItemStack(Items.coal, 1, 1), new ItemStack(Items.coal, 1, 1), new ItemStack(Items.coal, 1, 1)}, 1); - AlchemyRecipeRegistry.registerRecipe(new ItemStack(Items.clay_ball, 4), 5, new ItemStack[]{new ItemStack(Blocks.sand), waterBucketStack}, 2); - - ItemIncense.registerIncenseRecipes(); - GameRegistry.addRecipe(new ItemStack(ModBlocks.blockCrucible), "i i", "sis", " S ", 's', new ItemStack(Blocks.stone_slab), 'i', ironIngotStack, 'S', stoneStack); - } - - @EventHandler - public void postInit(FMLPostInitializationEvent event) - { - proxy.registerPostSideObjects(); - //TODO Thaumcraft Integration -/* if (Loader.isModLoaded("Thaumcraft")) - { - isThaumcraftLoaded = true; - - try - { - //do stuff - ModItems.sanguineHelmet = new ItemSanguineArmour(0).setUnlocalizedName("sanguineHelmet"); - ModItems.sanguineRobe = new ItemSanguineArmour(1).setUnlocalizedName("sanguineRobe"); - ModItems.sanguinePants = new ItemSanguineArmour(2).setUnlocalizedName("sanguinePants"); - ModItems.sanguineBoots = new ItemSanguineArmour(3).setUnlocalizedName("sanguineBoots"); - GameRegistry.registerItem(ModItems.sanguineHelmet, "sanguineHelmet"); - GameRegistry.registerItem(ModItems.sanguineRobe, "sanguineRobe"); - GameRegistry.registerItem(ModItems.sanguinePants, "sanguinePants"); - GameRegistry.registerItem(ModItems.sanguineBoots, "sanguineBoots"); - - ItemStack itemGoggles = ItemApi.getItem("itemGoggles", 0); - Item itemThaumChest = GameRegistry.findItem("Thaumcraft", "ItemChestplateThaumium"); - Item itemThaumLeggings = GameRegistry.findItem("Thaumcraft", "ItemLeggingsThaumium"); - Item itemThaumBoots = GameRegistry.findItem("Thaumcraft", "ItemBootsThaumium"); - - AspectList aspectList = new AspectList(); - aspectList.add(Aspect.ARMOR, 5).add(Aspect.MAGIC, 5); - - ThaumcraftApi.registerObjectTag(new ItemStack(ModItems.sanguineHelmet), aspectList); - ThaumcraftApi.registerObjectTag(new ItemStack(ModItems.sanguineRobe), aspectList); - ThaumcraftApi.registerObjectTag(new ItemStack(ModItems.sanguinePants), aspectList); - ThaumcraftApi.registerObjectTag(new ItemStack(ModItems.sanguineBoots), aspectList); - - if (itemGoggles != null) - { - BindingRegistry.registerRecipe(new ItemStack(ModItems.sanguineHelmet), itemGoggles); - } - - if (itemThaumChest != null) - { - BindingRegistry.registerRecipe(new ItemStack(ModItems.sanguineRobe), new ItemStack(itemThaumChest)); - } - - if (itemThaumLeggings != null) - { - BindingRegistry.registerRecipe(new ItemStack(ModItems.sanguinePants), new ItemStack(itemThaumLeggings)); - } - - if (itemThaumBoots != null) - { - BindingRegistry.registerRecipe(new ItemStack(ModItems.sanguineBoots), new ItemStack(itemThaumBoots)); - } - - //LogHelper.log(Level.INFO, "Loaded RP2 World addon"); - } catch (Exception e) - { - //LogHelper.log(Level.SEVERE, "Could not load RP2 World addon"); - e.printStackTrace(System.err); - } - } else - { - isThaumcraftLoaded = false; - } - - if(Loader.isModLoaded("guideapi")) - { - long initialTime = System.nanoTime(); - RecipeHolder.init(); - long finalTime = System.nanoTime(); - AlchemicalWizardry.logger.info("Recipe Holder initialized: took " + (finalTime - initialTime)/1000000f + "ms."); - - ModItems.itemMailCatalogue = new ItemMailOrderCatalogue().setUnlocalizedName("itemMailCatalogue"); - GameRegistry.registerItem(ModItems.itemMailCatalogue, "itemMailCatalogue"); - GameRegistry.addShapelessRecipe(new ItemStack(ModItems.itemMailCatalogue), new ItemStack(Items.book), new ItemStack(Items.dye, 1, 0), new ItemStack(Items.feather), new ItemStack(Blocks.glass, 1, OreDictionary.WILDCARD_VALUE), new ItemStack(Blocks.glass, 1, OreDictionary.WILDCARD_VALUE)); - - registerBMBook(); - } - - if (Loader.isModLoaded("Forestry")) - { - isForestryLoaded = true; - - ModItems.itemBloodFrame = new ItemBloodFrame().setUnlocalizedName("bloodFrame"); - - Item provenFrame = GameRegistry.findItem("Forestry", "frameImpregnated"); - - if(provenFrame !=null) - { - AltarRecipeRegistry.registerAltarRecipe(new ItemStack(ModItems.itemBloodFrame), new ItemStack(provenFrame, 1), 3, 30000, 20, 20, false); - } - } else - { - isForestryLoaded = false; - } - - if (Loader.isModLoaded("harvestcraft")) - { - PamHarvestCompatRegistry.registerPamHandlers(); - AlchemicalWizardry.logger.info("Loaded Harvestcraft Handlers!"); - } - - if(Loader.isModLoaded("MineTweaker3")) - { - MineTweakerIntegration.register(); - AlchemicalWizardry.logger.info("Loaded MineTweaker 3 Integration"); - } - -// if(Loader.isModLoaded("AgriCraft")) -// { -// HarvestRegistry.registerHarvestHandler(new AgriCraftCropHarvestHandler()); -// AlchemicalWizardry.logger.info("Loaded AgriCraft Handlers!"); -// } -*/ - isThaumcraftLoaded = Loader.isModLoaded("Thaumcraft"); //this is temp. - isBotaniaLoaded = Loader.isModLoaded("Botania"); - isPneumaticCraftLoaded = Loader.isModLoaded("PneumaticCraft"); - isFMPLoaded = Loader.isModLoaded("ForgeMultipart"); - - BloodMagicConfiguration.loadBlacklist(); - BloodMagicConfiguration.blacklistRituals(); - - DemonVillageLootRegistry.init(); - - this.initCompressionHandlers(); - - -// if(parseTextFiles) -// this.parseTextFile(); - -// this.createItemTextureFiles(); - } - -/* @Optional.Method(modid = "guideapi") - public static void registerBMBook() - { - BloodMagicGuide.registerGuide(); - } -*/ - public static void blacklistAccelerators() - { - if (Loader.isModLoaded("Torcherino")) - { - FMLInterModComms.sendMessage("Torcherino", "blacklist-tile", TEAltar.class.getName()); - FMLInterModComms.sendMessage("Torcherino", "blacklist-tile", TEMasterStone.class.getName()); - } - if (Loader.isModLoaded("ChromatiCraft")) - { - try - { - Class api = Class.forName("Reika.ChromatiCraft.API.AcceleratorBlacklist"); - Class reason = Class.forName("Reika.ChromatiCraft.API.AcceleratorBlacklist$BlacklistReason"); - Object exploit = Enum.valueOf(reason,"EXPLOIT"); - Method add = api.getMethod("addBlacklist", Class.class, String.class, reason); - add.invoke(null, TEAltar.class, TEAltar.class.getSimpleName(),exploit); - add.invoke(null, TEMasterStone.class, TEMasterStone.class.getSimpleName(),exploit); - } catch (Exception e) - { - logger.log(Level.ERROR, "ChromatiCraft Accelerator Blacklist Failure"); - } - - } - } - - public static void blacklistDemons() - { - String[] mobs = new String[]{"FallenAngel","LowerGuardian","BileDemon","WingedFireDemon","SmallEarthGolem","IceDemon","BoulderFist","Shade","AirElemental", - "WaterElemental","EarthElemental","FireElemental","ShadeElemental","HolyElemental","MinorDemonGrunt","MinorDemonGruntFire","MinorDemonGruntWind", - "MinorDemonGruntIce","MinorDemonGruntEarth", "MinorDemonGruntGuardian","MinorDemonGruntGuardianFire","MinorDemonGruntGuardianWind","MinorDemonGruntGuardianIce", - "MinorDemonGruntGuardianEarth"}; - Class[] mobClasses = new Class[]{EntityFallenAngel.class,EntityLowerGuardian.class,EntityBileDemon.class,EntityWingedFireDemon.class,EntitySmallEarthGolem.class,EntityIceDemon.class, - EntityBoulderFist.class,EntityShade.class,EntityAirElemental.class,EntityWaterElemental.class,EntityEarthElemental.class,EntityFireElemental.class,EntityShadeElemental.class, - EntityHolyElemental.class,EntityMinorDemonGrunt.class,EntityMinorDemonGruntFire.class,EntityMinorDemonGruntWind.class,EntityMinorDemonGruntIce.class, - EntityMinorDemonGruntEarth.class,EntityMinorDemonGruntGuardian.class,EntityMinorDemonGruntGuardianFire.class,EntityMinorDemonGruntGuardianWind.class, - EntityMinorDemonGruntGuardianIce.class,EntityMinorDemonGruntGuardianEarth.class}; - if (Loader.isModLoaded("MineFactoryReloaded")) - { - ModContainer bloodMagic = Loader.instance().activeModContainer(); - Method method = null; - Constructor constructor = null; - try - { - constructor = FMLInterModComms.IMCMessage.class.getDeclaredConstructor(String.class, Object.class); - constructor.setAccessible(true); - method = FMLInterModComms.class.getDeclaredMethod("enqueueMessage", Object.class, String.class, FMLInterModComms.IMCMessage.class); - method.setAccessible(true); - } - catch(Exception e) - { - logger.log(Level.ERROR, "Grinder Message reflection failed"); - } - for (int i = 0; i maxLines) -// { -// changePage = true; -// } -// if(changePage) //Encode into current entry, then move to next entry -// { -// String[] newStrings = new String[currentPage + 1 + 1]; //Just to show that it is increasing -// for(int i=0; i 3L) -//// { -//// -//// }else -// { -// PrintWriter writer = new PrintWriter(file); -// for(String stri : strings) -// { -// writer.println(stri); -// } -// writer.close(); -// } -// -//// -// } -// -// Minecraft.getMinecraft().fontRendererObj.setUnicodeFlag(false); -// -// } catch (FileNotFoundException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } catch (IOException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } -// } -// } - -// @Mod.EventHandler -// public void initCommands(FMLServerStartingEvent event) -// { -// event.registerServerCommand(new CommandBind()); -// event.registerServerCommand(new CommandUnbind()); -// event.registerServerCommand(new CommandSN()); -// event.registerServerCommand(new CommandDownloadGAPI()); -// } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java b/src/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java deleted file mode 100644 index 3eed0062..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java +++ /dev/null @@ -1,301 +0,0 @@ -package WayofTime.alchemicalWizardry; - -import java.io.File; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.List; -import java.util.Map.Entry; - -import net.minecraft.entity.EntityList; -import net.minecraft.entity.EntityLivingBase; -import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.fml.common.FMLCommonHandler; -import net.minecraftforge.fml.relauncher.Side; -import WayofTime.alchemicalWizardry.api.rituals.Rituals; -import WayofTime.alchemicalWizardry.client.renderer.ColourThreshold; -import WayofTime.alchemicalWizardry.client.renderer.RenderHelper; -import WayofTime.alchemicalWizardry.common.demonVillage.DemonVillagePath; -import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.TEDemonPortal; -import WayofTime.alchemicalWizardry.common.items.armour.BoundArmour; -import WayofTime.alchemicalWizardry.common.summoning.meteor.MeteorParadigm; - -/** - * Created with IntelliJ IDEA. - * User: Pokefenn - * Date: 17/01/14 - * Time: 19:50 - */ -public class BloodMagicConfiguration -{ - private static final String DEFAULT_COLOR_LIST = "100,f; 80,7; 60,e; 40,6; 25,c; 10,4"; - public static final List colorList = new ArrayList(); - - public static Configuration config; - - public static String[] blocksToBeDisabled; - public static String[] itemsToBeDisabled; - public static String[] teleposerBlacklist; - public static String[] blacklist = {}; - - public static void init(File configFile) - { - for (String s : DEFAULT_COLOR_LIST.split(";")) - { - String[] ct = s.split(","); - colorList.add(new ColourThreshold(Integer.valueOf(ct[0].trim()), ct[1].trim())); - } - - config = new Configuration(configFile); - - try - { - config.load(); - syncConfig(); - - } catch (Exception e) - { - AlchemicalWizardry.logger.error("There has been a problem loading the configuration, go ask on the forums :p"); - - } finally - { - config.save(); - } - } - - public static void syncConfig() - { - AlchemicalWizardry.standardBindingAgentDungeonChance = config.get("Dungeon Loot Chances", "standardBindingAgent", 30).getInt(); - AlchemicalWizardry.mundanePowerCatalystDungeonChance = config.get("Dungeon Loot Chances", "mundanePowerCatalyst", 20).getInt(); - AlchemicalWizardry.averagePowerCatalystDungeonChance = config.get("Dungeon Loot Chances", "averagePowerCatalyst", 10).getInt(); - AlchemicalWizardry.greaterPowerCatalystDungeonChance = config.get("Dungeon Loot Chances", "greaterPowerCatalyst", 5).getInt(); - AlchemicalWizardry.mundaneLengtheningCatalystDungeonChance = config.get("Dungeon Loot Chances", "mundaneLengtheningCatalyst", 20).getInt(); - AlchemicalWizardry.averageLengtheningCatalystDungeonChance = config.get("Dungeon Loot Chances", "averageLengtheningCatalyst", 10).getInt(); - AlchemicalWizardry.greaterLengtheningCatalystDungeonChance = config.get("Dungeon Loot Chances", "greaterLengtheningCatalyst", 5).getInt(); - AlchemicalWizardry.customPotionDrowningID = config.get("Potion ID", "Drowning", 100).getInt(); - AlchemicalWizardry.customPotionBoostID = config.get("Potion ID", "Boost", 101).getInt(); - AlchemicalWizardry.customPotionProjProtID = config.get("Potion ID", "ProjProt", 102).getInt(); - AlchemicalWizardry.customPotionInhibitID = config.get("Potion ID", "Inhibit", 103).getInt(); - AlchemicalWizardry.customPotionFlightID = config.get("Potion ID", "Flight", 104).getInt(); - AlchemicalWizardry.customPotionReciprocationID = config.get("Potion ID", "Reciprocation", 105).getInt(); - AlchemicalWizardry.customPotionFlameCloakID = config.get("Potion ID", "FlameCloak", 106).getInt(); - AlchemicalWizardry.customPotionIceCloakID = config.get("Potion ID", "IceCloak", 107).getInt(); - AlchemicalWizardry.customPotionHeavyHeartID = config.get("Potion ID", "HeavyHeart", 108).getInt(); - AlchemicalWizardry.customPotionFireFuseID = config.get("Potion ID", "FireFuse", 109).getInt(); - AlchemicalWizardry.customPotionPlanarBindingID = config.get("Potion ID", "PlanarBinding", 110).getInt(); - AlchemicalWizardry.customPotionSoulFrayID = config.get("Potion ID", "SoulFray", 111).getInt(); - AlchemicalWizardry.customPotionSoulHardenID = config.get("Potion ID", "SoulHarden", 112).getInt(); - AlchemicalWizardry.customPotionDeafID = config.get("Potion ID", "Deaf", 113).getInt(); - AlchemicalWizardry.customPotionFeatherFallID = config.get("Potion ID", "FeatherFall", 114).getInt(); - AlchemicalWizardry.customPotionDemonCloakID = config.get("Potion ID", "DemonCloak", 115).getInt(); - AlchemicalWizardry.customPotionAmphibianID = config.get("Potion ID", "Amphibian", 116).getInt(); - - MeteorParadigm.maxChance = config.get("meteor", "maxChance", 1000).getInt(); - AlchemicalWizardry.doMeteorsDestroyBlocks = config.get("meteor", "doMeteorsDestroyBlocks", true).getBoolean(true); - AlchemicalWizardry.diamondMeteorArray = config.get("meteor", "diamondMeteor", new String[]{"oreDiamond", "100", "oreEmerald", "75", "oreCinnabar", "200", "oreAmber", "200"}).getStringList(); - AlchemicalWizardry.diamondMeteorRadius = config.get("meteor", "diamondMeteorRadius", 5).getInt(); - AlchemicalWizardry.stoneMeteorArray = config.get("meteor", "stoneBlockMeteor", new String[]{"oreCoal", "150", "oreApatite", "50", "oreIron", "50"}).getStringList(); - AlchemicalWizardry.stoneMeteorRadius = config.get("meteor", "stoneMeteorRadius", 16).getInt(); - AlchemicalWizardry.ironBlockMeteorArray = config.get("meteor", "ironBlockMeteor", new String[]{"oreIron", "400", "oreGold", "30", "oreCopper", "200", "oreTin", "140", "oreSilver", "70", "oreLead", "80", "oreLapis", "60", "oreRedstone", "100"}).getStringList(); - AlchemicalWizardry.ironBlockMeteorRadius = config.get("meteor", "ironBlockMeteorRadius", 7).getInt(); - AlchemicalWizardry.netherStarMeteorArray = config.get("meteor", "netherStarMeteor", new String[]{"oreDiamond", "150", "oreEmerald", "100", "oreQuartz", "250", "oreSunstone", "5", "oreMoonstone", "50", "oreIridium", "5", "oreCertusQuartz", "150"}).getStringList(); - AlchemicalWizardry.netherStarMeteorRadius = config.get("meteor", "netherStarMeteorRadius", 3).getInt(); - - AlchemicalWizardry.allowedCrushedOresArray = config.get("oreCrushing", "allowedOres", new String[]{"iron", "gold", "copper", "tin", "lead", "silver", "osmium"}).getStringList(); - - AlchemicalWizardry.wimpySettings = config.get("WimpySettings", "IDontLikeFun", false).getBoolean(false); - AlchemicalWizardry.respawnWithDebuff = config.get("WimpySettings", "RespawnWithDebuff", true).getBoolean(); - AlchemicalWizardry.causeHungerWithRegen = config.get("WimpySettings", "causeHungerWithRegen", true).getBoolean(); - AlchemicalWizardry.causeHungerChatMessage = config.get("WimpySettings", "causeHungerChatMessage", true).getBoolean(); -// AlchemicalWizardry.lockdownAltar = config.get("WimpySettings", "LockdownAltarWithRegen", true).getBoolean(); - AlchemicalWizardry.lockdownAltar = false; - - AlchemicalWizardry.ritualDisabledWater = config.get("Ritual Blacklist", "Ritual of the Full Spring", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledLava = config.get("Ritual Blacklist", "Serenade of the Nether", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledGreenGrove = config.get("Ritual Blacklist", "Ritual of the Green Grove", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledInterdiction = config.get("Ritual Blacklist", "Interdiction Ritual", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledContainment = config.get("Ritual Blacklist", "Ritual of Containment", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledBinding = config.get("Ritual Blacklist", "Ritual of Binding", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledUnbinding = config.get("Ritual Blacklist", "Ritual of Unbinding", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledHighJump = config.get("Ritual Blacklist", "Ritual of the High Jump", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledMagnetism = config.get("Ritual Blacklist", "Ritual of Magnetism", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledCrusher = config.get("Ritual Blacklist", "Ritual of the Crusher", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledSpeed = config.get("Ritual Blacklist", "Ritual of Speed", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledAnimalGrowth = config.get("Ritual Blacklist", "Ritual of the Shepherd", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledSuffering = config.get("Ritual Blacklist", "Well of Suffering", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledRegen = config.get("Ritual Blacklist", "Ritual of Regeneration", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledFeatheredKnife = config.get("Ritual Blacklist", "Ritual of the Feathered Knife", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledFeatheredEarth = config.get("Ritual Blacklist", "Ritual of the Feathered Earth", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledGaia = config.get("Ritual Blacklist", "Ritual of Gaia's Transformation", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledCondor = config.get("Ritual Blacklist", "Reverence of the Condor", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledFallingTower = config.get("Ritual Blacklist", "Mark of the Falling Tower", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledBalladOfAlchemy = config.get("Ritual Blacklist", "Ballad of Alchemy", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledExpulsion = config.get("Ritual Blacklist", "Aura of Expulsion", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledSuppression = config.get("Ritual Blacklist", "Dome of Supression", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledZephyr = config.get("Ritual Blacklist", "Call of the Zephyr", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledHarvest = config.get("Ritual Blacklist", "Reap of the Harvest Moon", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledConduit = config.get("Ritual Blacklist", "Cry of the Eternal Soul", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledEllipsoid = config.get("Ritual Blacklist", "Focus of the Ellipsoid", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledEvaporation = config.get("Ritual Blacklist", "Song of Evaporation", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledSpawnWard = config.get("Ritual Blacklist", "Ward of Sacrosanctity", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledVeilOfEvil = config.get("Ritual Blacklist", "Veil of Evil", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledFullStomach = config.get("Ritual Blacklist", "Requiem of the Satiated Stomach", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledConvocation = config.get("Ritual Blacklist", "Convocation of the Damned", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledSymmetry = config.get("Ritual Blacklist", "Symmetry of the Omega", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledStalling = config.get("Ritual Blacklist", "Duet of the Fused Souls", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledCrafting = config.get("Ritual Blacklist", "Rhythm of the Beating Anvil", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledPhantomHands = config.get("Ritual Blacklist", "Orchestra of the Phantom Hands", false).getBoolean(false); - AlchemicalWizardry.ritualDisabledSphereIsland = config.get("Ritual Blacklist", "Birth of the Bastion", false).getBoolean(false); - - AlchemicalWizardry.potionDisableRegen = config.get("Alchemy Potion Blacklist", "Regeneration", false).getBoolean(false); - AlchemicalWizardry.potionDisableNightVision = config.get("Alchemy Potion Blacklist", "Night Vision", false).getBoolean(false); - AlchemicalWizardry.potionDisableFireResistance = config.get("Alchemy Potion Blacklist", "Fire Resistance", false).getBoolean(false); - AlchemicalWizardry.potionDisableWaterBreathing = config.get("Alchemy Potion Blacklist", "Water Breathing", false).getBoolean(false); - AlchemicalWizardry.potionDisableMoveSpeed = config.get("Alchemy Potion Blacklist", "Move Speed", false).getBoolean(false); - AlchemicalWizardry.potionDisableInstantHealth = config.get("Alchemy Potion Blacklist", "Instant Health", false).getBoolean(false); - AlchemicalWizardry.potionDisablePoison = config.get("Alchemy Potion Blacklist", "Poison", false).getBoolean(false); - AlchemicalWizardry.potionDisableBlindness = config.get("Alchemy Potion Blacklist", "Blindness", false).getBoolean(false); - AlchemicalWizardry.potionDisableWeakness = config.get("Alchemy Potion Blacklist", "Weakness", false).getBoolean(false); - AlchemicalWizardry.potionDisableStrength = config.get("Alchemy Potion Blacklist", "Strength", false).getBoolean(false); - AlchemicalWizardry.potionDisableJumpBoost = config.get("Alchemy Potion Blacklist", "Jump Boost", false).getBoolean(false); - AlchemicalWizardry.potionDisableSlowness = config.get("Alchemy Potion Blacklist", "Slowness", false).getBoolean(false); - AlchemicalWizardry.potionDisableMining = config.get("Alchemy Potion Blacklist", "Mining Speed", false).getBoolean(false); - AlchemicalWizardry.potionDisableDrowning = config.get("Alchemy Potion Blacklist", "Drowning", false).getBoolean(false); - AlchemicalWizardry.potionDisableInvisibility = config.get("Alchemy Potion Blacklist", "Invisibility", false).getBoolean(false); - AlchemicalWizardry.potionDisableResistance = config.get("Alchemy Potion Blacklist", "Resistance", false).getBoolean(false); - AlchemicalWizardry.potionDisableSaturation = config.get("Alchemy Potion Blacklist", "Saturation", false).getBoolean(false); - AlchemicalWizardry.potionDisableHealthBoost = config.get("Alchemy Potion Blacklist", "Health Boost", false).getBoolean(false); - AlchemicalWizardry.potionDisableAbsorption = config.get("Alchemy Potion Blacklist", "Absorption", false).getBoolean(false); - AlchemicalWizardry.potionDisableBoost = config.get("Alchemy Potion Blacklist", "Boost", false).getBoolean(false); - AlchemicalWizardry.potionDisableFlight = config.get("Alchemy Potion Blacklist", "Flight", false).getBoolean(false); - AlchemicalWizardry.potionDisableReciprocation = config.get("Alchemy Potion Blacklist", "Reciprocation", false).getBoolean(false); - AlchemicalWizardry.potionDisablePlanarBinding = config.get("Alchemy Potion Blacklist", "Planar Binding", false).getBoolean(false); - AlchemicalWizardry.potionDisableSoulFray = config.get("Alchemy Potion Blacklist", "Soul Fray", false).getBoolean(false); - AlchemicalWizardry.potionDisableSoulHarden = config.get("Alchemy Potion Blacklist", "Soul Harden", false).getBoolean(false); - AlchemicalWizardry.potionDisableDeafness = config.get("Alchemy Potion Blacklist", "Deafness", false).getBoolean(false); - - teleposerBlacklist = config.get("Teleposer Blacklist", "Blacklist", blacklist, "Stops specified blocks from being teleposed. Put entries on new lines. Valid syntax is: \nmodid:blockname:meta").getStringList(); - - String tempDemonConfigs = "Demon Configs"; - TEDemonPortal.buildingGridDelay = config.get(tempDemonConfigs, "Building Grid Delay", 25).getInt(); - TEDemonPortal.roadGridDelay = config.get(tempDemonConfigs, "Road Grid Delay", 10).getInt(); - TEDemonPortal.demonHoardDelay = config.get(tempDemonConfigs, "Demon Hoard Delay", 40).getInt(); - TEDemonPortal.demonRoadChance = (float)(config.get(tempDemonConfigs, "Demon Road Chance", 0.3f).getDouble()); - TEDemonPortal.demonHouseChance = (float)(config.get(tempDemonConfigs, "Demon House Chance", 0.6f).getDouble()); - TEDemonPortal.demonPortalChance = (float)(config.get(tempDemonConfigs, "Demon Portal Chance", 0.5f).getDouble()); - TEDemonPortal.demonHoardChance = (float)(config.get(tempDemonConfigs, "Demon Hoard Chance", 0.8f).getDouble()); - TEDemonPortal.portalTickRate = (float)(config.get(tempDemonConfigs, "Portal Tick Rate", 0.1f).getDouble()); - - DemonVillagePath.canGoDown = config.get(tempDemonConfigs, "canRoadGoDown", true).getBoolean(); - DemonVillagePath.tunnelIfObstructed = config.get(tempDemonConfigs, "tunnelIfObstructed", false).getBoolean(); - DemonVillagePath.createBridgeInAirIfObstructed = config.get(tempDemonConfigs, "createBridgeInAirIfObstructed", false).getBoolean(); - - TEDemonPortal.limit = config.get(tempDemonConfigs, "demonGridSpaceLimit", 100).getInt(); - TEDemonPortal.demonLimit = config.get(tempDemonConfigs, "demonHoardLimit", 100).getInt(); - - AlchemicalWizardry.isDemonRitualCreativeOnly = config.get(tempDemonConfigs, "IsDemonRitualCreativeOnly", false).getBoolean(); - - BoundArmour.tryComplexRendering = config.get("WimpySettings", "UseFancyBoundArmour", true).getBoolean(true); - - blocksToBeDisabled = config.getStringList("Disable blocks here", "WimpySettings", new String[]{""}, "Type in the unlocalized name of the block you want disabled here (separate them using ENTER)"); - itemsToBeDisabled = config.getStringList("Disable items here", "WimpySettings", new String[]{""}, "Type in the unlocalized name of the item you want disabled (separate them using ENTER)"); - -// ItemIncense.itemDuration = config.get("TestIncenseSettings", "ItemDuration", 100).getInt(); -// ItemIncense.minValue = config.get("TestIncenseSettings", "MinValue", 0).getInt(); -// ItemIncense.maxValue = config.get("TestIncenseSettings", "MaxValue", 100).getInt(); -// PlayerSacrificeHandler.scalingOfSacrifice = (float) config.get("TestIncenseSettings", "ScalingFactor", 0.0025f).getDouble(); -// PlayerSacrificeHandler.soulFrayDuration = config.get("TestIncenseSettings", "SoulFrayDuration", 400).getInt(); - - - Side side = FMLCommonHandler.instance().getSide(); - if (side == Side.CLIENT) - { - RenderHelper.xOffset = config.get("ClientSettings", "AlchemyHUDxOffset", 50).getInt(); - RenderHelper.yOffset = config.get("ClientSettings", "AlchemyHUDyOffset", 2).getInt(); - RenderHelper.lpBarX = config.get("ClientSettings", "LPHUDxOffset", 12).getInt(); - RenderHelper.lpBarY = config.get("ClientSettings", "LPHUDyOffset", 75).getInt(); - } - - config.save(); - } - - public static void set(String categoryName, String propertyName, String newValue) - { - - config.load(); - if (config.getCategoryNames().contains(categoryName)) - { - if (config.getCategory(categoryName).containsKey(propertyName)) - { - config.getCategory(categoryName).get(propertyName).set(newValue); - } - } - config.save(); - - - } - - public static void loadBlacklist() - { - AlchemicalWizardry.wellBlacklist = new ArrayList(); - for (Object o : EntityList.stringToClassMapping.entrySet()) - { - Entry entry = (Entry) o; - Class curClass = (Class) entry.getValue(); - boolean valid = EntityLivingBase.class.isAssignableFrom(curClass) && !Modifier.isAbstract(curClass.getModifiers()); - if (valid) - { - boolean blacklisted = config.get("wellOfSufferingBlackList", entry.getKey().toString(), false).getBoolean(); - if (blacklisted) - AlchemicalWizardry.wellBlacklist.add(curClass); - } - - } - config.save(); - } - - public static void blacklistRituals() - { - if (AlchemicalWizardry.ritualDisabledWater) r("AW001Water"); - if (AlchemicalWizardry.ritualDisabledLava) r("AW002Lava"); - if (AlchemicalWizardry.ritualDisabledGreenGrove) r("AW003GreenGrove"); - if (AlchemicalWizardry.ritualDisabledInterdiction) r("AW004Interdiction"); - if (AlchemicalWizardry.ritualDisabledContainment) r("AW005Containment"); - if (AlchemicalWizardry.ritualDisabledBinding) r("AW006Binding"); - if (AlchemicalWizardry.ritualDisabledUnbinding) r("AW007Unbinding"); // "A medium dry martini, lemon peel. Shaken, not stirred." - if (AlchemicalWizardry.ritualDisabledHighJump) r("AW008HighJump"); - if (AlchemicalWizardry.ritualDisabledMagnetism) r("AW009Magnetism"); - if (AlchemicalWizardry.ritualDisabledCrusher) r("AW010Crusher"); - if (AlchemicalWizardry.ritualDisabledSpeed) r("AW011Speed"); - if (AlchemicalWizardry.ritualDisabledAnimalGrowth) r("AW012AnimalGrowth"); - if (AlchemicalWizardry.ritualDisabledSuffering) r("AW013Suffering"); - if (AlchemicalWizardry.ritualDisabledRegen) r("AW014Regen"); - if (AlchemicalWizardry.ritualDisabledFeatheredKnife) r("AW015FeatheredKnife"); - if (AlchemicalWizardry.ritualDisabledFeatheredEarth) r("AW016FeatheredEarth"); - if (AlchemicalWizardry.ritualDisabledGaia) r("AW017Gaia"); - if (AlchemicalWizardry.ritualDisabledCondor) r("AW018Condor"); - if (AlchemicalWizardry.ritualDisabledFallingTower) r("AW019FallingTower"); - if (AlchemicalWizardry.ritualDisabledBalladOfAlchemy) r("AW020BalladOfAlchemy"); - if (AlchemicalWizardry.ritualDisabledExpulsion) r("AW021Expulsion"); - if (AlchemicalWizardry.ritualDisabledSuppression) r("AW022Suppression"); - if (AlchemicalWizardry.ritualDisabledZephyr) r("AW023Zephyr"); - if (AlchemicalWizardry.ritualDisabledHarvest) r("AW024Harvest"); - if (AlchemicalWizardry.ritualDisabledConduit) r("AW025Conduit"); - if (AlchemicalWizardry.ritualDisabledEllipsoid) r("AW026Ellipsoid"); - if (AlchemicalWizardry.ritualDisabledEvaporation) r("AW027Evaporation"); - if (AlchemicalWizardry.ritualDisabledSpawnWard) r("AW028SpawnWard"); - if (AlchemicalWizardry.ritualDisabledVeilOfEvil) r("AW029VeilOfEvil"); - if (AlchemicalWizardry.ritualDisabledFullStomach) r("AW030FullStomach"); - if (AlchemicalWizardry.ritualDisabledConvocation) r("AW031Convocation"); - if (AlchemicalWizardry.ritualDisabledSymmetry) r("AW032Symmetry"); - if (AlchemicalWizardry.ritualDisabledStalling) r("AW033Stalling"); - if (AlchemicalWizardry.ritualDisabledCrafting) r("AW034Crafting"); - if (AlchemicalWizardry.ritualDisabledPhantomHands) r("AW035PhantomHands"); - if (AlchemicalWizardry.ritualDisabledSphereIsland) r("AW036SphereIsland"); - } - - private static void r(String ritualID) - { - Rituals.ritualMap.remove(ritualID); - Rituals.keyList.remove(ritualID); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/ModBlocks.java b/src/main/java/WayofTime/alchemicalWizardry/ModBlocks.java deleted file mode 100644 index a3f6e5c6..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/ModBlocks.java +++ /dev/null @@ -1,201 +0,0 @@ -package WayofTime.alchemicalWizardry; - -import WayofTime.alchemicalWizardry.client.BlockRenderer; -import net.minecraft.block.Block; -import net.minecraft.item.ItemBlock; -import net.minecraftforge.fml.common.registry.GameRegistry; -import WayofTime.alchemicalWizardry.common.block.BlockArmourForge; -import WayofTime.alchemicalWizardry.common.block.BlockAlchemicalCalcinator; -import WayofTime.alchemicalWizardry.common.block.BlockAltar; -import WayofTime.alchemicalWizardry.common.block.BlockBelljar; -import WayofTime.alchemicalWizardry.common.block.BlockBloodLightSource; -import WayofTime.alchemicalWizardry.common.block.BlockConduit; -import WayofTime.alchemicalWizardry.common.block.BlockIncenseCrucible; -import WayofTime.alchemicalWizardry.common.block.BlockCrystal; -import WayofTime.alchemicalWizardry.common.block.BlockDemonPortal; -import WayofTime.alchemicalWizardry.common.block.BlockEnchantmentGlyph; -import WayofTime.alchemicalWizardry.common.block.BlockSpellTable; -import WayofTime.alchemicalWizardry.common.block.BlockMasterStone; -import WayofTime.alchemicalWizardry.common.block.BlockPedestal; -import WayofTime.alchemicalWizardry.common.block.BlockPlinth; -import WayofTime.alchemicalWizardry.common.block.BlockReagentConduit; -import WayofTime.alchemicalWizardry.common.block.BlockSchematicSaver; -import WayofTime.alchemicalWizardry.common.block.BlockFilledSocket; -import WayofTime.alchemicalWizardry.common.block.BlockSpectralContainer; -import WayofTime.alchemicalWizardry.common.block.BlockSpellEffect; -import WayofTime.alchemicalWizardry.common.block.BlockSpellEnhancement; -import WayofTime.alchemicalWizardry.common.block.BlockSpellModifier; -import WayofTime.alchemicalWizardry.common.block.BlockSpellParadigm; -import WayofTime.alchemicalWizardry.common.block.BlockStabilityGlyph; -import WayofTime.alchemicalWizardry.common.block.BlockTeleposer; -import WayofTime.alchemicalWizardry.common.block.BlockChemistrySet; -import WayofTime.alchemicalWizardry.common.block.BlockBloodRune; -import WayofTime.alchemicalWizardry.common.block.BlockBloodStoneBrick; -import WayofTime.alchemicalWizardry.common.block.BlockEfficiencyRune; -import WayofTime.alchemicalWizardry.common.block.BlockEmptySocket; -import WayofTime.alchemicalWizardry.common.block.BlockImperfectRitualStone; -import WayofTime.alchemicalWizardry.common.block.BlockLargeBloodStoneBrick; -import WayofTime.alchemicalWizardry.common.block.BlockLifeEssence; -import WayofTime.alchemicalWizardry.common.block.BlockMimic; -import WayofTime.alchemicalWizardry.common.block.BlockRitualStone; -import WayofTime.alchemicalWizardry.common.block.BlockRuneOfSacrifice; -import WayofTime.alchemicalWizardry.common.block.BlockRuneOfSelfSacrifice; -import WayofTime.alchemicalWizardry.common.block.BlockSpectral; -import WayofTime.alchemicalWizardry.common.block.BlockSpeedRune; -import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.BlockDemonChest; -import WayofTime.alchemicalWizardry.common.items.ItemBlockCrystalBelljar; -import WayofTime.alchemicalWizardry.common.items.ItemBloodRuneBlock; -import WayofTime.alchemicalWizardry.common.items.ItemCrystalBlock; -import WayofTime.alchemicalWizardry.common.items.ItemEnchantmentGlyphBlock; -import WayofTime.alchemicalWizardry.common.items.ItemSpellEffectBlock; -import WayofTime.alchemicalWizardry.common.items.ItemSpellEnhancementBlock; -import WayofTime.alchemicalWizardry.common.items.ItemSpellModifierBlock; -import WayofTime.alchemicalWizardry.common.items.ItemSpellParadigmBlock; -import WayofTime.alchemicalWizardry.common.items.ItemStabilityGlyphBlock; - -import java.util.ArrayList; - -/** - * Created with IntelliJ IDEA. - * User: Pokefenn - * Date: 17/01/14 - * Time: 19:48 - */ -public class ModBlocks -{ - public static Block bloodStoneBrick; - public static Block largeBloodStoneBrick; - public static BlockAltar blockAltar; - public static BlockBloodRune bloodRune; - public static BlockSpeedRune speedRune; - public static BlockEfficiencyRune efficiencyRune; - public static BlockRuneOfSacrifice runeOfSacrifice; - public static BlockRuneOfSelfSacrifice runeOfSelfSacrifice; - public static Block blockMasterStone; - public static Block ritualStone; - public static Block imperfectRitualStone; - public static Block bloodSocket; - public static Block emptySocket; - public static Block armourForge; - public static Block blockWritingTable; - public static Block blockSpellTable; - public static Block blockPedestal; - public static Block blockPlinth; - public static Block blockLifeEssence; - public static Block blockTeleposer; - public static Block spectralBlock; - public static Block blockConduit; - public static Block blockBloodLight; - public static Block blockSpellEffect; - public static Block blockSpellParadigm; - public static Block blockSpellModifier; - public static Block blockSpellEnhancement; - public static Block blockSpectralContainer; - public static Block blockBuildingSchematicSaver; - public static Block blockDemonPortal; - public static Block blockReagentConduit; - public static Block blockAlchemicalCalcinator; - public static Block blockCrystalBelljar; - public static Block blockDemonChest; - public static Block blockCrystal; - public static Block blockMimic; - public static Block blockEnchantmentGlyph; - public static Block blockStabilityGlyph; - public static Block blockCrucible; - - public static ArrayList blocksNotToBeRegistered = new ArrayList(); - - public static void init() - { -/* blockAltar = (BlockAltar) registerBlock(new BlockAltar(), "altar"); - bloodRune = (BlockBloodRune) registerBlock(new BlockBloodRune(), ItemBloodRuneBlock.class, "base_rune"); - speedRune = (BlockSpeedRune) registerBlock(new BlockSpeedRune(), "speed_rune"); - efficiencyRune = (BlockEfficiencyRune) registerBlock(new BlockEfficiencyRune(), "efficiency_rune"); - runeOfSacrifice = (BlockRuneOfSacrifice) registerBlock(new BlockRuneOfSacrifice(), "sacrifice_rune"); - runeOfSelfSacrifice = (BlockRuneOfSelfSacrifice) registerBlock(new BlockRuneOfSelfSacrifice(), "self_sacrifice_rune"); - */ blockTeleposer = registerBlock(new BlockTeleposer(), "teleposer"); - spectralBlock = registerBlock(new BlockSpectral(), "spectral_block"); - ritualStone = registerBlock(new BlockRitualStone(), "ritual_stone"); - blockMasterStone = registerBlock(new BlockMasterStone(), "master_ritual_stone"); - imperfectRitualStone = registerBlock(new BlockImperfectRitualStone(), "imperfect_ritual_stone"); - emptySocket = registerBlock(new BlockEmptySocket(), "empty_socket"); - bloodSocket = registerBlock(new BlockFilledSocket(), "filled_socket"); - armourForge = registerBlock(new BlockArmourForge(), "soul_armour_forge"); - largeBloodStoneBrick = registerBlock(new BlockLargeBloodStoneBrick(), "large_bloodstone_brick"); - bloodStoneBrick = registerBlock(new BlockBloodStoneBrick(), "bloodstone_brick"); - blockWritingTable = registerBlock(new BlockChemistrySet(), "chemistry_set"); - blockSpellTable = registerBlock(new BlockSpellTable(), "spell_table"); - blockPedestal = registerBlock(new BlockPedestal(), "pedestal"); - blockPlinth = registerBlock(new BlockPlinth(), "plinth"); - blockConduit = registerBlock(new BlockConduit(), "spell_conduit"); - blockBloodLight = registerBlock(new BlockBloodLightSource(), "blood_light"); - blockSpellEffect = registerBlock(new BlockSpellEffect(), "spell_effect"); - blockSpellParadigm = registerBlock(new BlockSpellParadigm(), ItemSpellParadigmBlock.class, "spell_paradigm"); - blockSpellModifier = registerBlock(new BlockSpellModifier(), ItemSpellEnhancementBlock.class, "spell_modifier"); - blockSpellEnhancement = registerBlock(new BlockSpellEnhancement(), ItemSpellModifierBlock.class, "spell_enhancement"); - blockSpectralContainer = registerBlock(new BlockSpectralContainer(), ItemSpellEffectBlock.class, "spectral_container"); - blockDemonPortal = registerBlock(new BlockDemonPortal(), "demon_portal"); - blockBuildingSchematicSaver = registerBlock(new BlockSchematicSaver(), "schematic_saver"); - blockReagentConduit = registerBlock(new BlockReagentConduit(), "reagent_conduit"); - blockAlchemicalCalcinator = registerBlock(new BlockAlchemicalCalcinator(), "alchemical_calcinator"); - blockCrystalBelljar = registerBlock(new BlockBelljar(), ItemBlockCrystalBelljar.class, "belljar"); - blockDemonChest = registerBlock(new BlockDemonChest(), "demon_chest"); - blockCrystal = registerBlock(new BlockCrystal(), ItemCrystalBlock.class, "crystal_block"); - blockMimic = registerBlock(new BlockMimic(), "mimic_block"); - - blockLifeEssence = registerBlock(new BlockLifeEssence(), "life_essence"); - blockEnchantmentGlyph = registerBlock(new BlockEnchantmentGlyph(), ItemEnchantmentGlyphBlock.class, "enchantment_glyph"); - blockStabilityGlyph = registerBlock(new BlockStabilityGlyph(), ItemStabilityGlyphBlock.class, "stability_glyph"); - blockCrucible = registerBlock(new BlockIncenseCrucible(), "incense_crucible"); - } - - public static Block registerBlock(Block block, String unlocalizedName) - { - //TODO Insert Model Code here - block.setUnlocalizedName(unlocalizedName); - -// if (!) //creative tab blacklist - { - block.setCreativeTab(AlchemicalWizardry.tabBloodMagic); - } - -// blocksNotToBeRegistered.clear(); -// for (String unlocName : BloodMagicConfiguration.blocksToBeDisabled) - { -// if (unlocName.equals(unlocalizedName)) - { -// blocksNotToBeRegistered.add(unlocName); - } - } - // if (!blocksNotToBeRegistered.contains(unlocalizedName)) - { -// GameRegistry.registerBlock(block, unlocalizedName); - } - -// BlockRenderer.registerBlock(block); - - GameRegistry.registerBlock(block, unlocalizedName); - return block; - } - - public static Block registerBlock(Block block, Class itemBlockClass, String unlocalizedName) - { - block.setCreativeTab(AlchemicalWizardry.tabBloodMagic); - -// for (String unlocName : BloodMagicConfiguration.blocksToBeDisabled) - { -// if (unlocName.equals(unlocalizedName)) - { -// blocksNotToBeRegistered.add(unlocName); - } - } -// if (!blocksNotToBeRegistered.contains(unlocalizedName)) - { - GameRegistry.registerBlock(block, itemBlockClass, unlocalizedName); - } - -// BlockRenderer.registerBlock(block); - - return block; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/ModItems.java b/src/main/java/WayofTime/alchemicalWizardry/ModItems.java deleted file mode 100644 index edfcf081..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/ModItems.java +++ /dev/null @@ -1,404 +0,0 @@ -package WayofTime.alchemicalWizardry; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraftforge.fml.common.registry.GameRegistry; -import WayofTime.alchemicalWizardry.api.items.ItemSpellMultiTool; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmTool; -import WayofTime.alchemicalWizardry.common.items.BaseItems; -import WayofTime.alchemicalWizardry.common.items.ActivationCrystal; -import WayofTime.alchemicalWizardry.common.items.AirScribeTool; -import WayofTime.alchemicalWizardry.common.items.ApprenticeBloodOrb; -import WayofTime.alchemicalWizardry.common.items.ArchmageBloodOrb; -import WayofTime.alchemicalWizardry.common.items.ArmourInhibitor; -import WayofTime.alchemicalWizardry.common.items.BlankSpell; -import WayofTime.alchemicalWizardry.common.items.BloodShard; -import WayofTime.alchemicalWizardry.common.items.BoundAxe; -import WayofTime.alchemicalWizardry.common.items.BoundPickaxe; -import WayofTime.alchemicalWizardry.common.items.BoundShovel; -import WayofTime.alchemicalWizardry.common.items.CreativeOrb; -import WayofTime.alchemicalWizardry.common.items.CreativeDagger; -import WayofTime.alchemicalWizardry.common.items.DaggerOfSacrifice; -import WayofTime.alchemicalWizardry.common.items.DawnScribeTool; -import WayofTime.alchemicalWizardry.common.items.DemonCrystal; -import WayofTime.alchemicalWizardry.common.items.DemonicTelepositionFocus; -import WayofTime.alchemicalWizardry.common.items.DuskScribeTool; -import WayofTime.alchemicalWizardry.common.items.EarthScribeTool; -import WayofTime.alchemicalWizardry.common.items.Orb; -import WayofTime.alchemicalWizardry.common.items.EnergyBazooka; -import WayofTime.alchemicalWizardry.common.items.EnergyBlaster; -import WayofTime.alchemicalWizardry.common.items.BoundBlade; -import WayofTime.alchemicalWizardry.common.items.EnhancedTelepositionFocus; -import WayofTime.alchemicalWizardry.common.items.FireScribeTool; -import WayofTime.alchemicalWizardry.common.items.ItemAlchemyBase; -import WayofTime.alchemicalWizardry.common.items.ItemBloodLetterPack; -import WayofTime.alchemicalWizardry.common.items.ItemComplexSpellCrystal; -import WayofTime.alchemicalWizardry.common.items.ItemComponents; -import WayofTime.alchemicalWizardry.common.items.KeyOfBinding; -import WayofTime.alchemicalWizardry.common.items.ItemIncense; -import WayofTime.alchemicalWizardry.common.items.ItemRitualDismantler; -import WayofTime.alchemicalWizardry.common.items.ItemRitualDiviner; -import WayofTime.alchemicalWizardry.common.items.LavaCrystal; -import WayofTime.alchemicalWizardry.common.items.LifeBucket; -import WayofTime.alchemicalWizardry.common.items.MagicianBloodOrb; -import WayofTime.alchemicalWizardry.common.items.MasterBloodOrb; -import WayofTime.alchemicalWizardry.common.items.ReinforcedTelepositionFocus; -import WayofTime.alchemicalWizardry.common.items.SacrificialDagger; -import WayofTime.alchemicalWizardry.common.items.TelepositionFocus; -import WayofTime.alchemicalWizardry.common.items.TranscendentBloodOrb; -import WayofTime.alchemicalWizardry.common.items.WaterScribeTool; -import WayofTime.alchemicalWizardry.common.items.armour.BoundArmour; -import WayofTime.alchemicalWizardry.common.items.armour.OmegaArmourEarth; -import WayofTime.alchemicalWizardry.common.items.armour.OmegaArmourFire; -import WayofTime.alchemicalWizardry.common.items.armour.OmegaArmourWater; -import WayofTime.alchemicalWizardry.common.items.armour.OmegaArmourWind; -import WayofTime.alchemicalWizardry.common.items.energy.AlchemicalRouter; -import WayofTime.alchemicalWizardry.common.items.energy.AlchemicalCleanser; -import WayofTime.alchemicalWizardry.common.items.energy.AlchemicalSegmenter; -import WayofTime.alchemicalWizardry.common.items.potion.AlchemyFlask; -import WayofTime.alchemicalWizardry.common.items.potion.AlchemyReagent; -import WayofTime.alchemicalWizardry.common.items.potion.AverageLengtheningCatalyst; -import WayofTime.alchemicalWizardry.common.items.potion.AveragePowerCatalyst; -import WayofTime.alchemicalWizardry.common.items.potion.CombinationalCatalyst; -import WayofTime.alchemicalWizardry.common.items.potion.EnhancedFillingAgent; -import WayofTime.alchemicalWizardry.common.items.potion.GreaterLengtheningCatalyst; -import WayofTime.alchemicalWizardry.common.items.potion.GreaterPowerCatalyst; -import WayofTime.alchemicalWizardry.common.items.potion.MundaneLengtheningCatalyst; -import WayofTime.alchemicalWizardry.common.items.potion.MundanePowerCatalyst; -import WayofTime.alchemicalWizardry.common.items.potion.StandardBindingAgent; -import WayofTime.alchemicalWizardry.common.items.potion.StandardFillingAgent; -import WayofTime.alchemicalWizardry.common.items.potion.WeakBindingAgent; -import WayofTime.alchemicalWizardry.common.items.potion.WeakFillingAgent; -import WayofTime.alchemicalWizardry.common.items.routing.InputRoutingFocus; -import WayofTime.alchemicalWizardry.common.items.routing.OutputRoutingFocus; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilAir; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilBloodLight; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilDivination; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilFluid; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilHarvest; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilLava; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilOfElementalAffinity; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilOfEnderSeverance; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilOfGrowth; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilOfHaste; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilOfMagnetism; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilOfSupression; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilOfTheAssassin; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilOfTheBridge; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilOfTheFastMiner; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilOfWind; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilCompress; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilSeer; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilVoid; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilWater; -import WayofTime.alchemicalWizardry.common.items.sigil.holding.SigilOfHolding; - -import java.util.ArrayList; - -/** - * Created with IntelliJ IDEA. - * User: Pokefenn - * Date: 17/01/14 - * Time: 19:48 - */ -public class ModItems -{ - public static Item weakBloodOrb; - public static Item apprenticeBloodOrb; - public static Item magicianBloodOrb; - public static Item energyBlaster; - public static Item energySword; - public static Item lavaCrystal; - public static Item waterSigil; - public static Item lavaSigil; - public static Item voidSigil; - public static Item blankSlate; - public static Item reinforcedSlate; - public static Item sacrificialDagger; - public static Item daggerOfSacrifice; - public static Item airSigil; - public static Item sigilOfTheFastMiner; - public static Item sigilOfElementalAffinity; - public static Item sigilOfHaste; - public static Item sigilOfHolding; - public static Item divinationSigil; - public static Item waterScribeTool; - public static Item fireScribeTool; - public static Item earthScribeTool; - public static Item airScribeTool; - public static Item dawnScribeTool; - public static Item activationCrystal; - public static Item boundPickaxe; - public static Item boundAxe; - public static Item boundShovel; - public static Item boundHelmet; - public static Item boundChestplate; - public static Item boundLeggings; - public static Item boundBoots; - public static Item weakBloodShard; - public static Item growthSigil; - public static Item blankSpell; - public static Item masterBloodOrb; - public static Item alchemyFlask; - public static Item standardBindingAgent; - public static Item mundanePowerCatalyst; - public static Item averagePowerCatalyst; - public static Item greaterPowerCatalyst; - public static Item mundaneLengtheningCatalyst; - public static Item averageLengtheningCatalyst; - public static Item greaterLengtheningCatalyst; - public static Item incendium; - public static Item magicales; - public static Item sanctus; - public static Item aether; - public static Item simpleCatalyst; - public static Item crepitous; - public static Item crystallos; - public static Item terrae; - public static Item aquasalus; - public static Item tennebrae; - public static Item demonBloodShard; - public static Item archmageBloodOrb; - public static Item sigilOfWind; - public static Item telepositionFocus; - public static Item enhancedTelepositionFocus; - public static Item reinforcedTelepositionFocus; - public static Item demonicTelepositionFocus; - public static Item imbuedSlate; - public static Item demonicSlate; - public static Item duskScribeTool; - public static Item sigilOfTheBridge; - public static Item armourInhibitor; - public static Item creativeFiller; - public static Item demonPlacer; - public static Item creativeDagger; - - public static Item baseItems; - public static Item baseAlchemyItems; - - public static Item weakFillingAgent; - public static Item standardFillingAgent; - public static Item enhancedFillingAgent; - public static Item weakBindingAgent; - public static Item itemRitualDiviner; - public static Item sanguineHelmet; - public static Item sanguineRobe; - public static Item sanguinePants; - public static Item sanguineBoots; - public static Item focusBloodBlast; - public static Item focusGravityWell; - public static Item sigilOfMagnetism; - public static Item itemKeyOfDiablo; - public static Item energyBazooka; - public static Item itemBloodLightSigil; - public static Item itemComplexSpellCrystal; - public static Item itemBloodFrame; - - public static Item itemSigilOfEnderSeverance; - public static Item itemSigilOfSupression; - public static Item itemFluidSigil; - public static Item itemSeerSigil; - public static Item itemCombinationalCatalyst; - - public static ItemSpellMultiTool customTool; - - public static Item itemAttunedCrystal; - public static Item itemTankSegmenter; - public static Item itemDestinationClearer; - - public static Item itemHarvestSigil; - public static Item itemCompressionSigil; - - public static Item bucketLife; - - public static Item itemBloodPack; - - public static Item transcendentBloodOrb; - public static Item itemAssassinSigil; - - public static Item boundHelmetWater; - public static Item boundChestplateWater; - public static Item boundLeggingsWater; - public static Item boundBootsWater; - - public static Item boundHelmetEarth; - public static Item boundChestplateEarth; - public static Item boundLeggingsEarth; - public static Item boundBootsEarth; - - public static Item boundHelmetWind; - public static Item boundChestplateWind; - public static Item boundLeggingsWind; - public static Item boundBootsWind; - - public static Item boundHelmetFire; - public static Item boundChestplateFire; - public static Item boundLeggingsFire; - public static Item boundBootsFire; - - public static Item inputRoutingFocus; - public static Item outputRoutingFocus; - - public static Item itemMailCatalogue; - - public static Item itemIncense; - - public static Item ritualDismantler; - - public static ArrayList itemsNotToBeRegistered = new ArrayList(); - - public static void init() - { - weakBloodOrb = registerItem(new Orb(5000), "weak_blood_orb"); - apprenticeBloodOrb = registerItem(new ApprenticeBloodOrb(25000), "apprentice_blood_orb"); - magicianBloodOrb = registerItem(new MagicianBloodOrb(150000), "magician_blood_orb"); - masterBloodOrb = registerItem(new MasterBloodOrb(1000000), "master_blood_orb"); - archmageBloodOrb = registerItem(new ArchmageBloodOrb(10000000), "archmage_blood_orb"); - transcendentBloodOrb = registerItem(new TranscendentBloodOrb(30000000), "transcendent_blood_orb"); - energyBlaster = registerItem(new EnergyBlaster(), "energy_blaster"); - energySword = registerItem(new BoundBlade(), "bound_blade"); - lavaCrystal = registerItem(new LavaCrystal(), "lava_crystal"); - waterSigil = registerItem(new SigilWater(), "water_sigil"); - lavaSigil = registerItem(new SigilLava(), "lava_sigil"); - voidSigil = registerItem(new SigilVoid(), "void_sigil"); - blankSlate = registerItem(new BaseItems(), "blank_slate"); - reinforcedSlate = registerItem(new BaseItems(), "reinforced_slate"); - sacrificialDagger = registerItem(new SacrificialDagger(), "sacrificial_agger"); - daggerOfSacrifice = registerItem(new DaggerOfSacrifice(), "dagger_of_sacrifice"); - airSigil = registerItem(new SigilAir(), "air_sigil"); - sigilOfTheFastMiner = registerItem(new SigilOfTheFastMiner(), "sigil_of_the_fast_miner"); - sigilOfElementalAffinity = registerItem(new SigilOfElementalAffinity(), "sigil_of_elemental_affinity"); - sigilOfHaste = registerItem(new SigilOfHaste(), "sigil_of_haste"); - sigilOfHolding = registerItem(new SigilOfHolding(), "sigil_of_holding"); - divinationSigil = registerItem(new SigilDivination(), "divination_sigil"); - waterScribeTool = registerItem(new WaterScribeTool(), "water_scribe_tool"); - fireScribeTool = registerItem(new FireScribeTool(), "fire_scribe_tool"); - earthScribeTool = registerItem(new EarthScribeTool(), "earth_scribe_tool"); - airScribeTool = registerItem(new AirScribeTool(), "air_scribe_tool"); - activationCrystal = registerItem(new ActivationCrystal(), "activation_crystal"); - boundPickaxe = registerItem(new BoundPickaxe(), "bound_pickaxe"); - boundAxe = registerItem(new BoundAxe(), "bound_axe"); - boundShovel = registerItem(new BoundShovel(), "bound_shovel"); - boundHelmet = registerItem(new BoundArmour(0), "bound_helmet"); - boundChestplate = registerItem(new BoundArmour(1), "bound_chestplate"); - boundLeggings = registerItem(new BoundArmour(2), "bound_leggings"); - boundBoots = registerItem(new BoundArmour(3), "bound_boots"); - weakBloodShard = registerItem(new BloodShard(), "weak_blood_shard"); - growthSigil = registerItem(new SigilOfGrowth(), "growth_sigil"); - blankSpell = registerItem(new BlankSpell(), "blank_spell"); - alchemyFlask = registerItem(new AlchemyFlask(), "alchemy_flask"); - standardBindingAgent = registerItem(new StandardBindingAgent(), "standard_binding_agent"); - mundanePowerCatalyst = registerItem(new MundanePowerCatalyst(), "mundane_power_catalyst"); - averagePowerCatalyst = registerItem(new AveragePowerCatalyst(), "average_power_catalyst"); - greaterPowerCatalyst = registerItem(new GreaterPowerCatalyst(), "greater_power_catalyst"); - mundaneLengtheningCatalyst = registerItem(new MundaneLengtheningCatalyst(), "mundane_lengthening_catalyst"); - averageLengtheningCatalyst = registerItem(new AverageLengtheningCatalyst(), "average_lengthening_catalyst"); - greaterLengtheningCatalyst = registerItem(new GreaterLengtheningCatalyst(), "greater_lengthening_catalyst"); - incendium = registerItem(new AlchemyReagent(), "incendium"); - magicales = registerItem(new AlchemyReagent(), "magicales"); - sanctus = registerItem(new AlchemyReagent(), "sanctus"); - aether = registerItem(new AlchemyReagent(), "aether"); - simpleCatalyst = registerItem(new AlchemyReagent(), "simple_catalyst"); - crepitous = registerItem(new AlchemyReagent(), "crepitous"); - crystallos = registerItem(new AlchemyReagent(), "crystallos"); - terrae = registerItem(new AlchemyReagent(), "terrae"); - aquasalus = registerItem(new AlchemyReagent(), "aquasalus"); - tennebrae = registerItem(new AlchemyReagent(), "tennebrae"); - demonBloodShard = registerItem(new BloodShard(), "demon_blood_shard"); - sigilOfWind = registerItem(new SigilOfWind(), "sigil_of_wind"); - telepositionFocus = registerItem(new TelepositionFocus(1), "teleposition_focus"); - enhancedTelepositionFocus = registerItem(new EnhancedTelepositionFocus(), "enhanced_teleposition_focus"); - reinforcedTelepositionFocus = registerItem(new ReinforcedTelepositionFocus(), "reinforced_teleposition_focus"); - demonicTelepositionFocus = registerItem(new DemonicTelepositionFocus(), "demonic_teleposition_focus"); - imbuedSlate = registerItem(new BaseItems(), "imbued_slate"); - demonicSlate = registerItem(new BaseItems(), "demonic_slate"); - duskScribeTool = registerItem(new DuskScribeTool(), "dusk_scribe_tool"); - sigilOfTheBridge = registerItem(new SigilOfTheBridge(), "sigil_of_the_bridge"); - armourInhibitor = registerItem(new ArmourInhibitor(), "armour_inhibitor"); - creativeFiller = registerItem(new CreativeOrb(), "creative_orb"); - demonPlacer = registerItem(new DemonCrystal(), "demon_crystal"); - creativeDagger = registerItem(new CreativeDagger(), "creative_dagger"); - weakFillingAgent = registerItem(new WeakFillingAgent(), "weak_filling_agent"); - standardFillingAgent = registerItem(new StandardFillingAgent(), "standard_filling_agent"); - enhancedFillingAgent = registerItem(new EnhancedFillingAgent(), "enhanced_filling_agent"); - weakBindingAgent = registerItem(new WeakBindingAgent(), "weak_binding_agent"); - itemRitualDiviner = registerItem(new ItemRitualDiviner(), "ritual_diviner"); - sigilOfMagnetism = registerItem(new SigilOfMagnetism(), "sigil_of_magnetism"); - itemKeyOfDiablo = registerItem(new KeyOfBinding(), "key_of_binding"); - energyBazooka = registerItem(new EnergyBazooka(), "energy_bazooka"); - itemBloodLightSigil = registerItem(new SigilBloodLight(), "blood_light_sigil"); - itemComplexSpellCrystal = registerItem(new ItemComplexSpellCrystal(), "complex_spell_crystal"); - bucketLife = registerItem(new LifeBucket(ModBlocks.blockLifeEssence), "bucket_life").setContainerItem(Items.bucket).setCreativeTab(CreativeTabs.tabMisc); - itemSigilOfEnderSeverance = registerItem(new SigilOfEnderSeverance(), "sigil_of_ender_severance"); - baseItems = registerItem(new ItemComponents(), "base_items"); - baseAlchemyItems = registerItem(new ItemAlchemyBase(), "base_alchemy_items"); - itemSigilOfSupression = registerItem(new SigilOfSupression(), "sigil_of_suppression"); - itemFluidSigil = registerItem(new SigilFluid(), "fluid_sigil"); - itemSeerSigil = registerItem(new SigilSeer(), "sigil_of_sight"); - customTool = (ItemSpellMultiTool) registerItem(new ItemSpellMultiTool(), "multi_tool"); - - SpellParadigmTool.customTool = customTool; - - itemCombinationalCatalyst = registerItem(new CombinationalCatalyst(), "combinational_catalyst"); - itemAttunedCrystal = registerItem(new AlchemicalRouter(), "alchemical_router"); - itemTankSegmenter = registerItem(new AlchemicalSegmenter(), "alchemical_segmenter"); - itemDestinationClearer = registerItem(new AlchemicalCleanser(), "alchemical_cleanser"); - - dawnScribeTool = registerItem(new DawnScribeTool(), "dawn_scribe_tool"); - - itemBloodPack = registerItem(new ItemBloodLetterPack(), "blood_pack"); - itemHarvestSigil = registerItem(new SigilHarvest(), "harvest_sigil"); - itemCompressionSigil = registerItem(new SigilCompress(), "compression_sigil"); - itemAssassinSigil = registerItem(new SigilOfTheAssassin(), "assassin_sigil"); - - boundHelmetWater = registerItem(new OmegaArmourWater(0), "bound_helmet_water"); - boundChestplateWater = registerItem(new OmegaArmourWater(1), "bound_chestplate_water"); - boundLeggingsWater = registerItem(new OmegaArmourWater(2), "bound_leggings_water"); - boundBootsWater = registerItem(new OmegaArmourWater(3), "bound_boots_water"); - - boundHelmetEarth = registerItem(new OmegaArmourEarth(0), "bound_helmet_earth"); - boundChestplateEarth = registerItem(new OmegaArmourEarth(1), "bound_chestplate_earth"); - boundLeggingsEarth = registerItem(new OmegaArmourEarth(2), "bound_leggings_earth"); - boundBootsEarth = registerItem(new OmegaArmourEarth(3), "bound_boots_earth"); - - boundHelmetWind = registerItem(new OmegaArmourWind(0), "bound_helmet_wind"); - boundChestplateWind = registerItem(new OmegaArmourWind(1), "bound_chestplate_wind"); - boundLeggingsWind = registerItem(new OmegaArmourWind(2), "bound_leggings_wind"); - boundBootsWind = registerItem(new OmegaArmourWind(3), "bound_boots_wind"); - - boundHelmetFire = registerItem(new OmegaArmourFire(0), "bound_helmet_fire"); - boundChestplateFire = registerItem(new OmegaArmourFire(1), "bound_chestplate_fire"); - boundLeggingsFire = registerItem(new OmegaArmourFire(2), "bound_leggings_fire"); - boundBootsFire = registerItem(new OmegaArmourFire(3), "bound_boots_fire"); - - inputRoutingFocus = registerItem(new InputRoutingFocus(), "input_routing_focus"); - outputRoutingFocus = registerItem(new OutputRoutingFocus(), "output_routing_focus"); - - itemIncense = registerItem(new ItemIncense(), "incense"); - - ritualDismantler = registerItem(new ItemRitualDismantler(), "ritual_dismantler"); - } - - public static Item registerItem(Item item, String unlocalizedName) - { - item.setUnlocalizedName(unlocalizedName); - item.setCreativeTab(AlchemicalWizardry.tabBloodMagic); -// itemsNotToBeRegistered.clear(); - -// for (String unlocName : BloodMagicConfiguration.itemsToBeDisabled) - { -// if (unlocName.equals(unlocalizedName)) - { -// itemsNotToBeRegistered.add(unlocName); - } - } - -// if (!itemsNotToBeRegistered.contains(unlocalizedName)) - { - GameRegistry.registerItem(item, unlocalizedName); - } - - return item; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/ColourAndCoords.java b/src/main/java/WayofTime/alchemicalWizardry/api/ColourAndCoords.java deleted file mode 100644 index d34dd413..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/ColourAndCoords.java +++ /dev/null @@ -1,45 +0,0 @@ -package WayofTime.alchemicalWizardry.api; - -import net.minecraft.nbt.NBTTagCompound; - -public class ColourAndCoords -{ - public int colourRed; - public int colourGreen; - public int colourBlue; - public int colourIntensity; - - public int xCoord; - public int yCoord; - public int zCoord; - - public ColourAndCoords(int red, int green, int blue, int intensity, int x, int y, int z) - { - this.colourRed = red; - this.colourGreen = green; - this.colourBlue = blue; - this.colourIntensity = intensity; - - this.xCoord = x; - this.yCoord = y; - this.zCoord = z; - } - - public static ColourAndCoords readFromNBT(NBTTagCompound tag) - { - return new ColourAndCoords(tag.getInteger("colourRed"), tag.getInteger("colourGreen"), tag.getInteger("colourBlue"), tag.getInteger("colourIntensity"), tag.getInteger("xCoord"), tag.getInteger("yCoord"), tag.getInteger("zCoord")); - } - - public NBTTagCompound writeToNBT(NBTTagCompound tag) - { - tag.setInteger("colourRed", colourRed); - tag.setInteger("colourGreen", colourGreen); - tag.setInteger("colourBlue", colourBlue); - tag.setInteger("colourIntensity", colourIntensity); - tag.setInteger("xCoord", xCoord); - tag.setInteger("yCoord", yCoord); - tag.setInteger("zCoord", zCoord); - - return tag; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/ILimitingLogic.java b/src/main/java/WayofTime/alchemicalWizardry/api/ILimitingLogic.java deleted file mode 100644 index 2d7a4912..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/ILimitingLogic.java +++ /dev/null @@ -1,6 +0,0 @@ -package WayofTime.alchemicalWizardry.api; - -public interface ILimitingLogic -{ - int getRoutingLimit(); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/Int3.java b/src/main/java/WayofTime/alchemicalWizardry/api/Int3.java deleted file mode 100644 index 7c8fa226..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/Int3.java +++ /dev/null @@ -1,49 +0,0 @@ -package WayofTime.alchemicalWizardry.api; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; - -public class Int3 -{ - public int xCoord; - public int yCoord; - public int zCoord; - - public Int3(BlockPos pos) - { - this(pos.getX(), pos.getY(), pos.getZ()); - } - - public Int3(int xCoord, int yCoord, int zCoord) - { - this.xCoord = xCoord; - this.yCoord = yCoord; - this.zCoord = zCoord; - } - - public static Int3 readFromNBT(NBTTagCompound tag) - { - return new Int3(tag.getInteger("xCoord"), tag.getInteger("yCoord"), tag.getInteger("zCoord")); - } - - public NBTTagCompound writeToNBT(NBTTagCompound tag) - { - tag.setInteger("xCoord", xCoord); - tag.setInteger("yCoord", yCoord); - tag.setInteger("zCoord", zCoord); - - return tag; - } - - @Override - public boolean equals(Object o) - { - return o instanceof Int3 ? ((Int3) o).xCoord == this.xCoord && ((Int3) o).yCoord == this.yCoord && ((Int3) o).zCoord == this.zCoord : false; - } - - @Override - public int hashCode() - { - return this.xCoord + this.yCoord << 8 + this.zCoord << 16; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogic.java b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogic.java deleted file mode 100644 index a3f0a3e1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogic.java +++ /dev/null @@ -1,16 +0,0 @@ -package WayofTime.alchemicalWizardry.api; - -import net.minecraft.item.ItemStack; - -public class RoutingFocusLogic -{ - public boolean getDefaultMatch(ItemStack keyStack, ItemStack checkedStack) - { - return (keyStack != null ? checkedStack != null && keyStack.getItem() == checkedStack.getItem() && (keyStack.getItem().getHasSubtypes() ? keyStack.getItemDamage() == checkedStack.getItemDamage() : true) : false); - } - - public boolean doesItemMatch(boolean previous, ItemStack keyStack, ItemStack checkedStack) - { - return previous || this.getDefaultMatch(keyStack, checkedStack); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusParadigm.java b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusParadigm.java deleted file mode 100644 index d77a2e1a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusParadigm.java +++ /dev/null @@ -1,64 +0,0 @@ -package WayofTime.alchemicalWizardry.api; - -import java.util.LinkedList; -import java.util.List; - -import net.minecraft.item.ItemStack; - -public class RoutingFocusParadigm -{ - public List logicList = new LinkedList(); - - public List locationList = new LinkedList(); - - public int maximumAmount = 0; - - public void addRoutingFocusPosAndFacing(RoutingFocusPosAndFacing facing) - { - locationList.add(facing); - } - - public void addLogic(RoutingFocusLogic logic) - { - if(logic instanceof ILimitingLogic) - { - maximumAmount += ((ILimitingLogic)logic).getRoutingLimit(); - } - logicList.add(logic); - } - - public boolean doesItemMatch(ItemStack keyStack, ItemStack checkedStack) - { - boolean isGood = false; - boolean isFirst = true; - for(RoutingFocusLogic logic : logicList) - { - if(isFirst) - { - isGood = logic.getDefaultMatch(keyStack, checkedStack); - isFirst = false; - continue; - } - isGood = logic.doesItemMatch(isGood, keyStack, checkedStack); - } - - return isGood; - } - - public void clear() - { - logicList.clear(); - locationList.clear(); - maximumAmount = 0; - } - - public void setMaximumAmount(int amt) - { - this.maximumAmount = amt; - } - - public int getMaximumAmount() - { - return this.maximumAmount; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusPosAndFacing.java b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusPosAndFacing.java deleted file mode 100644 index a49ffee1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusPosAndFacing.java +++ /dev/null @@ -1,21 +0,0 @@ -package WayofTime.alchemicalWizardry.api; - -import net.minecraft.util.EnumFacing; - -public class RoutingFocusPosAndFacing -{ - public Int3 location; - public EnumFacing facing; - - public RoutingFocusPosAndFacing(Int3 location, EnumFacing facing) - { - this.location = location; - this.facing = facing; - } - - @Override - public boolean equals(Object obj) - { - return obj instanceof RoutingFocusPosAndFacing ? facing.equals(((RoutingFocusPosAndFacing)obj).facing) && location.equals(((RoutingFocusPosAndFacing)obj).location) : false; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/Vector3.java b/src/main/java/WayofTime/alchemicalWizardry/api/Vector3.java deleted file mode 100644 index 645d97e6..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/Vector3.java +++ /dev/null @@ -1,45 +0,0 @@ -package WayofTime.alchemicalWizardry.api; - -/* - * Created in Scala by Alex-Hawks - * Translated and implemented by Arcaratus - */ -public class Vector3 -{ - public int x, y, z; - - public Vector3(int x, int y, int z) - { - this.x = x; - this.y = y; - this.z = z; - } - - public Vector3 add(Vector3 vec1) - { - return new Vector3(this.x + vec1.x, this.y + vec1.y, this.z + vec1.z); - } - - @Override - public String toString() - { - return "V3(" + x + "}, " + y + "}," + z + "})"; - } - - private boolean canEqual(Object object) - { - return object instanceof Vector3; - } - - @Override - public boolean equals(Object object) - { - return object == this || object instanceof Vector3 && canEqual(this) && this.x == ((Vector3) object).x && this.y == ((Vector3) object).y && this.z == ((Vector3) object).z; - } - - @Override - public int hashCode() - { - return 48131 * x - 95021 * y + z; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/AlchemicalPotionCreationHandler.java b/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/AlchemicalPotionCreationHandler.java deleted file mode 100644 index a6ca090d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/AlchemicalPotionCreationHandler.java +++ /dev/null @@ -1,79 +0,0 @@ -package WayofTime.alchemicalWizardry.api.alchemy; - -import net.minecraft.item.ItemStack; - -import java.util.ArrayList; - -public class AlchemicalPotionCreationHandler -{ - public static ArrayList registeredPotionEffects = new ArrayList(); - - public static void addPotion(ItemStack itemStack, int potionID, int tickDuration) - { - registeredPotionEffects.add(new AlchemyPotionHandlerComponent(itemStack, potionID, tickDuration)); - } - - public static int getPotionIDForStack(ItemStack itemStack) - { - for (AlchemyPotionHandlerComponent aphc : registeredPotionEffects) - { - if (aphc.compareItemStack(itemStack)) - { - return aphc.getPotionID(); - } - } - - return -1; - } - - public static int getPotionTickDurationForStack(ItemStack itemStack) - { - { - for (AlchemyPotionHandlerComponent aphc : registeredPotionEffects) - { - if (aphc.compareItemStack(itemStack)) - { - return aphc.getTickDuration(); - } - } - - return -1; - } - } - - public static boolean containsRegisteredPotionIngredient(ItemStack[] stackList) - { - for (ItemStack is : stackList) - { - for (AlchemyPotionHandlerComponent aphc : registeredPotionEffects) - { - if (aphc.compareItemStack(is)) - { - return true; - } - } - } - - return false; - } - - public static int getRegisteredPotionIngredientPosition(ItemStack[] stackList) - { - int i = 0; - - for (ItemStack is : stackList) - { - for (AlchemyPotionHandlerComponent aphc : registeredPotionEffects) - { - if (aphc.compareItemStack(is)) - { - return i; - } - } - - i++; - } - - return -1; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/AlchemyPotionHandlerComponent.java b/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/AlchemyPotionHandlerComponent.java deleted file mode 100644 index 6f0d461d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/AlchemyPotionHandlerComponent.java +++ /dev/null @@ -1,52 +0,0 @@ -package WayofTime.alchemicalWizardry.api.alchemy; - -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -public class AlchemyPotionHandlerComponent -{ - private ItemStack itemStack; - private int potionID; - private int tickDuration; - - public AlchemyPotionHandlerComponent(ItemStack itemStack, int potionID, int tickDuration) - { - this.itemStack = itemStack; - this.potionID = potionID; - this.tickDuration = tickDuration; - } - - public boolean compareItemStack(ItemStack comparedStack) - { - if (comparedStack != null && itemStack != null) - { - if (comparedStack.getItem() instanceof ItemBlock) - { - if (itemStack.getItem() instanceof ItemBlock) - { - return comparedStack.getItem().equals(itemStack.getItem()) && comparedStack.getItemDamage() == itemStack.getItemDamage(); - } - } else if (!(itemStack.getItem() instanceof ItemBlock)) - { - return comparedStack.getItem().equals(itemStack.getItem()) && comparedStack.getItemDamage() == itemStack.getItemDamage(); - } - } - - return false; - } - - public ItemStack getItemStack() - { - return itemStack; - } - - public int getPotionID() - { - return this.potionID; - } - - public int getTickDuration() - { - return this.tickDuration; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/AlchemyPotionHelper.java b/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/AlchemyPotionHelper.java deleted file mode 100644 index d3462552..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/AlchemyPotionHelper.java +++ /dev/null @@ -1,76 +0,0 @@ -package WayofTime.alchemicalWizardry.api.alchemy; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; - -public class AlchemyPotionHelper -{ - private int potionID; - private int tickDuration; - private int concentration; - private int durationFactor; - - public AlchemyPotionHelper(int potionID, int tickDuration, int concentration, int durationFactor) - { - this.potionID = potionID; - this.tickDuration = tickDuration; - this.concentration = concentration; - this.durationFactor = durationFactor; - } - - public void setConcentration(int concentration) - { - this.concentration = concentration; - } - - public void setDurationFactor(int durationFactor) - { - this.durationFactor = durationFactor; - } - - public int getPotionID() - { - return this.potionID; - } - - public int getTickDuration() - { - return this.tickDuration; - } - - public int getConcentration() - { - return this.concentration; - } - - public int getdurationFactor() - { - return this.durationFactor; - } - - public PotionEffect getPotionEffect() - { - if (potionID == Potion.heal.id || potionID == Potion.harm.id) - { - return (new PotionEffect(potionID, 1, concentration)); - } - - return (new PotionEffect(potionID, (int) (tickDuration * Math.pow(0.5f, concentration) * Math.pow(8.0f / 3.0f, durationFactor)), concentration)); - } - - public static AlchemyPotionHelper readEffectFromNBT(NBTTagCompound tagCompound) - { - return new AlchemyPotionHelper(tagCompound.getInteger("potionID"), tagCompound.getInteger("tickDuration"), tagCompound.getInteger("concentration"), tagCompound.getInteger("durationFactor")); - } - - public static NBTTagCompound setEffectToNBT(AlchemyPotionHelper aph) - { - NBTTagCompound tagCompound = new NBTTagCompound(); - tagCompound.setInteger("potionID", aph.getPotionID()); - tagCompound.setInteger("tickDuration", aph.getTickDuration()); - tagCompound.setInteger("concentration", aph.getConcentration()); - tagCompound.setInteger("durationFactor", aph.getdurationFactor()); - return tagCompound; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/AlchemyRecipe.java b/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/AlchemyRecipe.java deleted file mode 100644 index 17465b72..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/AlchemyRecipe.java +++ /dev/null @@ -1,143 +0,0 @@ -package WayofTime.alchemicalWizardry.api.alchemy; - -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; - -public class AlchemyRecipe -{ - private ItemStack output; - private ItemStack[] recipe; - private int bloodOrbLevel; - private int amountNeeded; - - public AlchemyRecipe(ItemStack output, int amountNeeded, ItemStack[] recipe, int bloodOrbLevel) - { - this.output = output; - this.recipe = recipe; - this.amountNeeded = amountNeeded; - this.bloodOrbLevel = bloodOrbLevel; - } - - public boolean doesRecipeMatch(ItemStack[] items, int slottedBloodOrbLevel) - { - if (slottedBloodOrbLevel < bloodOrbLevel) - { - return false; - } - - ItemStack[] recipe; - - if (items.length < 5) - { - return false; - } - - if (this.recipe.length != 5) - { - ItemStack[] newRecipe = new ItemStack[5]; - - for (int i = 0; i < 5; i++) - { - if (i + 1 > this.recipe.length) - { - newRecipe[i] = null; - } else - { - newRecipe[i] = this.recipe[i]; - } - } - - recipe = newRecipe; - } else - { - recipe = this.recipe; - } - - boolean[] checkList = new boolean[5]; - - for (int i = 0; i < 5; i++) - { - checkList[i] = false; - } - - for (int i = 0; i < 5; i++) - { - ItemStack recipeItemStack = recipe[i]; - - if (recipeItemStack == null) - { - continue; - } - - boolean test = false; - - for (int j = 0; j < 5; j++) - { - if (checkList[j]) - { - continue; - } - - ItemStack checkedItemStack = items[j]; - - if (checkedItemStack == null) - { - continue; - } - - boolean quickTest = false; - - if (recipeItemStack.getItem() instanceof ItemBlock) - { - if (checkedItemStack.getItem() instanceof ItemBlock) - { - quickTest = true; - } - } else if (!(checkedItemStack.getItem() instanceof ItemBlock)) - { - quickTest = true; - } - - if (!quickTest) - { - continue; - } - - if ((checkedItemStack.getItemDamage() == recipeItemStack.getItemDamage() || OreDictionary.WILDCARD_VALUE == recipeItemStack.getItemDamage()) && checkedItemStack.getItem() == recipeItemStack.getItem()) - { - test = true; - checkList[j] = true; - break; - } - } - - if (!test) - { - return false; - } - } - - return true; - } - - public ItemStack getResult() - { - return output.copy(); - } - - public int getAmountNeeded() - { - return this.amountNeeded; - } - - public ItemStack[] getRecipe() - { - return this.recipe; - } - - public int getOrbLevel() - { - return this.bloodOrbLevel; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/AlchemyRecipeRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/AlchemyRecipeRegistry.java deleted file mode 100644 index 99ad2868..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/AlchemyRecipeRegistry.java +++ /dev/null @@ -1,85 +0,0 @@ -package WayofTime.alchemicalWizardry.api.alchemy; - -import WayofTime.alchemicalWizardry.api.items.interfaces.IBloodOrb; -import net.minecraft.item.ItemStack; - -import java.util.ArrayList; -import java.util.List; - -public class AlchemyRecipeRegistry -{ - public static List recipes = new ArrayList(); - - public static void registerRecipe(ItemStack output, int amountNeeded, ItemStack[] recipe, int bloodOrbLevel) - { - recipes.add(new AlchemyRecipe(output, amountNeeded, recipe, bloodOrbLevel)); - } - - public static ItemStack getResult(ItemStack[] recipe, ItemStack bloodOrb) - { - if (bloodOrb == null) - { - return null; - } - - if (!(bloodOrb.getItem() instanceof IBloodOrb)) - { - return null; - } - - int bloodOrbLevel = ((IBloodOrb) bloodOrb.getItem()).getOrbLevel(); - - for (AlchemyRecipe ar : recipes) - { - if (ar.doesRecipeMatch(recipe, bloodOrbLevel)) - { - return (ar.getResult()); - } - } - - return null; - } - - public static int getAmountNeeded(ItemStack[] recipe, ItemStack bloodOrb) - { - if (bloodOrb == null) - { - return 0; - } - - if (!(bloodOrb.getItem() instanceof IBloodOrb)) - { - return 0; - } - - int bloodOrbLevel = ((IBloodOrb) bloodOrb.getItem()).getOrbLevel(); - - for (AlchemyRecipe ar : recipes) - { - if (ar.doesRecipeMatch(recipe, bloodOrbLevel)) - { - return (ar.getAmountNeeded()); - } - } - - return 0; - } - - public static ItemStack[] getRecipeForItemStack(ItemStack itemStack) - { - for (AlchemyRecipe ar : recipes) - { - ItemStack result = ar.getResult(); - - if (result != null) - { - if (result.isItemEqual(itemStack)) - { - return ar.getRecipe(); - } - } - } - - return null; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/IAlchemyGoggles.java b/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/IAlchemyGoggles.java deleted file mode 100644 index 3d6ca980..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/IAlchemyGoggles.java +++ /dev/null @@ -1,10 +0,0 @@ -package WayofTime.alchemicalWizardry.api.alchemy.energy; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public interface IAlchemyGoggles -{ - boolean showIngameHUD(World world, ItemStack stack, EntityPlayer player); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/IReagentContainer.java b/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/IReagentContainer.java deleted file mode 100644 index e4d4d9dc..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/IReagentContainer.java +++ /dev/null @@ -1,16 +0,0 @@ -package WayofTime.alchemicalWizardry.api.alchemy.energy; - -public interface IReagentContainer -{ - ReagentStack getReagent(); - - int getReagentStackAmount(); - - int getCapacity(); - - int fill(ReagentStack resource, boolean doFill); - - ReagentStack drain(int maxDrain, boolean doDrain); - - ReagentContainerInfo getInfo(); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/IReagentHandler.java b/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/IReagentHandler.java deleted file mode 100644 index cf1a3fdf..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/IReagentHandler.java +++ /dev/null @@ -1,18 +0,0 @@ -package WayofTime.alchemicalWizardry.api.alchemy.energy; - -import net.minecraft.util.EnumFacing; - -public interface IReagentHandler -{ - int fill(EnumFacing from, ReagentStack resource, boolean doFill); - - ReagentStack drain(EnumFacing from, ReagentStack resource, boolean doDrain); - - ReagentStack drain(EnumFacing from, int maxDrain, boolean doDrain); - - boolean canFill(EnumFacing from, Reagent reagent); - - boolean canDrain(EnumFacing from, Reagent reagent); - - ReagentContainerInfo[] getContainerInfo(EnumFacing from); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ISegmentedReagentHandler.java b/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ISegmentedReagentHandler.java deleted file mode 100644 index 52be7b9f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ISegmentedReagentHandler.java +++ /dev/null @@ -1,14 +0,0 @@ -package WayofTime.alchemicalWizardry.api.alchemy.energy; - -import java.util.Map; - -public interface ISegmentedReagentHandler extends IReagentHandler -{ - int getNumberOfTanks(); - - int getTanksTunedToReagent(Reagent reagent); - - void setTanksTunedToReagent(Reagent reagent, int total); - - Map getAttunedTankMap(); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/Reagent.java b/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/Reagent.java deleted file mode 100644 index 4cc88bcb..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/Reagent.java +++ /dev/null @@ -1,52 +0,0 @@ -package WayofTime.alchemicalWizardry.api.alchemy.energy; - -public class Reagent -{ - public final String name; - - public static final int REAGENT_SIZE = 1000; - - private int colourRed = 0; - private int colourGreen = 0; - private int colourBlue = 0; - private int colourIntensity = 255; - - public Reagent(String name) - { - this.name = name; - } - - public void setColour(int red, int green, int blue, int intensity) - { - this.colourRed = red; - this.colourGreen = green; - this.colourBlue = blue; - this.colourIntensity = intensity; - } - - public int getColourRed() - { - return colourRed; - } - - public int getColourGreen() - { - return colourGreen; - } - - public int getColourBlue() - { - return colourBlue; - } - - public int getColourIntensity() - { - return colourIntensity; - } - - @Override - public boolean equals(Object o) - { - return o instanceof Reagent && this == o && name.equals(((Reagent) o).name); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentContainer.java b/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentContainer.java deleted file mode 100644 index c1352746..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentContainer.java +++ /dev/null @@ -1,153 +0,0 @@ -package WayofTime.alchemicalWizardry.api.alchemy.energy; - -import net.minecraft.nbt.NBTTagCompound; - -public class ReagentContainer implements IReagentContainer -{ - protected ReagentStack reagentStack; - protected int capacity; - - public ReagentContainer(int capacity) - { - this(null, capacity); - } - - public ReagentContainer(ReagentStack stack, int capacity) - { - this.reagentStack = stack; - this.capacity = capacity; - } - - public ReagentContainer(Reagent reagent, int amount, int capacity) - { - this(new ReagentStack(reagent, amount), capacity); - } - - public static ReagentContainer readFromNBT(NBTTagCompound nbt) - { - ReagentStack reagent = ReagentStack.loadReagentStackFromNBT(nbt); - int capacity = nbt.getInteger("capacity"); - - if (reagent != null) - { - return new ReagentContainer(reagent, capacity); - } else - { - return new ReagentContainer(null, capacity); - } - } - - public NBTTagCompound writeToNBT(NBTTagCompound nbt) - { - if (reagentStack != null) - { - reagentStack.writeToNBT(nbt); - } - - nbt.setInteger("capacity", capacity); - - return nbt; - } - - @Override - public ReagentStack getReagent() - { - return reagentStack; - } - - @Override - public int getReagentStackAmount() - { - if (reagentStack == null) - { - return 0; - } - return reagentStack.amount; - } - - @Override - public int getCapacity() - { - return capacity; - } - - @Override - public int fill(ReagentStack resource, boolean doFill) - { - if (resource == null) - { - return 0; - } - - if (!doFill) - { - if (reagentStack == null) - { - return Math.min(capacity, resource.amount); - } - - if (!reagentStack.isReagentEqual(resource)) - { - return 0; - } - - return Math.min(capacity - reagentStack.amount, resource.amount); - } - - if (reagentStack == null) - { - reagentStack = new ReagentStack(resource, Math.min(capacity, resource.amount)); - - return reagentStack.amount; - } - - if (!reagentStack.isReagentEqual(resource)) - { - return 0; - } - int filled = capacity - reagentStack.amount; - - if (resource.amount < filled) - { - reagentStack.amount += resource.amount; - filled = resource.amount; - } else - { - reagentStack.amount = capacity; - } - - return filled; - } - - @Override - public ReagentStack drain(int maxDrain, boolean doDrain) - { - if (reagentStack == null) - { - return null; - } - - int drained = maxDrain; - if (reagentStack.amount < drained) - { - drained = reagentStack.amount; - } - - ReagentStack stack = new ReagentStack(reagentStack, drained); - if (doDrain) - { - reagentStack.amount -= drained; - if (reagentStack.amount <= 0) - { - reagentStack = null; - } - } - return stack; - } - - @Override - public ReagentContainerInfo getInfo() - { - return new ReagentContainerInfo(this); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentContainerInfo.java b/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentContainerInfo.java deleted file mode 100644 index 99521dce..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentContainerInfo.java +++ /dev/null @@ -1,19 +0,0 @@ -package WayofTime.alchemicalWizardry.api.alchemy.energy; - -public final class ReagentContainerInfo -{ - public final ReagentStack reagent; - public final int capacity; - - public ReagentContainerInfo(ReagentStack reagent, int capacity) - { - this.reagent = reagent; - this.capacity = capacity; - } - - public ReagentContainerInfo(IReagentContainer tank) - { - this.reagent = tank.getReagent(); - this.capacity = tank.getCapacity(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentRegistry.java deleted file mode 100644 index 429587a1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentRegistry.java +++ /dev/null @@ -1,174 +0,0 @@ -package WayofTime.alchemicalWizardry.api.alchemy.energy; - -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -import net.minecraft.item.ItemStack; - -public class ReagentRegistry -{ - public static Map reagentList = new HashMap(); - public static Map itemToReagentMap = new HashMap(); - - public static Reagent sanctusReagent; - public static Reagent incendiumReagent; - public static Reagent aquasalusReagent; - public static Reagent magicalesReagent; - public static Reagent aetherReagent; - public static Reagent crepitousReagent; - public static Reagent crystallosReagent; - public static Reagent terraeReagent; - public static Reagent tenebraeReagent; - - public static Reagent offensaReagent; - public static Reagent praesidiumReagent; - public static Reagent orbisTerraeReagent; - public static Reagent virtusReagent; - public static Reagent reductusReagent; - public static Reagent potentiaReagent; - - public static void initReagents() - { - sanctusReagent = new Reagent("sanctus"); - incendiumReagent = new Reagent("incendium"); - aquasalusReagent = new Reagent("aquasalus"); - magicalesReagent = new Reagent("magicales"); - aetherReagent = new Reagent("aether"); - crepitousReagent = new Reagent("crepitous"); - crystallosReagent = new Reagent("crystallos"); - terraeReagent = new Reagent("terrae"); - tenebraeReagent = new Reagent("tenebrae"); - offensaReagent = new Reagent("offensa"); - praesidiumReagent = new Reagent("praesidium"); - orbisTerraeReagent = new Reagent("orbisTerrae"); - virtusReagent = new Reagent("virtus"); - reductusReagent = new Reagent("reductus"); - potentiaReagent = new Reagent("potentia"); - - sanctusReagent.setColour(255, 255, 0, 255); - incendiumReagent.setColour(255, 0, 0, 255); - aquasalusReagent.setColour(0, 0, 255, 255); - magicalesReagent.setColour(150, 0, 146, 255); - aetherReagent.setColour(105, 223, 86, 255); - crepitousReagent.setColour(145, 145, 145, 255); - crystallosReagent.setColour(135, 255, 231, 255); - terraeReagent.setColour(147, 48, 13, 255); - tenebraeReagent.setColour(86, 86, 86, 255); - offensaReagent.setColour(126, 0, 0, 255); - praesidiumReagent.setColour(135, 135, 135, 255); - orbisTerraeReagent.setColour(32, 94, 14, 255); - virtusReagent.setColour(180, 0, 0, 255); - reductusReagent.setColour(20, 93, 2, 255); - potentiaReagent.setColour(64, 81, 208, 255); - - registerReagent("sanctus", sanctusReagent); - registerReagent("incendium", incendiumReagent); - registerReagent("aquasalus", aquasalusReagent); - registerReagent("magicales", magicalesReagent); - registerReagent("aether", aetherReagent); - registerReagent("crepitous", crepitousReagent); - registerReagent("crystallos", crystallosReagent); - registerReagent("terrae", terraeReagent); - registerReagent("tenebrae", tenebraeReagent); - registerReagent("offensa", offensaReagent); - registerReagent("praesidium", praesidiumReagent); - registerReagent("orbisTerrae", orbisTerraeReagent); - registerReagent("virtus", virtusReagent); - registerReagent("reductus", reductusReagent); - registerReagent("potentia", potentiaReagent); - } - - public static boolean registerReagent(String key, Reagent reagent) - { - if (reagentList.containsKey(key) || reagent == null) - { - return false; - } - - reagentList.put(key, reagent); - - return true; - } - - public static Reagent getReagentForKey(String key) - { - if (reagentList.containsKey(key)) - { - return reagentList.get(key); - } - - return null; - } - - public static String getKeyForReagent(Reagent reagent) - { - if (reagentList.containsValue(reagent)) - { - Set> set = reagentList.entrySet(); - for (Entry entry : set) - { - if (entry.getValue().equals(reagent)) - { - return entry.getKey(); - } - } - } - - return ""; - } - - public static void registerItemAndReagent(ItemStack stack, ReagentStack reagentStack) - { - itemToReagentMap.put(stack, reagentStack); - } - - public static ReagentStack getReagentStackForItem(ItemStack stack) - { - if (stack == null) - { - return null; - } - - for (Entry entry : itemToReagentMap.entrySet()) - { - if (entry.getKey() != null && entry.getKey().isItemEqual(stack)) - { - if (entry.getValue() == null) - { - return null; - } else - { - return entry.getValue().copy(); - } - } - } - - return null; - } - - public static ItemStack getItemForReagent(Reagent reagent) - { - if (reagent == null) - { - return null; - } - - for (Entry entry : itemToReagentMap.entrySet()) - { - if (entry.getValue() != null && entry.getValue().reagent == reagent) - { - if (entry.getKey() == null) - { - return null; - } else - { - return entry.getKey().copy(); - } - } - } - - return null; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentStack.java b/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentStack.java deleted file mode 100644 index 8923f3d3..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentStack.java +++ /dev/null @@ -1,62 +0,0 @@ -package WayofTime.alchemicalWizardry.api.alchemy.energy; - -import net.minecraft.nbt.NBTTagCompound; - -public class ReagentStack -{ - public Reagent reagent; - public int amount; - - public ReagentStack(Reagent reagent, int amount) - { - this.reagent = reagent; - this.amount = amount; - } - - public ReagentStack(ReagentStack reagentStack, int amount) - { - this(reagentStack.reagent, amount); - } - - public static ReagentStack loadReagentStackFromNBT(NBTTagCompound tag) - { - Reagent reagent = ReagentRegistry.getReagentForKey(tag.getString("Reagent")); - - if (reagent == null) - { - return null; - } - - int amount = tag.getInteger("amount"); - - return new ReagentStack(reagent, amount); - } - - public NBTTagCompound writeToNBT(NBTTagCompound tag) - { - tag.setString("Reagent", ReagentRegistry.getKeyForReagent(this.reagent)); - tag.setInteger("amount", this.amount); - - return tag; - } - - public ReagentStack splitStack(int amount) - { - ReagentStack copyStack = this.copy(); - int splitAmount = Math.min(amount, this.amount); - copyStack.amount = splitAmount; - this.amount -= splitAmount; - - return copyStack; - } - - public ReagentStack copy() - { - return new ReagentStack(this.reagent, this.amount); - } - - public boolean isReagentEqual(ReagentStack other) - { - return other != null && this.reagent == other.reagent; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/TileReagentHandler.java b/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/TileReagentHandler.java deleted file mode 100644 index 5a841651..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/TileReagentHandler.java +++ /dev/null @@ -1,66 +0,0 @@ - -package WayofTime.alchemicalWizardry.api.alchemy.energy; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; - -public class TileReagentHandler extends TileEntity implements IReagentHandler -{ - protected ReagentContainer tank = new ReagentContainer(4000); - - @Override - public void readFromNBT(NBTTagCompound tag) - { - super.readFromNBT(tag); - tank.readFromNBT(tag); - } - - @Override - public void writeToNBT(NBTTagCompound tag) - { - super.writeToNBT(tag); - tank.writeToNBT(tag); - } - - /* IReagentHandler */ - @Override - public int fill(EnumFacing from, ReagentStack resource, boolean doFill) - { - return tank.fill(resource, doFill); - } - - @Override - public ReagentStack drain(EnumFacing from, ReagentStack resource, boolean doDrain) - { - if (resource == null || !resource.isReagentEqual(tank.getReagent())) - { - return null; - } - return tank.drain(resource.amount, doDrain); - } - - @Override - public ReagentStack drain(EnumFacing from, int maxDrain, boolean doDrain) - { - return tank.drain(maxDrain, doDrain); - } - - @Override - public boolean canFill(EnumFacing from, Reagent reagent) - { - return true; - } - - @Override - public boolean canDrain(EnumFacing from, Reagent reagent) - { - return true; - } - - @Override - public ReagentContainerInfo[] getContainerInfo(EnumFacing from) - { - return new ReagentContainerInfo[]{tank.getInfo()}; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/TileSegmentedReagentHandler.java b/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/TileSegmentedReagentHandler.java deleted file mode 100644 index f965ab7a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/TileSegmentedReagentHandler.java +++ /dev/null @@ -1,283 +0,0 @@ - -package WayofTime.alchemicalWizardry.api.alchemy.energy; - -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraftforge.common.util.Constants; - -public class TileSegmentedReagentHandler extends TileEntity implements ISegmentedReagentHandler -{ - protected ReagentContainer[] tanks; - protected Map attunedTankMap; - - public TileSegmentedReagentHandler() - { - this(1); - } - - public TileSegmentedReagentHandler(int numberOfTanks) - { - this(numberOfTanks, 1000); - } - - public TileSegmentedReagentHandler(int numberOfTanks, int tankSize) - { - super(); - - this.attunedTankMap = new HashMap(); - this.tanks = new ReagentContainer[numberOfTanks]; - for (int i = 0; i < numberOfTanks; i++) - { - this.tanks[i] = new ReagentContainer(tankSize); - } - } - - @Override - public void readFromNBT(NBTTagCompound tag) - { - super.readFromNBT(tag); - - NBTTagList tagList = tag.getTagList("reagentTanks", Constants.NBT.TAG_COMPOUND); - - int size = tagList.tagCount(); - this.tanks = new ReagentContainer[size]; - - for (int i = 0; i < size; i++) - { - NBTTagCompound savedTag = tagList.getCompoundTagAt(i); - this.tanks[i] = ReagentContainer.readFromNBT(savedTag); - } - - NBTTagList attunedTagList = tag.getTagList("attunedTankMap", Constants.NBT.TAG_COMPOUND); - - for (int i = 0; i < attunedTagList.tagCount(); i++) - { - NBTTagCompound savedTag = attunedTagList.getCompoundTagAt(i); - Reagent reagent = ReagentRegistry.getReagentForKey(savedTag.getString("reagent")); - this.attunedTankMap.put(reagent, savedTag.getInteger("amount")); - } - } - - @Override - public void writeToNBT(NBTTagCompound tag) - { - super.writeToNBT(tag); - - NBTTagList tagList = new NBTTagList(); - - for (int i = 0; i < this.tanks.length; i++) - { - NBTTagCompound savedTag = new NBTTagCompound(); - if (this.tanks[i] != null) - { - this.tanks[i].writeToNBT(savedTag); - } - tagList.appendTag(savedTag); - } - - tag.setTag("reagentTanks", tagList); - - NBTTagList attunedTagList = new NBTTagList(); - - for (Entry entry : this.attunedTankMap.entrySet()) - { - NBTTagCompound savedTag = new NBTTagCompound(); - savedTag.setString("reagent", ReagentRegistry.getKeyForReagent(entry.getKey())); - savedTag.setInteger("amount", entry.getValue()); - attunedTagList.appendTag(savedTag); - } - - tag.setTag("attunedTankMap", attunedTagList); - } - - /* ISegmentedReagentHandler */ - @Override - public int fill(EnumFacing from, ReagentStack resource, boolean doFill) - { - int totalFill = 0; - - boolean useTankLimit = !this.attunedTankMap.isEmpty(); - - if (resource != null) - { - int totalTanksFillable = useTankLimit ? this.getTanksTunedToReagent(resource.reagent) : this.tanks.length; - int tanksFilled = 0; - - int maxFill = resource.amount; - - for (int i = this.tanks.length - 1; i >= 0; i--) - { - ReagentStack remainingStack = resource.copy(); - remainingStack.amount = maxFill - totalFill; - - boolean doesReagentMatch = tanks[i].getReagent() != null && tanks[i].getReagent().isReagentEqual(remainingStack); - - if (doesReagentMatch) - { - totalFill += tanks[i].fill(remainingStack, doFill); - tanksFilled++; - } else - { - continue; - } - - if (totalFill >= maxFill || tanksFilled >= totalTanksFillable) - { - return totalFill; - } - } - - if (tanksFilled >= totalTanksFillable) - { - return totalFill; - } - - for (int i = this.tanks.length - 1; i >= 0; i--) - { - ReagentStack remainingStack = resource.copy(); - remainingStack.amount = maxFill - totalFill; - - boolean isTankEmpty = tanks[i].getReagent() == null; - - if (isTankEmpty) - { - totalFill += tanks[i].fill(remainingStack, doFill); - tanksFilled++; - } else - { - continue; - } - - if (totalFill >= maxFill || tanksFilled >= totalTanksFillable) - { - return totalFill; - } - } - } - return totalFill; - } - - @Override - public ReagentStack drain(EnumFacing from, ReagentStack resource, boolean doDrain) - { - if (resource == null) - { - return null; - } - - int maxDrain = resource.amount; - Reagent reagent = resource.reagent; - int drained = 0; - - for (int i = 0; i < tanks.length; i++) - { - if (drained >= maxDrain) - { - break; - } - - if (resource.isReagentEqual(tanks[i].getReagent())) - { - ReagentStack drainStack = tanks[i].drain(maxDrain - drained, doDrain); - if (drainStack != null) - { - drained += drainStack.amount; - } - } - } - - return new ReagentStack(reagent, drained); - } - - /* Only returns the amount from the first available tank */ - @Override - public ReagentStack drain(EnumFacing from, int maxDrain, boolean doDrain) - { - for (int i = 0; i < tanks.length; i++) - { - ReagentStack stack = tanks[i].drain(maxDrain, doDrain); - if (stack != null) - { - return stack; - } - } - - return null; - } - - @Override - public boolean canFill(EnumFacing from, Reagent reagent) - { - return true; - } - - @Override - public boolean canDrain(EnumFacing from, Reagent reagent) - { - return true; - } - - @Override - public ReagentContainerInfo[] getContainerInfo(EnumFacing from) - { - ReagentContainerInfo[] info = new ReagentContainerInfo[this.getNumberOfTanks()]; - for (int i = 0; i < this.getNumberOfTanks(); i++) - { - info[i] = tanks[i].getInfo(); - } - return info; - } - - @Override - public int getNumberOfTanks() - { - return tanks.length; - } - - @Override - public int getTanksTunedToReagent(Reagent reagent) - { - if (this.attunedTankMap.containsKey(reagent) && this.attunedTankMap.get(reagent) != null) - { - return this.attunedTankMap.get(reagent); - } - return 0; - } - - @Override - public void setTanksTunedToReagent(Reagent reagent, int total) - { - if (total == 0 && this.attunedTankMap.containsKey(reagent)) - { - this.attunedTankMap.remove(reagent); - return; - } - - this.attunedTankMap.put(reagent, total); - } - - @Override - public Map getAttunedTankMap() - { - return this.attunedTankMap; - } - - public boolean areTanksEmpty() - { - for (int i = 0; i < this.tanks.length; i++) - { - if (tanks[i] != null && tanks[i].reagentStack != null) - { - return false; - } - } - - return true; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/altarRecipeRegistry/AltarRecipe.java b/src/main/java/WayofTime/alchemicalWizardry/api/altarRecipeRegistry/AltarRecipe.java deleted file mode 100644 index bb581251..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/altarRecipeRegistry/AltarRecipe.java +++ /dev/null @@ -1,136 +0,0 @@ -package WayofTime.alchemicalWizardry.api.altarRecipeRegistry; - -import java.util.ArrayList; -import java.util.Set; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; - -public class AltarRecipe -{ - public int minTier; - public int liquidRequired; - public boolean canBeFilled; //Tells the system that the item is an orb - public int consumptionRate; - public int drainRate; - public ItemStack requiredItem; - public ItemStack result; - public boolean useTag; - public ArrayList input = new ArrayList(); - - public AltarRecipe(ItemStack result, ItemStack requiredItem, int minTier, int liquidRequired, int consumptionRate, int drainRate, boolean canBeFilled) - { - this(result, requiredItem, minTier, liquidRequired, consumptionRate, drainRate, canBeFilled, false); - } - - public AltarRecipe(ItemStack result, ItemStack requiredItem, int minTier, int liquidRequired, int consumptionRate, int drainRate, boolean canBeFilled, boolean useTag) - { - this.result = result; - this.requiredItem = requiredItem; - this.minTier = minTier; - this.liquidRequired = liquidRequired; - this.consumptionRate = consumptionRate; - this.drainRate = drainRate; - this.canBeFilled = canBeFilled; - this.useTag = useTag; - } - - public ItemStack getResult() - { - return this.result; - } - - public ItemStack getRequiredItem() - { - return this.requiredItem; - } - - public boolean doesRequiredItemMatch(ItemStack comparedStack, int tierCheck) - { - if (comparedStack == null || this.requiredItem == null) - { - return false; - } - - return tierCheck >= minTier && this.requiredItem.isItemEqual(comparedStack) && (this.useTag ? this.areRequiredTagsEqual(comparedStack) : true); - } - - public boolean areRequiredTagsEqual(ItemStack comparedStack) - { - if(requiredItem.hasTagCompound()) - { - NBTTagCompound tag = requiredItem.getTagCompound(); - if(!comparedStack.hasTagCompound()) - { - return false; - } - - NBTTagCompound comparedTag = comparedStack.getTagCompound(); - - return this.areTagsEqual(tag, comparedTag); - } - - return true; - } - - protected boolean areTagsEqual(NBTTagCompound tag, NBTTagCompound comparedTag) - { - Set set = tag.getKeySet(); - - for(Object obj : set) - { - if(obj instanceof String) - { - String str = (String)obj; - - NBTBase baseTag = comparedTag.getTag(str); - - if(baseTag instanceof NBTTagCompound) - { - NBTBase comparedBaseTag = comparedTag.getTag(str); - if(comparedBaseTag instanceof NBTTagCompound) - { - if(!this.areTagsEqual(tag, comparedTag)) - { - return false; - } - } - }else - { - if(baseTag != null && !baseTag.equals(comparedTag.getTag(str))) - { - return false; - } - } - } - } - - return true; - } - - public int getMinTier() - { - return this.minTier; - } - - public int getLiquidRequired() - { - return this.liquidRequired; - } - - public int getConsumptionRate() - { - return this.consumptionRate; - } - - public int getDrainRate() - { - return this.drainRate; - } - - public boolean getCanBeFilled() - { - return this.canBeFilled; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/altarRecipeRegistry/AltarRecipeRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/api/altarRecipeRegistry/AltarRecipeRegistry.java deleted file mode 100644 index 566fbfe9..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/altarRecipeRegistry/AltarRecipeRegistry.java +++ /dev/null @@ -1,77 +0,0 @@ -package WayofTime.alchemicalWizardry.api.altarRecipeRegistry; - -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import net.minecraft.item.ItemStack; - -public class AltarRecipeRegistry -{ - public static List altarRecipes = new LinkedList(); - public static Map orbMap = new HashMap(); - - public static void registerAltarRecipe(ItemStack result, ItemStack requiredItem, int minTier, int liquidRequired, int consumptionRate, int drainRate, boolean canBeFilled) - { - altarRecipes.add(new AltarRecipe(result, requiredItem, minTier, liquidRequired, consumptionRate, drainRate, canBeFilled)); - } - - public static void registerNBTAltarRecipe(ItemStack result, ItemStack requiredItem, int minTier, int liquidRequired, int consumptionRate, int drainRate, boolean canBeFilled) - { - altarRecipes.add(new AltarRecipe(result, requiredItem, minTier, liquidRequired, consumptionRate, drainRate, canBeFilled, true)); - } - - public static void registerAltarOrbRecipe(ItemStack orbStack, int minTier, int consumptionRate) - { - if(!orbMap.containsKey(minTier)) - { - orbMap.put(minTier, orbStack); - } - registerAltarRecipe(null, orbStack, minTier, 0, consumptionRate, 0, true); - } - - public static boolean isRequiredItemValid(ItemStack testItem, int currentTierAltar) - { - if(testItem == null) - { - return false; - } - - for (AltarRecipe recipe : altarRecipes) - { - if (recipe.doesRequiredItemMatch(testItem, currentTierAltar)) - { - return true; - } - } - - return false; - } - - public static ItemStack getItemForItemAndTier(ItemStack testItem, int currentTierAltar) - { - for (AltarRecipe recipe : altarRecipes) - { - if (recipe.doesRequiredItemMatch(testItem, currentTierAltar)) - { - return ItemStack.copyItemStack(recipe.getResult()); - } - } - - return null; - } - - public static AltarRecipe getAltarRecipeForItemAndTier(ItemStack testItem, int currentTierAltar) - { - for (AltarRecipe recipe : altarRecipes) - { - if (recipe.doesRequiredItemMatch(testItem, currentTierAltar)) - { - return recipe; - } - } - - return null; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/altarRecipeRegistry/IFadedRune.java b/src/main/java/WayofTime/alchemicalWizardry/api/altarRecipeRegistry/IFadedRune.java deleted file mode 100644 index 39d71675..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/altarRecipeRegistry/IFadedRune.java +++ /dev/null @@ -1,6 +0,0 @@ -package WayofTime.alchemicalWizardry.api.altarRecipeRegistry; - -public interface IFadedRune -{ - int getAltarTierLimit(int meta); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/bindingRegistry/BindingRecipe.java b/src/main/java/WayofTime/alchemicalWizardry/api/bindingRegistry/BindingRecipe.java deleted file mode 100644 index 8d2da96d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/bindingRegistry/BindingRecipe.java +++ /dev/null @@ -1,30 +0,0 @@ -package WayofTime.alchemicalWizardry.api.bindingRegistry; - -import net.minecraft.item.ItemStack; - -public class BindingRecipe -{ - public ItemStack requiredItem; - public ItemStack outputItem; - - public BindingRecipe(ItemStack outputItem, ItemStack requiredItem) - { - this.requiredItem = requiredItem; - this.outputItem = outputItem; - } - - public boolean doesRequiredItemMatch(ItemStack testStack) - { - return !(testStack == null || this.requiredItem == null) && this.requiredItem.isItemEqual(testStack); - } - - public ItemStack getResult(ItemStack inputItem) - { - return this.getResult(); - } - - public ItemStack getResult() - { - return this.outputItem; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/bindingRegistry/BindingRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/api/bindingRegistry/BindingRegistry.java deleted file mode 100644 index 407f74ff..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/bindingRegistry/BindingRegistry.java +++ /dev/null @@ -1,67 +0,0 @@ -package WayofTime.alchemicalWizardry.api.bindingRegistry; - -import net.minecraft.item.ItemStack; - -import java.util.LinkedList; -import java.util.List; - -public class BindingRegistry -{ - public static List bindingRecipes = new LinkedList(); - - public static void registerRecipe(ItemStack output, ItemStack input) - { - bindingRecipes.add(new BindingRecipe(output, input)); - } - - public static boolean isRequiredItemValid(ItemStack testItem) - { - for (BindingRecipe recipe : bindingRecipes) - { - if (recipe.doesRequiredItemMatch(testItem)) - { - return true; - } - } - - return false; - } - - public static ItemStack getItemForItemAndTier(ItemStack testItem) - { - for (BindingRecipe recipe : bindingRecipes) - { - if (recipe.doesRequiredItemMatch(testItem)) - { - return recipe.getResult(testItem).copy(); - } - } - - return null; - } - - public static int getIndexForItem(ItemStack testItem) - { - int i = 0; - for (BindingRecipe recipe : bindingRecipes) - { - if (recipe.doesRequiredItemMatch(testItem)) - { - return i; - } - i++; - } - - return -1; - } - - public static ItemStack getOutputForIndex(int index) - { - if (bindingRecipes.size() <= index) - { - return null; - } - - return bindingRecipes.get(index).getResult(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/bindingRegistry/UnbindingRecipe.java b/src/main/java/WayofTime/alchemicalWizardry/api/bindingRegistry/UnbindingRecipe.java deleted file mode 100644 index c2ce032a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/bindingRegistry/UnbindingRecipe.java +++ /dev/null @@ -1,30 +0,0 @@ -package WayofTime.alchemicalWizardry.api.bindingRegistry; - -import net.minecraft.item.ItemStack; - -public class UnbindingRecipe -{ - public ItemStack requiredItem; - public ItemStack outputItem; - - public UnbindingRecipe(ItemStack outputItem, ItemStack requiredItem) - { - this.requiredItem = requiredItem; - this.outputItem = outputItem; - } - - public boolean doesRequiredItemMatch(ItemStack testStack) - { - return !(testStack == null || this.requiredItem == null) && this.requiredItem.isItemEqual(testStack); - } - - public ItemStack getResult(ItemStack inputItem) - { - return this.getResult(); - } - - public ItemStack getResult() - { - return this.outputItem; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/bindingRegistry/UnbindingRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/api/bindingRegistry/UnbindingRegistry.java deleted file mode 100644 index d031edd3..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/bindingRegistry/UnbindingRegistry.java +++ /dev/null @@ -1,62 +0,0 @@ -package WayofTime.alchemicalWizardry.api.bindingRegistry; - -import net.minecraft.item.ItemStack; - -import java.util.LinkedList; -import java.util.List; - -public class UnbindingRegistry -{ - public static List unbindingRecipes = new LinkedList(); - - public static void addAllUnbindingRecipesFromBinding() - { - for (BindingRecipe bindingRecipe : BindingRegistry.bindingRecipes) - { - unbindingRecipes.add(new UnbindingRecipe(bindingRecipe.requiredItem, bindingRecipe.outputItem)); - } - } - - public static void registerRecipe(ItemStack output, ItemStack input) - { - unbindingRecipes.add(new UnbindingRecipe(output, input)); - } - - public static boolean isRequiredItemValid(ItemStack testItem) - { - for (UnbindingRecipe recipe : unbindingRecipes) - { - if (recipe.doesRequiredItemMatch(testItem)) - { - return true; - } - } - - return false; - } - - public static int getIndexForItem(ItemStack testItem) - { - int i = 0; - for (UnbindingRecipe recipe : unbindingRecipes) - { - if (recipe.doesRequiredItemMatch(testItem)) - { - return i; - } - i++; - } - - return -1; - } - - public static ItemStack getOutputForIndex(int index) - { - if (unbindingRecipes.size() <= index) - { - return null; - } - - return unbindingRecipes.get(index).getResult(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/compress/CompressionHandler.java b/src/main/java/WayofTime/alchemicalWizardry/api/compress/CompressionHandler.java deleted file mode 100644 index a05c7003..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/compress/CompressionHandler.java +++ /dev/null @@ -1,14 +0,0 @@ -package WayofTime.alchemicalWizardry.api.compress; - -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public abstract class CompressionHandler -{ - /** - * Called to look at the inventory and syphons the required stack. Returns resultant stack if successful, and null if not. - * @param inv The inventory iterated through - * @return The result of the compression - */ - public abstract ItemStack compressInventory(ItemStack[] inv, World world); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/compress/CompressionRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/api/compress/CompressionRegistry.java deleted file mode 100644 index 342b9b7d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/compress/CompressionRegistry.java +++ /dev/null @@ -1,67 +0,0 @@ -package WayofTime.alchemicalWizardry.api.compress; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -/** - * A registry aimed to help compress items in an inventory into its compressible form. - * - */ -public class CompressionRegistry -{ - public static List compressionRegistry = new ArrayList(); - public static Map thresholdMap = new HashMap(); - - public static void registerHandler(CompressionHandler handler) - { - compressionRegistry.add(handler); - } - - /** - * Registers an item so that it only compresses while above this threshold - * @param stack - * @param threshold - */ - public static void registerItemThreshold(ItemStack stack, int threshold) - { - thresholdMap.put(stack, threshold); - } - - public static ItemStack compressInventory(ItemStack[] inv, World world) - { - for(CompressionHandler handler : compressionRegistry) - { - ItemStack stack = handler.compressInventory(inv, world); - if(stack != null) - { - return stack; - } - } - - return null; - } - - public static int getItemThreshold(ItemStack stack) - { - for(Entry entry : thresholdMap.entrySet()) - { - if(areItemStacksEqual(entry.getKey(), stack)) - { - return entry.getValue(); - } - } - - return 0; - } - - public static boolean areItemStacksEqual(ItemStack stack, ItemStack compressedStack) - { - return stack.isItemEqual(compressedStack) && (stack.getTagCompound() == null ? compressedStack.getTagCompound() == null : stack.getTagCompound().equals(compressedStack.getTagCompound())); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/event/AddToNetworkEvent.java b/src/main/java/WayofTime/alchemicalWizardry/api/event/AddToNetworkEvent.java deleted file mode 100644 index 448f4712..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/event/AddToNetworkEvent.java +++ /dev/null @@ -1,38 +0,0 @@ -package WayofTime.alchemicalWizardry.api.event; - -import net.minecraftforge.fml.common.eventhandler.Cancelable; -import net.minecraftforge.fml.common.eventhandler.Event; - -@Cancelable -public class AddToNetworkEvent extends Event -{ - public String ownerNetwork; - public int addedAmount; - public int maximum; - - /** - * This event is called whenever the network is added to. If cancelled, no LP will be drained from the source. If result is set to Result.DENY, - * the LP will still be drained but the soul network will not be added to. - * - * @param ownerNetwork Key used for the soul network - * @param addedAmount Amount added - * @param maximum Ceiling that the network can add to - */ - public AddToNetworkEvent(String ownerNetwork, int addedAmount, int maximum) - { - super(); - this.ownerNetwork = ownerNetwork; - this.addedAmount = addedAmount; - this.maximum = maximum; - } - - public String getOwnerNetwork() - { - return this.ownerNetwork; - } - - public int getAddedAmount() - { - return this.addedAmount; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/event/ItemBindEvent.java b/src/main/java/WayofTime/alchemicalWizardry/api/event/ItemBindEvent.java deleted file mode 100644 index 5d78bcd0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/event/ItemBindEvent.java +++ /dev/null @@ -1,22 +0,0 @@ -package WayofTime.alchemicalWizardry.api.event; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.eventhandler.Cancelable; -import net.minecraftforge.fml.common.eventhandler.Event; - -@Cancelable -public class ItemBindEvent extends Event -{ - public final EntityPlayer player; - public String key; - public ItemStack itemStack; - - public ItemBindEvent(EntityPlayer player, String key, ItemStack itemStack) - { - super(); - this.player = player; - this.key = key; - this.itemStack = itemStack; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/event/ItemDrainInContainerEvent.java b/src/main/java/WayofTime/alchemicalWizardry/api/event/ItemDrainInContainerEvent.java deleted file mode 100644 index 0cd29c51..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/event/ItemDrainInContainerEvent.java +++ /dev/null @@ -1,15 +0,0 @@ -package WayofTime.alchemicalWizardry.api.event; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.eventhandler.Cancelable; - -@Cancelable -public class ItemDrainInContainerEvent extends SoulNetworkEvent -{ - public ItemStack stack; - public ItemDrainInContainerEvent(ItemStack stack, String ownerNetwork, int drainAmount) - { - super(ownerNetwork, drainAmount); - this.stack = stack; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/event/ItemDrainNetworkEvent.java b/src/main/java/WayofTime/alchemicalWizardry/api/event/ItemDrainNetworkEvent.java deleted file mode 100644 index aa9c32d2..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/event/ItemDrainNetworkEvent.java +++ /dev/null @@ -1,29 +0,0 @@ -package WayofTime.alchemicalWizardry.api.event; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.eventhandler.Cancelable; - -@Cancelable -public class ItemDrainNetworkEvent extends PlayerDrainNetworkEvent -{ - public final ItemStack itemStack; - public boolean shouldDamage; //If true, will damage regardless of if the network had enough inside it - public float damageAmount; //Amount of damage that would incur if the network could not drain properly - - /** - * Set result to deny the action i.e. damage/drain anyways. Cancelling event prevents action without penalties - * - * @param player Player using the item - * @param ownerNetwork Network that the item is tied to - * @param itemStack Item used - * @param drainAmount Original drain amount - change to alter cost - */ - public ItemDrainNetworkEvent(EntityPlayer player, String ownerNetwork, ItemStack itemStack, int drainAmount) - { - super(player, ownerNetwork, drainAmount); - this.itemStack = itemStack; - this.shouldDamage = false; - this.damageAmount = (float)(drainAmount) / 100.0f; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/event/PlayerAddToNetworkEvent.java b/src/main/java/WayofTime/alchemicalWizardry/api/event/PlayerAddToNetworkEvent.java deleted file mode 100644 index c4a3820c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/event/PlayerAddToNetworkEvent.java +++ /dev/null @@ -1,18 +0,0 @@ -package WayofTime.alchemicalWizardry.api.event; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.eventhandler.Cancelable; - -@Cancelable -public class PlayerAddToNetworkEvent extends AddToNetworkEvent -{ - public final EntityPlayer player; - public ItemStack itemStack; - public PlayerAddToNetworkEvent(EntityPlayer player, ItemStack itemStack, String ownerNetwork, int addedAmount, int maximum) - { - super(ownerNetwork, addedAmount, maximum); - this.player = player; - this.itemStack = itemStack; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/event/PlayerDrainNetworkEvent.java b/src/main/java/WayofTime/alchemicalWizardry/api/event/PlayerDrainNetworkEvent.java deleted file mode 100644 index d70c3267..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/event/PlayerDrainNetworkEvent.java +++ /dev/null @@ -1,20 +0,0 @@ -package WayofTime.alchemicalWizardry.api.event; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.fml.common.eventhandler.Cancelable; - -@Cancelable -public class PlayerDrainNetworkEvent extends SoulNetworkEvent -{ - public final EntityPlayer player; //Player that activated the event - public PlayerDrainNetworkEvent(EntityPlayer player, String ownerNetwork, int drainAmount) - { - super(ownerNetwork, drainAmount); - this.player = player; - } - - public EntityPlayer getPlayer() - { - return player; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/event/RitualActivatedEvent.java b/src/main/java/WayofTime/alchemicalWizardry/api/event/RitualActivatedEvent.java deleted file mode 100644 index 5bcc7eeb..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/event/RitualActivatedEvent.java +++ /dev/null @@ -1,23 +0,0 @@ -package WayofTime.alchemicalWizardry.api.event; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.eventhandler.Cancelable; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; - -@Cancelable -public class RitualActivatedEvent extends RitualEvent -{ - public final EntityPlayer player; - public final ItemStack crystalStack; - public int crystalTier; - - public RitualActivatedEvent(IMasterRitualStone mrs, String ownerKey, String ritualKey, EntityPlayer player, ItemStack activationCrystal, int crystalTier) - { - super(mrs, ownerKey, ritualKey); - - this.player = player; - this.crystalStack = activationCrystal; - this.crystalTier = crystalTier; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/event/RitualEvent.java b/src/main/java/WayofTime/alchemicalWizardry/api/event/RitualEvent.java deleted file mode 100644 index 36ee929c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/event/RitualEvent.java +++ /dev/null @@ -1,18 +0,0 @@ -package WayofTime.alchemicalWizardry.api.event; - -import net.minecraftforge.fml.common.eventhandler.Event; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; - -public class RitualEvent extends Event -{ - public final IMasterRitualStone mrs; - public String ownerKey; - public final String ritualKey; - - public RitualEvent(IMasterRitualStone mrs, String ownerKey, String ritualKey) - { - this.mrs = mrs; - this.ownerKey = ownerKey; - this.ritualKey = ritualKey; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/event/RitualRunEvent.java b/src/main/java/WayofTime/alchemicalWizardry/api/event/RitualRunEvent.java deleted file mode 100644 index 4b5134b7..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/event/RitualRunEvent.java +++ /dev/null @@ -1,13 +0,0 @@ -package WayofTime.alchemicalWizardry.api.event; - -import net.minecraftforge.fml.common.eventhandler.Cancelable; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; - -@Cancelable -public class RitualRunEvent extends RitualEvent -{ - public RitualRunEvent(IMasterRitualStone mrs, String ownerKey, String ritualKey) - { - super(mrs, ownerKey, ritualKey); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/event/RitualStopEvent.java b/src/main/java/WayofTime/alchemicalWizardry/api/event/RitualStopEvent.java deleted file mode 100644 index 4fc998f0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/event/RitualStopEvent.java +++ /dev/null @@ -1,15 +0,0 @@ -package WayofTime.alchemicalWizardry.api.event; - -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualBreakMethod; - -public class RitualStopEvent extends RitualEvent -{ - public final RitualBreakMethod method; - public RitualStopEvent(IMasterRitualStone mrs, String ownerKey, String ritualKey, RitualBreakMethod method) - { - super(mrs, ownerKey, ritualKey); - - this.method = method; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/event/SacrificeKnifeUsedEvent.java b/src/main/java/WayofTime/alchemicalWizardry/api/event/SacrificeKnifeUsedEvent.java deleted file mode 100644 index 1849c6c9..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/event/SacrificeKnifeUsedEvent.java +++ /dev/null @@ -1,22 +0,0 @@ -package WayofTime.alchemicalWizardry.api.event; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.fml.common.eventhandler.Cancelable; -import net.minecraftforge.fml.common.eventhandler.Event; - -@Cancelable -public class SacrificeKnifeUsedEvent extends Event -{ - public final EntityPlayer player; - public boolean shouldDrainHealth; - public boolean shouldFillAltar; - public final int healthDrained; - - public SacrificeKnifeUsedEvent(EntityPlayer player, boolean shouldDrainHealth, boolean shouldFillAltar, int hp) - { - this.player = player; - this.shouldDrainHealth = shouldDrainHealth; - this.shouldFillAltar = shouldFillAltar; - this.healthDrained = hp; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/event/SoulNetworkEvent.java b/src/main/java/WayofTime/alchemicalWizardry/api/event/SoulNetworkEvent.java deleted file mode 100644 index 3d60650a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/event/SoulNetworkEvent.java +++ /dev/null @@ -1,27 +0,0 @@ -package WayofTime.alchemicalWizardry.api.event; - -import net.minecraftforge.fml.common.eventhandler.Event; - - -public class SoulNetworkEvent extends Event -{ - public String ownerNetwork; - public int drainAmount; - - public SoulNetworkEvent(String ownerNetwork, int drainAmount) - { - super(); - this.ownerNetwork = ownerNetwork; - this.drainAmount = drainAmount; - } - - public String getOwnerNetwork() - { - return this.ownerNetwork; - } - - public int getDrainAmount() - { - return this.drainAmount; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/event/TeleposeEvent.java b/src/main/java/WayofTime/alchemicalWizardry/api/event/TeleposeEvent.java deleted file mode 100644 index 4fc7310f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/event/TeleposeEvent.java +++ /dev/null @@ -1,50 +0,0 @@ -package WayofTime.alchemicalWizardry.api.event; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.eventhandler.Cancelable; -import net.minecraftforge.fml.common.eventhandler.Event; - -/** Fired when a teleposer attempts to transpose two blocks. Use this to perform special cleanup or compensation, -or cancel it entirely to prevent the transposition. */ -@Cancelable -public class TeleposeEvent extends Event -{ - public final World initialWorld; - public final BlockPos initialPos; - - public final Block initialBlock; - public final IBlockState initialState; - - public final World finalWorld; - public final BlockPos finalPos; - - public final Block finalBlock; - public final IBlockState finalState; - - public TeleposeEvent(World wi, BlockPos posi, IBlockState statei, World wf, BlockPos posf, IBlockState statef) - { - initialWorld = wi; - initialPos = posi; - - initialState = statei; - initialBlock = initialState.getBlock(); - - finalWorld = wf; - finalPos = posf; - - finalState = statef; - finalBlock = finalState.getBlock(); - } - - public TileEntity getInitialTile() { - return initialWorld.getTileEntity(initialPos); - } - - public TileEntity getFinalTile() { - return finalWorld.getTileEntity(finalPos); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/guide/OrbRecipeRenderer.java b/src/main/java/WayofTime/alchemicalWizardry/api/guide/OrbRecipeRenderer.java deleted file mode 100644 index 2de81c65..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/guide/OrbRecipeRenderer.java +++ /dev/null @@ -1,135 +0,0 @@ -//package WayofTime.alchemicalWizardry.api.guide; -// -//import java.util.ArrayList; -//import java.util.List; -// -//import net.minecraft.client.Minecraft; -//import net.minecraft.client.gui.FontRenderer; -//import net.minecraft.item.ItemStack; -//import net.minecraft.item.crafting.IRecipe; -//import net.minecraft.util.ResourceLocation; -//import net.minecraft.util.StatCollector; -//import WayofTime.alchemicalWizardry.api.items.ShapedBloodOrbRecipe; -//import WayofTime.alchemicalWizardry.api.items.ShapelessBloodOrbRecipe; -//import WayofTime.alchemicalWizardry.api.spell.APISpellHelper; -//import amerifrance.guideapi.ModInformation; -//import amerifrance.guideapi.api.abstraction.CategoryAbstract; -//import amerifrance.guideapi.api.abstraction.EntryAbstract; -//import amerifrance.guideapi.api.abstraction.IRecipeRenderer; -//import amerifrance.guideapi.api.base.Book; -//import amerifrance.guideapi.api.util.GuiHelper; -//import amerifrance.guideapi.gui.GuiBase; -//import cpw.mods.fml.relauncher.ReflectionHelper; -// -//public class OrbRecipeRenderer implements IRecipeRenderer -//{ -// public IRecipe recipe; -// -// public OrbRecipeRenderer(IRecipe recipe) -// { -// this.recipe = recipe; -// } -// -// @Override -// public void draw(Book book, CategoryAbstract category, EntryAbstract entry, -// int guiLeft, int guiTop, int mouseX, int mouseY, GuiBase guiBase, -// FontRenderer fontRenderer) { -// Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation(ModInformation.GUITEXLOC + "recipe_elements.png")); -// guiBase.drawTexturedModalRect(guiLeft + 42, guiTop + 53, 0, 0, 105, 65); -// -// guiBase.drawCenteredString(fontRenderer, StatCollector.translateToLocal("text.recipe.shapedOrb"), guiLeft + guiBase.xSize / 2, guiTop + 12, 0); -// if(recipe instanceof ShapelessBloodOrbRecipe) -// { -// ShapelessBloodOrbRecipe shapelessBloodOrbRecipe = (ShapelessBloodOrbRecipe) recipe; -// List list = shapelessBloodOrbRecipe.getInput(); -// -// int width = 3; -// int height = 3; -// for (int y = 0; y < height; y++) { -// for (int x = 0; x < width; x++) { -// if(list.size() - 1 < y * width + x) -// { -// continue; -// } -// -// int stackX = (x + 1) * 18 + (guiLeft + guiBase.xSize / 7); -// int stackY = (y + 1) * 18 + (guiTop + guiBase.ySize / 5); -// -// Object component = list.get(y * width + x); -// if (component != null) { -// if (component instanceof ItemStack) { -// GuiHelper.drawItemStack((ItemStack) component, stackX, stackY); -// if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15)) { -// guiBase.renderToolTip((ItemStack) component, stackX, stackY); -// } -// } else if (component instanceof Integer) { -// GuiHelper.drawItemStack(APISpellHelper.getOrbForLevel((Integer) component), stackX, stackY); -// if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15)) { -// guiBase.renderToolTip(APISpellHelper.getOrbForLevel((Integer) component), stackX, stackY); -// } -// } else { -// if (((ArrayList) component).isEmpty()) return; -// GuiHelper.drawItemStack(((ArrayList) component).get(0), stackX, stackY); -// if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15)) { -// guiBase.renderToolTip(((ArrayList) component).get(0), stackX, stackY); -// } -// } -// } -// } -// } -// int outputX = (5 * 18) + (guiLeft + guiBase.xSize / 7); -// int outputY = (2 * 18) + (guiTop + guiBase.xSize / 5); -// GuiHelper.drawItemStack(shapelessBloodOrbRecipe.getRecipeOutput(), outputX, outputY); -// if (GuiHelper.isMouseBetween(mouseX, mouseY, outputX, outputY, 15, 15)) { -// guiBase.renderToolTip(shapelessBloodOrbRecipe.getRecipeOutput(), outputX, outputY); -// } -// }else -// { -// ShapedBloodOrbRecipe shapedBloodOrbRecipe = (ShapedBloodOrbRecipe) recipe; -// int width = ReflectionHelper.getPrivateValue(ShapedBloodOrbRecipe.class, shapedBloodOrbRecipe, 4); -// int height = ReflectionHelper.getPrivateValue(ShapedBloodOrbRecipe.class, shapedBloodOrbRecipe, 5); -// for (int y = 0; y < height; y++) { -// for (int x = 0; x < width; x++) { -// int stackX = (x + 1) * 18 + (guiLeft + guiBase.xSize / 7); -// int stackY = (y + 1) * 18 + (guiTop + guiBase.ySize / 5); -// Object component = shapedBloodOrbRecipe.getInput()[y * width + x]; -// if (component != null) { -// if (component instanceof ItemStack) { -// GuiHelper.drawItemStack((ItemStack) component, stackX, stackY); -// if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15)) { -// guiBase.renderToolTip((ItemStack) component, stackX, stackY); -// } -// } else if (component instanceof Integer) { -// GuiHelper.drawItemStack(APISpellHelper.getOrbForLevel((Integer) component), stackX, stackY); -// if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15)) { -// guiBase.renderToolTip(APISpellHelper.getOrbForLevel((Integer) component), stackX, stackY); -// } -// } else { -// if (((ArrayList) component).isEmpty()) return; -// GuiHelper.drawItemStack(((ArrayList) component).get(0), stackX, stackY); -// if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15)) { -// guiBase.renderToolTip(((ArrayList) component).get(0), stackX, stackY); -// } -// } -// } -// } -// } -// int outputX = (5 * 18) + (guiLeft + guiBase.xSize / 7); -// int outputY = (2 * 18) + (guiTop + guiBase.xSize / 5); -// GuiHelper.drawItemStack(shapedBloodOrbRecipe.getRecipeOutput(), outputX, outputY); -// if (GuiHelper.isMouseBetween(mouseX, mouseY, outputX, outputY, 15, 15)) { -// guiBase.renderToolTip(shapedBloodOrbRecipe.getRecipeOutput(), outputX, outputY); -// } -// } -// -// } -// -// @Override -// public void drawExtras(Book book, CategoryAbstract category, -// EntryAbstract entry, int guiLeft, int guiTop, int mouseX, -// int mouseY, GuiBase guiBase, FontRenderer fontRenderer) { -// // TODO Auto-generated method stub -// -// } -// -//} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/guide/PageAltarRecipe.java b/src/main/java/WayofTime/alchemicalWizardry/api/guide/PageAltarRecipe.java deleted file mode 100644 index 7e61a8e5..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/guide/PageAltarRecipe.java +++ /dev/null @@ -1,69 +0,0 @@ -//package WayofTime.alchemicalWizardry.api.guide; -// -// -//import net.minecraft.client.Minecraft; -//import net.minecraft.client.gui.FontRenderer; -//import net.minecraft.init.Blocks; -//import net.minecraft.item.Item; -//import net.minecraft.item.ItemStack; -//import net.minecraft.util.ResourceLocation; -//import net.minecraft.util.StatCollector; -//import WayofTime.alchemicalWizardry.api.altarRecipeRegistry.AltarRecipe; -//import amerifrance.guideapi.api.abstraction.CategoryAbstract; -//import amerifrance.guideapi.api.abstraction.EntryAbstract; -//import amerifrance.guideapi.api.base.Book; -//import amerifrance.guideapi.api.base.PageBase; -//import amerifrance.guideapi.api.util.GuiHelper; -//import amerifrance.guideapi.gui.GuiBase; -//import cpw.mods.fml.relauncher.Side; -//import cpw.mods.fml.relauncher.SideOnly; -// -//public class PageAltarRecipe extends PageBase { -// -// public ItemStack input; -// public ItemStack output; -// public int tier; -// public int bloodRequired; -// -// public PageAltarRecipe(AltarRecipe recipe) { -// this.input = recipe.getRequiredItem(); -// this.output = recipe.getResult(); -// this.tier = recipe.getMinTier(); -// this.bloodRequired = recipe.getLiquidRequired(); -// } -// -// @Override -// @SideOnly(Side.CLIENT) -// public void draw(Book book, CategoryAbstract category, EntryAbstract entry, int guiLeft, int guiTop, int mouseX, int mouseY, GuiBase guiBase, FontRenderer fontRenderer) { -// -// Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("alchemicalwizardry" + ":textures/gui/guide/altar.png")); -// guiBase.drawTexturedModalRect(guiLeft + 42, guiTop + 53, 0, 87, 146, 104); -// -// guiBase.drawCenteredString(fontRenderer, StatCollector.translateToLocal("text.recipe.altar"), guiLeft + guiBase.xSize / 2, guiTop + 12, 0); -// -// int inputX = (1 + 1) * 20 + (guiLeft + guiBase.xSize / 7); -// int inputY = (20) + (guiTop + guiBase.ySize / 5); //1 * 20 -// GuiHelper.drawItemStack(input, inputX, inputY); -// if (GuiHelper.isMouseBetween(mouseX, mouseY, inputX, inputY, 15, 15)) { -// guiBase.renderToolTip(input, mouseX, mouseY); -// } -// -// if (output == null) { -// output = new ItemStack(Blocks.fire); -// } -// int outputX = (5 * 20) + (guiLeft + guiBase.xSize / 7); -// int outputY = (20) + (guiTop + guiBase.xSize / 5); // 1 * 20 -// GuiHelper.drawItemStack(output, outputX, outputY); -// if (GuiHelper.isMouseBetween(mouseX, mouseY, outputX, outputY, 15, 15)) { -// guiBase.renderToolTip(output, outputX, outputY); -// } -// -// if (output.getItem() == Item.getItemFromBlock(Blocks.fire)) { -// guiBase.drawCenteredString(fontRenderer, StatCollector.translateToLocal("text.furnace.error"), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6, 0xED073D); -// guiBase.drawCenteredString(fontRenderer, StatCollector.translateToLocal("bm.string.tier") + ": " + String.valueOf(tier), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6 + 15, 0); -// guiBase.drawCenteredString(fontRenderer, "LP: " + String.valueOf(bloodRequired), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6 + 30, 0); -// } -// guiBase.drawCenteredString(fontRenderer, String.format(StatCollector.translateToLocal("text.recipe.altar.tier"), String.valueOf(tier)), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6, 0); -// guiBase.drawCenteredString(fontRenderer, String.format(StatCollector.translateToLocal("text.recipe.altar.bloodRequired"), String.valueOf(bloodRequired)), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6 + 15, 0); -// } -//} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/guide/PageMultiBlock.java b/src/main/java/WayofTime/alchemicalWizardry/api/guide/PageMultiBlock.java deleted file mode 100644 index 0a0678f6..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/guide/PageMultiBlock.java +++ /dev/null @@ -1,145 +0,0 @@ -//package WayofTime.alchemicalWizardry.api.guide; -// -//import net.minecraft.client.Minecraft; -//import net.minecraft.client.gui.FontRenderer; -//import net.minecraft.client.renderer.RenderHelper; -//import net.minecraft.client.renderer.entity.RenderItem; -//import net.minecraft.item.ItemStack; -// -//import org.lwjgl.opengl.GL11; -//import org.lwjgl.opengl.GL12; -// -//import amerifrance.guideapi.api.abstraction.CategoryAbstract; -//import amerifrance.guideapi.api.abstraction.EntryAbstract; -//import amerifrance.guideapi.api.base.Book; -//import amerifrance.guideapi.api.base.PageBase; -//import amerifrance.guideapi.gui.GuiBase; -//import cpw.mods.fml.relauncher.Side; -//import cpw.mods.fml.relauncher.SideOnly; -// -//public class PageMultiBlock extends PageBase -//{ -// ItemStack[][][] structure; -// boolean canTick = false; -// int tick = 0; -// int showLayer = -1; -// float scaleFactor = 1; -// -// boolean renderMouseOver = true; -// -// public PageMultiBlock(ItemStack[][][] structure) -// { -// this.structure = structure; -// initPage(structure); -// } -// -// int blockCount=0; -// int[] countPerLevel; -// int structureHeight = 0; -// int structureLength = 0; -// int structureWidth = 0; -// -// public void initPage(ItemStack[][][] structure) -// { -// structureHeight = structure.length; -// structureWidth=0; -// structureLength=0; -// countPerLevel = new int[structureHeight]; -// blockCount=0; -// for(int h=0; hstructureLength) -// structureLength = structure[h].length-1; -// int perLvl=0; -// for(int l=0; lstructureWidth) -// structureWidth = structure[h][l].length-1; -// for(ItemStack ss : structure[h][l]) -// if(ss!=null) -// perLvl++; -// } -// countPerLevel[h] = perLvl; -// blockCount += perLvl; -// } -// tick= (showLayer==-1?blockCount:countPerLevel[showLayer])*40; -//// int yOff = (structureHeight-1)*12+structureWidth*5+structureLength*5+16; -//// pageButtons.add(new GuiButtonManualNavigation(gui, 100, x+4,y+yOff/2-5, 10,10, 4)); -//// pageButtons.add(new GuiButtonManualNavigation(gui, 101, x+4,y+yOff/2-8-16, 10,16, 3)); -//// pageButtons.add(new GuiButtonManualNavigation(gui, 102, x+4,y+yOff/2+8, 10,16, 2)); -// } -// -// @Override -// @SideOnly(Side.CLIENT) -// public void draw(Book book, CategoryAbstract category, EntryAbstract entry, int guiLeft, int guiTop, int mouseX, int mouseY, GuiBase guiBase, FontRenderer fontRenderer) -// { -//// if(multiblock.getStructureManual()!=null) -// Minecraft mc = Minecraft.getMinecraft(); -// -// int x = guiLeft + 32; -// int y = guiTop + 30; -// { -// if(canTick) -// tick++; -// -// int prevLayers = 0; -// if(showLayer!=-1) -// for(int ll=0; ll=0; l--) -// { -// ItemStack[] row = level[l]; -// for(int w=row.length-1; w>=0; w--) -// { -// int xx = 60 +xHalf -10*w +10*l -7; -// int yy = yOffPartial - 5*w - 5*l -12*h; -// GL11.glTranslated(0, 0, 1); -// if(row[w]!=null && i<=limiter) -// { -// i++; -// RenderItem.getInstance().renderItemIntoGUI(mc.fontRendererObj, mc.renderEngine, row[w], x+xx, y+yy); -// if(mouseX>=x+xx&&mouseX=y+yy&&mouseY ritualComponents) -// { -// int minX = 0; -// int minY = 0; -// int minZ = 0; -// -// int maxX = 0; -// int maxY = 0; -// int maxZ = 0; -// -// for(RitualComponent comp : ritualComponents) -// { -// minX = Math.min(comp.getX(), minX); -// minY = Math.min(comp.getY(), minY); -// minZ = Math.min(comp.getZ(), minZ); -// -// maxX = Math.max(comp.getX(), maxX); -// maxY = Math.max(comp.getY(), maxY); -// maxZ = Math.max(comp.getZ(), maxZ); -// } -// -// System.out.println("Min: (" + minX + ", " + minY + ", " + minZ + "), Max: (" + maxX + ", " + maxY + ", " + maxZ + ")"); -// -// ItemStack[][][] tempStructure = new ItemStack[maxY-minY+1][maxX-minX+1][maxZ-minZ+1]; //First value is vertical, second is down to the left, third is down to the right -// -// for(RitualComponent comp : ritualComponents) -// { -// tempStructure[comp.getY() - minY][comp.getX() - minX][comp.getZ() - minZ] = getStackForRitualStone(comp.getStoneType()); -// } -// -// tempStructure[-minY][-minX][-minZ] = new ItemStack(ModBlocks.blockMasterStone); -// -// return new PageRitualMultiBlock(tempStructure); -// } -// -// private static ItemStack getStackForRitualStone(int type) -// { -// switch(type) -// { -// case RitualComponent.BLANK: -// return blankStone; -// case RitualComponent.WATER: -// return waterStone; -// case RitualComponent.FIRE: -// return fireStone; -// case RitualComponent.EARTH: -// return earthStone; -// case RitualComponent.AIR: -// return airStone; -// case RitualComponent.DUSK: -// return duskStone; -// case RitualComponent.DAWN: -// return dawnStone; -// } -// return blankStone; -// } -//} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/harvest/HarvestRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/api/harvest/HarvestRegistry.java deleted file mode 100644 index 2d5e884b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/harvest/HarvestRegistry.java +++ /dev/null @@ -1,35 +0,0 @@ -package WayofTime.alchemicalWizardry.api.harvest; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; - -public class HarvestRegistry -{ - public static List handlerList = new ArrayList(); - - public static void registerHarvestHandler(IHarvestHandler handler) - { - handlerList.add(handler); - } - - public static boolean harvestBlock(World world, BlockPos pos) - { - IBlockState state = world.getBlockState(pos); - Block block = state.getBlock(); - - for (IHarvestHandler handler : handlerList) - { - if (handler.harvestAndPlant(world, pos, block, state)) - { - return true; - } - } - - return false; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/harvest/IHarvestHandler.java b/src/main/java/WayofTime/alchemicalWizardry/api/harvest/IHarvestHandler.java deleted file mode 100644 index d7dc78a8..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/harvest/IHarvestHandler.java +++ /dev/null @@ -1,18 +0,0 @@ -package WayofTime.alchemicalWizardry.api.harvest; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; - -public interface IHarvestHandler -{ - /** - * A handler that is used to harvest and replant the block at the specified location - * - * @param world - * @param block block at this given location - * @return true if successfully harvested, false if not - */ - boolean harvestAndPlant(World world, BlockPos pos, Block block, IBlockState state); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/items/IAltarManipulator.java b/src/main/java/WayofTime/alchemicalWizardry/api/items/IAltarManipulator.java deleted file mode 100644 index b84f95cc..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/items/IAltarManipulator.java +++ /dev/null @@ -1,6 +0,0 @@ -package WayofTime.alchemicalWizardry.api.items; - -public interface IAltarManipulator -{ - -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/items/ItemSpellMultiTool.java b/src/main/java/WayofTime/alchemicalWizardry/api/items/ItemSpellMultiTool.java deleted file mode 100644 index 40773cb5..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/items/ItemSpellMultiTool.java +++ /dev/null @@ -1,803 +0,0 @@ -package WayofTime.alchemicalWizardry.api.items; - -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Random; -import java.util.Set; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.BlockPos; -import net.minecraft.util.DamageSource; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.common.util.Constants; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.api.spell.APISpellHelper; -import WayofTime.alchemicalWizardry.api.spell.SpellEffect; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmTool; - -public class ItemSpellMultiTool extends Item -{ - private static final String harvestLevelSuffix = "harvestLvl"; - private static final String digLevelSuffix = "digLvl"; - private static final String tagName = "BloodMagicTool"; - private Random rand = new Random(); - - public ItemSpellMultiTool() - { - super(); - this.setMaxDamage(0); - this.setMaxStackSize(1); - this.setFull3D(); - } - - @Override - public boolean hitEntity(ItemStack par1ItemStack, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase) - { - float damage = this.getCustomItemAttack(par1ItemStack); - - float f = (float)par3EntityLivingBase.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue(); - - SpellParadigmTool parad = this.loadParadigmFromStack(par1ItemStack); - - if (parad != null) - { - parad.onLeftClickEntity(par1ItemStack, par2EntityLivingBase, par3EntityLivingBase); - } - - damage += parad.getAddedDamageForEntity(par2EntityLivingBase); - - if (rand.nextFloat() < this.getCritChance(par1ItemStack)) - { - damage *= 1.75f; - } - - damage *= f; - - if (par3EntityLivingBase instanceof EntityPlayer) - { - par2EntityLivingBase.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer) par3EntityLivingBase), damage); - } else - { - par2EntityLivingBase.attackEntityFrom(DamageSource.causeMobDamage(par3EntityLivingBase), damage); - } - - return true; - } - - @Override - public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) - { - SpellParadigmTool parad = this.loadParadigmFromStack(stack); - - if (parad != null && entity instanceof EntityLivingBase) - { - parad.onLeftClickEntity(stack, (EntityLivingBase) entity, player); - } - - return false; - } - - @Override - public boolean onBlockStartBreak(ItemStack stack, BlockPos pos, EntityPlayer player) - { - if (player.worldObj.isRemote) - { - return false; - } - - if (!stack.hasTagCompound()) - return false; - - World world = player.worldObj; - IBlockState state = world.getBlockState(pos); - Block block = state.getBlock(); - if (block == null || block == Blocks.air) - return false; - int hlvl = -1; - float blockHardness = block.getBlockHardness(world, pos); - - MovingObjectPosition mop = APISpellHelper.raytraceFromEntity(world, player, true, 5.0D); - - IBlockState localState = world.getBlockState(pos); - Block localBlock = state.getBlock(); - String toolClass = block.getHarvestTool(state); - if (toolClass != null && this.getHarvestLevel(stack, toolClass) != -1) - hlvl = block.getHarvestLevel(state); - int toolLevel = this.getHarvestLevel(stack, toolClass); - - float localHardness = localBlock == null ? Float.MAX_VALUE : localBlock.getBlockHardness(world, pos); - - if (hlvl <= toolLevel && localHardness - 1.5 <= blockHardness) - { - boolean cancelHarvest = false; - - if (!cancelHarvest) - { - if (localBlock != null && !(localHardness < 0)) - { - boolean isEffective = false; - - String localToolClass = this.getToolClassForMaterial(localBlock.getMaterial()); - - if (localToolClass != null && this.getHarvestLevel(stack, toolClass) >= localBlock.getHarvestLevel(localState)) - { - isEffective = true; - } - - - if (localBlock.getMaterial().isToolNotRequired()) - { - isEffective = true; - } - - if (!player.capabilities.isCreativeMode) - { - if (isEffective) - { - if (localBlock.removedByPlayer(world, pos, player, true)) - { - localBlock.onBlockDestroyedByPlayer(world, pos, localState); - } - localBlock.onBlockHarvested(world, pos, localState, player); - if (blockHardness > 0f) - onBlockDestroyed(stack, world, localBlock, pos, player); - - List items = APISpellHelper.getItemsFromBlock(world, pos, localBlock, localState, this.getSilkTouch(stack), this.getFortuneLevel(stack)); - - SpellParadigmTool parad = this.loadParadigmFromStack(stack); - List newItems = parad.handleItemList(stack, items); - - if (!world.isRemote) - { - APISpellHelper.spawnItemListInWorld(newItems, world, pos.getX() + 0.5f, pos.getY() + 0.5f, pos.getZ() + 0.5f); - } - - world.markBlockForUpdate(pos); - - int cost = 0; - - cost += parad.digSurroundingArea(stack, world, player, mop, localToolClass, localHardness, toolLevel, this); - - cost += parad.onBreakBlock(stack, world, player, localBlock, localState, pos, mop.field_178784_b); - - if (cost > 0) - { - SoulNetworkHandler.syphonAndDamageFromNetwork(stack, player, cost); - } - } else - { - world.setBlockToAir(pos); - world.markBlockForUpdate(pos); - } - - } else - { - world.setBlockToAir(pos); - world.markBlockForUpdate(pos); - } - } - } - } - -// if (!world.isRemote) -// world.playAuxSFX(2001, x, y, z, Block.getIdFromBlock(block) + (meta << 12)); - return true; - - } - - public Material[] getMaterialsForToolclass(String toolClass) - { - if ("pickaxe".equals(toolClass)) - { - return new Material[]{Material.rock, Material.iron, Material.ice, Material.glass, Material.piston, Material.anvil, Material.circuits}; - } else if ("shovel".equals(toolClass)) - { - return new Material[]{Material.grass, Material.ground, Material.sand, Material.snow, Material.craftedSnow, Material.clay}; - } else if ("axe".equals(toolClass)) - { - return new Material[]{Material.wood, Material.vine, Material.circuits, Material.cactus}; - } - return new Material[0]; - } - - public String getToolClassForMaterial(Material mat) - { - String testString = "pickaxe"; - - Material[] matList = this.getMaterialsForToolclass(testString); - for (int i = 0; i < matList.length; i++) - { - if (matList[i] == mat) - { - return testString; - } - } - - testString = "shovel"; - matList = this.getMaterialsForToolclass(testString); - for (int i = 0; i < matList.length; i++) - { - if (matList[i] == mat) - { - return testString; - } - } - - testString = "axe"; - matList = this.getMaterialsForToolclass(testString); - for (int i = 0; i < matList.length; i++) - { - if (matList[i] == mat) - { - return testString; - } - } - - return null; - } - - public Set getToolClasses(ItemStack stack) - { - Set set = new HashSet(); - - if (this.getHarvestLevel(stack, "pickaxe") > -1) - { - set.add("pickaxe"); - } - - if (this.getHarvestLevel(stack, "axe") > -1) - { - set.add("axe"); - } - - if (this.getHarvestLevel(stack, "shovel") > -1) - { - set.add("shovel"); - } - - return set; - } - - @Override - public float getDigSpeed(ItemStack stack, IBlockState state) - { - Block block = state.getBlock(); - String toolClass = block.getHarvestTool(state); - - if (toolClass == null || toolClass.equals("")) - { - return 1.0f; - } - { - if (stack.hasTagCompound()) - { - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(tagName); - - return tag.getFloat(digLevelSuffix + toolClass); - } else - { - stack.setTagCompound(new NBTTagCompound()); - } - } - - return 1.0f; - } - - @Override - public int getHarvestLevel(ItemStack stack, String toolClass) - { - if (stack.hasTagCompound()) - { - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(tagName); - - if (tag.hasKey(harvestLevelSuffix + toolClass)) - { - return tag.getInteger(harvestLevelSuffix + toolClass); - } else - { - return -1; - } - } else - { - stack.setTagCompound(new NBTTagCompound()); - } - - return -1; - } - - @Override - public boolean canHarvestBlock(Block par1Block, ItemStack itemStack) - { - - return true; - } - - @Override - public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) - { - return false; - } - - @Override - public void onUpdate(ItemStack toolStack, World world, Entity par3Entity, int par4, boolean par5) - { - if (world.isRemote) - { - return; - } - - SpellParadigmTool parad = this.loadParadigmFromStack(toolStack); - int cost = parad.onUpdate(toolStack, world, par3Entity, par4, par5); - - if (par3Entity instanceof EntityPlayer && cost > 0) - SoulNetworkHandler.syphonAndDamageFromNetwork(toolStack, (EntityPlayer) par3Entity, cost); - - int duration = Math.max(this.getDuration(toolStack, world), 0); - - if (duration <= 0 && par3Entity instanceof EntityPlayer) - { - int banishCost = parad.onBanishTool(toolStack, world, par3Entity, par4, par5); - SoulNetworkHandler.syphonAndDamageFromNetwork(toolStack, (EntityPlayer) par3Entity, banishCost); - ((EntityPlayer) par3Entity).inventory.mainInventory[par4] = this.getContainedCrystal(toolStack); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (par3EntityPlayer.isSneaking()) - { - par3EntityPlayer.setCurrentItemOrArmor(0, this.getContainedCrystal(par1ItemStack)); - return par1ItemStack; - } - - SpellParadigmTool parad = this.loadParadigmFromStack(par1ItemStack); - - MovingObjectPosition mop = this.getMovingObjectPositionFromPlayer(par2World, par3EntityPlayer, false); - - int cost; - - if (mop != null && mop.typeOfHit.equals(MovingObjectPosition.MovingObjectType.BLOCK)) - { - cost = parad.onRightClickBlock(par1ItemStack, par3EntityPlayer, par2World, mop); - } else - { - cost = parad.onRightClickAir(par1ItemStack, par2World, par3EntityPlayer); - } - - if (cost > 0) - { - SoulNetworkHandler.syphonAndDamageFromNetwork(par1ItemStack, par3EntityPlayer, cost); - } - - return par1ItemStack; - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add("A mace filled with ancient alchemy"); - - if (!(par1ItemStack.getTagCompound() == null)) - { - if (!par1ItemStack.getTagCompound().getString("ownerName").equals("")) - { - par3List.add("Current owner: " + par1ItemStack.getTagCompound().getString("ownerName")); - } - - for (String str : this.getToolListString(par1ItemStack)) - { - par3List.add(str); - } - - par3List.add(""); - float damage = this.getCustomItemAttack(par1ItemStack); - par3List.add("\u00A79+" + ((int) (damage * 10)) / 10.0f + " " + "Attack Damage"); - float critChance = ((int) (this.getCritChance(par1ItemStack) * 1000)) / 10.0f; - par3List.add("\u00A79+" + critChance + "% " + "Crit Chance"); - } - } - - //--------------Custom methods--------------// - - public void setHarvestLevel(ItemStack stack, String toolClass, int harvestLevel) - { - if (stack.hasTagCompound()) - { - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(tagName); - - tag.setInteger(harvestLevelSuffix + toolClass, Math.max(-1, harvestLevel)); - - stack.getTagCompound().setTag(tagName, tag); - } else - { - stack.setTagCompound(new NBTTagCompound()); - - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(tagName); - - tag.setInteger(harvestLevelSuffix + toolClass, Math.max(-1, harvestLevel)); - - stack.getTagCompound().setTag(tagName, tag); - } - } - - public void setDigSpeed(ItemStack stack, String toolClass, float digSpeed) - { - if (stack.hasTagCompound()) - { - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(tagName); - - tag.setFloat(digLevelSuffix + toolClass, digSpeed); - - stack.getTagCompound().setTag(tagName, tag); - } else - { - stack.setTagCompound(new NBTTagCompound()); - - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(tagName); - - tag.setFloat(digLevelSuffix + toolClass, digSpeed); - - stack.getTagCompound().setTag(tagName, tag); - } - } - - public float getDigSpeed(ItemStack stack, String toolClass) - { - if (stack.hasTagCompound()) - { - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(tagName); - - return tag.getFloat(digLevelSuffix + toolClass); - } else - { - stack.setTagCompound(new NBTTagCompound()); - - return 0.0f; - } - } - - public void setItemAttack(ItemStack stack, float damage) - { - if (stack.hasTagCompound()) - { - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(tagName); - - tag.setFloat("itemAttack", Math.max(damage, 0.0f)); - - stack.getTagCompound().setTag(tagName, tag); - } else - { - stack.setTagCompound(new NBTTagCompound()); - - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(tagName); - - tag.setFloat("itemAttack", Math.max(damage, 0.0f)); - - stack.getTagCompound().setTag(tagName, tag); - } - } - - public float getCustomItemAttack(ItemStack stack) - { - if (stack.hasTagCompound()) - { - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(tagName); - - return tag.getFloat("itemAttack"); - } else - { - stack.setTagCompound(new NBTTagCompound()); - - return 0.0f; - } - } - - public ItemStack getContainedCrystal(ItemStack container) - { - if (container.hasTagCompound()) - { - NBTTagCompound tag = container.getTagCompound().getCompoundTag(tagName).getCompoundTag("heldItem"); - - return ItemStack.loadItemStackFromNBT(tag); - } else - { - container.setTagCompound(new NBTTagCompound()); - - return null; - } - } - - public void setContainedCrystal(ItemStack container, ItemStack crystal) - { - if (container.hasTagCompound()) - { - NBTTagCompound compTag = container.getTagCompound().getCompoundTag(tagName); - NBTTagCompound tag = compTag.getCompoundTag("heldItem"); - - crystal.writeToNBT(tag); - - compTag.setTag("heldItem", tag); - container.getTagCompound().setTag(tagName, compTag); - } else - { - container.setTagCompound(new NBTTagCompound()); - - NBTTagCompound compTag = container.getTagCompound().getCompoundTag(tagName); - NBTTagCompound tag = compTag.getCompoundTag("heldItem"); - - crystal.writeToNBT(tag); - - compTag.setTag("heldItem", tag); - container.getTagCompound().setTag(tagName, compTag); - } - } - - public void setDuration(ItemStack container, World world, int duration) - { - if (!world.isRemote) - { - World overWorld = DimensionManager.getWorld(0); - long worldtime = overWorld.getTotalWorldTime(); - - if (container.hasTagCompound()) - { - NBTTagCompound tag = container.getTagCompound().getCompoundTag(tagName); - - tag.setLong("duration", Math.max(duration + worldtime, worldtime)); - - container.getTagCompound().setTag(tagName, tag); - } else - { - container.setTagCompound(new NBTTagCompound()); - - NBTTagCompound tag = container.getTagCompound().getCompoundTag(tagName); - - tag.setLong("duration", Math.max(duration + worldtime, worldtime)); - - container.getTagCompound().setTag(tagName, tag); - } - } - } - - public int getDuration(ItemStack container, World world) - { - if (world.isRemote) - { - return 0; - } else - { - World overWorld = DimensionManager.getWorld(0); - long worldtime = overWorld.getTotalWorldTime(); - - if (container.hasTagCompound()) - { - NBTTagCompound tag = container.getTagCompound().getCompoundTag(tagName); - - return (int) (tag.getLong("duration") - worldtime); - } else - { - container.setTagCompound(new NBTTagCompound()); - - return 0; - } - } - } - - public void loadParadigmIntoStack(ItemStack container, List list) - { - if (!container.hasTagCompound()) - { - container.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tagiest = container.getTagCompound().getCompoundTag(tagName); - - NBTTagList effectList = new NBTTagList(); - - for (SpellEffect eff : list) - { - effectList.appendTag(eff.getTag()); - } - - tagiest.setTag("Effects", effectList); - - container.getTagCompound().setTag(tagName, tagiest); - } - - public SpellParadigmTool loadParadigmFromStack(ItemStack container) - { - if (!container.hasTagCompound()) - { - container.setTagCompound(new NBTTagCompound()); - } - NBTTagCompound tagiest = container.getTagCompound().getCompoundTag(tagName); - - NBTTagList tagList = tagiest.getTagList("Effects", Constants.NBT.TAG_COMPOUND); - - List spellEffectList = new LinkedList(); - for (int i = 0; i < tagList.tagCount(); i++) - { - NBTTagCompound tag = tagList.getCompoundTagAt(i); - - SpellEffect eff = SpellEffect.getEffectFromTag(tag); - if (eff != null) - { - spellEffectList.add(eff); - } - } - - return SpellParadigmTool.getParadigmForEffectArray(spellEffectList); - } - - public void setSilkTouch(ItemStack stack, boolean silkTouch) - { - if (stack.hasTagCompound()) - { - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(tagName); - - tag.setBoolean("silkTouch", silkTouch); - - stack.getTagCompound().setTag(tagName, tag); - } else - { - stack.setTagCompound(new NBTTagCompound()); - - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(tagName); - - tag.setBoolean("silkTouch", silkTouch); - - stack.getTagCompound().setTag(tagName, tag); - } - } - - public boolean getSilkTouch(ItemStack stack) - { - if (stack.hasTagCompound()) - { - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(tagName); - - return tag.getBoolean("silkTouch"); - } else - { - stack.setTagCompound(new NBTTagCompound()); - - return false; - } - } - - public void setFortuneLevel(ItemStack stack, int fortune) - { - if (stack.hasTagCompound()) - { - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(tagName); - - tag.setInteger("fortuneLevel", Math.max(fortune, 0)); - - stack.getTagCompound().setTag(tagName, tag); - } else - { - stack.setTagCompound(new NBTTagCompound()); - - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(tagName); - - tag.setInteger("fortuneLevel", Math.max(fortune, 0)); - - stack.getTagCompound().setTag(tagName, tag); - } - } - - public int getFortuneLevel(ItemStack stack) - { - if (stack.hasTagCompound()) - { - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(tagName); - - return tag.getInteger("fortuneLevel"); - } else - { - stack.setTagCompound(new NBTTagCompound()); - - return 0; - } - } - - public List getToolListString(ItemStack container) - { - if (!container.hasTagCompound()) - { - container.setTagCompound(new NBTTagCompound()); - } - NBTTagCompound tagiest = container.getTagCompound().getCompoundTag(tagName); - - NBTTagList tagList = tagiest.getTagList("ToolTips", Constants.NBT.TAG_COMPOUND); - - List toolTipList = new LinkedList(); - for (int i = 0; i < tagList.tagCount(); i++) - { - NBTTagCompound tag = tagList.getCompoundTagAt(i); - - String str = tag.getString("tip"); - if (str != null) - { - toolTipList.add(str); - } - } - - return toolTipList; - } - - public void setToolListString(ItemStack container, List toolTipString) - { - if (!container.hasTagCompound()) - { - container.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tagiest = container.getTagCompound().getCompoundTag(tagName); - - NBTTagList stringList = new NBTTagList(); - - for (String str : toolTipString) - { - NBTTagCompound tag = new NBTTagCompound(); - tag.setString("tip", str); - - stringList.appendTag(tag); - } - - tagiest.setTag("ToolTips", stringList); - - container.getTagCompound().setTag(tagName, tagiest); - } - - public void setCritChance(ItemStack container, float chance) - { - if (container.hasTagCompound()) - { - NBTTagCompound tag = container.getTagCompound().getCompoundTag(tagName); - - tag.setFloat("critChance", Math.max(chance, 0)); - - container.getTagCompound().setTag(tagName, tag); - } else - { - container.setTagCompound(new NBTTagCompound()); - - NBTTagCompound tag = container.getTagCompound().getCompoundTag(tagName); - - tag.setFloat("critChance", Math.max(chance, 0)); - - container.getTagCompound().setTag(tagName, tag); - } - } - - public float getCritChance(ItemStack container) - { - if (container.hasTagCompound()) - { - NBTTagCompound tag = container.getTagCompound().getCompoundTag(tagName); - - return tag.getFloat("critChance"); - } else - { - container.setTagCompound(new NBTTagCompound()); - - return 0; - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/items/ShapedBloodOrbRecipe.java b/src/main/java/WayofTime/alchemicalWizardry/api/items/ShapedBloodOrbRecipe.java deleted file mode 100644 index ca2122bd..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/items/ShapedBloodOrbRecipe.java +++ /dev/null @@ -1,287 +0,0 @@ -package WayofTime.alchemicalWizardry.api.items; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Map.Entry; - -import net.minecraft.block.Block; -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.item.crafting.ShapedRecipes; -import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBloodOrb; - -/** - * Shaped Blood Orb Recipe Handler by joshie * - */ -public class ShapedBloodOrbRecipe implements IRecipe -{ - private static final int MAX_CRAFT_GRID_WIDTH = 3; - private static final int MAX_CRAFT_GRID_HEIGHT = 3; - - private ItemStack output = null; - private Object[] input = null; - public int width = 0; - public int height = 0; - private boolean mirrored = true; - - public ShapedBloodOrbRecipe(Block result, Object... recipe) - { - this(new ItemStack(result), recipe); - } - - public ShapedBloodOrbRecipe(Item result, Object... recipe) - { - this(new ItemStack(result), recipe); - } - - public ShapedBloodOrbRecipe(ItemStack result, Object... recipe) - { - output = result.copy(); - - String shape = ""; - int idx = 0; - - if (recipe[idx] instanceof Boolean) - { - mirrored = (Boolean) recipe[idx]; - if (recipe[idx + 1] instanceof Object[]) - { - recipe = (Object[]) recipe[idx + 1]; - } else - { - idx = 1; - } - } - - if (recipe[idx] instanceof String[]) - { - String[] parts = ((String[]) recipe[idx++]); - - for (String s : parts) - { - width = s.length(); - shape += s; - } - - height = parts.length; - } else - { - while (recipe[idx] instanceof String) - { - String s = (String) recipe[idx++]; - shape += s; - width = s.length(); - height++; - } - } - - if (width * height != shape.length()) - { - String ret = "Invalid shaped ore recipe: "; - for (Object tmp : recipe) - { - ret += tmp + ", "; - } - ret += output; - throw new RuntimeException(ret); - } - - HashMap itemMap = new HashMap(); - - for (; idx < recipe.length; idx += 2) - { - Character chr = (Character) recipe[idx]; - Object in = recipe[idx + 1]; - - if (in instanceof IBloodOrb || (in instanceof ItemStack && ((ItemStack) in).getItem() instanceof IBloodOrb)) - { //If the item is an instanceof IBloodOrb then save the level of the orb - if (in instanceof ItemStack) - itemMap.put(chr, ((IBloodOrb) ((ItemStack) in).getItem()).getOrbLevel()); - else itemMap.put(chr, ((IBloodOrb) in).getOrbLevel()); - } else if (in instanceof ItemStack) - { - itemMap.put(chr, ((ItemStack) in).copy()); - } else if (in instanceof Item) - { - itemMap.put(chr, new ItemStack((Item) in)); - } else if (in instanceof Block) - { - itemMap.put(chr, new ItemStack((Block) in, 1, OreDictionary.WILDCARD_VALUE)); - } else if (in instanceof String) - { - itemMap.put(chr, OreDictionary.getOres((String) in)); - } else - { - String ret = "Invalid shaped ore recipe: "; - for (Object tmp : recipe) - { - ret += tmp + ", "; - } - ret += output; - throw new RuntimeException(ret); - } - } - - input = new Object[width * height]; - int x = 0; - for (char chr : shape.toCharArray()) - { - input[x++] = itemMap.get(chr); - } - } - - ShapedBloodOrbRecipe(ShapedRecipes recipe, Map replacements) - { - output = recipe.getRecipeOutput(); - width = recipe.recipeWidth; - height = recipe.recipeHeight; - - input = new Object[recipe.recipeItems.length]; - - for (int i = 0; i < input.length; i++) - { - ItemStack ingred = recipe.recipeItems[i]; - - if (ingred == null) - continue; - - input[i] = recipe.recipeItems[i]; - - for (Entry replace : replacements.entrySet()) - { - if (OreDictionary.itemMatches(replace.getKey(), ingred, true)) - { - input[i] = OreDictionary.getOres(replace.getValue()); - break; - } - } - } - } - - @Override - public ItemStack getCraftingResult(InventoryCrafting var1) - { - return output.copy(); - } - - @Override - public int getRecipeSize() - { - return input.length; - } - - @Override - public ItemStack getRecipeOutput() - { - return output; - } - - @Override - public boolean matches(InventoryCrafting inv, World world) - { - for (int x = 0; x <= MAX_CRAFT_GRID_WIDTH - width; x++) - { - for (int y = 0; y <= MAX_CRAFT_GRID_HEIGHT - height; ++y) - { - if (checkMatch(inv, x, y, false)) - { - return true; - } - - if (mirrored && checkMatch(inv, x, y, true)) - { - return true; - } - } - } - - return false; - } - - @SuppressWarnings("unchecked") - private boolean checkMatch(InventoryCrafting inv, int startX, int startY, boolean mirror) - { - for (int x = 0; x < MAX_CRAFT_GRID_WIDTH; x++) - { - for (int y = 0; y < MAX_CRAFT_GRID_HEIGHT; y++) - { - int subX = x - startX; - int subY = y - startY; - Object target = null; - - if (subX >= 0 && subY >= 0 && subX < width && subY < height) - { - if (mirror) - { - target = input[width - subX - 1 + subY * width]; - } else - { - target = input[subX + subY * width]; - } - } - - ItemStack slot = inv.getStackInRowAndColumn(x, y); - //If target is integer, then we should be check the blood orb value of the item instead - if (target instanceof Integer) - { - if (slot != null && slot.getItem() instanceof IBloodOrb) - { - IBloodOrb orb = (IBloodOrb) slot.getItem(); - if (orb.getOrbLevel() < (Integer) target) - { - return false; - } - } else return false; - } else if (target instanceof ItemStack) - { - if (!OreDictionary.itemMatches((ItemStack) target, slot, false)) - { - return false; - } - } else if (target instanceof ArrayList) - { - boolean matched = false; - - Iterator itr = ((ArrayList) target).iterator(); - while (itr.hasNext() && !matched) - { - matched = OreDictionary.itemMatches(itr.next(), slot, false); - } - - if (!matched) - { - return false; - } - } else if (target == null && slot != null) - { - return false; - } - } - } - - return true; - } - - public ShapedBloodOrbRecipe setMirrored(boolean mirror) - { - mirrored = mirror; - return this; - } - - public Object[] getInput() - { - return this.input; - } - - @Override - public ItemStack[] func_179532_b(InventoryCrafting inventory) - { - return new ItemStack[1]; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/items/ShapelessBloodOrbRecipe.java b/src/main/java/WayofTime/alchemicalWizardry/api/items/ShapelessBloodOrbRecipe.java deleted file mode 100644 index 0040f745..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/items/ShapelessBloodOrbRecipe.java +++ /dev/null @@ -1,186 +0,0 @@ -package WayofTime.alchemicalWizardry.api.items; - -import WayofTime.alchemicalWizardry.api.items.interfaces.IBloodOrb; -import net.minecraft.block.Block; -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.item.crafting.ShapelessRecipes; -import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -/** - * Shapeless Blood Orb Recipe Handler by joshie * - */ -public class ShapelessBloodOrbRecipe implements IRecipe -{ - private ItemStack output = null; - private ArrayList input = new ArrayList(); - - public ShapelessBloodOrbRecipe(Block result, Object... recipe) - { - this(new ItemStack(result), recipe); - } - - public ShapelessBloodOrbRecipe(Item result, Object... recipe) - { - this(new ItemStack(result), recipe); - } - - public ShapelessBloodOrbRecipe(ItemStack result, Object... recipe) - { - output = result.copy(); - for (Object in : recipe) - { - if (in instanceof IBloodOrb) - { //If the item is an instanceof IBloodOrb then save the level of the orb - input.add(((IBloodOrb) in).getOrbLevel()); - } - else if (in instanceof ItemStack) - { - if (((ItemStack)in).getItem() instanceof IBloodOrb) - { - input.add(((IBloodOrb) ((ItemStack)in).getItem()).getOrbLevel()); - } - else input.add(((ItemStack) in).copy()); - } else if (in instanceof Item) - { - input.add(new ItemStack((Item) in)); - } else if (in instanceof Block) - { - input.add(new ItemStack((Block) in)); - } else if (in instanceof String) - { - input.add(OreDictionary.getOres((String) in)); - } else - { - String ret = "Invalid shapeless ore recipe: "; - for (Object tmp : recipe) - { - ret += tmp + ", "; - } - ret += output; - throw new RuntimeException(ret); - } - } - } - - @SuppressWarnings("unchecked") - ShapelessBloodOrbRecipe(ShapelessRecipes recipe, Map replacements) - { - output = recipe.getRecipeOutput(); - - for (ItemStack ingred : ((List) recipe.recipeItems)) - { - Object finalObj = ingred; - for (Entry replace : replacements.entrySet()) - { - if (OreDictionary.itemMatches(replace.getKey(), ingred, false)) - { - finalObj = OreDictionary.getOres(replace.getValue()); - break; - } - } - input.add(finalObj); - } - } - - @Override - public int getRecipeSize() - { - return input.size(); - } - - @Override - public ItemStack getRecipeOutput() - { - return output; - } - - @Override - public ItemStack getCraftingResult(InventoryCrafting var1) - { - return output.copy(); - } - - @SuppressWarnings("unchecked") - @Override - public boolean matches(InventoryCrafting var1, World world) - { - ArrayList required = new ArrayList(input); - - for (int x = 0; x < var1.getSizeInventory(); x++) - { - ItemStack slot = var1.getStackInSlot(x); - - if (slot != null) - { - boolean inRecipe = false; - Iterator req = required.iterator(); - - while (req.hasNext()) - { - boolean match = false; - - Object next = req.next(); - - //If target is integer, then we should be check the blood orb value of the item instead - if (next instanceof Integer) - { - if (slot.getItem() instanceof IBloodOrb) - { - IBloodOrb orb = (IBloodOrb) slot.getItem(); - if (orb.getOrbLevel() < (Integer) next) - { - return false; - } - } else return false; - match = true; - } else if (next instanceof ItemStack) - { - match = OreDictionary.itemMatches((ItemStack) next, slot, false); - } else if (next instanceof ArrayList) - { - Iterator itr = ((ArrayList) next).iterator(); - while (itr.hasNext() && !match) - { - match = OreDictionary.itemMatches(itr.next(), slot, false); - } - } - - if (match) - { - inRecipe = true; - required.remove(next); - break; - } - } - - if (!inRecipe) - { - return false; - } - } - } - - return required.isEmpty(); - } - - public ArrayList getInput() - { - return this.input; - } - - @Override - public ItemStack[] func_179532_b(InventoryCrafting inventory) - { - return new ItemStack[1]; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/ArmourUpgrade.java b/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/ArmourUpgrade.java deleted file mode 100644 index ff4cec00..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/ArmourUpgrade.java +++ /dev/null @@ -1,15 +0,0 @@ -package WayofTime.alchemicalWizardry.api.items.interfaces; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public interface ArmourUpgrade -{ - //Called when the armour ticks - void onArmourUpdate(World world, EntityPlayer player, ItemStack thisItemStack); - - boolean isUpgrade(); - - int getEnergyForTenSeconds(); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/IBindable.java b/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/IBindable.java deleted file mode 100644 index 46a79939..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/IBindable.java +++ /dev/null @@ -1,5 +0,0 @@ -package WayofTime.alchemicalWizardry.api.items.interfaces; - -public interface IBindable -{ -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/IBloodOrb.java b/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/IBloodOrb.java deleted file mode 100644 index c38ea2f1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/IBloodOrb.java +++ /dev/null @@ -1,8 +0,0 @@ -package WayofTime.alchemicalWizardry.api.items.interfaces; - -public interface IBloodOrb -{ - int getMaxEssence(); - - int getOrbLevel(); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/IHolding.java b/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/IHolding.java deleted file mode 100644 index 4150abe2..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/IHolding.java +++ /dev/null @@ -1,6 +0,0 @@ -package WayofTime.alchemicalWizardry.api.items.interfaces; - -public interface IHolding -{ - -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/ILPGauge.java b/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/ILPGauge.java deleted file mode 100644 index b75815ca..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/ILPGauge.java +++ /dev/null @@ -1,8 +0,0 @@ -package WayofTime.alchemicalWizardry.api.items.interfaces; - -import net.minecraft.item.ItemStack; - -public interface ILPGauge -{ - boolean canSeeLPBar(ItemStack itemStack); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/IReagentManipulator.java b/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/IReagentManipulator.java deleted file mode 100644 index 23ac7809..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/IReagentManipulator.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.api.items.interfaces; - -/** - * Implement this interface to have reagent blocks return false on activating them, to allow manipulation of said block - */ -public interface IReagentManipulator -{ - -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/IRitualDiviner.java b/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/IRitualDiviner.java deleted file mode 100644 index 2189a6ed..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/IRitualDiviner.java +++ /dev/null @@ -1,22 +0,0 @@ -package WayofTime.alchemicalWizardry.api.items.interfaces; - -import net.minecraft.item.ItemStack; - -public interface IRitualDiviner -{ - int cycleDirection(ItemStack stack); - - String getCurrentRitual(ItemStack stack); - - int getDirection(ItemStack stack); - - int getMaxRuneDisplacement(ItemStack stack); - - String getNameForDirection(int direction); - - void setCurrentRitual(ItemStack stack, String ritualID); - - void setDirection(ItemStack stack, int direction); - - void setMaxRuneDisplacement(ItemStack stack, int displacement); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/ISigil.java b/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/ISigil.java deleted file mode 100644 index d610c211..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/items/interfaces/ISigil.java +++ /dev/null @@ -1,4 +0,0 @@ -package WayofTime.alchemicalWizardry.api.items.interfaces; - -public interface ISigil { -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/renderer/MRSRenderer.java b/src/main/java/WayofTime/alchemicalWizardry/api/renderer/MRSRenderer.java deleted file mode 100644 index 8200f4e2..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/renderer/MRSRenderer.java +++ /dev/null @@ -1,15 +0,0 @@ -package WayofTime.alchemicalWizardry.api.renderer; - -import net.minecraft.client.Minecraft; -import net.minecraft.util.ResourceLocation; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; - -public abstract class MRSRenderer -{ - public abstract void renderAt(IMasterRitualStone tile, double x, double y, double z); - - protected void bindTexture(ResourceLocation location) - { - Minecraft.getMinecraft().getTextureManager().bindTexture(location); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/IMasterRitualStone.java b/src/main/java/WayofTime/alchemicalWizardry/api/rituals/IMasterRitualStone.java deleted file mode 100644 index 8b38ecac..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/IMasterRitualStone.java +++ /dev/null @@ -1,41 +0,0 @@ -package WayofTime.alchemicalWizardry.api.rituals; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ISegmentedReagentHandler; - -public interface IMasterRitualStone extends ISegmentedReagentHandler -{ - void performRitual(World world, BlockPos pos, String ritualID); - - String getOwner(); - - void setCooldown(int newCooldown); - - int getCooldown(); - - void setVar1(int newVar1); - - int getVar1(); - - void setActive(boolean active); - - int getDirection(); - - World getWorldObj(); - - BlockPos getPosition(); - - NBTTagCompound getCustomRitualTag(); - - void setCustomRitualTag(NBTTagCompound tag); - - boolean areTanksEmpty(); - - int getRunningTime(); - - LocalRitualStorage getLocalStorage(); - - void setLocalStorage(LocalRitualStorage storage); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/IRitualStone.java b/src/main/java/WayofTime/alchemicalWizardry/api/rituals/IRitualStone.java deleted file mode 100644 index 74d1e9a8..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/IRitualStone.java +++ /dev/null @@ -1,18 +0,0 @@ -package WayofTime.alchemicalWizardry.api.rituals; - -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; - -public interface IRitualStone -{ - /** - * x, y, and z give the position of the Ritual Stone - * @param world - * @param pos - * @param state - * @param runeType - * @return - */ - boolean isRuneType(World world, BlockPos pos, IBlockState state, int runeType); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/ITileRitualStone.java b/src/main/java/WayofTime/alchemicalWizardry/api/rituals/ITileRitualStone.java deleted file mode 100644 index 68a0a24e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/ITileRitualStone.java +++ /dev/null @@ -1,6 +0,0 @@ -package WayofTime.alchemicalWizardry.api.rituals; - -public interface ITileRitualStone -{ - boolean isRuneType(int runeType); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/LocalRitualStorage.java b/src/main/java/WayofTime/alchemicalWizardry/api/rituals/LocalRitualStorage.java deleted file mode 100644 index d9d7cdfc..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/LocalRitualStorage.java +++ /dev/null @@ -1,36 +0,0 @@ -package WayofTime.alchemicalWizardry.api.rituals; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; - -/** - * This class is used to pass ritual-specific data into the RitualEffect from the containing Master Ritual Stone. This is basically used as auxillarary storage, - * for when simply storing to NBT becomes... difficult. - * - */ -public class LocalRitualStorage -{ - public BlockPos coords; - - public void writeToNBT(NBTTagCompound tag) - { - tag.setInteger("xCoord", coords.getX()); - tag.setInteger("yCoord", coords.getY()); - tag.setInteger("zCoord", coords.getZ()); - } - - public void readFromNBT(NBTTagCompound tag) - { - this.coords = new BlockPos(tag.getInteger("xCoord"), tag.getInteger("yCoord"), tag.getInteger("zCoord")); - } - - public BlockPos getLocation() - { - return coords; - } - - public void setLocation(BlockPos location) - { - this.coords = location; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/RitualBreakMethod.java b/src/main/java/WayofTime/alchemicalWizardry/api/rituals/RitualBreakMethod.java deleted file mode 100644 index a705056a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/RitualBreakMethod.java +++ /dev/null @@ -1,11 +0,0 @@ -package WayofTime.alchemicalWizardry.api.rituals; - -public enum RitualBreakMethod -{ - REDSTONE, - BREAK_MRS, - BREAK_STONE, - ACTIVATE, //When an activation crystal activates the MRS, overwriting the current ritual - DEACTIVATE, - EXPLOSION, //When the MRS is destroyed by an explosion -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/RitualComponent.java b/src/main/java/WayofTime/alchemicalWizardry/api/rituals/RitualComponent.java deleted file mode 100644 index 1efc368f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/RitualComponent.java +++ /dev/null @@ -1,72 +0,0 @@ -package WayofTime.alchemicalWizardry.api.rituals; - -public class RitualComponent -{ - private int x; - private int y; - private int z; - private int stoneType; - public static final int BLANK = 0; - public static final int WATER = 1; - public static final int FIRE = 2; - public static final int EARTH = 3; - public static final int AIR = 4; - public static final int DUSK = 5; - public static final int DAWN = 6; - - public RitualComponent(int x, int y, int z, int stoneType) - { - this.x = x; - this.y = y; - this.z = z; - this.stoneType = stoneType; - } - - public int getX() - { - return this.x; - } - - public int getY() - { - return this.y; - } - - public int getZ() - { - return this.z; - } - - public int getX(int direction) - { - switch(direction) - { - case 2: - return -this.getZ(); - case 3: - return -this.getX(); - case 4: - return this.getZ(); - default: return this.getX(); - } - } - - public int getZ(int direction) - { - switch(direction) - { - case 2: - return this.getX(); - case 3: - return -this.getZ(); - case 4: - return -this.getX(); - default: return this.getZ(); - } - } - - public int getStoneType() - { - return this.stoneType; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/RitualEffect.java b/src/main/java/WayofTime/alchemicalWizardry/api/rituals/RitualEffect.java deleted file mode 100644 index 8bbe8397..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/RitualEffect.java +++ /dev/null @@ -1,87 +0,0 @@ -package WayofTime.alchemicalWizardry.api.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.EnumFacing; -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; - -public abstract class RitualEffect -{ - public abstract void performEffect(IMasterRitualStone ritualStone); - - public boolean startRitual(IMasterRitualStone ritualStone, EntityPlayer player) - { - return true; - } - - public void onRitualBroken(IMasterRitualStone ritualStone, RitualBreakMethod method) {} - - public abstract int getCostPerRefresh(); - - public int getInitialCooldown() - { - return 0; - } - - public abstract List getRitualComponentList(); - - public boolean canDrainReagent(IMasterRitualStone ritualStone, Reagent reagent, int amount, boolean doDrain) - { - if (ritualStone == null || reagent == null || amount == 0) - { - return false; - } - - ReagentStack reagentStack = new ReagentStack(reagent, amount); - - ReagentStack stack = ritualStone.drain(EnumFacing.UP, reagentStack, false); - - if (stack != null && stack.amount >= amount) - { - if (doDrain) - { - ritualStone.drain(EnumFacing.UP, reagentStack, true); - } - - return true; - } - - return false; - } - - public LocalRitualStorage getNewLocalStorage() - { - return new LocalRitualStorage(); - } - - public void addOffsetRunes(ArrayList ritualList, int off1, int off2, int y, int rune) - { - ritualList.add(new RitualComponent(off1, y, off2, rune)); - ritualList.add(new RitualComponent(off2, y, off1, rune)); - ritualList.add(new RitualComponent(off1, y, -off2, rune)); - ritualList.add(new RitualComponent(-off2, y, off1, rune)); - ritualList.add(new RitualComponent(-off1, y, off2, rune)); - ritualList.add(new RitualComponent(off2, y, -off1, rune)); - ritualList.add(new RitualComponent(-off1, y, -off2, rune)); - ritualList.add(new RitualComponent(-off2, y, -off1, rune)); - } - - public void addCornerRunes(ArrayList ritualList, int off1, int y, int rune) - { - ritualList.add(new RitualComponent(off1, y, off1, rune)); - ritualList.add(new RitualComponent(off1, y, -off1, rune)); - ritualList.add(new RitualComponent(-off1, y, -off1, rune)); - ritualList.add(new RitualComponent(-off1, y, off1, rune)); - } - - public void addParallelRunes(ArrayList ritualList, int off1, int y, int rune) - { - ritualList.add(new RitualComponent(off1, y, 0, rune)); - ritualList.add(new RitualComponent(-off1, y, 0, rune)); - ritualList.add(new RitualComponent(0, y, -off1, rune)); - ritualList.add(new RitualComponent(0, y, off1, rune)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/Rituals.java b/src/main/java/WayofTime/alchemicalWizardry/api/rituals/Rituals.java deleted file mode 100644 index a45f0fd1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/Rituals.java +++ /dev/null @@ -1,390 +0,0 @@ -package WayofTime.alchemicalWizardry.api.rituals; - -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.fml.common.eventhandler.Event; -import WayofTime.alchemicalWizardry.api.event.RitualRunEvent; -import WayofTime.alchemicalWizardry.api.event.RitualStopEvent; -import WayofTime.alchemicalWizardry.api.renderer.MRSRenderer; - -public class Rituals -{ - public final int crystalLevel; - public final int actCost; - public final RitualEffect effect; - public final String name; - - public final MRSRenderer customRenderer; - - public static Map ritualMap = new HashMap(); - public static List keyList = new LinkedList(); - - public Rituals(int crystalLevel, int actCost, RitualEffect effect, String name, MRSRenderer renderer) - { - this.crystalLevel = crystalLevel; - this.actCost = actCost; - this.effect = effect; - this.name = name; - keyList.add(name); - ritualMap.put(name, this); - this.customRenderer = renderer; - } - - public Rituals(int crystalLevel, int actCost, RitualEffect effect, String name) - { - this(crystalLevel, actCost, effect, name, null); - } - - /** - * Static method to register a ritual to the Ritual Registry - * - * @param key Unique identification key - must be different from all others to properly register - * @param crystalLevel Crystal level required to activate - * @param actCost LP amount required to activate - * @param effect The effect that will be ticked - * @param name The name of the ritual - * @return Returns true if properly registered, or false if the key is already used - */ - public static boolean registerRitual(String key, int crystalLevel, int actCost, RitualEffect effect, String name, MRSRenderer renderer) - { - if (ritualMap.containsKey(key)) - { - return false; - } else - { - Rituals ritual = new Rituals(crystalLevel, actCost, effect, name, renderer); - ritual.removeRitualFromList(); - ritualMap.put(key, ritual); - keyList.add(key); - return true; - } - } - - public static boolean registerRitual(String key, int crystalLevel, int actCost, RitualEffect effect, String name) - { - if (ritualMap.containsKey(key)) - { - return false; - } else - { - Rituals ritual = new Rituals(crystalLevel, actCost, effect, name); - ritual.removeRitualFromList(); - ritualMap.put(key, ritual); - keyList.add(key); - return true; - } - } - - public void removeRitualFromList() - { - if (ritualMap.containsValue(this)) - { - ritualMap.remove(ritualMap.remove(this.name)); - } - if (keyList.contains(this.name)) - { - keyList.remove(this.name); - } - } - - public static String checkValidRitual(World world, BlockPos pos) - { - for (String key : ritualMap.keySet()) - { - if (checkRitualIsValid(world, pos, key)) - { - return key; - } - } - - return ""; - } - - public static boolean canCrystalActivate(String ritualID, int crystalLevel) - { - if (ritualMap.containsKey(ritualID)) - { - Rituals ritual = ritualMap.get(ritualID); - if (ritual != null) - { - return ritual.getCrystalLevel() <= crystalLevel; - } - } - - return false; - } - - public static boolean checkRitualIsValid(World world, BlockPos pos, String ritualID) - { - int direction = Rituals.getDirectionOfRitual(world, pos, ritualID); - - return direction != -1; - } - - /** - * 1 - NORTH - * 2 - EAST - * 3 - SOUTH - * 4 - WEST - */ - public static boolean checkDirectionOfRitualValid(World world, BlockPos pos, String ritualID, int direction) - { - List ritual = Rituals.getRitualList(ritualID); - - if (ritual == null) - { - return false; - } - - IBlockState testState; - Block test; - TileEntity te; - - for (RitualComponent rc : ritual) - { - BlockPos newPos = pos.add(rc.getX(direction), rc.getY(), rc.getZ(direction)); - testState = world.getBlockState(newPos); - test = testState.getBlock(); - te = world.getTileEntity(newPos); - - if (!(test instanceof IRitualStone && ((IRitualStone)test).isRuneType(world, newPos, testState, rc.getStoneType())) - && !(te instanceof ITileRitualStone && ((ITileRitualStone)te).isRuneType(rc.getStoneType()))) - { - return false; - } - } - - return true; - } - - public static int getDirectionOfRitual(World world, BlockPos pos, String ritualID) - { - for (int i = 1; i <= 4; i++) - { - if (Rituals.checkDirectionOfRitualValid(world, pos, ritualID, i)) - { - return i; - } - } - - return -1; - } - - public static int getCostForActivation(String ritualID) - { - if (ritualMap.containsKey(ritualID)) - { - Rituals ritual = ritualMap.get(ritualID); - if (ritual != null) - { - return ritual.actCost; - } - } - - return 0; - } - - public static int getInitialCooldown(String ritualID) - { - if (ritualMap.containsKey(ritualID)) - { - Rituals ritual = ritualMap.get(ritualID); - if (ritual != null && ritual.effect != null) - { - return ritual.effect.getInitialCooldown(); - } - } - - return 0; - } - - public static List getRitualList(String ritualID) - { - if (ritualMap.containsKey(ritualID)) - { - Rituals ritual = ritualMap.get(ritualID); - if (ritual != null) - { - return ritual.obtainComponents(); - } else - { - return null; - } - } else - { - return null; - } - } - - private List obtainComponents() - { - return this.effect.getRitualComponentList(); - } - - private int getCrystalLevel() - { - return this.crystalLevel; - } - - private MRSRenderer getRenderer() - { - return this.customRenderer; - } - - public static void performEffect(IMasterRitualStone ritualStone, String ritualID) - { - String ownerName = ritualStone.getOwner(); - - RitualRunEvent event = new RitualRunEvent(ritualStone, ownerName, ritualID); - - if(MinecraftForge.EVENT_BUS.post(event) || event.getResult() == Event.Result.DENY) - { - return; - } - - if (ritualMap.containsKey(event.ritualKey)) - { - Rituals ritual = ritualMap.get(event.ritualKey); - if (ritual != null && ritual.effect != null) - { - ritual.effect.performEffect(ritualStone); - } - } - } - - public static boolean startRitual(IMasterRitualStone ritualStone, String ritualID, EntityPlayer player) - { - if (ritualMap.containsKey(ritualID)) - { - Rituals ritual = ritualMap.get(ritualID); - if (ritual != null && ritual.effect != null) - { - return ritual.effect.startRitual(ritualStone, player); - } - } - - return false; - } - - public static void onRitualBroken(IMasterRitualStone ritualStone, String ritualID, RitualBreakMethod method) - { - String ownerName = ritualStone.getOwner(); - RitualStopEvent event = new RitualStopEvent(ritualStone, ownerName, ritualID, method); - MinecraftForge.EVENT_BUS.post(event); - - if (ritualMap.containsKey(ritualID)) - { - Rituals ritual = ritualMap.get(ritualID); - if (ritual != null && ritual.effect != null) - { - ritual.effect.onRitualBroken(ritualStone, method); - } - } - } - - public String getRitualName() - { - return this.name; - } - - public static String getNameOfRitual(String id) - { - if (ritualMap.containsKey(id)) - { - Rituals ritual = ritualMap.get(id); - if (ritual != null) - { - return ritual.getRitualName(); - } - } - - return ""; - } - - public static String getNextRitualKey(String key) - { - boolean hasSpotted = false; - String firstKey = ""; - - for (String str : keyList) - { - if (firstKey.equals("")) - { - firstKey = str; - } - if (hasSpotted) - { - return str; - } - if (str.equals(key)) - { - hasSpotted = true; - } - } - - return firstKey; - } - - public static String getPreviousRitualKey(String key) - { - boolean hasSpotted = false; - String lastKey = keyList.get(keyList.size() - 1); - - for (String str : keyList) - { - if (str.equals(key)) - { - hasSpotted = true; - } - if (hasSpotted) - { - return lastKey; - } - lastKey = str; - } - - return lastKey; - } - - public static MRSRenderer getRendererForKey(String ritualID) - { - if (ritualMap.containsKey(ritualID)) - { - Rituals ritual = ritualMap.get(ritualID); - if (ritual != null) - { - return ritual.getRenderer(); - } - } - - return null; - } - - public static LocalRitualStorage getLocalStorage(String ritualID) - { - if (ritualMap.containsKey(ritualID)) - { - Rituals ritual = ritualMap.get(ritualID); - if (ritual != null) - { - RitualEffect eff = ritual.effect; - if(eff != null) - { - return eff.getNewLocalStorage(); - } - } - } - - return null; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/sacrifice/IIncense.java b/src/main/java/WayofTime/alchemicalWizardry/api/sacrifice/IIncense.java deleted file mode 100644 index 46b04a00..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/sacrifice/IIncense.java +++ /dev/null @@ -1,21 +0,0 @@ -package WayofTime.alchemicalWizardry.api.sacrifice; - -import net.minecraft.item.ItemStack; - -public interface IIncense -{ - int getMinLevel(ItemStack stack); - - int getMaxLevel(ItemStack stack); - - int getIncenseDuration(ItemStack stack); - - /** - * @param stack - * @return a float from 0 to 1 - */ - float getRedColour(ItemStack stack); - float getGreenColour(ItemStack stack); - float getBlueColour(ItemStack stack); - float getTickRate(ItemStack stack); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/sacrifice/PlayerSacrificeHandler.java b/src/main/java/WayofTime/alchemicalWizardry/api/sacrifice/PlayerSacrificeHandler.java deleted file mode 100644 index af286e12..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/sacrifice/PlayerSacrificeHandler.java +++ /dev/null @@ -1,116 +0,0 @@ -package WayofTime.alchemicalWizardry.api.sacrifice; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.spell.APISpellHelper; -import WayofTime.alchemicalWizardry.api.tile.IBloodAltar; - -public class PlayerSacrificeHandler -{ - public static float scalingOfSacrifice = 0.001f; - public static int soulFrayDuration = 400; - public static float getPlayerIncense(EntityPlayer player) - { - return APISpellHelper.getCurrentIncense(player); - } - - public static void setPlayerIncense(EntityPlayer player, float amount) - { - APISpellHelper.setCurrentIncense(player, amount); - } - - public static boolean incrementIncense(EntityPlayer player, float min, float max, float increment) - { - float amount = getPlayerIncense(player); - if(amount < min || amount >= max) - { - return false; - } - - amount = amount + Math.min(increment, max - amount); - setPlayerIncense(player, amount); - -// System.out.println("Amount of incense: " + amount + ", Increment: " + increment); - - return true; - } - - public static boolean sacrificePlayerHealth(EntityPlayer player) - { - if(player.isPotionActive(AlchemicalWizardry.customPotionSoulFray)) - { - return false; - } - - float amount = getPlayerIncense(player); - - if(amount >= 0) - { - float health = player.getHealth(); - float maxHealth = player.getMaxHealth(); - - if(health > maxHealth/10.0) - { - float sacrificedHealth = health - maxHealth/10.0f; - - if(findAndFillAltar(player.getEntityWorld(), player, (int)(sacrificedHealth * 100f * getModifier(amount)))) - { - player.setHealth(maxHealth/10.0f); - setPlayerIncense(player, 0); - player.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionSoulFray.id, soulFrayDuration)); - - return true; - } - } - } - - return false; - } - - public static float getModifier(float amount) - { - return 1 + amount*scalingOfSacrifice; - } - - public static boolean findAndFillAltar(World world, EntityPlayer player, int amount) - { - IBloodAltar altarEntity = getAltar(world, player.getPosition()); - - if (altarEntity == null) - { - return false; - } - - altarEntity.sacrificialDaggerCall(amount, false); - altarEntity.startCycle(); - - return true; - } - - public static IBloodAltar getAltar(World world, BlockPos pos) - { - TileEntity tileEntity; - - for (int i = -2; i <= 2; i++) - { - for (int j = -2; j <= 2; j++) - { - for (int k = -2; k <= 1; k++) - { - tileEntity = world.getTileEntity(pos.add(i, j, k)); - - if(tileEntity instanceof IBloodAltar) - { - return (IBloodAltar)tileEntity; - } - } - } - } - - return null; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/soulNetwork/ComplexNetworkHandler.java b/src/main/java/WayofTime/alchemicalWizardry/api/soulNetwork/ComplexNetworkHandler.java deleted file mode 100644 index 0718624a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/soulNetwork/ComplexNetworkHandler.java +++ /dev/null @@ -1,93 +0,0 @@ -package WayofTime.alchemicalWizardry.api.soulNetwork; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.Writer; -import java.util.HashMap; -import java.util.Map.Entry; -import java.util.UUID; - -import net.minecraft.entity.player.EntityPlayer; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - - -/** - * Temporary class to hash-out how to create a network not completely tied to the player. - */ -public class ComplexNetworkHandler -{ - public static String fileName = "config/BloodMagic/soulnetworkKeys"; - static HashMap keyMap = new HashMap(); - public static UUID getUUIDFromPlayer(EntityPlayer player) - { - return player.getPersistentID(); - } - - public static String getKeyForPlayer(EntityPlayer player) - { - return ""; - } - - public static String assignKeyToPlayer(EntityPlayer player) - { - return ""; - } - - public static void save() - { - keyMap.put(new UUID(0, 0), "test"); - - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - String json = gson.toJson(keyMap); - Writer writer; - try - { - writer = new FileWriter(fileName + ".json"); - writer.write(json); - writer.close(); - } catch (IOException e) - { - e.printStackTrace(); - } - } - - public static void load() - { - File save = new File(fileName + ".json"); - - if(save.canRead()) - { - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - - BufferedReader br; - - try - { - br = new BufferedReader(new FileReader(save)); - - keyMap = gson.fromJson(br, keyMap.getClass()); - - if(keyMap != null) - { - for(Entry entry : keyMap.entrySet()) - { - System.out.println("" + entry.getValue() + " gave: "+ entry.getKey()); - } - } - } catch (FileNotFoundException e) - { - e.printStackTrace(); - } - } - else - { - keyMap = null; - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/soulNetwork/LifeEssenceNetwork.java b/src/main/java/WayofTime/alchemicalWizardry/api/soulNetwork/LifeEssenceNetwork.java deleted file mode 100644 index 91bcdafa..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/soulNetwork/LifeEssenceNetwork.java +++ /dev/null @@ -1,30 +0,0 @@ -package WayofTime.alchemicalWizardry.api.soulNetwork; - -import net.minecraft.nbt.NBTTagCompound; - -public class LifeEssenceNetwork extends net.minecraft.world.WorldSavedData -{ - public int currentEssence; - public int maxOrb; - - public LifeEssenceNetwork(String par1Str) - { - super(par1Str); - currentEssence = 0; - maxOrb = 0; - } - - @Override - public void readFromNBT(NBTTagCompound nbttagcompound) - { - currentEssence = nbttagcompound.getInteger("currentEssence"); - maxOrb = nbttagcompound.getInteger("maxOrb"); - } - - @Override - public void writeToNBT(NBTTagCompound nbttagcompound) - { - nbttagcompound.setInteger("currentEssence", currentEssence); - nbttagcompound.setInteger("maxOrb", maxOrb); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/soulNetwork/SoulNetworkHandler.java b/src/main/java/WayofTime/alchemicalWizardry/api/soulNetwork/SoulNetworkHandler.java deleted file mode 100644 index ea051a0d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/soulNetwork/SoulNetworkHandler.java +++ /dev/null @@ -1,468 +0,0 @@ -package WayofTime.alchemicalWizardry.api.soulNetwork; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.fml.common.eventhandler.Event; -import net.minecraftforge.fml.common.eventhandler.Event.Result; -import WayofTime.alchemicalWizardry.api.event.AddToNetworkEvent; -import WayofTime.alchemicalWizardry.api.event.ItemBindEvent; -import WayofTime.alchemicalWizardry.api.event.ItemDrainInContainerEvent; -import WayofTime.alchemicalWizardry.api.event.ItemDrainNetworkEvent; - - -public class SoulNetworkHandler -{ - public static boolean canSyphonInContainer(ItemStack ist, int damageToBeDone) - { - if (ist.getTagCompound() != null && !(ist.getTagCompound().getString("ownerName").equals(""))) - { - String ownerName = ist.getTagCompound().getString("ownerName"); - - if (MinecraftServer.getServer() == null) - { - return false; - } - - World world = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) world.loadItemData(LifeEssenceNetwork.class, ownerName); - - if (data == null) - { - data = new LifeEssenceNetwork(ownerName); - world.setItemData(ownerName, data); - } - - return data.currentEssence >= damageToBeDone; - } - - return false; - } - - public static boolean syphonFromNetworkWhileInContainer(ItemStack ist, int damageToBeDone) - { - String ownerName = ""; - if (ist.getTagCompound() != null && !(ist.getTagCompound().getString("ownerName").equals(""))) - { - ownerName = ist.getTagCompound().getString("ownerName"); - } - - ItemDrainInContainerEvent event = new ItemDrainInContainerEvent(ist, ownerName, damageToBeDone); - - if(MinecraftForge.EVENT_BUS.post(event) || event.getResult() == Result.DENY) - { - return false; - } - - return syphonFromNetwork(event.ownerNetwork, event.drainAmount) >= damageToBeDone; - } - - public static int getCurrentMaxOrb(String ownerName) - { - if (MinecraftServer.getServer() == null) - { - return 0; - } - - World world = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) world.loadItemData(LifeEssenceNetwork.class, ownerName); - - if (data == null) - { - data = new LifeEssenceNetwork(ownerName); - world.setItemData(ownerName, data); - } - - return data.maxOrb; - } - - public static void setMaxOrbToMax(String ownerName, int maxOrb) - { - if (MinecraftServer.getServer() == null) - { - return; - } - - World world = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) world.loadItemData(LifeEssenceNetwork.class, ownerName); - - if (data == null) - { - data = new LifeEssenceNetwork(ownerName); - world.setItemData(ownerName, data); - } - - data.maxOrb = Math.max(maxOrb, data.maxOrb); - data.markDirty(); - } - - public static int getMaximumForOrbTier(int maxOrb) - { - switch(maxOrb) - { - case 1: - return 5000; - case 2: - return 25000; - case 3: - return 150000; - case 4: - return 1000000; - case 5: - return 10000000; - case 6: - return 30000000; - default: - return 1; - } - } - - public static int syphonFromNetwork(ItemStack ist, int damageToBeDone) - { - if (ist.getTagCompound() != null && !(ist.getTagCompound().getString("ownerName").equals(""))) - { - String ownerName = ist.getTagCompound().getString("ownerName"); - - return syphonFromNetwork(ownerName, damageToBeDone); - } - return 0; - } - - public static int syphonFromNetwork(String ownerName, int damageToBeDone) - { - if (MinecraftServer.getServer() == null) - { - return 0; - } - - World world = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) world.loadItemData(LifeEssenceNetwork.class, ownerName); - - if (data == null) - { - data = new LifeEssenceNetwork(ownerName); - world.setItemData(ownerName, data); - } - - if (data.currentEssence >= damageToBeDone) - { - data.currentEssence -= damageToBeDone; - data.markDirty(); - return damageToBeDone; - } - - return 0; - } - - /** - * Master method used to syphon from the player's network, and will damage them accordingly if they do not have enough LP. - * Does not drain on the client side. - * - * @param ist Owned itemStack - * @param player Player using the item - * @param drain - * @return True if the action should be executed and false if it should not. Always returns false if client-sided. - */ - public static boolean syphonAndDamageFromNetwork(ItemStack ist, EntityPlayer player, int drain) - { - if (player.worldObj.isRemote) - { - return false; - } - - if (ist.getTagCompound() != null && !(ist.getTagCompound().getString("ownerName").equals(""))) - { - String ownerName = ist.getTagCompound().getString("ownerName"); - - ItemDrainNetworkEvent event = new ItemDrainNetworkEvent(player, ownerName, ist, drain); - - if(MinecraftForge.EVENT_BUS.post(event)) - { - return false; - } - - int drainAmount = syphonFromNetwork(event.ownerNetwork, event.drainAmount); - if(drainAmount == 0 || event.shouldDamage) - { - hurtPlayer(player, event.damageAmount); - } - - return (event.getResult() != Event.Result.DENY); //The event has been told to prevent the action but allow all repercussions of using the item. - } - - int amount = SoulNetworkHandler.syphonFromNetwork(ist, drain); - - hurtPlayer(player, drain - amount); - - return true; - } - - public static boolean syphonAndDamageFromNetwork(String ownerName, EntityPlayer player, int damageToBeDone) - { - if (player.worldObj.isRemote) - { - return false; - } - - World world = player.worldObj; - if (world != null) - { - world.playSoundEffect((double) ((float) player.posX + 0.5F), (double) ((float) player.posY + 0.5F), (double) ((float) player.posZ + 0.5F), "random.fizz", 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); - } - - int amount = SoulNetworkHandler.syphonFromNetwork(ownerName, damageToBeDone); - - hurtPlayer(player, damageToBeDone - amount); - - return true; - } - - public static boolean canSyphonFromOnlyNetwork(ItemStack ist, int damageToBeDone) - { - if (ist.getTagCompound() != null && !(ist.getTagCompound().getString("ownerName").equals(""))) - { - String ownerName = ist.getTagCompound().getString("ownerName"); - - return canSyphonFromOnlyNetwork(ownerName, damageToBeDone); - } - - return false; - } - - public static boolean canSyphonFromOnlyNetwork(String ownerName, int damageToBeDone) - { - if (MinecraftServer.getServer() == null) - { - return false; - } - - World world = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) world.loadItemData(LifeEssenceNetwork.class, ownerName); - - if (data == null) - { - data = new LifeEssenceNetwork(ownerName); - world.setItemData(ownerName, data); - } - - return data.currentEssence >= damageToBeDone; - } - - public static int getCurrentEssence(String ownerName) - { - if (MinecraftServer.getServer() == null) - { - return 0; - } - - World world = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) world.loadItemData(LifeEssenceNetwork.class, ownerName); - - if (data == null) - { - data = new LifeEssenceNetwork(ownerName); - world.setItemData(ownerName, data); - } - - return data.currentEssence; - } - - public static void setCurrentEssence(String ownerName, int essence) - { - if (MinecraftServer.getServer() == null) - { - return; - } - - World world = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) world.loadItemData(LifeEssenceNetwork.class, ownerName); - - if (data == null) - { - data = new LifeEssenceNetwork(ownerName); - world.setItemData(ownerName, data); - } - - data.currentEssence = essence; - data.markDirty(); - } - - /** - * A method to add to an owner's network up to a maximum value. - * - * @param ownerName - * @param addedEssence - * @param maximum - * @return amount added to the network - */ - public static int addCurrentEssenceToMaximum(String ownerName, int addedEssence, int maximum) - { - AddToNetworkEvent event = new AddToNetworkEvent(ownerName, addedEssence, maximum); - - if(MinecraftForge.EVENT_BUS.post(event)) - { - return 0; - } - - if (MinecraftServer.getServer() == null) - { - return 0; - } - - World world = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) world.loadItemData(LifeEssenceNetwork.class, event.ownerNetwork); - - if (data == null) - { - data = new LifeEssenceNetwork(event.ownerNetwork); - world.setItemData(event.ownerNetwork, data); - } - - int currEss = data.currentEssence; - - if (currEss >= event.maximum) - { - return 0; - } - - int newEss = Math.min(event.maximum, currEss + event.addedAmount); - if(event.getResult() != Event.Result.DENY) - { - data.currentEssence = newEss; - } - - return newEss - currEss; - } - - public static void hurtPlayer(EntityPlayer user, int energySyphoned) - { - if (energySyphoned < 100 && energySyphoned > 0) - { - if (!user.capabilities.isCreativeMode) - { - user.setHealth((user.getHealth() - 1)); - - if (user.getHealth() <= 0.0005f) - { - user.onDeath(DamageSource.generic); - } - } - } else if (energySyphoned >= 100) - { - if (!user.capabilities.isCreativeMode) - { - for (int i = 0; i < ((energySyphoned + 99) / 100); i++) - { - user.setHealth((user.getHealth() - 1)); - - if (user.getHealth() <= 0.0005f) - { - user.onDeath(DamageSource.generic); - break; - } - } - } - } - } - - public static void hurtPlayer(EntityPlayer user, float damage) - { - if (!user.capabilities.isCreativeMode) - { - user.setHealth((user.getHealth() - damage)); - - if (user.getHealth() <= 0.0005f) - { - user.onDeath(DamageSource.generic); - } - } - } - - public static void checkAndSetItemOwner(ItemStack item, EntityPlayer player) - { - checkAndSetItemPlayer(item, player); - } - - public static boolean checkAndSetItemPlayer(ItemStack item, EntityPlayer player) - { - if (item.hasTagCompound() && !item.getTagCompound().getString("ownerName").equals("")) return true; - - ItemBindEvent event = new ItemBindEvent(player, SoulNetworkHandler.getUsername(player), item); - - if(!MinecraftForge.EVENT_BUS.post(event)) - { - if (!item.hasTagCompound()) - { - item.setTagCompound(new NBTTagCompound()); - } - item.getTagCompound().setString("ownerName", event.key); - return true; - } - return false; - } - - public static void checkAndSetItemOwner(ItemStack item, String ownerName) - { - if (item.getTagCompound() == null) - { - item.setTagCompound(new NBTTagCompound()); - } - - if (item.getTagCompound().getString("ownerName").equals("")) - { - item.getTagCompound().setString("ownerName", ownerName); - } - } - - public static String getUsername(EntityPlayer player) - { - return player.getName(); - } - - public static EntityPlayer getPlayerForUsername(String str) - { - if (MinecraftServer.getServer() == null) - { - return null; - } - return MinecraftServer.getServer().getConfigurationManager().getPlayerByUsername(str); - } - - public static void causeNauseaToPlayer(ItemStack stack) - { - if (stack.getTagCompound() != null && !(stack.getTagCompound().getString("ownerName").equals(""))) - { - String ownerName = stack.getTagCompound().getString("ownerName"); - - SoulNetworkHandler.causeNauseaToPlayer(ownerName); - } - } - - public static void causeNauseaToPlayer(String ownerName) - { - EntityPlayer entityOwner = SoulNetworkHandler.getPlayerForUsername(ownerName); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); - } - - public static String getOwnerName(ItemStack item) - { - if (item.getTagCompound() == null) - { - item.setTagCompound(new NBTTagCompound()); - } - - return item.getTagCompound().getString("ownerName"); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/APISpellHelper.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/APISpellHelper.java deleted file mode 100644 index 452085ec..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/APISpellHelper.java +++ /dev/null @@ -1,377 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.CraftingManager; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; -import net.minecraft.util.MathHelper; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.registry.GameRegistry; -import WayofTime.alchemicalWizardry.ModItems; -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; - -public class APISpellHelper -{ - /** - * Thanks Kihira! <3 - * @param player - * @return persistent data tag - */ - private static NBTTagCompound getPersistentDataTag(EntityPlayer player) - { - NBTTagCompound forgeData = player.getEntityData().getCompoundTag(EntityPlayer.PERSISTED_NBT_TAG); - NBTTagCompound beaconData = forgeData.getCompoundTag("BloodMagic"); - - //Creates/sets the tags if they don't exist - if (!forgeData.hasKey("BloodMagic")) forgeData.setTag("BloodMagic", beaconData); - if (!player.getEntityData().hasKey(EntityPlayer.PERSISTED_NBT_TAG)) player.getEntityData().setTag(EntityPlayer.PERSISTED_NBT_TAG, forgeData); - - return beaconData; - } - - public static float getCurrentIncense(EntityPlayer player) - { - NBTTagCompound data = player.getEntityData(); - if(data.hasKey("BM:CurrentIncense")) - { - return data.getFloat("BM:CurrentIncense"); - } - - return 0; - } - - public static void setCurrentIncense(EntityPlayer player, float amount) - { - NBTTagCompound data = player.getEntityData(); - data.setFloat("BM:CurrentIncense", amount); - } - - public static int getPlayerLPTag(EntityPlayer player) - { - NBTTagCompound data = APISpellHelper.getPersistentDataTag(player); - if(data.hasKey("BM:StoredLP")) - { - return data.getInteger("BM:StoredLP"); - } - - return 0; - } - - public static void setPlayerLPTag(EntityPlayer player, int amount) - { - NBTTagCompound data = APISpellHelper.getPersistentDataTag(player); - data.setInteger("BM:StoredLP", amount); - } - - public static int getPlayerMaxLPTag(EntityPlayer player) - { - NBTTagCompound data = APISpellHelper.getPersistentDataTag(player); - if(data.hasKey("BM:MaxStoredLP")) - { - return data.getInteger("BM:MaxStoredLP"); - } - - return 0; - } - - public static void setPlayerMaxLPTag(EntityPlayer player, int amount) - { - NBTTagCompound data = APISpellHelper.getPersistentDataTag(player); - data.setInteger("BM:MaxStoredLP", amount); - } - - public static float getPlayerCurrentReagentAmount(EntityPlayer player) - { - NBTTagCompound data = APISpellHelper.getPersistentDataTag(player); - if(data.hasKey("BM:StoredReagentAmount")) - { - return data.getFloat("BM:StoredReagentAmount"); - } - - return 0; - } - - public static void setPlayerCurrentReagentAmount(EntityPlayer player, float amount) - { - NBTTagCompound data = APISpellHelper.getPersistentDataTag(player); - data.setFloat("BM:StoredReagentAmount", amount); - } - - public static float getPlayerMaxReagentAmount(EntityPlayer player) - { - NBTTagCompound data = APISpellHelper.getPersistentDataTag(player); - if(data.hasKey("BM:MaxReagentAmount")) - { - return data.getFloat("BM:MaxReagentAmount"); - } - - return 0; - } - - public static void setPlayerMaxReagentAmount(EntityPlayer player, float amount) - { - NBTTagCompound data = APISpellHelper.getPersistentDataTag(player); - data.setFloat("BM:MaxReagentAmount", amount); - } - - public static Reagent getPlayerReagentType(EntityPlayer player) - { - NBTTagCompound data = APISpellHelper.getPersistentDataTag(player); - if(data.hasKey("BM:ReagentType")) - { - return ReagentRegistry.getReagentForKey(data.getString("BM:ReagentType")); - } - - return null; - } - - public static void setPlayerReagentType(EntityPlayer player, String str) - { - NBTTagCompound data = APISpellHelper.getPersistentDataTag(player); - data.setString("BM:ReagentType", str); - } - - public static void setPlayerReagentType(EntityPlayer player, Reagent reagent) - { - setPlayerReagentType(player, ReagentRegistry.getKeyForReagent(reagent)); - } - - public static float getCurrentAdditionalHP(EntityPlayer player) - { - NBTTagCompound data = player.getEntityData(); - if(data.hasKey("BM:CurrentAddedHP")) - { - return data.getFloat("BM:CurrentAddedHP"); - } - - return 0; - } - - public static void setCurrentAdditionalHP(EntityPlayer player, float amount) - { - NBTTagCompound data = player.getEntityData(); - data.setFloat("BM:CurrentAddedHP", amount); - } - - public static float getCurrentAdditionalMaxHP(EntityPlayer player) - { - NBTTagCompound data = player.getEntityData(); - if(data.hasKey("BM:MaxAddedHP")) - { - return data.getFloat("BM:MaxAddedHP"); - } - - return 0; - } - - public static void setCurrentAdditionalMaxHP(EntityPlayer player, float maxHP) - { - NBTTagCompound data = player.getEntityData(); - data.setFloat("BM:MaxAddedHP", maxHP); - } - - public static int getPlayerReagentRegenCooldownTag(EntityPlayer player) - { - NBTTagCompound data = APISpellHelper.getPersistentDataTag(player); - if(data.hasKey("BM:ReagentRegenCooldown")) - { - return data.getInteger("BM:ReagentRegenCooldown"); - } - - return 0; - } - - public static void setPlayerReagentRegenCooldownTag(EntityPlayer player, int amount) - { - NBTTagCompound data = APISpellHelper.getPersistentDataTag(player); - data.setInteger("BM:ReagentRegenCooldown", amount); - } - - public static ItemStack getOrbForLevel(int level) - { - switch(level) - { - case 1: - return new ItemStack(ModItems.weakBloodOrb); - case 2: - return new ItemStack(ModItems.apprenticeBloodOrb); - case 3: - return new ItemStack(ModItems.magicianBloodOrb); - case 4: - return new ItemStack(ModItems.masterBloodOrb); - case 5: - return new ItemStack(ModItems.archmageBloodOrb); - case 6: - return new ItemStack(ModItems.transcendentBloodOrb); - default: - return new ItemStack(Blocks.fire); - } - } - - public static MovingObjectPosition raytraceFromEntity(World world, Entity player, boolean par3, double range) - { - float f = 1.0F; - float f1 = player.prevRotationPitch + (player.rotationPitch - player.prevRotationPitch) * f; - float f2 = player.prevRotationYaw + (player.rotationYaw - player.prevRotationYaw) * f; - double d0 = player.prevPosX + (player.posX - player.prevPosX) * (double) f; - double d1 = player.prevPosY + (player.posY - player.prevPosY) * (double) f; - if (!world.isRemote && player instanceof EntityPlayer) - d1 += 1.62D; - double d2 = player.prevPosZ + (player.posZ - player.prevPosZ) * (double) f; - Vec3 vec3 = new Vec3(d0, d1, d2); - float f3 = MathHelper.cos(-f2 * 0.017453292F - (float) Math.PI); - float f4 = MathHelper.sin(-f2 * 0.017453292F - (float) Math.PI); - float f5 = -MathHelper.cos(-f1 * 0.017453292F); - float f6 = MathHelper.sin(-f1 * 0.017453292F); - float f7 = f4 * f5; - float f8 = f3 * f5; -// if (player instanceof EntityPlayerMP) - { -// d3 = ((EntityPlayerMP) player).theItemInWorldManager.getBlockReachDistance(); - } - Vec3 vec31 = vec3.addVector((double) f7 * range, (double) f6 * range, (double) f8 * range); - return world.rayTraceBlocks(vec3, vec31, par3, !par3, par3); - } - - public static List getItemsFromBlock(World world, BlockPos pos, Block block, IBlockState state, boolean silkTouch, int fortune) - { - boolean canSilk = block.canSilkHarvest(world, pos, state, null); //Null player - - if (canSilk && silkTouch) - { - ArrayList items = new ArrayList(); - ItemStack item = new ItemStack(block, 1, block.getMetaFromState(state)); - - items.add(item); - - return items; - } else - { - return block.getDrops(world, pos, state, fortune); - } - } - - public static void spawnItemListInWorld(List items, World world, float x, float y, float z) - { - for (ItemStack stack : items) - { - EntityItem itemEntity = new EntityItem(world, x, y, z, stack); - itemEntity.setDefaultPickupDelay(); - world.spawnEntityInWorld(itemEntity); - } - } - - public static String getNumeralForInt(int num) - { - switch (num) - { - case 1: - return "I"; - case 2: - return "II"; - case 3: - return "III"; - case 4: - return "IV"; - case 5: - return "V"; - case 6: - return "VI"; - case 7: - return "VII"; - case 8: - return "VIII"; - case 9: - return "IX"; - case 10: - return "X"; - default: - return ""; - } - } - - public static Block getBlockForString(String str) - { - String[] parts = str.split(":"); - String modId = parts[0]; - String name = parts[1]; - return GameRegistry.findBlock(modId, name); - } - - public static Item getItemForString(String str) - { - String[] parts = str.split(":"); - String modId = parts[0]; - String name = parts[1]; - return GameRegistry.findItem(modId, name); - } - - public static ItemStack getItemStackForString(String str) - { - String[] parts = str.split(":"); - int meta = 0; - if(parts.length >= 3) - { - meta = Integer.decode(parts[2]); - }else if(parts.length < 2) - { - return null; - } - String modId = parts[0]; - String name = parts[1]; - - String itemString = modId + ":" + name; - Item item = APISpellHelper.getItemForString(itemString); - if(item != null) - { - return new ItemStack(item, 1, meta); - } - - Block block = APISpellHelper.getBlockForString(itemString); - if(block != null) - { - return new ItemStack(block, 1, meta); - } - - return null; - } - - public static IRecipe getRecipeForItemStack(ItemStack reqStack) //Does not match NBT. Durrr! -smack- - { - if(reqStack == null) - { - return null; //Why are you even doing this to yourself!? You know this can't be healthy! - } - List craftingList = CraftingManager.getInstance().getRecipeList(); - for(Object posRecipe : craftingList) - { - if(posRecipe instanceof IRecipe) - { - ItemStack outputStack = ((IRecipe) posRecipe).getRecipeOutput(); - if(outputStack != null) - { - if(outputStack.getItem() == reqStack.getItem() && (outputStack.getItem().getHasSubtypes() ? outputStack.getItemDamage() == reqStack.getItemDamage() : true)) - { - return (IRecipe)posRecipe; - } - } - } - } - - return null; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/ComplexSpellEffect.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/ComplexSpellEffect.java deleted file mode 100644 index 26bcfc25..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/ComplexSpellEffect.java +++ /dev/null @@ -1,92 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - - -public abstract class ComplexSpellEffect -{ - public final ComplexSpellType type; - public final ComplexSpellModifier modifier; - - protected int powerEnhancement; - protected int costEnhancement; - protected int potencyEnhancement; - - public ComplexSpellEffect(ComplexSpellType type, ComplexSpellModifier modifier) - { - this.type = type; - this.modifier = modifier; - } - - public ComplexSpellEffect(ComplexSpellType type, ComplexSpellModifier modifier, int power, int cost, int potency) - { - this(type, modifier); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - public abstract void modifyParadigm(SpellParadigm parad); - - public ComplexSpellType getType() - { - return this.type; - } - - public ComplexSpellModifier getModifier() - { - return this.modifier; - } - - public abstract ComplexSpellEffect copy(int power, int cost, int potency); - - public abstract int getCostOfEffect(); - -// public NBTTagCompound getTag() -// { -// NBTTagCompound tag = new NBTTagCompound(); -// -// tag.setString("Class", this.getClass().getName()); -// tag.setInteger("modifier", modifierState); -// tag.setInteger("power", powerEnhancement); -// tag.setInteger("cost", costEnhancement); -// tag.setInteger("potency", potencyEnhancement); -// -// return tag; -// } -// -// public static SpellEffect getEffectFromTag(NBTTagCompound tag) -// { -// try -// { -// Class clazz = Class.forName(tag.getString("Class")); -// if (clazz != null) -// { -// try -// { -// Object obj = clazz.newInstance(); -// if (obj instanceof SpellEffect) -// { -// SpellEffect eff = (SpellEffect) obj; -// -// eff.modifierState = tag.getInteger("modifier"); -// eff.powerEnhancement = tag.getInteger("power"); -// eff.costEnhancement = tag.getInteger("cost"); -// eff.potencyEnhancement = tag.getInteger("potency"); -// -// return eff; -// } -// } catch (InstantiationException e) -// { -// e.printStackTrace(); -// } catch (IllegalAccessException e) -// { -// e.printStackTrace(); -// } -// } -// } catch (ClassNotFoundException e) -// { -// e.printStackTrace(); -// } -// return null; -// } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/ComplexSpellModifier.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/ComplexSpellModifier.java deleted file mode 100644 index 537a5e2b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/ComplexSpellModifier.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -public class ComplexSpellModifier -{ - public static ComplexSpellModifier DEFAULT = new ComplexSpellModifier(); - public static ComplexSpellModifier OFFENSIVE = new ComplexSpellModifier(); - public static ComplexSpellModifier DEFENSIVE = new ComplexSpellModifier(); - public static ComplexSpellModifier ENVIRONMENTAL = new ComplexSpellModifier(); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/ComplexSpellType.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/ComplexSpellType.java deleted file mode 100644 index 1c308a81..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/ComplexSpellType.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -public class ComplexSpellType -{ - public static ComplexSpellType FIRE = new ComplexSpellType(); - public static ComplexSpellType ICE = new ComplexSpellType(); - public static ComplexSpellType EARTH = new ComplexSpellType(); - public static ComplexSpellType WIND = new ComplexSpellType(); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/EntitySpellProjectile.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/EntitySpellProjectile.java deleted file mode 100644 index c4afda4e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/EntitySpellProjectile.java +++ /dev/null @@ -1,620 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.IProjectile; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.MathHelper; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -public class EntitySpellProjectile extends Entity implements IProjectile -{ - private int xTile = -1; - private int yTile = -1; - private int zTile = -1; - private int inTile = 0; - private int inData = 0; - private boolean inGround = false; - /** - * The owner of this arrow. - */ - public EntityPlayer shootingEntity; - private int ticksInAir = 0; - private int ricochetCounter = 0; - private boolean scheduledForDeath = false; - private boolean isSilkTouch = false; - - //Custom variables - private int maxRicochet = 0; - private float damage = 1; - public List impactList = new ArrayList(); - private boolean penetration = false; - public List updateEffectList = new ArrayList(); - public List spellEffectList = new LinkedList(); - private int blocksBroken = 0; - - public EntitySpellProjectile(World par1World) - { - super(par1World); - this.setSize(0.5F, 0.5F); - } - - public EntitySpellProjectile(World par1World, double par2, double par4, double par6) - { - super(par1World); - this.setSize(0.5F, 0.5F); - this.setPosition(par2, par4, par6); - } - - public EntitySpellProjectile(World par1World, EntityPlayer par2EntityPlayer) - { - super(par1World); - shootingEntity = par2EntityPlayer; - float par3 = 0.8F; - this.setSize(0.1F, 0.1F); - this.setLocationAndAngles(par2EntityPlayer.posX, par2EntityPlayer.posY + par2EntityPlayer.getEyeHeight(), par2EntityPlayer.posZ, par2EntityPlayer.rotationYaw, par2EntityPlayer.rotationPitch); - posX -= MathHelper.cos(rotationYaw / 180.0F * (float) Math.PI) * 0.16F; - posY -= 0.2D; - posZ -= MathHelper.sin(rotationYaw / 180.0F * (float) Math.PI) * 0.16F; - this.setPosition(posX, posY, posZ); - motionX = -MathHelper.sin(rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(rotationPitch / 180.0F * (float) Math.PI); - motionZ = MathHelper.cos(rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(rotationPitch / 180.0F * (float) Math.PI); - motionY = -MathHelper.sin(rotationPitch / 180.0F * (float) Math.PI); - this.setThrowableHeading(motionX, motionY, motionZ, par3 * 1.5F, 1.0F); - - } - - @Override - protected void entityInit() - { - dataWatcher.addObject(16, 0); - } - - /** - * Similar to setArrowHeading, it's point the throwable entity to a x, y, z - * direction. - */ - @Override - public void setThrowableHeading(double var1, double var3, double var5, float var7, float var8) - { - float var9 = MathHelper.sqrt_double(var1 * var1 + var3 * var3 + var5 * var5); - var1 /= var9; - var3 /= var9; - var5 /= var9; - var1 += rand.nextGaussian() * 0.007499999832361937D * var8; - var3 += rand.nextGaussian() * 0.007499999832361937D * var8; - var5 += rand.nextGaussian() * 0.007499999832361937D * var8; - var1 *= var7; - var3 *= var7; - var5 *= var7; - motionX = var1; - motionY = var3; - motionZ = var5; - float var10 = MathHelper.sqrt_double(var1 * var1 + var5 * var5); - prevRotationYaw = rotationYaw = (float) (Math.atan2(var1, var5) * 180.0D / Math.PI); - prevRotationPitch = rotationPitch = (float) (Math.atan2(var3, var10) * 180.0D / Math.PI); - } - - @Override - @SideOnly(Side.CLIENT) - /** - * Sets the velocity to the args. Args: x, y, z - */ - public void setVelocity(double par1, double par3, double par5) - { - motionX = par1; - motionY = par3; - motionZ = par5; - if (prevRotationPitch == 0.0F && prevRotationYaw == 0.0F) - { - float var7 = MathHelper.sqrt_double(par1 * par1 + par5 * par5); - prevRotationYaw = rotationYaw = (float) (Math.atan2(par1, par5) * 180.0D / Math.PI); - prevRotationPitch = rotationPitch = (float) (Math.atan2(par3, var7) * 180.0D / Math.PI); - prevRotationPitch = rotationPitch; - prevRotationYaw = rotationYaw; - this.setLocationAndAngles(posX, posY, posZ, rotationYaw, rotationPitch); - } - } - - /** - * Called to update the entity's position/logic. - */ - @Override - public void onUpdate() - { - super.onUpdate(); - this.performUpdateEffects(); - if (ticksInAir > 600) - { - this.setDead(); - } - if (shootingEntity == null) - { - List players = worldObj.getEntitiesWithinAABB(EntityPlayer.class, new AxisAlignedBB(posX - 1, posY - 1, posZ - 1, posX + 1, posY + 1, posZ + 1)); - Iterator i = players.iterator(); - double closestDistance = Double.MAX_VALUE; - EntityPlayer closestPlayer = null; - while (i.hasNext()) - { - EntityPlayer e = (EntityPlayer) i.next(); - double distance = e.getDistanceToEntity(this); - if (distance < closestDistance) - { - closestPlayer = e; - } - } - if (closestPlayer != null) - { - shootingEntity = closestPlayer; - } - } - if (prevRotationPitch == 0.0F && prevRotationYaw == 0.0F) - { - float var1 = MathHelper.sqrt_double(motionX * motionX + motionZ * motionZ); - prevRotationYaw = rotationYaw = (float) (Math.atan2(motionX, motionZ) * 180.0D / Math.PI); - prevRotationPitch = rotationPitch = (float) (Math.atan2(motionY, var1) * 180.0D / Math.PI); - } - IBlockState state = worldObj.getBlockState(new BlockPos(xTile, yTile, zTile)); - Block var16 = state.getBlock(); - - if (var16 != null) - { - var16.setBlockBoundsBasedOnState(worldObj, new BlockPos(xTile, yTile, zTile)); - AxisAlignedBB var2 = var16.getCollisionBoundingBox(worldObj, new BlockPos(xTile, yTile, zTile), state); - - if (var2 != null && var2.isVecInside(new Vec3(posX, posY, posZ))) - { - inGround = true; - } - } - - if (inGround) - { - - } else - { - ++ticksInAir; - - if (ticksInAir > 1 && ticksInAir < 3) - { - //worldObj.spawnParticle("flame", posX + smallGauss(0.1D), posY + smallGauss(0.1D), posZ + smallGauss(0.1D), 0D, 0D, 0D); - for (int particles = 0; particles < 3; particles++) - { - this.doFiringParticles(); - } - } - - Vec3 var17 = new Vec3(posX, posY, posZ); - Vec3 var3 = new Vec3(posX + motionX, posY + motionY, posZ + motionZ); - MovingObjectPosition var4 = worldObj.rayTraceBlocks(var17, var3, true, false, false); - var17 = new Vec3(posX, posY, posZ); - var3 = new Vec3(posX + motionX, posY + motionY, posZ + motionZ); - - if (var4 != null) - { - var3 = new Vec3(var4.hitVec.xCoord, var4.hitVec.yCoord, var4.hitVec.zCoord); - } - - Entity var5 = null; - List var6 = worldObj.getEntitiesWithinAABBExcludingEntity(this, getBoundingBox().addCoord(motionX, motionY, motionZ).expand(1.0D, 1.0D, 1.0D)); - double var7 = 0.0D; - Iterator var9 = var6.iterator(); - float var11; - - while (var9.hasNext()) - { - Entity var10 = (Entity) var9.next(); - - if (var10.canBeCollidedWith() && (var10 != shootingEntity || ticksInAir >= 5)) - { - var11 = 0.3F; - AxisAlignedBB var12 = var10.getBoundingBox().expand(var11, var11, var11); - MovingObjectPosition var13 = var12.calculateIntercept(var17, var3); - - if (var13 != null) - { - double var14 = var17.distanceTo(var13.hitVec); - - if (var14 < var7 || var7 == 0.0D) - { - var5 = var10; - var7 = var14; - } - } - } - } - - if (var5 != null) - { - var4 = new MovingObjectPosition(var5); - } - - if (var4 != null) - { - this.onImpact(var4); - - if (scheduledForDeath) - { - this.setDead(); - } - } - - posX += motionX; - posY += motionY; - posZ += motionZ; - MathHelper.sqrt_double(motionX * motionX + motionZ * motionZ); - this.setPosition(posX, posY, posZ); - //this.doBlockCollisions(); - } - } - - private void doFlightParticles() - { - if (ticksInAir % 3 == 0) - { - double gauss = gaussian(1.0F); - worldObj.spawnParticle(EnumParticleTypes.SPELL_MOB, posX, posY, posZ, gauss, gauss, 0.0F); - } - } - - private void doFiringParticles() - { - worldObj.spawnParticle(EnumParticleTypes.SPELL_MOB_AMBIENT, posX + smallGauss(0.1D), posY + smallGauss(0.1D), posZ + smallGauss(0.1D), 0.5D, 0.5D, 0.5D); - worldObj.spawnParticle(EnumParticleTypes.FLAME, posX, posY, posZ, gaussian(motionX), gaussian(motionY), gaussian(motionZ)); - } - - /** - * (abstract) Protected helper method to write subclass entity data to NBT. - */ - @Override - public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) - { - par1NBTTagCompound.setShort("xTile", (short) xTile); - par1NBTTagCompound.setShort("yTile", (short) yTile); - par1NBTTagCompound.setShort("zTile", (short) zTile); - par1NBTTagCompound.setByte("inTile", (byte) inTile); - par1NBTTagCompound.setByte("inData", (byte) inData); - par1NBTTagCompound.setByte("inGround", (byte) (inGround ? 1 : 0)); - - NBTTagList effectList = new NBTTagList(); - - for (SpellEffect eff : spellEffectList) - { - effectList.appendTag(eff.getTag()); - } - - par1NBTTagCompound.setTag("Effects", effectList); - par1NBTTagCompound.setInteger("blocksBroken", blocksBroken); - par1NBTTagCompound.setBoolean("isSilkTouch", isSilkTouch); - } - - /** - * (abstract) Protected helper method to read subclass entity data from NBT. - */ - @Override - public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) - { - xTile = par1NBTTagCompound.getShort("xTile"); - yTile = par1NBTTagCompound.getShort("yTile"); - zTile = par1NBTTagCompound.getShort("zTile"); - inTile = par1NBTTagCompound.getByte("inTile") & 255; - inData = par1NBTTagCompound.getByte("inData") & 255; - inGround = par1NBTTagCompound.getByte("inGround") == 1; - blocksBroken = par1NBTTagCompound.getInteger("blocksBroken"); - isSilkTouch = par1NBTTagCompound.getBoolean("isSilkTouch"); - - NBTTagList tagList = par1NBTTagCompound.getTagList("Effects", Constants.NBT.TAG_COMPOUND); - - List spellEffectList = new LinkedList(); - for (int i = 0; i < tagList.tagCount(); i++) - { - NBTTagCompound tag = tagList.getCompoundTagAt(i); - - SpellEffect eff = SpellEffect.getEffectFromTag(tag); - if (eff != null) - { - spellEffectList.add(eff); - } - } - this.spellEffectList = spellEffectList; - - -// this.effectList = new LinkedList(); -// for (int i = 0; i < tagList.tagCount(); i++) -// { -// NBTTagCompound tag = (NBTTagCompound) tagList.tagAt(i); -// -// this.effectList.add(tag.getString("Class")); -// } - - //SpellParadigmProjectile parad = SpellParadigmProjectile.getParadigmForStringArray(effectList); - SpellParadigmProjectile parad = SpellParadigmProjectile.getParadigmForEffectArray(spellEffectList); - parad.applyAllSpellEffects(); - parad.prepareProjectile(this); - } - - /** - * returns if this entity triggers Block.onEntityWalking on the blocks they - * walk on. used for spiders and wolves to prevent them from trampling crops - */ - @Override - protected boolean canTriggerWalking() - { - return false; - } - - /** - * Sets the amount of knockback the arrow applies when it hits a mob. - */ - public void setKnockbackStrength(int par1) - { - } - - /** - * If returns false, the item will not inflict any damage against entities. - */ - @Override - public boolean canAttackWithItem() - { - return false; - } - - /** - * Whether the arrow has a stream of critical hit particles flying behind - * it. - */ - public void setIsCritical(boolean par1) - { - byte var2 = dataWatcher.getWatchableObjectByte(16); - if (par1) - { - dataWatcher.updateObject(16, var2 | 1); - } else - { - dataWatcher.updateObject(16, var2 & -2); - } - } - - /** - * Whether the arrow has a stream of critical hit particles flying behind - * it. - */ - public boolean getIsCritical() - { - byte var1 = dataWatcher.getWatchableObjectByte(16); - return (var1 & 1) != 0; - } - - private void onImpact(MovingObjectPosition mop) - { - if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY && mop.entityHit != null) - { - if (mop.entityHit == shootingEntity) return; - this.onImpact(mop.entityHit); - this.performEntityImpactEffects(mop.entityHit); - } else if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - if (!this.penetration) - { - this.groundImpact(mop.field_178784_b); - this.performTileImpactEffects(mop); - } - } - } - - private void onImpact(Entity mop) //TODO - { - if (mop == shootingEntity && ticksInAir > 3) - { - shootingEntity.attackEntityFrom(DamageSource.causePlayerDamage(shootingEntity), 1); - this.setDead(); - } else - { - doDamage(this.damage, mop); - } - spawnHitParticles("exorcism", 8); - this.setDead(); - } - - - private void spawnHitParticles(String string, int i) - { - for (int particles = 0; particles < i; particles++) - { - worldObj.spawnParticle(EnumParticleTypes.SPELL_MOB_AMBIENT, posX + smallGauss(0.1D), posY + smallGauss(0.1D), posZ + smallGauss(0.1D), posGauss(1.0F), posGauss(1.0F), 0.0F); - } - } - - private void doDamage(float f, Entity mop) - { - mop.attackEntityFrom(this.getDamageSource(), f); - } - - private DamageSource getDamageSource() - { - return DamageSource.causePlayerDamage(shootingEntity); - } - - private void groundImpact(EnumFacing sideHit) - { - this.ricochet(sideHit); - } - - private double smallGauss(double d) - { - return (worldObj.rand.nextFloat() - 0.5D) * d; - } - - private double posGauss(double d) - { - return rand.nextFloat() * 0.5D * d; - } - - private double gaussian(double d) - { - return d + d * ((rand.nextFloat() - 0.5D) / 4); - } - - private void ricochet(EnumFacing sideHit) - { - switch (sideHit) - { - case UP: - case DOWN: - // topHit, bottomHit, reflect Y - motionY = motionY * -1; - break; - case WEST: - case EAST: - // westHit, eastHit, reflect Z - motionZ = motionZ * -1; - break; - case SOUTH: - case NORTH: - // southHit, northHit, reflect X - motionX = motionX * -1; - break; - } - ricochetCounter++; - if (ricochetCounter > this.getRicochetMax()) - { - scheduledForDeath = true; - for (int particles = 0; particles < 4; particles++) - { - switch (sideHit) - { - case UP: - worldObj.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, posX, posY, posZ, gaussian(0.1D), -gaussian(0.1D), gaussian(0.1D)); - break; - case DOWN: - worldObj.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, posX, posY, posZ, gaussian(0.1D), gaussian(0.1D), gaussian(0.1D)); - break; - case NORTH: - worldObj.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, posX, posY, posZ, gaussian(0.1D), gaussian(0.1D), -gaussian(0.1D)); - break; - case SOUTH: - worldObj.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, posX, posY, posZ, gaussian(0.1D), gaussian(0.1D), gaussian(0.1D)); - break; - case WEST: - worldObj.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, posX, posY, posZ, -gaussian(0.1D), gaussian(0.1D), gaussian(0.1D)); - break; - case EAST: - worldObj.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, posX, posY, posZ, gaussian(0.1D), gaussian(0.1D), gaussian(0.1D)); - break; - } - } - } - } - - //Custom stuff - public int getRicochetMax() - { - return this.maxRicochet; - } - - public void setRicochetMax(int ricochet) - { - this.maxRicochet = ricochet; - } - - public void setImpactList(List list) - { - this.impactList = list; - } - - public void setUpdateEffectList(List list) - { - this.updateEffectList = list; - } - - private void performEntityImpactEffects(Entity mop) - { - if (impactList != null) - { - for (IProjectileImpactEffect impactEffect : impactList) - { - impactEffect.onEntityImpact(mop, this); - } - } - } - - private void performTileImpactEffects(MovingObjectPosition mop) - { - if (impactList != null) - { - for (IProjectileImpactEffect impactEffect : impactList) - { - impactEffect.onTileImpact(worldObj, mop); - } - } - } - - private void performUpdateEffects() - { - if (updateEffectList != null) - { - for (IProjectileUpdateEffect updateEffect : updateEffectList) - { - updateEffect.onUpdateEffect(this); - } - } - } - - public void setPenetration(boolean penetration) - { - this.penetration = penetration; - } - - public float getDamage() - { - return this.damage; - } - - public void setDamage(float damage) - { - this.damage = damage; - } - - public void setSpellEffectList(List list) - { - this.spellEffectList = list; - } - - public int getBlocksBroken() - { - return this.blocksBroken; - } - - public void setBlocksBroken(int blocksBroken) - { - this.blocksBroken = blocksBroken; - } - - public boolean getIsSilkTouch() - { - return this.isSilkTouch; - } - - public void setIsSilkTouch(boolean bool) - { - this.isSilkTouch = bool; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/ExtrapolatedMeleeEntityEffect.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/ExtrapolatedMeleeEntityEffect.java deleted file mode 100644 index b5c58751..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/ExtrapolatedMeleeEntityEffect.java +++ /dev/null @@ -1,72 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; - -import java.util.List; - -public abstract class ExtrapolatedMeleeEntityEffect implements IMeleeSpellEntityEffect -{ - protected float range; - protected float radius; - protected int powerUpgrades; - protected int potencyUpgrades; - protected int costUpgrades; - protected int maxHit; - - public ExtrapolatedMeleeEntityEffect(int power, int potency, int cost) - { - this.powerUpgrades = power; - this.potencyUpgrades = potency; - this.costUpgrades = cost; - this.range = 0; - this.radius = 0; - this.maxHit = 1; - } - - @Override - public void onEntityImpact(World world, EntityPlayer entityPlayer) - { - Vec3 lookVec = entityPlayer.getLook(range); - double x = entityPlayer.posX + lookVec.xCoord; - double y = entityPlayer.posY + entityPlayer.getEyeHeight() + lookVec.yCoord; - double z = entityPlayer.posZ + lookVec.zCoord; - - List entities = world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(x - 0.5f, y - 0.5f, z - 0.5f, x + 0.5f, y + 0.5f, z + 0.5f).expand(radius, radius, radius)); - int hit = 0; - - if (entities != null) - { - for (Entity entity : entities) - { - if (hit < maxHit && !entity.equals(entityPlayer)) - { - if (this.entityEffect(world, entity, entityPlayer)) - { - hit++; - } - } - } - } - } - - protected abstract boolean entityEffect(World world, Entity entity, EntityPlayer player); - - public void setRange(float range) - { - this.range = range; - } - - public void setRadius(float radius) - { - this.radius = radius; - } - - public void setMaxNumberHit(int maxHit) - { - this.maxHit = maxHit; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IDigAreaEffect.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/IDigAreaEffect.java deleted file mode 100644 index 07939312..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IDigAreaEffect.java +++ /dev/null @@ -1,12 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import WayofTime.alchemicalWizardry.api.items.ItemSpellMultiTool; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; - -public interface IDigAreaEffect -{ - int digSurroundingArea(ItemStack container, World world, EntityPlayer player, MovingObjectPosition blockPos, String usedToolClass, float blockHardness, int harvestLvl, ItemSpellMultiTool itemTool); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IItemManipulator.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/IItemManipulator.java deleted file mode 100644 index eb9b766b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IItemManipulator.java +++ /dev/null @@ -1,10 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import net.minecraft.item.ItemStack; - -import java.util.List; - -public interface IItemManipulator -{ - public List handleItemsOnBlockBroken(ItemStack toolStack, List itemList); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/ILeftClickEffect.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/ILeftClickEffect.java deleted file mode 100644 index 5683998b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/ILeftClickEffect.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; - -public interface ILeftClickEffect -{ - int onLeftClickEntity(ItemStack stack, EntityLivingBase attacked, EntityLivingBase weilder); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IMeleeSpellEntityEffect.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/IMeleeSpellEntityEffect.java deleted file mode 100644 index 4e1608cc..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IMeleeSpellEntityEffect.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; - -public interface IMeleeSpellEntityEffect -{ - void onEntityImpact(World world, EntityPlayer entityPlayer); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IMeleeSpellWorldEffect.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/IMeleeSpellWorldEffect.java deleted file mode 100644 index 9be8966b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IMeleeSpellWorldEffect.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; - -public interface IMeleeSpellWorldEffect -{ - void onWorldEffect(World world, EntityPlayer entityPlayer); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IOnBanishTool.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/IOnBanishTool.java deleted file mode 100644 index d69396ba..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IOnBanishTool.java +++ /dev/null @@ -1,10 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import net.minecraft.entity.Entity; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public interface IOnBanishTool -{ - int onBanishTool(ItemStack toolStack, World world, Entity entity, int invSlot, boolean inHand); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IOnBreakBlock.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/IOnBreakBlock.java deleted file mode 100644 index 6c8fbaa7..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IOnBreakBlock.java +++ /dev/null @@ -1,14 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; - -public interface IOnBreakBlock -{ - int onBlockBroken(ItemStack container, World world, EntityPlayer player, Block block, IBlockState state, BlockPos pos, EnumFacing sideBroken); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IOnSummonTool.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/IOnSummonTool.java deleted file mode 100644 index e1a599a7..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IOnSummonTool.java +++ /dev/null @@ -1,10 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import net.minecraft.entity.Entity; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public interface IOnSummonTool -{ - int onSummonTool(ItemStack toolStack, World world, Entity entity); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IProjectileImpactEffect.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/IProjectileImpactEffect.java deleted file mode 100644 index 93215506..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IProjectileImpactEffect.java +++ /dev/null @@ -1,12 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import net.minecraft.entity.Entity; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; - -public interface IProjectileImpactEffect -{ - void onEntityImpact(Entity mop, Entity projectile); - - void onTileImpact(World world, MovingObjectPosition mop); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IProjectileUpdateEffect.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/IProjectileUpdateEffect.java deleted file mode 100644 index 958a83e7..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IProjectileUpdateEffect.java +++ /dev/null @@ -1,8 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import net.minecraft.entity.Entity; - -public interface IProjectileUpdateEffect -{ - void onUpdateEffect(Entity projectile); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IRightClickEffect.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/IRightClickEffect.java deleted file mode 100644 index b779b110..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IRightClickEffect.java +++ /dev/null @@ -1,15 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; - -public interface IRightClickEffect -{ - //public abstract int onRightClickEntity(ItemStack stack, EntityLivingBase attacked, EntityLivingBase weilder); - - int onRightClickBlock(ItemStack stack, EntityLivingBase weilder, World world, MovingObjectPosition mop); - - int onRightClickAir(ItemStack stack, EntityLivingBase weilder); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/ISelfSpellEffect.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/ISelfSpellEffect.java deleted file mode 100644 index 5bb25de3..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/ISelfSpellEffect.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; - -public interface ISelfSpellEffect -{ - void onSelfUse(World world, EntityPlayer player); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/ISpecialDamageEffect.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/ISpecialDamageEffect.java deleted file mode 100644 index f60024b2..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/ISpecialDamageEffect.java +++ /dev/null @@ -1,10 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import net.minecraft.entity.Entity; - -public interface ISpecialDamageEffect -{ - float getDamageForEntity(Entity entity); - - String getKey(); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IToolUpdateEffect.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/IToolUpdateEffect.java deleted file mode 100644 index 92b7745a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/IToolUpdateEffect.java +++ /dev/null @@ -1,10 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import net.minecraft.entity.Entity; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public interface IToolUpdateEffect -{ - int onUpdate(ItemStack toolStack, World world, Entity par3Entity, int invSlot, boolean inHand); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/MeleeSpellCenteredWorldEffect.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/MeleeSpellCenteredWorldEffect.java deleted file mode 100644 index bccfe653..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/MeleeSpellCenteredWorldEffect.java +++ /dev/null @@ -1,36 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.BlockPos; -import net.minecraft.util.MathHelper; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; - -public abstract class MeleeSpellCenteredWorldEffect extends MeleeSpellWorldEffect -{ - protected float range; - - public MeleeSpellCenteredWorldEffect(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onWorldEffect(World world, EntityPlayer entityPlayer) - { - Vec3 lookVec = entityPlayer.getLook(range).normalize(); - - int x = MathHelper.floor_double(entityPlayer.posX + lookVec.xCoord * range); - int y = MathHelper.floor_double(entityPlayer.posY + entityPlayer.getEyeHeight() + lookVec.yCoord * range); - int z = MathHelper.floor_double(entityPlayer.posZ + lookVec.zCoord * range); - - this.onCenteredWorldEffect(entityPlayer, world, new BlockPos(x, y, z)); - } - - public void setRange(float range) - { - this.range = range; - } - - public abstract void onCenteredWorldEffect(EntityPlayer player, World world, BlockPos pos); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/MeleeSpellWorldEffect.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/MeleeSpellWorldEffect.java deleted file mode 100644 index 844b5400..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/MeleeSpellWorldEffect.java +++ /dev/null @@ -1,21 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; - -public abstract class MeleeSpellWorldEffect implements IMeleeSpellWorldEffect -{ - protected int powerUpgrades; - protected int potencyUpgrades; - protected int costUpgrades; - - public MeleeSpellWorldEffect(int power, int potency, int cost) - { - this.powerUpgrades = power; - this.potencyUpgrades = potency; - this.costUpgrades = cost; - } - - @Override - public abstract void onWorldEffect(World world, EntityPlayer entityPlayer); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/ProjectileImpactEffect.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/ProjectileImpactEffect.java deleted file mode 100644 index 22ef5db8..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/ProjectileImpactEffect.java +++ /dev/null @@ -1,15 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -public abstract class ProjectileImpactEffect implements IProjectileImpactEffect -{ - protected int powerUpgrades; - protected int potencyUpgrades; - protected int costUpgrades; - - public ProjectileImpactEffect(int power, int potency, int cost) - { - this.powerUpgrades = power; - this.potencyUpgrades = potency; - this.costUpgrades = cost; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/ProjectileUpdateEffect.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/ProjectileUpdateEffect.java deleted file mode 100644 index 500e7cfb..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/ProjectileUpdateEffect.java +++ /dev/null @@ -1,15 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -public abstract class ProjectileUpdateEffect implements IProjectileUpdateEffect -{ - protected int powerUpgrades; - protected int potencyUpgrades; - protected int costUpgrades; - - public ProjectileUpdateEffect(int power, int potency, int cost) - { - this.powerUpgrades = power; - this.potencyUpgrades = potency; - this.costUpgrades = cost; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SelfSpellEffect.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/SelfSpellEffect.java deleted file mode 100644 index 5e9e356d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SelfSpellEffect.java +++ /dev/null @@ -1,15 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -public abstract class SelfSpellEffect implements ISelfSpellEffect -{ - protected int powerUpgrades; - protected int potencyUpgrades; - protected int costUpgrades; - - public SelfSpellEffect(int power, int potency, int cost) - { - this.powerUpgrades = power; - this.potencyUpgrades = potency; - this.costUpgrades = cost; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellEffect.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellEffect.java deleted file mode 100644 index 1ae52ba6..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellEffect.java +++ /dev/null @@ -1,500 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import net.minecraft.nbt.NBTTagCompound; - -/** - * New wrapper class to enclose the ComplexSpellEffect - */ -public class SpellEffect -{ - public ComplexSpellType type; - public ComplexSpellModifier modifier; - - protected int powerEnhancement; - protected int costEnhancement; - protected int potencyEnhancement; - - public SpellEffect() - { - this(ComplexSpellType.FIRE); - } - - public SpellEffect(ComplexSpellType type) - { - this(type, ComplexSpellModifier.DEFAULT); - } - - public SpellEffect(ComplexSpellType type, ComplexSpellModifier modifier) - { - this.type = type; - this.modifier = modifier; - - this.powerEnhancement = 0; - this.potencyEnhancement = 0; - this.costEnhancement = 0; - } - - public void enhanceEffect(SpellEnhancement enh) - { - if (enh != null) - { - switch (enh.getState()) - { - case SpellEnhancement.POWER: - this.powerEnhancement++; - break; - case SpellEnhancement.EFFICIENCY: - this.costEnhancement++; - break; - case SpellEnhancement.POTENCY: - this.potencyEnhancement++; - break; - } - } - } - - public void modifyEffect(ComplexSpellModifier mod) - { - if(mod != null) - { - this.modifier = mod; - } - } - - public void modifyParadigm(SpellParadigm parad) //When modifying the paradigm it will instead get the class name and ask the registry - { - if(parad == null) - { - return; - } - - Class paraClass = parad.getClass(); - - ComplexSpellEffect effect = SpellEffectRegistry.getSpellEffect(paraClass, type, modifier, powerEnhancement, potencyEnhancement, costEnhancement); - - if(effect != null) - { - effect.modifyParadigm(parad); - } - } - - public int getCostOfEffect(SpellParadigm parad) - { - if(parad == null) - { - return 0; - } - - Class paraClass = parad.getClass(); - - ComplexSpellEffect effect = SpellEffectRegistry.getSpellEffect(paraClass, type, modifier, powerEnhancement, potencyEnhancement, costEnhancement); - - if(effect == null) - { - return 0; - } - - return effect.getCostOfEffect(); - } - - public NBTTagCompound getTag() - { - NBTTagCompound tag = new NBTTagCompound(); - - tag.setString("Class", this.getClass().getName()); - tag.setString("type", SpellEffectRegistry.getKeyForType(type)); - tag.setString("modifier", SpellEffectRegistry.getKeyForModifier(modifier)); - tag.setInteger("power", powerEnhancement); - tag.setInteger("cost", costEnhancement); - tag.setInteger("potency", potencyEnhancement); - - return tag; - } - - public static SpellEffect getEffectFromTag(NBTTagCompound tag) - { - try - { - Class clazz = Class.forName(tag.getString("Class")); - if (clazz != null) - { - try - { - Object obj = clazz.newInstance(); - if (obj instanceof SpellEffect) - { - SpellEffect eff = (SpellEffect) obj; - - eff.type = SpellEffectRegistry.getTypeForKey(tag.getString("type")); - eff.modifier = SpellEffectRegistry.getModifierForKey(tag.getString("modifier")); - eff.powerEnhancement = tag.getInteger("power"); - eff.costEnhancement = tag.getInteger("cost"); - eff.potencyEnhancement = tag.getInteger("potency"); - - return eff; - } - } catch (InstantiationException e) - { - e.printStackTrace(); - } catch (IllegalAccessException e) - { - e.printStackTrace(); - } - } - } catch (ClassNotFoundException e) - { - e.printStackTrace(); - } - return null; - } - - public int getPowerEnhancements() - { - return this.powerEnhancement; - } - - public int getPotencyEnhancements() - { - return this.potencyEnhancement; - } - - public int getCostEnhancements() - { - return this.costEnhancement; - } -} - -//package WayofTime.alchemicalWizardry.common.spell.complex.effect; -// -//import WayofTime.alchemicalWizardry.common.spell.complex.*; -//import WayofTime.alchemicalWizardry.common.spell.complex.enhancement.SpellEnhancement; -//import net.minecraft.nbt.NBTTagCompound; -// -//public abstract class SpellEffect -//{ -// protected int modifierState; -// protected int powerEnhancement; -// protected int costEnhancement; -// protected int potencyEnhancement; -// -// public SpellEffect() -// { -// this.modifierState = SpellModifier.DEFAULT; -// this.powerEnhancement = 0; -// this.costEnhancement = 0; -// this.potencyEnhancement = 0; -// } -// -// public void enhanceEffect(SpellEnhancement enh) -// { -// if (enh != null) -// { -// switch (enh.getState()) -// { -// case SpellEnhancement.POWER: -// this.powerEnhancement++; -// break; -// case SpellEnhancement.EFFICIENCY: -// this.costEnhancement++; -// break; -// case SpellEnhancement.POTENCY: -// this.potencyEnhancement++; -// break; -// } -// } -// } -// -// public void modifyEffect(SpellModifier mod) -// { -// if (mod != null) -// modifierState = mod.getModifier(); -// } -// -// public void modifyParadigm(SpellParadigm parad) //When modifying the paradigm it will instead get the class name and ask the registry -// { -// if (parad instanceof SpellParadigmProjectile) -// { -// this.modifyProjectileParadigm((SpellParadigmProjectile) parad); -// } -// if (parad instanceof SpellParadigmSelf) -// { -// this.modifySelfParadigm((SpellParadigmSelf) parad); -// } -// if (parad instanceof SpellParadigmMelee) -// { -// this.modifyMeleeParadigm((SpellParadigmMelee) parad); -// } -// if (parad instanceof SpellParadigmTool) -// { -// this.modifyToolParadigm((SpellParadigmTool) parad); -// } -// } -// -// public void modifyProjectileParadigm(SpellParadigmProjectile parad) -// { -// switch (modifierState) -// { -// case SpellModifier.DEFAULT: -// this.defaultModificationProjectile(parad); -// break; -// case SpellModifier.OFFENSIVE: -// this.offensiveModificationProjectile(parad); -// break; -// case SpellModifier.DEFENSIVE: -// this.defensiveModificationProjectile(parad); -// break; -// case SpellModifier.ENVIRONMENTAL: -// this.environmentalModificationProjectile(parad); -// break; -// } -// } -// -// public abstract void defaultModificationProjectile(SpellParadigmProjectile parad); -// -// public abstract void offensiveModificationProjectile(SpellParadigmProjectile parad); -// -// public abstract void defensiveModificationProjectile(SpellParadigmProjectile parad); -// -// public abstract void environmentalModificationProjectile(SpellParadigmProjectile parad); -// -// public void modifySelfParadigm(SpellParadigmSelf parad) -// { -// switch (modifierState) -// { -// case SpellModifier.DEFAULT: -// this.defaultModificationSelf(parad); -// break; -// case SpellModifier.OFFENSIVE: -// this.offensiveModificationSelf(parad); -// break; -// case SpellModifier.DEFENSIVE: -// this.defensiveModificationSelf(parad); -// break; -// case SpellModifier.ENVIRONMENTAL: -// this.environmentalModificationSelf(parad); -// break; -// } -// } -// -// public abstract void defaultModificationSelf(SpellParadigmSelf parad); -// -// public abstract void offensiveModificationSelf(SpellParadigmSelf parad); -// -// public abstract void defensiveModificationSelf(SpellParadigmSelf parad); -// -// public abstract void environmentalModificationSelf(SpellParadigmSelf parad); -// -// public void modifyMeleeParadigm(SpellParadigmMelee parad) -// { -// switch (modifierState) -// { -// case SpellModifier.DEFAULT: -// this.defaultModificationMelee(parad); -// break; -// case SpellModifier.OFFENSIVE: -// this.offensiveModificationMelee(parad); -// break; -// case SpellModifier.DEFENSIVE: -// this.defensiveModificationMelee(parad); -// break; -// case SpellModifier.ENVIRONMENTAL: -// this.environmentalModificationMelee(parad); -// break; -// } -// } -// -// public abstract void defaultModificationMelee(SpellParadigmMelee parad); -// -// public abstract void offensiveModificationMelee(SpellParadigmMelee parad); -// -// public abstract void defensiveModificationMelee(SpellParadigmMelee parad); -// -// public abstract void environmentalModificationMelee(SpellParadigmMelee parad); -// -// public void modifyToolParadigm(SpellParadigmTool parad) -// { -// switch (modifierState) -// { -// case SpellModifier.DEFAULT: -// this.defaultModificationTool(parad); -// break; -// case SpellModifier.OFFENSIVE: -// this.offensiveModificationTool(parad); -// break; -// case SpellModifier.DEFENSIVE: -// this.defensiveModificationTool(parad); -// break; -// case SpellModifier.ENVIRONMENTAL: -// this.environmentalModificationTool(parad); -// break; -// } -// } -// -// public abstract void defaultModificationTool(SpellParadigmTool parad); -// -// public abstract void offensiveModificationTool(SpellParadigmTool parad); -// -// public abstract void defensiveModificationTool(SpellParadigmTool parad); -// -// public abstract void environmentalModificationTool(SpellParadigmTool parad); -// -// public int getCostForProjectile() -// { -// switch (this.modifierState) -// { -// case SpellModifier.DEFAULT: -// return this.getCostForDefaultProjectile(); -// case SpellModifier.OFFENSIVE: -// return this.getCostForOffenseProjectile(); -// case SpellModifier.DEFENSIVE: -// return this.getCostForDefenseProjectile(); -// case SpellModifier.ENVIRONMENTAL: -// return this.getCostForEnvironmentProjectile(); -// } -// return 0; -// } -// -// protected abstract int getCostForDefaultProjectile(); -// -// protected abstract int getCostForOffenseProjectile(); -// -// protected abstract int getCostForDefenseProjectile(); -// -// protected abstract int getCostForEnvironmentProjectile(); -// -// public int getCostForSelf() -// { -// switch (this.modifierState) -// { -// case SpellModifier.DEFAULT: -// return this.getCostForDefaultSelf(); -// case SpellModifier.OFFENSIVE: -// return this.getCostForOffenseSelf(); -// case SpellModifier.DEFENSIVE: -// return this.getCostForDefenseSelf(); -// case SpellModifier.ENVIRONMENTAL: -// return this.getCostForEnvironmentSelf(); -// } -// return 0; -// } -// -// protected abstract int getCostForDefaultSelf(); -// -// protected abstract int getCostForOffenseSelf(); -// -// protected abstract int getCostForDefenseSelf(); -// -// protected abstract int getCostForEnvironmentSelf(); -// -// public int getCostForMelee() -// { -// switch (this.modifierState) -// { -// case SpellModifier.DEFAULT: -// return this.getCostForDefaultMelee(); -// case SpellModifier.OFFENSIVE: -// return this.getCostForOffenseMelee(); -// case SpellModifier.DEFENSIVE: -// return this.getCostForDefenseMelee(); -// case SpellModifier.ENVIRONMENTAL: -// return this.getCostForEnvironmentMelee(); -// } -// return 0; -// } -// -// protected abstract int getCostForDefaultMelee(); -// -// protected abstract int getCostForOffenseMelee(); -// -// protected abstract int getCostForDefenseMelee(); -// -// protected abstract int getCostForEnvironmentMelee(); -// -// public int getCostForTool() -// { -// switch (this.modifierState) -// { -// case SpellModifier.DEFAULT: -// return this.getCostForDefaultTool(); -// case SpellModifier.OFFENSIVE: -// return this.getCostForOffenseTool(); -// case SpellModifier.DEFENSIVE: -// return this.getCostForDefenseTool(); -// case SpellModifier.ENVIRONMENTAL: -// return this.getCostForEnvironmentTool(); -// } -// return 0; -// } -// -// protected abstract int getCostForDefaultTool(); -// -// protected abstract int getCostForOffenseTool(); -// -// protected abstract int getCostForDefenseTool(); -// -// protected abstract int getCostForEnvironmentTool(); -// -// public int getPowerEnhancements() -// { -// return this.powerEnhancement; -// } -// -// public int getCostEnhancements() -// { -// return this.costEnhancement; -// } -// -// public int getPotencyEnhancements() -// { -// return this.potencyEnhancement; -// } -// -// public NBTTagCompound getTag() -// { -// NBTTagCompound tag = new NBTTagCompound(); -// -// tag.setString("Class", this.getClass().getName()); -// tag.setInteger("modifier", modifierState); -// tag.setInteger("power", powerEnhancement); -// tag.setInteger("cost", costEnhancement); -// tag.setInteger("potency", potencyEnhancement); -// -// return tag; -// } -// -// public static SpellEffect getEffectFromTag(NBTTagCompound tag) -// { -// try -// { -// Class clazz = Class.forName(tag.getString("Class")); -// if (clazz != null) -// { -// try -// { -// Object obj = clazz.newInstance(); -// if (obj instanceof SpellEffect) -// { -// SpellEffect eff = (SpellEffect) obj; -// -// eff.modifierState = tag.getInteger("modifier"); -// eff.powerEnhancement = tag.getInteger("power"); -// eff.costEnhancement = tag.getInteger("cost"); -// eff.potencyEnhancement = tag.getInteger("potency"); -// -// return eff; -// } -// } catch (InstantiationException e) -// { -// e.printStackTrace(); -// } catch (IllegalAccessException e) -// { -// e.printStackTrace(); -// } -// } -// } catch (ClassNotFoundException e) -// { -// e.printStackTrace(); -// } -// return null; -// } -//} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellEffectRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellEffectRegistry.java deleted file mode 100644 index fcdd82f5..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellEffectRegistry.java +++ /dev/null @@ -1,157 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -public class SpellEffectRegistry -{ - public static Map, List> effectRegistry = new HashMap, List>(); - public static Map typeRegistry = new HashMap(); - public static Map modifierRegistry = new HashMap(); - - public static void registerSpellEffect(Class paraClass, ComplexSpellEffect effect) - { - if(paraClass == null || effect == null) - { - return; - } - - if(effectRegistry.containsKey(paraClass)) - { - List effectList = effectRegistry.get(paraClass); - ComplexSpellType type = effect.getType(); - ComplexSpellModifier modifier = effect.getModifier(); - - if(type == null || modifier == null) - { - return; - } - - for(ComplexSpellEffect eff : effectList) - { - if(type.equals(eff.getType()) && modifier.equals(eff.getModifier())) - { - effectList.remove(eff); - effectList.add(effect); - return; - } - } - - effectList.add(effect); - }else - { - List effectList = new LinkedList(); - effectList.add(effect); - effectRegistry.put(paraClass, effectList); - } - } - - /** - * - * @param paraClass - * @param type - * @param mod - * @return A copy of the spell effect - */ - public static ComplexSpellEffect getSpellEffect(Class paraClass, ComplexSpellType type, ComplexSpellModifier mod) - { - return SpellEffectRegistry.getSpellEffect(paraClass, type, mod, 0, 0, 0); - } - - public static ComplexSpellEffect getSpellEffect(Class paraClass, ComplexSpellType type, ComplexSpellModifier mod, int power, int potency, int cost) - { - if(paraClass == null || type == null || mod == null) - { - return null; - } - - List list = effectRegistry.get(paraClass); - - if(list == null || list.isEmpty()) - { - return null; - } - - for(ComplexSpellEffect effect : list) - { - if(effect != null && type.equals(effect.type) && mod.equals(effect.modifier)) - { - return effect.copy(power, cost, potency); - } - } - - return null; - } - - public static void registerSpellType(String key, ComplexSpellType type) - { - typeRegistry.put(key, type); - } - - public static void registerSpellModifier(String key, ComplexSpellModifier modifier) - { - modifierRegistry.put(key, modifier); - } - - public static ComplexSpellType getTypeForKey(String key) - { - return typeRegistry.get(key); - } - - public static String getKeyForType(ComplexSpellType type) - { - if(type == null) - { - return ""; - } - - for(Entry entry : typeRegistry.entrySet()) - { - if(type.equals(entry.getValue())) - { - return entry.getKey(); - } - } - - return ""; - } - - public static ComplexSpellModifier getModifierForKey(String key) - { - return modifierRegistry.get(key); - } - - public static String getKeyForModifier(ComplexSpellModifier modifier) - { - if(modifier == null) - { - return ""; - } - - for(Entry entry : modifierRegistry.entrySet()) - { - if(modifier.equals(entry.getValue())) - { - return entry.getKey(); - } - } - - return ""; - } - - public static void initiateRegistry() - { - SpellEffectRegistry.registerSpellType("FIRE", ComplexSpellType.FIRE); - SpellEffectRegistry.registerSpellType("ICE", ComplexSpellType.ICE); - SpellEffectRegistry.registerSpellType("EARTH", ComplexSpellType.EARTH); - SpellEffectRegistry.registerSpellType("WIND", ComplexSpellType.WIND); - - SpellEffectRegistry.registerSpellModifier("DEFAULT", ComplexSpellModifier.DEFAULT); - SpellEffectRegistry.registerSpellModifier("OFFENSIVE", ComplexSpellModifier.OFFENSIVE); - SpellEffectRegistry.registerSpellModifier("DEFENSIVE", ComplexSpellModifier.DEFENSIVE); - SpellEffectRegistry.registerSpellModifier("ENVIRONMENTAL", ComplexSpellModifier.ENVIRONMENTAL); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellEnhancement.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellEnhancement.java deleted file mode 100644 index a7cb6b40..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellEnhancement.java +++ /dev/null @@ -1,20 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -public class SpellEnhancement -{ - public static final int POWER = 0; - public static final int EFFICIENCY = 1; - public static final int POTENCY = 2; - - private int state = POWER; - - protected SpellEnhancement(int state) - { - this.state = state; - } - - public int getState() - { - return this.state; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellEnhancementCost.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellEnhancementCost.java deleted file mode 100644 index a5ea252d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellEnhancementCost.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -public class SpellEnhancementCost extends SpellEnhancement -{ - public SpellEnhancementCost() - { - super(SpellEnhancement.EFFICIENCY); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellEnhancementPotency.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellEnhancementPotency.java deleted file mode 100644 index 00ffc98f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellEnhancementPotency.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -public class SpellEnhancementPotency extends SpellEnhancement -{ - public SpellEnhancementPotency() - { - super(SpellEnhancement.POTENCY); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellEnhancementPower.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellEnhancementPower.java deleted file mode 100644 index d6e27d20..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellEnhancementPower.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -public class SpellEnhancementPower extends SpellEnhancement -{ - public SpellEnhancementPower() - { - super(SpellEnhancement.POWER); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellParadigm.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellParadigm.java deleted file mode 100644 index 4f72d4ff..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellParadigm.java +++ /dev/null @@ -1,131 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import java.util.LinkedList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public abstract class SpellParadigm -{ - protected List bufferedEffectList = new LinkedList(); - - public void addBufferedEffect(SpellEffect effect) - { - if (effect != null) - { - this.bufferedEffectList.add(effect); - } - } - - public void modifyBufferedEffect(ComplexSpellModifier modifier) - { - SpellEffect effect = this.getBufferedEffect(); - if (effect != null) - { - effect.modifyEffect(modifier); - } - } - - public void applyEnhancement(SpellEnhancement enh) - { - if (enh != null) - { - if (bufferedEffectList.isEmpty()) - { - this.enhanceParadigm(enh); - } else - { - SpellEffect effect = this.getBufferedEffect(); - if (effect != null) - { - effect.enhanceEffect(enh); - } - } - } - - } - - public abstract void enhanceParadigm(SpellEnhancement enh); - - public abstract void castSpell(World world, EntityPlayer entityPlayer, ItemStack itemStack); - - public void applySpellEffect(SpellEffect effect) - { - effect.modifyParadigm(this); - } - - public void applyAllSpellEffects() - { - for (SpellEffect effect : bufferedEffectList) - { - this.applySpellEffect(effect); - } - } - - public SpellEffect getBufferedEffect() - { - if (bufferedEffectList.isEmpty()) - { - return null; - } else - { - return bufferedEffectList.get(bufferedEffectList.size() - 1); - } - } - - public int getTotalCost() - { - int cost = 0; - if (this.bufferedEffectList != null && !this.bufferedEffectList.isEmpty()) - { - for(SpellEffect effect : bufferedEffectList) - { - cost += effect.getCostOfEffect(this); - } - - return (int) (cost * Math.sqrt(this.bufferedEffectList.size())); - } - - return getDefaultCost(); - } - - public abstract int getDefaultCost(); - - public int getBufferedEffectPower() - { - SpellEffect eff = this.getBufferedEffect(); - - if (eff != null) - { - return eff.getPowerEnhancements(); - } - - return 0; - } - - public int getBufferedEffectCost() - { - SpellEffect eff = this.getBufferedEffect(); - - if (eff != null) - { - return eff.getCostEnhancements(); - } - - return 0; - } - - public int getBufferedEffectPotency() - { - SpellEffect eff = this.getBufferedEffect(); - - if (eff != null) - { - return eff.getPotencyEnhancements(); - } - - return 0; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellParadigmMelee.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellParadigmMelee.java deleted file mode 100644 index 12023f7a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellParadigmMelee.java +++ /dev/null @@ -1,67 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; - -public class SpellParadigmMelee extends SpellParadigm -{ - private List entityEffectList; - private List worldEffectList; - - public SpellParadigmMelee() - { - this.entityEffectList = new ArrayList(); - this.worldEffectList = new ArrayList(); - } - - @Override - public void enhanceParadigm(SpellEnhancement enh) {} - - @Override - public void castSpell(World world, EntityPlayer entityPlayer, ItemStack itemStack) - { - int cost = this.getTotalCost(); - - if(!SoulNetworkHandler.syphonAndDamageFromNetwork(itemStack, entityPlayer, cost)) - { - return; - } - - for (IMeleeSpellEntityEffect effect : entityEffectList) - { - effect.onEntityImpact(world, entityPlayer); - } - - for (IMeleeSpellWorldEffect effect : worldEffectList) - { - effect.onWorldEffect(world, entityPlayer); - } - } - - public void addEntityEffect(IMeleeSpellEntityEffect eff) - { - if (eff != null) - { - this.entityEffectList.add(eff); - } - } - - public void addWorldEffect(IMeleeSpellWorldEffect eff) - { - if (eff != null) - { - this.worldEffectList.add(eff); - } - } - - @Override - public int getDefaultCost() - { - return 0; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellParadigmProjectile.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellParadigmProjectile.java deleted file mode 100644 index f1a33800..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellParadigmProjectile.java +++ /dev/null @@ -1,101 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; - -public class SpellParadigmProjectile extends SpellParadigm -{ - public DamageSource damageSource; - public float damage; - public int cost; - public List impactList; - public List updateEffectList; - public boolean penetration; - public int ricochetMax; - public boolean isSilkTouch; - - public SpellParadigmProjectile() - { - this.damageSource = DamageSource.generic; - this.damage = 1; - this.cost = 0; - this.impactList = new ArrayList(); - this.updateEffectList = new ArrayList(); - this.penetration = false; - this.ricochetMax = 0; - this.isSilkTouch = false; - } - - @Override - public void enhanceParadigm(SpellEnhancement enh) - { - - } - - @Override - public void castSpell(World world, EntityPlayer entityPlayer, ItemStack itemStack) - { - int cost = this.getTotalCost(); - - if(!SoulNetworkHandler.syphonAndDamageFromNetwork(itemStack, entityPlayer, cost)) - { - return; - } - - EntitySpellProjectile proj = new EntitySpellProjectile(world, entityPlayer); - this.prepareProjectile(proj); - world.spawnEntityInWorld(proj); - } - - public static SpellParadigmProjectile getParadigmForEffectArray(List effectList) - { - SpellParadigmProjectile parad = new SpellParadigmProjectile(); - - for (SpellEffect eff : effectList) - { - parad.addBufferedEffect(eff); - } - - return parad; - } - - public void prepareProjectile(EntitySpellProjectile proj) - { - proj.setDamage(damage); - proj.setImpactList(impactList); - proj.setUpdateEffectList(updateEffectList); - proj.setPenetration(penetration); - proj.setRicochetMax(ricochetMax); - proj.setIsSilkTouch(isSilkTouch); - proj.setSpellEffectList(bufferedEffectList); - } - - public void addImpactEffect(IProjectileImpactEffect eff) - { - if (eff != null) - { - this.impactList.add(eff); - } - } - - public void addUpdateEffect(IProjectileUpdateEffect eff) - { - if (eff != null) - { - this.updateEffectList.add(eff); - } - } - - @Override - public int getDefaultCost() - { - return 50; - } - -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellParadigmSelf.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellParadigmSelf.java deleted file mode 100644 index 91c6ab1d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellParadigmSelf.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; - -public class SpellParadigmSelf extends SpellParadigm -{ - public List selfSpellEffectList; - - public SpellParadigmSelf() - { - selfSpellEffectList = new ArrayList(); - } - - @Override - public void enhanceParadigm(SpellEnhancement enh) {} - - @Override - public void castSpell(World world, EntityPlayer entityPlayer, ItemStack itemStack) - { - this.applyAllSpellEffects(); - - int cost = this.getTotalCost(); - - if(!SoulNetworkHandler.syphonAndDamageFromNetwork(itemStack, entityPlayer, cost)) - { - return; - } - - for (ISelfSpellEffect eff : selfSpellEffectList) - { - eff.onSelfUse(world, entityPlayer); - } - } - - public void addSelfSpellEffect(ISelfSpellEffect eff) - { - if (eff != null) - { - this.selfSpellEffectList.add(eff); - } - } - - @Override - public int getDefaultCost() - { - return 100; - } - -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellParadigmTool.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellParadigmTool.java deleted file mode 100644 index e61795b9..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/SpellParadigmTool.java +++ /dev/null @@ -1,483 +0,0 @@ -package WayofTime.alchemicalWizardry.api.spell; - -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map.Entry; -import java.util.Set; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.items.ItemSpellMultiTool; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; - -public class SpellParadigmTool extends SpellParadigm -{ - private List leftClickEffectList; - private List rightClickEffectList; - private List toolUpdateEffectList; - private List toolSummonEffectList; - private List toolBanishEffectList; - private List breakBlockEffectList; - private List itemManipulatorEffectList; - private List digAreaEffectList; - private List specialDamageEffectList; - - private HashMap harvestLevel; - private HashMap digSpeed; - private HashMap maxDamageHash; - private HashMap critChanceHash; - private HashMap durationHash; - - private HashMap toolInfoString; - - private int fortuneLevel; - private boolean silkTouch; - - private int duration; - - public static Item customTool; - - public SpellParadigmTool() - { - this.leftClickEffectList = new LinkedList(); - this.rightClickEffectList = new LinkedList(); - this.toolUpdateEffectList = new LinkedList(); - this.toolSummonEffectList = new LinkedList(); - this.toolBanishEffectList = new LinkedList(); - this.breakBlockEffectList = new LinkedList(); - this.itemManipulatorEffectList = new LinkedList(); - this.digAreaEffectList = new LinkedList(); - this.specialDamageEffectList = new LinkedList(); - this.durationHash = new HashMap(); - - this.toolInfoString = new HashMap(); - this.critChanceHash = new HashMap(); - - this.harvestLevel = new HashMap(); - this.harvestLevel.put("pickaxe", -1); - this.harvestLevel.put("shovel", -1); - this.harvestLevel.put("axe", -1); - - this.digSpeed = new HashMap(); - this.digSpeed.put("pickaxe", 1.0f); - this.digSpeed.put("shovel", 1.0f); - this.digSpeed.put("axe", 1.0f); - - this.maxDamageHash = new HashMap(); - this.maxDamageHash.put("default", 5.0f); - - this.fortuneLevel = 0; - this.silkTouch = false; - this.duration = 0; - this.durationHash.put("default", 2400); - } - - @Override - public void enhanceParadigm(SpellEnhancement enh) - { - - } - - @Override - public void castSpell(World world, EntityPlayer entityPlayer, ItemStack crystal) - { - if (entityPlayer.worldObj.isRemote) - { - return; - } - - int cost = this.getTotalCost(); - - if(!SoulNetworkHandler.syphonAndDamageFromNetwork(crystal, entityPlayer, cost)) - { - return; - } - - ItemStack toolStack = this.prepareTool(crystal, world); - - entityPlayer.setCurrentItemOrArmor(0, toolStack); - - this.onSummonTool(toolStack, world, entityPlayer); - } - - /** - * @param crystalStack - * @return stack containing the new multitool - */ - public ItemStack prepareTool(ItemStack crystalStack, World world) - { - ItemStack toolStack = new ItemStack(customTool, 1); - - ItemSpellMultiTool itemTool = (ItemSpellMultiTool) customTool; - - itemTool.setItemAttack(toolStack, this.composeMaxDamageFromHash()); - - Set> harvestLevelSet = this.harvestLevel.entrySet(); - - for (Entry testMap : harvestLevelSet) - { - String tool = testMap.getKey(); - int level = testMap.getValue(); - - itemTool.setHarvestLevel(toolStack, tool, level); - } - - Set> digSpeedSet = this.digSpeed.entrySet(); - - for (Entry testMap : digSpeedSet) - { - String tool = testMap.getKey(); - float speed = testMap.getValue(); - - itemTool.setDigSpeed(toolStack, tool, speed); - } - - itemTool.setFortuneLevel(toolStack, getFortuneLevel()); - itemTool.setSilkTouch(toolStack, this.getSilkTouch()); - - if (this.getSilkTouch()) - { - this.addToolString("SilkTouch", "Silk Touch" + " " + APISpellHelper.getNumeralForInt(1)); - } - - if (this.getFortuneLevel() > 0) - { - this.addToolString("Fortune", "Fortune" + " " + APISpellHelper.getNumeralForInt(this.getFortuneLevel())); - } - - itemTool.setCritChance(toolStack, this.getCritChance() / 100f); - - List toolStringList = new LinkedList(); - - for (String str : this.toolInfoString.values()) - { - toolStringList.add(str); - } - - itemTool.setToolListString(toolStack, toolStringList); - - for (Integer integ : this.durationHash.values()) - { - this.duration += integ; - } - - itemTool.setDuration(toolStack, world, this.duration); - itemTool.loadParadigmIntoStack(toolStack, this.bufferedEffectList); - - SoulNetworkHandler.checkAndSetItemOwner(toolStack, SoulNetworkHandler.getOwnerName(crystalStack)); - - itemTool.setContainedCrystal(toolStack, crystalStack); - - return toolStack; - } - - @Override - public int getDefaultCost() - { - return 100; - } - - public static SpellParadigmTool getParadigmForEffectArray(List effectList) - { - SpellParadigmTool parad = new SpellParadigmTool(); - - for (SpellEffect eff : effectList) - { - parad.addBufferedEffect(eff); - } - - parad.applyAllSpellEffects(); - - return parad; - } - - public void addLeftClickEffect(ILeftClickEffect eff) - { - if (eff != null) - { - this.leftClickEffectList.add(eff); - } - } - - public void addRightClickEffect(IRightClickEffect eff) - { - if (eff != null) - { - this.rightClickEffectList.add(eff); - } - } - - public void addUpdateEffect(IToolUpdateEffect eff) - { - if (eff != null) - { - this.toolUpdateEffectList.add(eff); - } - } - - public void addToolSummonEffect(IOnSummonTool eff) - { - if (eff != null) - { - this.toolSummonEffectList.add(eff); - } - } - - public void addToolBanishEffect(IOnBanishTool eff) - { - if (eff != null) - { - this.toolBanishEffectList.add(eff); - } - } - - public void addBlockBreakEffect(IOnBreakBlock eff) - { - if (eff != null) - { - this.breakBlockEffectList.add(eff); - } - } - - public void addItemManipulatorEffect(IItemManipulator eff) - { - if (eff != null) - { - this.itemManipulatorEffectList.add(eff); - } - } - - public void addDigAreaEffect(IDigAreaEffect eff) - { - if (eff != null) - { - this.digAreaEffectList.add(eff); - } - } - - public void addSpecialDamageEffect(ISpecialDamageEffect eff) - { - if (eff != null) - { - this.specialDamageEffectList.add(eff); - } - } - - public int onLeftClickEntity(ItemStack stack, EntityLivingBase attacked, EntityLivingBase weilder) - { - int total = 0; - for (ILeftClickEffect effect : this.leftClickEffectList) - { - total += effect.onLeftClickEntity(stack, attacked, weilder); - } - - return total; - } - - public int onRightClickBlock(ItemStack toolStack, EntityLivingBase weilder, World world, MovingObjectPosition mop) - { - int total = 0; - for (IRightClickEffect effect : this.rightClickEffectList) - { - total += effect.onRightClickBlock(toolStack, weilder, world, mop); - } - - return total; - } - - public int onRightClickAir(ItemStack toolStack, World world, EntityPlayer player) - { - int total = 0; - for (IRightClickEffect effect : this.rightClickEffectList) - { - total += effect.onRightClickAir(toolStack, player); - } - - return total; - } - - public int onUpdate(ItemStack toolStack, World world, Entity par3Entity, int invSlot, boolean inHand) - { - int total = 0; - for (IToolUpdateEffect effect : this.toolUpdateEffectList) - { - total += effect.onUpdate(toolStack, world, par3Entity, invSlot, inHand); - } - - return total; - } - - public int onSummonTool(ItemStack toolStack, World world, Entity entity) - { - int total = 0; - for (IOnSummonTool effect : this.toolSummonEffectList) - { - total += effect.onSummonTool(toolStack, world, entity); - } - - return total; - } - - public int onBanishTool(ItemStack toolStack, World world, Entity entity, int invSlot, boolean inHand) - { - int total = 0; - for (IOnBanishTool effect : this.toolBanishEffectList) - { - total += effect.onBanishTool(toolStack, world, entity, invSlot, inHand); - } - - return total; - } - - public int onBreakBlock(ItemStack container, World world, EntityPlayer player, Block block, IBlockState state, BlockPos pos, EnumFacing sideBroken) - { - int total = 0; - for (IOnBreakBlock effect : this.breakBlockEffectList) - { - total += effect.onBlockBroken(container, world, player, block, state, pos, sideBroken); - } - - return total; - } - - public List handleItemList(ItemStack toolStack, List items) - { - List heldList = items; - - for (IItemManipulator eff : this.itemManipulatorEffectList) - { - heldList = eff.handleItemsOnBlockBroken(toolStack, heldList); - } - - return heldList; - } - - public int digSurroundingArea(ItemStack container, World world, EntityPlayer player, MovingObjectPosition blockPos, String usedToolClass, float blockHardness, int harvestLvl, ItemSpellMultiTool itemTool) - { - int cost = 0; - - for (IDigAreaEffect effect : this.digAreaEffectList) - { - cost += effect.digSurroundingArea(container, world, player, blockPos, usedToolClass, blockHardness, harvestLvl, itemTool); - } - - return cost; - } - - public int getFortuneLevel() - { - return this.fortuneLevel; - } - - public void setFortuneLevel(int fortuneLevel) - { - this.fortuneLevel = fortuneLevel; - } - - public boolean getSilkTouch() - { - return this.silkTouch; - } - - public void setSilkTouch(boolean silkTouch) - { - this.silkTouch = silkTouch; - } - - public int getDuration() - { - return this.duration; - } - - public void setDuration(int duration) - { - this.duration = duration; - } - - public void setDigSpeed(String toolClass, float digSpeed) - { - this.digSpeed.put(toolClass, digSpeed); - } - - public void setHarvestLevel(String toolClass, int hlvl) - { - this.harvestLevel.put(toolClass, hlvl); - } - - public float composeMaxDamageFromHash() - { - float damage = 0.0f; - - for (float f : this.maxDamageHash.values()) - { - damage += f; - } - - return damage; - } - - public void addDamageToHash(String key, float dmg) - { - this.maxDamageHash.put(key, dmg); - } - - public void addToolString(String key, String str) - { - if (str != null && key != null) - { - this.toolInfoString.put(key, str); - } - } - - public void addCritChance(String key, float chance) - { - //Chance is in percentage chance i.e. chance = 1.0 means 1.0% - this.critChanceHash.put(key, chance); - } - - public void addDuration(String key, int dur) - { - this.durationHash.put(key, dur); - } - - public float getCritChance() - { - float chance = 0.0f; - - for (float fl : this.critChanceHash.values()) - { - chance += fl; - } - - return chance; - } - - public float getAddedDamageForEntity(Entity entity) - { - HashMap hash = new HashMap(); - - for (ISpecialDamageEffect effect : this.specialDamageEffectList) - { - hash.put(effect.getKey(), effect.getDamageForEntity(entity)); - } - - float addedDmg = 0.0f; - - for (float fl : hash.values()) - { - addedDmg += fl; - } - - return addedDmg; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/summoningRegistry/SummoningHelper.java b/src/main/java/WayofTime/alchemicalWizardry/api/summoningRegistry/SummoningHelper.java deleted file mode 100644 index 84c4d3a7..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/summoningRegistry/SummoningHelper.java +++ /dev/null @@ -1,21 +0,0 @@ -package WayofTime.alchemicalWizardry.api.summoningRegistry; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.world.World; - -public abstract class SummoningHelper -{ - protected String id; - - public SummoningHelper(String id) - { - this.id = id; - } - - public abstract EntityLivingBase getEntity(World worldObj); - - public String getSummoningHelperID() - { - return id; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/summoningRegistry/SummoningRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/api/summoningRegistry/SummoningRegistry.java deleted file mode 100644 index 01c065f8..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/summoningRegistry/SummoningRegistry.java +++ /dev/null @@ -1,70 +0,0 @@ -package WayofTime.alchemicalWizardry.api.summoningRegistry; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.List; - -public class SummoningRegistry -{ - public static List summoningList = new ArrayList(); - - public static void registerSummon(SummoningHelper s, ItemStack[] ring1, ItemStack[] ring2, ItemStack[] ring3, int amountUsed, int bloodOrbLevel) - { - summoningList.add(new SummoningRegistryComponent(s, ring1, ring2, ring3, amountUsed, bloodOrbLevel)); - } - - public static boolean isRecipeValid(int bloodOrbLevel, ItemStack[] test1, ItemStack[] test2, ItemStack[] test3) - { - for (SummoningRegistryComponent src : summoningList) - { - if (src.getBloodOrbLevel() <= bloodOrbLevel && src.compareRing(1, test1) && src.compareRing(2, test2) && src.compareRing(3, test3)) - { - return true; - } - } - - return false; - } - - public static SummoningRegistryComponent getRegistryComponent(int bloodOrbLevel, ItemStack[] test1, ItemStack[] test2, ItemStack[] test3) - { - for (SummoningRegistryComponent src : summoningList) - { - if (src.getBloodOrbLevel() <= bloodOrbLevel && src.compareRing(1, test1) && src.compareRing(2, test2) && src.compareRing(3, test3)) - { - return src; - } - } - - return null; - } - - public static EntityLivingBase getEntity(World worldObj, int bloodOrbLevel, ItemStack[] test1, ItemStack[] test2, ItemStack[] test3) - { - for (SummoningRegistryComponent src : summoningList) - { - if (src.getBloodOrbLevel() <= bloodOrbLevel && src.compareRing(1, test1) && src.compareRing(2, test2) && src.compareRing(3, test3)) - { - return src.getEntity(worldObj); - } - } - - return null; - } - - public static EntityLivingBase getEntityWithID(World worldObj, String id) - { - for (SummoningRegistryComponent src : summoningList) - { - if (src.getSummoningHelperID().equals(id)) - { - return src.getEntity(worldObj); - } - } - - return null; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/summoningRegistry/SummoningRegistryComponent.java b/src/main/java/WayofTime/alchemicalWizardry/api/summoningRegistry/SummoningRegistryComponent.java deleted file mode 100644 index 72dbd838..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/summoningRegistry/SummoningRegistryComponent.java +++ /dev/null @@ -1,231 +0,0 @@ -package WayofTime.alchemicalWizardry.api.summoningRegistry; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; - -public class SummoningRegistryComponent -{ - public ItemStack[] ring1 = new ItemStack[6]; - public ItemStack[] ring2 = new ItemStack[6]; - public ItemStack[] ring3 = new ItemStack[6]; - public SummoningHelper summoningHelper; - public int summoningCost; - public int bloodOrbLevel; - - public SummoningRegistryComponent(SummoningHelper s, ItemStack[] newRing1, ItemStack[] newRing2, ItemStack[] newRing3, int amount, int bloodOrbLevel) - { - this.summoningHelper = s; - this.ring1 = newRing1; - this.ring2 = newRing2; - this.ring3 = newRing3; - this.summoningCost = amount; - this.bloodOrbLevel = bloodOrbLevel; - - if (this.ring1.length != 6) - { - ItemStack[] newRecipe = new ItemStack[6]; - - for (int i = 0; i < 6; i++) - { - if (i + 1 > this.ring1.length) - { - newRecipe[i] = null; - } else - { - newRecipe[i] = this.ring1[i]; - } - } - - this.ring1 = newRecipe; - } - - if (this.ring2.length != 6) - { - ItemStack[] newRecipe = new ItemStack[6]; - - for (int i = 0; i < 6; i++) - { - if (i + 1 > this.ring2.length) - { - newRecipe[i] = null; - } else - { - newRecipe[i] = this.ring2[i]; - } - } - - this.ring2 = newRecipe; - } - - if (this.ring3.length != 6) - { - ItemStack[] newRecipe = new ItemStack[6]; - - for (int i = 0; i < 6; i++) - { - if (i + 1 > this.ring3.length) - { - newRecipe[i] = null; - } else - { - newRecipe[i] = this.ring3[i]; - } - } - - this.ring3 = newRecipe; - } - } - - public boolean compareRing(int ring, ItemStack[] checkedRingRecipe) - { - ItemStack[] recipe; - - if (checkedRingRecipe.length < 6) - { - return false; - } - - switch (ring) - { - case 1: - recipe = ring1; - break; - - case 2: - recipe = ring2; - break; - - case 3: - recipe = ring3; - break; - - default: - recipe = ring1; - } - - if (recipe.length != 6) - { - ItemStack[] newRecipe = new ItemStack[6]; - - for (int i = 0; i < 6; i++) - { - if (i + 1 > recipe.length) - { - newRecipe[i] = null; - } else - { - newRecipe[i] = recipe[i]; - } - } - - recipe = newRecipe; - } - - boolean[] checkList = new boolean[6]; - - for (int i = 0; i < 6; i++) - { - checkList[i] = false; - } - - for (int i = 0; i < 6; i++) - { - ItemStack recipeItemStack = recipe[i]; - - if (recipeItemStack == null) - { - continue; - } - - boolean test = false; - - for (int j = 0; j < 6; j++) - { - if (checkList[j]) - { - continue; - } - - ItemStack checkedItemStack = checkedRingRecipe[j]; - - if (checkedItemStack == null) - { - continue; - } - - boolean quickTest = false; - - if (recipeItemStack.getItem() instanceof ItemBlock) - { - if (checkedItemStack.getItem() instanceof ItemBlock) - { - quickTest = true; - } - } else if (!(checkedItemStack.getItem() instanceof ItemBlock)) - { - quickTest = true; - } - - if (!quickTest) - { - continue; - } - - if ((checkedItemStack.getItemDamage() == recipeItemStack.getItemDamage() || OreDictionary.WILDCARD_VALUE == recipeItemStack.getItemDamage()) && checkedItemStack.getItem() == recipeItemStack.getItem()) - { - test = true; - checkList[j] = true; - break; - } - } - - if (!test) - { - return false; - } - } - - return true; - } - - public int getSummoningCost() - { - return summoningCost; - } - - public EntityLivingBase getEntity(World world) - { - return this.summoningHelper.getEntity(world); - } - - public int getBloodOrbLevel() - { - return this.bloodOrbLevel; - } - - public ItemStack[] getRingRecipeForRing(int ring) - { - switch (ring) - { - case 1: - return ring1; - - case 2: - return ring2; - - case 3: - return ring3; - - default: - return null; - } - } - - public String getSummoningHelperID() - { - return this.summoningHelper.getSummoningHelperID(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/tile/IBloodAltar.java b/src/main/java/WayofTime/alchemicalWizardry/api/tile/IBloodAltar.java deleted file mode 100644 index eaee5700..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/tile/IBloodAltar.java +++ /dev/null @@ -1,42 +0,0 @@ -package WayofTime.alchemicalWizardry.api.tile; - -/** - * Created by Pokefenn. - */ -public interface IBloodAltar -{ - int getCapacity(); - - int getCurrentBlood(); - - int getTier(); - - int getProgress(); - - float getSacrificeMultiplier(); - - float getSelfSacrificeMultiplier(); - - float getOrbMultiplier(); - - float getDislocationMultiplier(); - - int getBufferCapacity(); - - void sacrificialDaggerCall(int amount, boolean b); - - void startCycle(); - - /** - * Will set the altar to initiate a cooldown cycle after it crafts before starting to craft again, giving the user time to interact with the altar. - * This can only be set while the altar is not active. - * @param amount - */ - void requestPauseAfterCrafting(int amount); - - void addToDemonBloodDuration(int dur); - - boolean hasDemonBlood(); - - void decrementDemonBlood(); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/tile/ISpellParadigmTile.java b/src/main/java/WayofTime/alchemicalWizardry/api/tile/ISpellParadigmTile.java deleted file mode 100644 index 97af71d2..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/tile/ISpellParadigmTile.java +++ /dev/null @@ -1,10 +0,0 @@ -package WayofTime.alchemicalWizardry.api.tile; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public interface ISpellParadigmTile extends ISpellTile -{ - void castSpell(World world, EntityPlayer entity, ItemStack spellCasterStack); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/tile/ISpellTile.java b/src/main/java/WayofTime/alchemicalWizardry/api/tile/ISpellTile.java deleted file mode 100644 index ac47e535..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/api/tile/ISpellTile.java +++ /dev/null @@ -1,11 +0,0 @@ -package WayofTime.alchemicalWizardry.api.tile; - -import net.minecraft.util.EnumFacing; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; - -public interface ISpellTile -{ - void modifySpellParadigm(SpellParadigm parad); - - boolean canInputRecieveOutput(EnumFacing output); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/BlockRenderer.java b/src/main/java/WayofTime/alchemicalWizardry/client/BlockRenderer.java deleted file mode 100644 index 8ade0296..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/client/BlockRenderer.java +++ /dev/null @@ -1,14 +0,0 @@ -package WayofTime.alchemicalWizardry.client; - -import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; -import net.minecraft.client.resources.model.ModelResourceLocation; -import net.minecraft.item.Item; - -public class BlockRenderer -{ - public static void registerBlock(Block block) - { - Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(block), 0, new ModelResourceLocation("alchemicalwizardry:" + block.getUnlocalizedName().substring(5), "inventory")); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/ClientEventHandler.java b/src/main/java/WayofTime/alchemicalWizardry/client/ClientEventHandler.java deleted file mode 100644 index ee938546..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/client/ClientEventHandler.java +++ /dev/null @@ -1,86 +0,0 @@ -package WayofTime.alchemicalWizardry.client; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.client.event.RenderBlockOverlayEvent; -import net.minecraftforge.client.event.sound.SoundEvent; -import net.minecraftforge.fml.client.FMLClientHandler; -import net.minecraftforge.fml.common.eventhandler.Event.Result; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.InputEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; -import net.minecraftforge.fml.common.gameevent.TickEvent.RenderTickEvent; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.ModBlocks; - - -public class ClientEventHandler -{ - private Minecraft mcClient = FMLClientHandler.instance().getClient(); - - @SubscribeEvent - public void onKeyInput(InputEvent.KeyInputEvent event) - { -// if(KeyBindings.omegaTest.isPressed()) -// { -// System.out.println("ping"); -//// NewPacketHandler.INSTANCE.sendToServer(NewPacketHandler.getKeyboardPressPacket((byte)2)); -// ClientToServerPacketHandler.INSTANCE.sendToServer(new MessageKeyPressed(MessageKeyPressed.Key.OMEGA_ACTIVE)); -// } - } - - @SubscribeEvent - public void onPlayerSoundEvent(SoundEvent event) - { - if (Minecraft.getMinecraft() != null) - { - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - - if (player != null && player.isPotionActive(AlchemicalWizardry.customPotionDeaf)) - { - event.setResult(Result.DENY); - if(event.isCancelable()) - event.setCanceled(true); - } - } - } - - @SubscribeEvent - public void onOverlayEvent(RenderBlockOverlayEvent event) - { - if(event.overlayType == RenderBlockOverlayEvent.OverlayType.WATER && event.player.isPotionActive(AlchemicalWizardry.customPotionAmphibian.id))//TODO Placeholder for new potion effect - if(event.isCancelable()) - { - event.setCanceled(true); - } - - if(event.blockForOverlay == ModBlocks.blockMimic && event.isCancelable()) - { - event.setCanceled(true); - } - } - - @SubscribeEvent - public void onTick(RenderTickEvent event) - { - if (event.phase.equals(Phase.START)) - return; - -// if (!RenderHelper.onTickInGame(mcClient)) - { - - } - } - -// @SubscribeEvent -// public void onRenderLivingPlayerPre(RenderPlayerEvent.Pre event) -// { -// GL11.glDisable(2929); -// } -// -// @SubscribeEvent -// public void onRenderLivingPlayerPost(RenderPlayerEvent.Post event) -// { -// GL11.glEnable(2929); -// } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/ClientProxy.java b/src/main/java/WayofTime/alchemicalWizardry/client/ClientProxy.java deleted file mode 100644 index f5450b05..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/client/ClientProxy.java +++ /dev/null @@ -1,197 +0,0 @@ -package WayofTime.alchemicalWizardry.client; - -import net.minecraft.item.ItemBlock; -import net.minecraft.world.World; -import net.minecraftforge.client.MinecraftForgeClient; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.fml.client.FMLClientHandler; -import net.minecraftforge.fml.client.registry.ClientRegistry; -import net.minecraftforge.fml.client.registry.RenderingRegistry; -import net.minecraftforge.fml.common.FMLCommonHandler; -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.api.spell.EntitySpellProjectile; -import WayofTime.alchemicalWizardry.client.renderer.RitualDivinerRender; -import WayofTime.alchemicalWizardry.common.CommonProxy; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGrunt; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntEarth; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntFire; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardian; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianEarth; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianFire; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianIce; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianWind; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntIce; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntWind; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityAirElemental; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityBileDemon; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityBoulderFist; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityEarthElemental; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityFallenAngel; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityFireElemental; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityHolyElemental; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityIceDemon; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityLowerGuardian; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityShade; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityShadeElemental; -import WayofTime.alchemicalWizardry.common.entity.mob.EntitySmallEarthGolem; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityWaterElemental; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityWingedFireDemon; -import WayofTime.alchemicalWizardry.common.entity.projectile.EnergyBlastProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.EntityEnergyBazookaMainProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.EntityMeteor; -import WayofTime.alchemicalWizardry.common.entity.projectile.EntityParticleBeam; -import WayofTime.alchemicalWizardry.common.items.sigil.holding.ScrollHelper; -import WayofTime.alchemicalWizardry.common.renderer.block.RenderAlchemicalCalcinator; -import WayofTime.alchemicalWizardry.common.renderer.block.RenderAltar; -import WayofTime.alchemicalWizardry.common.renderer.block.RenderChemistrySet; -import WayofTime.alchemicalWizardry.common.renderer.block.RenderConduit; -import WayofTime.alchemicalWizardry.common.renderer.block.RenderCrystalBelljar; -import WayofTime.alchemicalWizardry.common.renderer.block.RenderMasterStone; -import WayofTime.alchemicalWizardry.common.renderer.block.RenderPedestal; -import WayofTime.alchemicalWizardry.common.renderer.block.RenderPlinth; -import WayofTime.alchemicalWizardry.common.renderer.block.RenderReagentConduit; -import WayofTime.alchemicalWizardry.common.renderer.block.RenderSpellEffectBlock; -import WayofTime.alchemicalWizardry.common.renderer.block.RenderSpellEnhancementBlock; -import WayofTime.alchemicalWizardry.common.renderer.block.RenderSpellModifierBlock; -import WayofTime.alchemicalWizardry.common.renderer.block.RenderSpellParadigmBlock; -import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TEAlchemicalCalcinatorItemRenderer; -import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TEAltarItemRenderer; -import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TEBellJarItemRenderer; -import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TEConduitItemRenderer; -import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TESpellEffectBlockItemRenderer; -import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TESpellEnhancementBlockItemRenderer; -import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TESpellModifierBlockItemRenderer; -import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TESpellParadigmBlockItemRenderer; -import WayofTime.alchemicalWizardry.common.renderer.mob.RenderBileDemon; -import WayofTime.alchemicalWizardry.common.renderer.mob.RenderBoulderFist; -import WayofTime.alchemicalWizardry.common.renderer.mob.RenderElemental; -import WayofTime.alchemicalWizardry.common.renderer.mob.RenderFallenAngel; -import WayofTime.alchemicalWizardry.common.renderer.mob.RenderIceDemon; -import WayofTime.alchemicalWizardry.common.renderer.mob.RenderLowerGuardian; -import WayofTime.alchemicalWizardry.common.renderer.mob.RenderMinorDemonGrunt; -import WayofTime.alchemicalWizardry.common.renderer.mob.RenderMinorDemonGruntGuardian; -import WayofTime.alchemicalWizardry.common.renderer.mob.RenderShade; -import WayofTime.alchemicalWizardry.common.renderer.mob.RenderSmallEarthGolem; -import WayofTime.alchemicalWizardry.common.renderer.mob.RenderWingedFireDemon; -import WayofTime.alchemicalWizardry.common.renderer.model.ModelBileDemon; -import WayofTime.alchemicalWizardry.common.renderer.model.ModelBoulderFist; -import WayofTime.alchemicalWizardry.common.renderer.model.ModelElemental; -import WayofTime.alchemicalWizardry.common.renderer.model.ModelFallenAngel; -import WayofTime.alchemicalWizardry.common.renderer.model.ModelIceDemon; -import WayofTime.alchemicalWizardry.common.renderer.model.ModelLowerGuardian; -import WayofTime.alchemicalWizardry.common.renderer.model.ModelMinorDemonGrunt; -import WayofTime.alchemicalWizardry.common.renderer.model.ModelMinorDemonGruntGuardian; -import WayofTime.alchemicalWizardry.common.renderer.model.ModelShade; -import WayofTime.alchemicalWizardry.common.renderer.model.ModelSmallEarthGolem; -import WayofTime.alchemicalWizardry.common.renderer.model.ModelWingedFireDemon; -import WayofTime.alchemicalWizardry.common.renderer.projectile.RenderEnergyBazookaMainProjectile; -import WayofTime.alchemicalWizardry.common.renderer.projectile.RenderEnergyBlastProjectile; -import WayofTime.alchemicalWizardry.common.renderer.projectile.RenderMeteor; -import WayofTime.alchemicalWizardry.common.thread.GAPIChecker; -import WayofTime.alchemicalWizardry.common.tileEntity.TEAlchemicalCalcinator; -import WayofTime.alchemicalWizardry.common.tileEntity.TEAltar; -import WayofTime.alchemicalWizardry.common.tileEntity.TEBelljar; -import WayofTime.alchemicalWizardry.common.tileEntity.TEChemistrySet; -import WayofTime.alchemicalWizardry.common.tileEntity.TEConduit; -import WayofTime.alchemicalWizardry.common.tileEntity.TEMasterStone; -import WayofTime.alchemicalWizardry.common.tileEntity.TEPedestal; -import WayofTime.alchemicalWizardry.common.tileEntity.TEPlinth; -import WayofTime.alchemicalWizardry.common.tileEntity.TEReagentConduit; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpellEffectBlock; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpellEnhancementBlock; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpellModifierBlock; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpellParadigmBlock; - -public class ClientProxy extends CommonProxy -{ - public static int renderPass; - - @Override - public void registerPostSideObjects() - { -// BUEntries entries = new BUEntries(); -// entries.postInit(); - } - - @Override - public void registerRenderers() - { - RenderingRegistry.registerEntityRenderingHandler(EnergyBlastProjectile.class, new RenderEnergyBlastProjectile()); - RenderingRegistry.registerEntityRenderingHandler(EntityEnergyBazookaMainProjectile.class, new RenderEnergyBazookaMainProjectile()); - RenderingRegistry.registerEntityRenderingHandler(EntitySpellProjectile.class, new RenderEnergyBlastProjectile()); - RenderingRegistry.registerEntityRenderingHandler(EntityParticleBeam.class, new RenderEnergyBlastProjectile()); - RenderingRegistry.registerEntityRenderingHandler(EntityMeteor.class, new RenderMeteor()); - RenderingRegistry.registerEntityRenderingHandler(EntityFallenAngel.class, new RenderFallenAngel(new ModelFallenAngel(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityLowerGuardian.class, new RenderLowerGuardian(new ModelLowerGuardian(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityBileDemon.class, new RenderBileDemon(new ModelBileDemon(), 1.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityWingedFireDemon.class, new RenderWingedFireDemon(new ModelWingedFireDemon(), 1.0F)); - RenderingRegistry.registerEntityRenderingHandler(EntitySmallEarthGolem.class, new RenderSmallEarthGolem(new ModelSmallEarthGolem(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityIceDemon.class, new RenderIceDemon(new ModelIceDemon(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityBoulderFist.class, new RenderBoulderFist(new ModelBoulderFist(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityShade.class, new RenderShade(new ModelShade(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityAirElemental.class, new RenderElemental(new ModelElemental(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityWaterElemental.class, new RenderElemental(new ModelElemental(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityEarthElemental.class, new RenderElemental(new ModelElemental(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityFireElemental.class, new RenderElemental(new ModelElemental(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityShadeElemental.class, new RenderElemental(new ModelElemental(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityHolyElemental.class, new RenderElemental(new ModelElemental(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityMinorDemonGrunt.class, new RenderMinorDemonGrunt(new ModelMinorDemonGrunt(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityMinorDemonGruntFire.class, new RenderMinorDemonGrunt(new ModelMinorDemonGrunt(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityMinorDemonGruntIce.class, new RenderMinorDemonGrunt(new ModelMinorDemonGrunt(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityMinorDemonGruntWind.class, new RenderMinorDemonGrunt(new ModelMinorDemonGrunt(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityMinorDemonGruntEarth.class, new RenderMinorDemonGrunt(new ModelMinorDemonGrunt(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityMinorDemonGruntGuardian.class, new RenderMinorDemonGruntGuardian(new ModelMinorDemonGruntGuardian(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityMinorDemonGruntGuardianFire.class, new RenderMinorDemonGruntGuardian(new ModelMinorDemonGruntGuardian(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityMinorDemonGruntGuardianIce.class, new RenderMinorDemonGruntGuardian(new ModelMinorDemonGruntGuardian(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityMinorDemonGruntGuardianEarth.class, new RenderMinorDemonGruntGuardian(new ModelMinorDemonGruntGuardian(), 0.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityMinorDemonGruntGuardianWind.class, new RenderMinorDemonGruntGuardian(new ModelMinorDemonGruntGuardian(), 0.5F)); - - MinecraftForge.EVENT_BUS.register(new RitualDivinerRender()); - - ClientRegistry.bindTileEntitySpecialRenderer(TEAltar.class, new RenderAltar()); - ClientRegistry.bindTileEntitySpecialRenderer(TEPedestal.class, new RenderPedestal()); - ClientRegistry.bindTileEntitySpecialRenderer(TEPlinth.class, new RenderPlinth()); - ClientRegistry.bindTileEntitySpecialRenderer(TEChemistrySet.class, new RenderChemistrySet()); - ClientRegistry.bindTileEntitySpecialRenderer(TEConduit.class, new RenderConduit()); - ClientRegistry.bindTileEntitySpecialRenderer(TESpellEffectBlock.class, new RenderSpellEffectBlock()); - ClientRegistry.bindTileEntitySpecialRenderer(TESpellEnhancementBlock.class, new RenderSpellEnhancementBlock()); - ClientRegistry.bindTileEntitySpecialRenderer(TESpellParadigmBlock.class, new RenderSpellParadigmBlock()); - ClientRegistry.bindTileEntitySpecialRenderer(TESpellModifierBlock.class, new RenderSpellModifierBlock()); - ClientRegistry.bindTileEntitySpecialRenderer(TEReagentConduit.class, new RenderReagentConduit()); - ClientRegistry.bindTileEntitySpecialRenderer(TEMasterStone.class, new RenderMasterStone()); - ClientRegistry.bindTileEntitySpecialRenderer(TEAlchemicalCalcinator.class, new RenderAlchemicalCalcinator()); - ClientRegistry.bindTileEntitySpecialRenderer(TEBelljar.class, new RenderCrystalBelljar()); - - //Item Renderer stuff - MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockConduit), new TEConduitItemRenderer()); - MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockSpellEffect), new TESpellEffectBlockItemRenderer()); - MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockSpellEnhancement), new TESpellEnhancementBlockItemRenderer()); - MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockSpellParadigm), new TESpellParadigmBlockItemRenderer()); - MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockSpellModifier), new TESpellModifierBlockItemRenderer()); - MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockAlchemicalCalcinator), new TEAlchemicalCalcinatorItemRenderer()); - MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockCrystalBelljar), new TEBellJarItemRenderer()); - } - - @Override - public World getClientWorld() - { - return FMLClientHandler.instance().getClient().theWorld; - } - - @Override - public void initRendering() - { - MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockAltar), new TEAltarItemRenderer()); - } - - @Override - public void registerEvents() - { - Object ob = new ClientEventHandler(); - FMLCommonHandler.instance().bus().register(ob); - MinecraftForge.EVENT_BUS.register(ob); - KeyBindings.init(); - MinecraftForge.EVENT_BUS.register(new ScrollHelper()); - new GAPIChecker().init(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/KeyBindings.java b/src/main/java/WayofTime/alchemicalWizardry/client/KeyBindings.java deleted file mode 100644 index b381ed70..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/client/KeyBindings.java +++ /dev/null @@ -1,14 +0,0 @@ -package WayofTime.alchemicalWizardry.client; - - -public class KeyBindings -{ -// public static KeyBinding omegaTest; - - public static void init() - { -// omegaTest = new KeyBinding("key.ping", Keyboard.KEY_O, "key.categories.alchemicalwizardry"); -// -// ClientRegistry.registerKeyBinding(omegaTest); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/gui/ConfigGui.java b/src/main/java/WayofTime/alchemicalWizardry/client/gui/ConfigGui.java deleted file mode 100644 index 0030115d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/client/gui/ConfigGui.java +++ /dev/null @@ -1,38 +0,0 @@ -package WayofTime.alchemicalWizardry.client.gui; - - -import static WayofTime.alchemicalWizardry.BloodMagicConfiguration.config; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.client.gui.GuiScreen; -import net.minecraftforge.common.config.ConfigElement; -import net.minecraftforge.fml.client.config.GuiConfig; -import net.minecraftforge.fml.client.config.IConfigElement; - -public class ConfigGui extends GuiConfig { - - public ConfigGui(GuiScreen parentScreen) { - super(parentScreen, getConfigElements(parentScreen), "AWWayofTime", false, false, "Blood Magic Configuration"); - } - - @SuppressWarnings("rawtypes") - private static List getConfigElements(GuiScreen parent) { - List list = new ArrayList(); - - // adds sections declared in ConfigHandler. toLowerCase() is used because the configuration class automatically does this, so must we. - list.add(new ConfigElement(config.getCategory("clientsettings".toLowerCase()))); - list.add(new ConfigElement(config.getCategory("dungeon loot chances".toLowerCase()))); - list.add(new ConfigElement(config.getCategory("meteor".toLowerCase()))); - list.add(new ConfigElement(config.getCategory("orecrushing".toLowerCase()))); - list.add(new ConfigElement(config.getCategory("potion id".toLowerCase()))); - list.add(new ConfigElement(config.getCategory("wellofsufferingblacklist".toLowerCase()))); - list.add(new ConfigElement(config.getCategory("wimpysettings".toLowerCase()))); - list.add(new ConfigElement(config.getCategory("ritual blacklist".toLowerCase()))); - list.add(new ConfigElement(config.getCategory("teleposer blacklist".toLowerCase()))); - list.add(new ConfigElement(config.getCategory("demon configs".toLowerCase()))); - - return list; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/gui/ConfigGuiFactory.java b/src/main/java/WayofTime/alchemicalWizardry/client/gui/ConfigGuiFactory.java deleted file mode 100644 index 6413230c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/client/gui/ConfigGuiFactory.java +++ /dev/null @@ -1,28 +0,0 @@ -package WayofTime.alchemicalWizardry.client.gui; - -import java.util.Set; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiScreen; -import net.minecraftforge.fml.client.IModGuiFactory; - -public class ConfigGuiFactory implements IModGuiFactory { - - @Override - public void initialize(Minecraft minecraftInstance) {} - - @Override - public Class mainConfigGuiClass() { - return ConfigGui.class; - } - - @Override - public Set runtimeGuiCategories() { - return null; - } - - @Override - public RuntimeOptionGuiHandler getHandlerFor(RuntimeOptionCategoryElement element) { - return null; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIAlchemyRecipeHandler.java b/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIAlchemyRecipeHandler.java deleted file mode 100644 index c92c0b0f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIAlchemyRecipeHandler.java +++ /dev/null @@ -1,178 +0,0 @@ -package WayofTime.alchemicalWizardry.client.nei; - -import static WayofTime.alchemicalWizardry.client.nei.NEIConfig.bloodOrbs; - -import java.awt.Rectangle; -import java.util.ArrayList; -import java.util.List; - -import WayofTime.alchemicalWizardry.common.tileEntity.gui.GuiChemistrySet; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; -import WayofTime.alchemicalWizardry.api.alchemy.AlchemyRecipe; -import WayofTime.alchemicalWizardry.api.alchemy.AlchemyRecipeRegistry; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBloodOrb; -import codechicken.nei.ItemList; -import codechicken.nei.NEIServerUtils; -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.TemplateRecipeHandler; - -/** - * NEI Alchemy Recipe Handler by joshie * - */ -public class NEIAlchemyRecipeHandler extends TemplateRecipeHandler { - public class CachedAlchemyRecipe extends CachedRecipe { - public class BloodOrbs { - public PositionedStack stack; - - public BloodOrbs(ItemStack orb) { - this.stack = new PositionedStack(orb, 136, 47, false); - } - } - - ArrayList orbs; - PositionedStack output; - List inputs; - int lp; - - public CachedAlchemyRecipe(AlchemyRecipe recipe, ItemStack orb) { - this(recipe); - this.orbs = new ArrayList(); - orbs.add(new BloodOrbs(orb)); - } - - public CachedAlchemyRecipe(AlchemyRecipe recipe) { - List inputs = new ArrayList(); - ItemStack[] stacks = recipe.getRecipe(); - if (stacks.length > 0) inputs.add(new PositionedStack(stacks[0], 76, 3)); - if (stacks.length > 1) inputs.add(new PositionedStack(stacks[1], 51, 19)); - if (stacks.length > 2) inputs.add(new PositionedStack(stacks[2], 101, 19)); - if (stacks.length > 3) inputs.add(new PositionedStack(stacks[3], 64, 47)); - if (stacks.length > 4) inputs.add(new PositionedStack(stacks[4], 88, 47)); - this.inputs = inputs; - this.output = new PositionedStack(recipe.getResult(), 76, 25); - this.lp = recipe.getAmountNeeded() * 100; - this.orbs = new ArrayList(); - for (Item orb : bloodOrbs) { - if (((IBloodOrb) orb).getOrbLevel() >= recipe.getOrbLevel()) { - orbs.add(new BloodOrbs(new ItemStack(orb))); - } - } - } - - @Override - public List getIngredients() { - return inputs; - } - - @Override - public PositionedStack getResult() { - return output; - } - - @Override - public PositionedStack getOtherStack() { - if (orbs == null || orbs.size() <= 0) return null; - return orbs.get((cycleticks / 48) % orbs.size()).stack; - } - } - - @Override - public TemplateRecipeHandler newInstance() { - for (ItemStack item : ItemList.items) { - if (item != null && item.getItem() instanceof IBloodOrb) { - bloodOrbs.add(item.getItem()); - } - } - - return super.newInstance(); - } - - @Override - public String getOverlayIdentifier() { - return "alchemicalwizardry.alchemy"; - } - - @Override - public void loadTransferRects() { - transferRects.add(new RecipeTransferRect(new Rectangle(134, 22, 16, 24), "alchemicalwizardry.alchemy")); - } - - @Override - public Class getGuiClass() { - return GuiChemistrySet.class; - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - if (outputId.equals("alchemicalwizardry.alchemy") && getClass() == NEIAlchemyRecipeHandler.class) { - for (AlchemyRecipe recipe : AlchemyRecipeRegistry.recipes) { - if (recipe.getResult() != null) arecipes.add(new CachedAlchemyRecipe(recipe)); - } - } else { - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack result) { - for (AlchemyRecipe recipe : AlchemyRecipeRegistry.recipes) { - if (recipe == null) continue; - if (NEIServerUtils.areStacksSameTypeCrafting(result, recipe.getResult())) { - arecipes.add(new CachedAlchemyRecipe(recipe)); - } - } - } - - @Override - public void loadUsageRecipes(ItemStack ingredient) { - if (ingredient.getItem() instanceof IBloodOrb) { - for (AlchemyRecipe recipe : AlchemyRecipeRegistry.recipes) { - if (recipe == null) continue; - if (((IBloodOrb) ingredient.getItem()).getOrbLevel() >= recipe.getOrbLevel()) { - arecipes.add(new CachedAlchemyRecipe(recipe, ingredient)); - } - } - } else { - for (AlchemyRecipe recipe : AlchemyRecipeRegistry.recipes) { - if (recipe == null) continue; - ItemStack[] stacks = recipe.getRecipe(); - for (ItemStack stack : stacks) { - if (NEIServerUtils.areStacksSameTypeCrafting(stack, ingredient)) { - arecipes.add(new CachedAlchemyRecipe(recipe)); - break; - } - } - } - } - } - - @Override - public void drawExtras(int id) { - CachedAlchemyRecipe cache = (CachedAlchemyRecipe) arecipes.get(id); - Minecraft.getMinecraft().fontRendererObj.drawString("\u00a77" + cache.lp + "LP", getLPX(cache.lp), 34, 0); - } - - public int getLPX(int lp) { - if (lp < 10) return 122; - else if (lp < 100) return 122; - else if (lp < 1000) return 130; - else if (lp < 10000) return 127; - else if (lp < 100000) return 124; - return 122; - } - - @Override - public String getRecipeName() { - return StatCollector.translateToLocal("tile.blockWritingTable.name"); - } - - @Override - public String getGuiTexture() { - return new ResourceLocation("alchemicalwizardry", "gui/nei/alchemy.png").toString(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIAltarRecipeHandler.java b/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIAltarRecipeHandler.java deleted file mode 100644 index c932f60a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIAltarRecipeHandler.java +++ /dev/null @@ -1,187 +0,0 @@ -package WayofTime.alchemicalWizardry.client.nei; - -import java.awt.Dimension; -import java.awt.Point; -import java.awt.Rectangle; -import java.lang.reflect.Field; -import java.util.List; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; - -import org.lwjgl.input.Mouse; - -import WayofTime.alchemicalWizardry.api.altarRecipeRegistry.AltarRecipe; -import WayofTime.alchemicalWizardry.api.altarRecipeRegistry.AltarRecipeRegistry; -import codechicken.nei.NEIServerUtils; -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.GuiRecipe; -import codechicken.nei.recipe.TemplateRecipeHandler; - -/** - * NEI Altar Recipe Handler by joshie * - */ -public class NEIAltarRecipeHandler extends TemplateRecipeHandler { - public class CachedAltarRecipe extends CachedRecipe { - PositionedStack input; -// PositionedStack inputItems; - PositionedStack output; - int tier, lp_amount, consumption, drain; - - public CachedAltarRecipe(AltarRecipe recipe) { -// inputItems = new PositionedStack(recipe.input, 38, 2, false); - input = new PositionedStack(recipe.requiredItem, 38, 2, false); - output = new PositionedStack(recipe.result, 132, 32, false); - tier = recipe.minTier; - lp_amount = recipe.liquidRequired; - consumption = recipe.consumptionRate; - drain = recipe.drainRate; - } - - @Override - public PositionedStack getIngredient() { - return input; - } - - @Override - public PositionedStack getResult() { - return output; - } - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - if (outputId.equals("alchemicalwizardry.altar") && getClass() == NEIAltarRecipeHandler.class) { - for(AltarRecipe recipe: AltarRecipeRegistry.altarRecipes) { - if(recipe != null && recipe.result != null) arecipes.add(new CachedAltarRecipe(recipe)); - } - } else { - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack result) { - for(AltarRecipe recipe: AltarRecipeRegistry.altarRecipes) { - if(NEIServerUtils.areStacksSameTypeCrafting(recipe.result, result)) { - if(recipe != null && recipe.result != null) arecipes.add(new CachedAltarRecipe(recipe)); - } - } - } - - @Override - public void loadUsageRecipes(ItemStack ingredient) { - for(AltarRecipe recipe: AltarRecipeRegistry.altarRecipes) { - if(NEIServerUtils.areStacksSameTypeCrafting(recipe.requiredItem, ingredient)) { - if(recipe != null && recipe.result != null) arecipes.add(new CachedAltarRecipe(recipe)); - } - } - } - - //Mouse Position helper - public Point getMouse(int width, int height) { - Point mousepos = getMousePosition(); - int guiLeft = (width - 176) / 2; - int guiTop = (height - 166) / 2; - Point relMouse = new Point(mousepos.x - guiLeft, mousepos.y - guiTop); - return relMouse; - } - - //width helper, getting width normal way hates me on compile - public int getGuiWidth(GuiRecipe gui) { - try { - Field f = gui.getClass().getField("width"); - return (Integer) f.get(gui); - } catch (NoSuchFieldException e) { - try { - Field f = gui.getClass().getField("field_146294_l"); - return (Integer) f.get(gui); - } catch (Exception e2) { - return 0; - } - } catch (Exception e) { - e.printStackTrace(); - return 0; - } - } - - //height helper, getting height normal way hates me on compile - public int getGuiHeight(GuiRecipe gui) { - try { - Field f = gui.getClass().getField("height"); - return (Integer) f.get(gui); - } catch (NoSuchFieldException e) { - try { - Field f = gui.getClass().getField("field_146295_m"); - return (Integer) f.get(gui); - } catch (Exception e2) { - return 0; - } - } catch (Exception e) { - e.printStackTrace(); - return 0; - } - } - - @Override - public void drawExtras(int id) { - CachedAltarRecipe recipe = (CachedAltarRecipe) arecipes.get(id); - Minecraft.getMinecraft().fontRendererObj.drawString("\u00a77" + StatCollector.translateToLocal("bm.string.tier") + ": " + recipe.tier, 78, 5, 0); - Minecraft.getMinecraft().fontRendererObj.drawString("\u00a77" + "LP: " + recipe.lp_amount, 78, 15, 0); - } - - @Override - public List handleTooltip(GuiRecipe gui, List currenttip, int id) { - currenttip = super.handleTooltip(gui, currenttip, id); - Point mouse = getMouse(getGuiWidth(gui), getGuiHeight(gui)); - CachedAltarRecipe recipe = (CachedAltarRecipe) arecipes.get(id); - int yLow = id % 2 == 0 ? 38 : 102; - int yHigh = id % 2 == 0 ? 72 : 136; - if(mouse.x >= 19 && mouse.x <= 80 && mouse.y >= yLow && mouse.y <= yHigh) { - currenttip.add(StatCollector.translateToLocal("bm.string.consume") + ": " + recipe.consumption + "LP/t"); - currenttip.add(StatCollector.translateToLocal("bm.string.drain") + ": " + recipe.drain + "LP/t"); - } - - return currenttip; - } - - @Override - public String getOverlayIdentifier() { - return "altarrecipes"; - } - - @Override - public void loadTransferRects() { - transferRects.add(new RecipeTransferRect(new Rectangle(90, 32, 22, 16), "alchemicalwizardry.altar")); - } - - @Override - public String getRecipeName() { - return " " + StatCollector.translateToLocal("tile.bloodAltar.name"); - } - - @Override - public String getGuiTexture() { - return new ResourceLocation("alchemicalwizardry", "gui/nei/altar.png").toString(); - } - - public static Point getMousePosition() { - Dimension size = displaySize(); - Dimension res = displayRes(); - return new Point(Mouse.getX() * size.width / res.width, size.height - Mouse.getY() * size.height / res.height - 1); - } - - public static Dimension displaySize() { - Minecraft mc = Minecraft.getMinecraft(); - ScaledResolution res = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight); - return new Dimension(res.getScaledWidth(), res.getScaledHeight()); - } - - public static Dimension displayRes() { - Minecraft mc = Minecraft.getMinecraft(); - return new Dimension(mc.displayWidth, mc.displayHeight); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIBindingRitualHandler.java b/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIBindingRitualHandler.java deleted file mode 100644 index 21f2fba8..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIBindingRitualHandler.java +++ /dev/null @@ -1,136 +0,0 @@ -package WayofTime.alchemicalWizardry.client.nei; - -import WayofTime.alchemicalWizardry.api.bindingRegistry.BindingRecipe; -import WayofTime.alchemicalWizardry.api.bindingRegistry.BindingRegistry; -import codechicken.nei.NEIServerUtils; -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.TemplateRecipeHandler; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import org.lwjgl.input.Mouse; - -import java.awt.*; - -/** - * Binding Ritual Handler by Arcaratus - */ -public class NEIBindingRitualHandler extends TemplateRecipeHandler -{ - public class CachedBindingRecipe extends CachedRecipe - { - PositionedStack input, output; - - public CachedBindingRecipe(BindingRecipe recipe) - { - input = new PositionedStack(recipe.requiredItem, 37, 21, false); - output = new PositionedStack(recipe.outputItem, 110, 21, false); - } - - @Override - public PositionedStack getIngredient() - { - return input; - } - - @Override - public PositionedStack getResult() - { - return output; - } - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results) - { - if (outputId.equals("alchemicalwizardry.bindingritual") && getClass() == NEIBindingRitualHandler.class) - { - for (BindingRecipe recipe : BindingRegistry.bindingRecipes) - { - if (recipe != null && recipe.outputItem != null) - { - arecipes.add(new CachedBindingRecipe(recipe)); - } - } - } - else - { - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack result) - { - for (BindingRecipe recipe: BindingRegistry.bindingRecipes) - { - if (NEIServerUtils.areStacksSameTypeCrafting(recipe.outputItem, result)) - { - if (recipe != null && recipe.outputItem != null) - { - arecipes.add(new CachedBindingRecipe(recipe)); - } - } - } - } - - @Override - public void loadUsageRecipes(ItemStack ingredient) - { - for (BindingRecipe recipe: BindingRegistry.bindingRecipes) - { - if (NEIServerUtils.areStacksSameTypeCrafting(recipe.requiredItem, ingredient)) - { - if (recipe != null && recipe.outputItem != null) - { - arecipes.add(new CachedBindingRecipe(recipe)); - } - } - } - } - - @Override - public String getOverlayIdentifier() - { - return "alchemicalwizardry.bindingritual"; - } - - @Override - public void loadTransferRects() - { - transferRects.add(new RecipeTransferRect(new Rectangle(68, 20, 22, 16), "alchemicalwizardry.bindingritual")); - } - - @Override - public String getRecipeName() - { - return "Binding Ritual"; - } - - @Override - public String getGuiTexture() - { - return new ResourceLocation("alchemicalwizardry", "gui/nei/bindingRitual.png").toString(); - } - - public static Point getMousePosition() - { - Dimension size = displaySize(); - Dimension res = displayRes(); - return new Point(Mouse.getX() * size.width / res.width, size.height - Mouse.getY() * size.height / res.height - 1); - } - - public static Dimension displaySize() - { - Minecraft mc = Minecraft.getMinecraft(); - ScaledResolution res = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight); - return new Dimension(res.getScaledWidth(), res.getScaledHeight()); - } - - public static Dimension displayRes() - { - Minecraft mc = Minecraft.getMinecraft(); - return new Dimension(mc.displayWidth, mc.displayHeight); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIBloodOrbShapedHandler.java b/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIBloodOrbShapedHandler.java deleted file mode 100644 index b32f47cd..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIBloodOrbShapedHandler.java +++ /dev/null @@ -1,142 +0,0 @@ -package WayofTime.alchemicalWizardry.client.nei; - -import java.awt.Rectangle; -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.CraftingManager; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.util.StatCollector; -import WayofTime.alchemicalWizardry.api.items.ShapedBloodOrbRecipe; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBloodOrb; -import codechicken.nei.NEIServerUtils; -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.ShapedRecipeHandler; - -/** - * NEI Blood Orb Shaped Recipe Handler by joshie * - */ -public class NEIBloodOrbShapedHandler extends ShapedRecipeHandler { - public class CachedBloodOrbRecipe extends CachedShapedRecipe { - public CachedBloodOrbRecipe(int width, int height, Object[] items, ItemStack out) { - super(width, height, items, out); - } - - @Override - public void setIngredients(int width, int height, Object[] items) { - for (int x = 0; x < width; x++) { - for (int y = 0; y < height; y++) { - if (items[y * width + x] == null) - continue; - - Object o = items[y * width + x]; - if (o instanceof ItemStack) { - PositionedStack stack = new PositionedStack(items[y * width + x], 25 + x * 18, 6 + y * 18, false); - stack.setMaxSize(1); - ingredients.add(stack); - } else if (o instanceof Integer) { - ArrayList orbs = new ArrayList(); - for (Item item : NEIConfig.bloodOrbs) { - if (((IBloodOrb) item).getOrbLevel() >= (Integer) o) { - orbs.add(new ItemStack(item)); - } - } - - PositionedStack stack = new PositionedStack(orbs, 25 + x * 18, 6 + y * 18, false); - stack.setMaxSize(1); - ingredients.add(stack); - }else if(o instanceof List) - { - PositionedStack stack = new PositionedStack(o, 25 + x * 18, 6 + y * 18, false); - stack.setMaxSize(1); - ingredients.add(stack); - } - } - } - } - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - if (outputId.equals("crafting") && getClass() == NEIBloodOrbShapedHandler.class) { - for (IRecipe irecipe : (List) CraftingManager.getInstance().getRecipeList()) { - if (irecipe instanceof ShapedBloodOrbRecipe) { - CachedBloodOrbRecipe recipe = forgeShapedRecipe((ShapedBloodOrbRecipe) irecipe); - if (recipe == null) - continue; - - recipe.computeVisuals(); - arecipes.add(recipe); - } - } - } else { - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack result) { - for (IRecipe irecipe : (List) CraftingManager.getInstance().getRecipeList()) { - if (irecipe instanceof ShapedBloodOrbRecipe) { - CachedBloodOrbRecipe recipe = forgeShapedRecipe((ShapedBloodOrbRecipe) irecipe); - if (recipe == null || !NEIServerUtils.areStacksSameTypeCrafting(recipe.result.item, result)) - continue; - - recipe.computeVisuals(); - arecipes.add(recipe); - } - } - } - - @Override - public void loadUsageRecipes(ItemStack ingredient) { - for (IRecipe irecipe : (List) CraftingManager.getInstance().getRecipeList()) { - CachedShapedRecipe recipe = null; - if (irecipe instanceof ShapedBloodOrbRecipe) - recipe = forgeShapedRecipe((ShapedBloodOrbRecipe) irecipe); - - if (recipe == null || !recipe.contains(recipe.ingredients, ingredient.getItem())) - continue; - - recipe.computeVisuals(); - if (recipe.contains(recipe.ingredients, ingredient)) { - recipe.setIngredientPermutation(recipe.ingredients, ingredient); - arecipes.add(recipe); - } - } - } - - private CachedBloodOrbRecipe forgeShapedRecipe(ShapedBloodOrbRecipe recipe) { - int width; - int height; - try { - width = recipe.width; - height = recipe.height; - } catch (Exception e) { - e.printStackTrace(); - return null; - } - - Object[] items = recipe.getInput(); - for (Object item : items) - if (item instanceof List && ((List) item).isEmpty())// ore - // handler, - // no ores - return null; - - return new CachedBloodOrbRecipe(width, height, items, recipe.getRecipeOutput()); - } - - @Override - public void loadTransferRects() { - transferRects.add(new RecipeTransferRect(new Rectangle(84, 23, 24, 18), "crafting")); - } - - - @Override - public String getRecipeName() { - return StatCollector.translateToLocal("bm.string.crafting.orb.shaped"); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIBloodOrbShapelessHandler.java b/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIBloodOrbShapelessHandler.java deleted file mode 100644 index ebf7afba..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIBloodOrbShapelessHandler.java +++ /dev/null @@ -1,135 +0,0 @@ -package WayofTime.alchemicalWizardry.client.nei; - -import java.awt.Rectangle; -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.CraftingManager; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.util.StatCollector; -import WayofTime.alchemicalWizardry.api.items.ShapelessBloodOrbRecipe; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBloodOrb; -import codechicken.nei.NEIServerUtils; -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.ShapelessRecipeHandler; - -/** - * NEI Blood Orb Shapeless Recipe Handler by joshie * - */ -public class NEIBloodOrbShapelessHandler extends ShapelessRecipeHandler { - public class CachedBloodOrbRecipe extends CachedShapelessRecipe { - public CachedBloodOrbRecipe(ArrayList items, ItemStack recipeOutput) { - super(items, recipeOutput); - } - - @Override - public void setIngredients(List items) { - ingredients.clear(); - for (int ingred = 0; ingred < items.size(); ingred++) { - Object o = items.get(ingred); - if (o instanceof ItemStack) { - PositionedStack stack = new PositionedStack(items.get(ingred), 25 + stackorder[ingred][0] * 18, 6 + stackorder[ingred][1] * 18); - stack.setMaxSize(1); - ingredients.add(stack); - } else if (o instanceof Integer) { - ArrayList orbs = new ArrayList(); - for (Item item : NEIConfig.bloodOrbs) { - if (((IBloodOrb) item).getOrbLevel() >= (Integer) o) { - orbs.add(new ItemStack(item)); - } - } - - PositionedStack stack = new PositionedStack(orbs, 25 + stackorder[ingred][0] * 18, 6 + stackorder[ingred][1] * 18); - stack.setMaxSize(1); - ingredients.add(stack); - }else if(o instanceof List) - { - PositionedStack stack = new PositionedStack(o, 25 + stackorder[ingred][0] * 18, 6 + stackorder[ingred][1] * 18); - stack.setMaxSize(1); - ingredients.add(stack); - } - } - } - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - if (outputId.equals("crafting") && getClass() == NEIBloodOrbShapelessHandler.class) { - List allrecipes = CraftingManager.getInstance().getRecipeList(); - for (IRecipe irecipe : allrecipes) { - CachedBloodOrbRecipe recipe = null; - if (irecipe instanceof ShapelessBloodOrbRecipe) - recipe = forgeShapelessRecipe((ShapelessBloodOrbRecipe) irecipe); - - if (recipe == null) - continue; - - arecipes.add(recipe); - } - } else { - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack result) { - List allrecipes = CraftingManager.getInstance().getRecipeList(); - for (IRecipe irecipe : allrecipes) { - if (NEIServerUtils.areStacksSameTypeCrafting(irecipe.getRecipeOutput(), result)) { - CachedBloodOrbRecipe recipe = null; - if (irecipe instanceof ShapelessBloodOrbRecipe) - recipe = forgeShapelessRecipe((ShapelessBloodOrbRecipe) irecipe); - - if (recipe == null) - continue; - - arecipes.add(recipe); - } - } - } - - @Override - public void loadUsageRecipes(ItemStack ingredient) { - List allrecipes = CraftingManager.getInstance().getRecipeList(); - for (IRecipe irecipe : allrecipes) { - CachedBloodOrbRecipe recipe = null; - if (irecipe instanceof ShapelessBloodOrbRecipe) - recipe = forgeShapelessRecipe((ShapelessBloodOrbRecipe) irecipe); - - if (recipe == null) - continue; - - if (recipe.contains(recipe.ingredients, ingredient)) { - recipe.setIngredientPermutation(recipe.ingredients, ingredient); - arecipes.add(recipe); - } - } - } - - public CachedBloodOrbRecipe forgeShapelessRecipe(ShapelessBloodOrbRecipe recipe) { - ArrayList items = recipe.getInput(); - - for (Object item : items) - if (item instanceof List && ((List) item).isEmpty())//ore handler, no ores - return null; - - return new CachedBloodOrbRecipe(items, recipe.getRecipeOutput()); - } - - @Override - public void loadTransferRects() { - transferRects.add(new RecipeTransferRect(new Rectangle(84, 23, 24, 18), "crafting")); - } - - @Override - public String getOverlayIdentifier() { - return "crafting"; - } - - @Override - public String getRecipeName() { - return StatCollector.translateToLocal("bm.string.crafting.orb.shapeless"); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIConfig.java b/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIConfig.java deleted file mode 100644 index 4fa27786..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIConfig.java +++ /dev/null @@ -1,36 +0,0 @@ -package WayofTime.alchemicalWizardry.client.nei; - - -import java.util.ArrayList; - -import net.minecraft.item.Item; -import codechicken.nei.api.API; -import codechicken.nei.api.IConfigureNEI; - -public class NEIConfig implements IConfigureNEI { - public static ArrayList bloodOrbs = new ArrayList(); - - @Override - public void loadConfig() { - API.registerRecipeHandler(new NEIAlchemyRecipeHandler()); - API.registerUsageHandler(new NEIAlchemyRecipeHandler()); - API.registerRecipeHandler(new NEIAltarRecipeHandler()); - API.registerUsageHandler(new NEIAltarRecipeHandler()); - API.registerRecipeHandler(new NEIBloodOrbShapedHandler()); - API.registerUsageHandler(new NEIBloodOrbShapedHandler()); - API.registerRecipeHandler(new NEIBloodOrbShapelessHandler()); - API.registerUsageHandler(new NEIBloodOrbShapelessHandler()); - API.registerRecipeHandler(new NEIBindingRitualHandler()); - API.registerUsageHandler(new NEIBindingRitualHandler()); - } - - @Override - public String getName() { - return "Blood Magic NEI"; - } - - @Override - public String getVersion() { - return "1.3"; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/renderer/ColourThreshold.java b/src/main/java/WayofTime/alchemicalWizardry/client/renderer/ColourThreshold.java deleted file mode 100644 index 1719b4f6..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/client/renderer/ColourThreshold.java +++ /dev/null @@ -1,50 +0,0 @@ -package WayofTime.alchemicalWizardry.client.renderer; - -import java.util.List; - -/** - * This class is a utility class that was created by bspkrs. - * https://github.com/bspkrs/bspkrsCore/blob/master/src/main/java/bspkrs/client/util/ColorThreshold.java - */ -public class ColourThreshold implements Comparable -{ - public int threshold; - public String colorCode; - - public ColourThreshold(int t, String c) - { - threshold = t; - colorCode = c; - } - - @Override - public String toString() - { - return String.valueOf(threshold) + ", " + colorCode; - } - - @Override - public int compareTo(ColourThreshold o) - { - if (this.threshold > o.threshold) - return 1; - else if (this.threshold < o.threshold) - return -1; - else - return 0; - } - - /** - * Returns the colorCode attached to the first threshold in the list that is - * greater than or equal to the value. Expects that the list has been sorted by threshold ascending. - */ - public static String getColorCode(List colorList, int value) - { - for (ColourThreshold ct : colorList) - if (value <= ct.threshold) - return ct.colorCode; - - return "f"; - } -} - diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/renderer/HUDElement.java b/src/main/java/WayofTime/alchemicalWizardry/client/renderer/HUDElement.java deleted file mode 100644 index da724a81..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/client/renderer/HUDElement.java +++ /dev/null @@ -1,142 +0,0 @@ -package WayofTime.alchemicalWizardry.client.renderer; - -import WayofTime.alchemicalWizardry.BloodMagicConfiguration; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.RenderHelper; -import net.minecraft.client.renderer.entity.RenderItem; -import net.minecraft.item.ItemStack; -import org.lwjgl.opengl.GL11; - -public class HUDElement -{ - public final ItemStack itemStack; - public final int iconW; - public final int iconH; - public final int padW; - public final int value; - private int elementW; - private int elementH; - private String itemName = ""; - private int itemNameW; - private String itemDamage = ""; - private int itemDamageW; - private Minecraft mc = Minecraft.getMinecraft(); - - private static final int offset = 5; - - public boolean enableItemName = false; - public boolean showValue = true; - public boolean showDamageOverlay = false; - public boolean showItemCount = false; - - static RenderItem itemRenderer = Minecraft.getMinecraft().getRenderItem(); - - public HUDElement(ItemStack itemStack, int iconW, int iconH, int padW, int value) - { - this.itemStack = itemStack; - this.iconW = iconW; - this.iconH = iconH; - this.padW = padW; - this.value = value; - - initSize(); - } - - public int width() - { - return elementW; - } - - public int height() - { - return elementH; - } - - private void initSize() - { - elementH = enableItemName ? Math.max(Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT * 2, iconH) : - Math.max(mc.fontRendererObj.FONT_HEIGHT, iconH); - - if (itemStack != null) - { - int damage; - int maxDamage; - - if (showValue) - { - maxDamage = itemStack.getMaxDamage() + 1; - damage = maxDamage - itemStack.getItemDamage(); - - boolean showSpecialValue = true; - boolean showValue = false; - boolean showPercent = false; - - boolean showMaxDamage = true; - boolean thresholdPercent = true; - - if (showSpecialValue) - { - itemDamage = "\247" + ColourThreshold.getColorCode(BloodMagicConfiguration.colorList, - (thresholdPercent ? damage * 100 / maxDamage : damage)) + this.value; - } else if (showValue) - itemDamage = "\247" + ColourThreshold.getColorCode(BloodMagicConfiguration.colorList, - (thresholdPercent ? damage * 100 / maxDamage : damage)) + damage + - (showMaxDamage ? "/" + maxDamage : ""); - else if (showPercent) - itemDamage = "\247" + ColourThreshold.getColorCode(BloodMagicConfiguration.colorList, - (thresholdPercent ? damage * 100 / maxDamage : damage)) + - (damage * 100 / maxDamage) + "%"; - } - - itemDamageW = mc.fontRendererObj.getStringWidth(HUDUtils.stripCtrl(itemDamage)); - elementW = padW + iconW + padW + itemDamageW + offset; - - if (enableItemName) - { - itemName = itemStack.getDisplayName(); - elementW = padW + iconW + padW + - Math.max(mc.fontRendererObj.getStringWidth(HUDUtils.stripCtrl(itemName)), itemDamageW); - } - - itemNameW = mc.fontRendererObj.getStringWidth(HUDUtils.stripCtrl(itemName)); - } - } - - public void renderToHud(int x, int y) - { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - GL11.glEnable(32826 /* GL_RESCALE_NORMAL_EXT */); - RenderHelper.enableStandardItemLighting(); - RenderHelper.enableGUIStandardItemLighting(); - itemRenderer.zLevel = 200.0F; - - //if (ArmorStatusHUD.alignMode.toLowerCase().contains("right")) - boolean toRight = true; - if (toRight) - { - itemRenderer.func_180450_b(itemStack, x - (iconW + padW), y); - HUDUtils.renderItemOverlayIntoGUI(mc.fontRendererObj, itemStack, x - (iconW + padW), y, showDamageOverlay, showItemCount); - - RenderHelper.disableStandardItemLighting(); - GL11.glDisable(32826 /* GL_RESCALE_NORMAL_EXT */); - GL11.glDisable(GL11.GL_BLEND); - - mc.fontRendererObj.drawString(itemName + "\247r", x - (padW + iconW + padW) - itemNameW, y, 0xffffff); - mc.fontRendererObj.drawString(itemDamage + "\247r", x - (padW + iconW + padW) - itemDamageW, - y + (enableItemName ? elementH / 2 : elementH / 4), 0xffffff); - } else - { - itemRenderer.func_180450_b(itemStack, x, y); - HUDUtils.renderItemOverlayIntoGUI(mc.fontRendererObj, itemStack, x, y, showDamageOverlay, showItemCount); - - RenderHelper.disableStandardItemLighting(); - GL11.glDisable(32826 /* GL_RESCALE_NORMAL_EXT */); - GL11.glDisable(GL11.GL_BLEND); - - mc.fontRendererObj.drawString(itemName + "\247r", x + iconW + padW, y, 0xffffff); - mc.fontRendererObj.drawString(itemDamage + "\247r", x + iconW + padW, - y + (enableItemName ? elementH / 2 : elementH / 4), 0xffffff); - } - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/renderer/HUDUtils.java b/src/main/java/WayofTime/alchemicalWizardry/client/renderer/HUDUtils.java deleted file mode 100644 index 957067e6..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/client/renderer/HUDUtils.java +++ /dev/null @@ -1,275 +0,0 @@ -package WayofTime.alchemicalWizardry.client.renderer; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.renderer.OpenGlHelper; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.WorldRenderer; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -import org.lwjgl.opengl.GL11; - -/** - * This class is a utility class that was created by bspkrs. - * https://github.com/bspkrs/bspkrsCore/blob/master/src/main/java/bspkrs/client/util/HUDUtils.java - */ -public final class HUDUtils -{ - private static int[] colorCodes = new int[]{0, 170, 43520, 43690, 11141120, 11141290, 16755200, 11184810, 5592405, 5592575, 5635925, 5636095, 16733525, 16733695, 16777045, 16777215, - 0, 42, 10752, 10794, 2752512, 2752554, 2763264, 2763306, 1381653, 1381695, 1392405, 1392447, 4134165, 4134207, 4144917, 4144959}; - - public static int getColorCode(char c, boolean isLighter) - { - return colorCodes[isLighter ? "0123456789abcdef".indexOf(c) : "0123456789abcdef".indexOf(c) + 16]; - } - - /** - * Draws a textured box of any size (smallest size is borderSize * 2 square) based on a fixed size textured box with continuous borders - * and filler. It is assumed that the desired texture ResourceLocation object has been bound using - * Minecraft.getMinecraft().getTextureManager().bindTexture(resourceLocation). - * - * @param x x axis offset - * @param y y axis offset - * @param u bound resource location image x offset - * @param v bound resource location image y offset - * @param width the desired box width - * @param height the desired box height - * @param textureWidth the width of the box texture in the resource location image - * @param textureHeight the height of the box texture in the resource location image - * @param borderSize the size of the box's borders - * @param zLevel the zLevel to draw at - */ - public static void drawContinuousTexturedBox(int x, int y, int u, int v, int width, int height, int textureWidth, int textureHeight, - int borderSize, float zLevel) - { - drawContinuousTexturedBox(x, y, u, v, width, height, textureWidth, textureHeight, borderSize, borderSize, borderSize, borderSize, zLevel); - } - - /** - * Draws a textured box of any size (smallest size is borderSize * 2 square) based on a fixed size textured box with continuous borders - * and filler. The provided ResourceLocation object will be bound using - * Minecraft.getMinecraft().getTextureManager().bindTexture(resourceLocation). - * - * @param res the ResourceLocation object that contains the desired image - * @param x x axis offset - * @param y y axis offset - * @param u bound resource location image x offset - * @param v bound resource location image y offset - * @param width the desired box width - * @param height the desired box height - * @param textureWidth the width of the box texture in the resource location image - * @param textureHeight the height of the box texture in the resource location image - * @param borderSize the size of the box's borders - * @param zLevel the zLevel to draw at - */ - public static void drawContinuousTexturedBox(ResourceLocation res, int x, int y, int u, int v, int width, int height, int textureWidth, int textureHeight, - int borderSize, float zLevel) - { - drawContinuousTexturedBox(res, x, y, u, v, width, height, textureWidth, textureHeight, borderSize, borderSize, borderSize, borderSize, zLevel); - } - - /** - * Draws a textured box of any size (smallest size is borderSize * 2 square) based on a fixed size textured box with continuous borders - * and filler. The provided ResourceLocation object will be bound using - * Minecraft.getMinecraft().getTextureManager().bindTexture(resourceLocation). - * - * @param res the ResourceLocation object that contains the desired image - * @param x x axis offset - * @param y y axis offset - * @param u bound resource location image x offset - * @param v bound resource location image y offset - * @param width the desired box width - * @param height the desired box height - * @param textureWidth the width of the box texture in the resource location image - * @param textureHeight the height of the box texture in the resource location image - * @param topBorder the size of the box's top border - * @param bottomBorder the size of the box's bottom border - * @param leftBorder the size of the box's left border - * @param rightBorder the size of the box's right border - * @param zLevel the zLevel to draw at - */ - public static void drawContinuousTexturedBox(ResourceLocation res, int x, int y, int u, int v, int width, int height, int textureWidth, int textureHeight, - int topBorder, int bottomBorder, int leftBorder, int rightBorder, float zLevel) - { - Minecraft.getMinecraft().getTextureManager().bindTexture(res); - drawContinuousTexturedBox(x, y, u, v, width, height, textureWidth, textureHeight, topBorder, bottomBorder, leftBorder, rightBorder, zLevel); - } - - /** - * Draws a textured box of any size (smallest size is borderSize * 2 square) based on a fixed size textured box with continuous borders - * and filler. It is assumed that the desired texture ResourceLocation object has been bound using - * Minecraft.getMinecraft().getTextureManager().bindTexture(resourceLocation). - * - * @param x x axis offset - * @param y y axis offset - * @param u bound resource location image x offset - * @param v bound resource location image y offset - * @param width the desired box width - * @param height the desired box height - * @param textureWidth the width of the box texture in the resource location image - * @param textureHeight the height of the box texture in the resource location image - * @param topBorder the size of the box's top border - * @param bottomBorder the size of the box's bottom border - * @param leftBorder the size of the box's left border - * @param rightBorder the size of the box's right border - * @param zLevel the zLevel to draw at - */ - public static void drawContinuousTexturedBox(int x, int y, int u, int v, int width, int height, int textureWidth, int textureHeight, - int topBorder, int bottomBorder, int leftBorder, int rightBorder, float zLevel) - { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - GL11.glEnable(GL11.GL_BLEND); - OpenGlHelper.glBlendFunc(770, 771, 1, 0); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - - int fillerWidth = textureWidth - leftBorder - rightBorder; - int fillerHeight = textureHeight - topBorder - bottomBorder; - int canvasWidth = width - leftBorder - rightBorder; - int canvasHeight = height - topBorder - bottomBorder; - int xPasses = canvasWidth / fillerWidth; - int remainderWidth = canvasWidth % fillerWidth; - int yPasses = canvasHeight / fillerHeight; - int remainderHeight = canvasHeight % fillerHeight; - - // Draw Border - // Top Left - drawTexturedModalRect(x, y, u, v, leftBorder, topBorder, zLevel); - // Top Right - drawTexturedModalRect(x + leftBorder + canvasWidth, y, u + leftBorder + fillerWidth, v, rightBorder, topBorder, zLevel); - // Bottom Left - drawTexturedModalRect(x, y + topBorder + canvasHeight, u, v + topBorder + fillerHeight, leftBorder, bottomBorder, zLevel); - // Bottom Right - drawTexturedModalRect(x + leftBorder + canvasWidth, y + topBorder + canvasHeight, u + leftBorder + fillerWidth, v + topBorder + fillerHeight, rightBorder, bottomBorder, zLevel); - - for (int i = 0; i < xPasses + (remainderWidth > 0 ? 1 : 0); i++) - { - // Top Border - drawTexturedModalRect(x + leftBorder + (i * fillerWidth), y, u + leftBorder, v, (i == xPasses ? remainderWidth : fillerWidth), topBorder, zLevel); - // Bottom Border - drawTexturedModalRect(x + leftBorder + (i * fillerWidth), y + topBorder + canvasHeight, u + leftBorder, v + topBorder + fillerHeight, (i == xPasses ? remainderWidth : fillerWidth), bottomBorder, zLevel); - - // Throw in some filler for good measure - for (int j = 0; j < yPasses + (remainderHeight > 0 ? 1 : 0); j++) - drawTexturedModalRect(x + leftBorder + (i * fillerWidth), y + topBorder + (j * fillerHeight), u + leftBorder, v + topBorder, (i == xPasses ? remainderWidth : fillerWidth), (j == yPasses ? remainderHeight : fillerHeight), zLevel); - } - - // Side Borders - for (int j = 0; j < yPasses + (remainderHeight > 0 ? 1 : 0); j++) - { - // Left Border - drawTexturedModalRect(x, y + topBorder + (j * fillerHeight), u, v + topBorder, leftBorder, (j == yPasses ? remainderHeight : fillerHeight), zLevel); - // Right Border - drawTexturedModalRect(x + leftBorder + canvasWidth, y + topBorder + (j * fillerHeight), u + leftBorder + fillerWidth, v + topBorder, rightBorder, (j == yPasses ? remainderHeight : fillerHeight), zLevel); - } - } - - public static void drawTexturedModalRect(int x, int y, int u, int v, int width, int height, float zLevel) - { - float var7 = 0.00390625F; - float var8 = 0.00390625F; - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer wr = tessellator.getWorldRenderer(); - wr.startDrawingQuads(); - wr.addVertexWithUV((x + 0), (y + height), zLevel, ((u + 0) * var7), ((v + height) * var8)); - wr.addVertexWithUV((x + width), (y + height), zLevel, ((u + width) * var7), ((v + height) * var8)); - wr.addVertexWithUV((x + width), (y + 0), zLevel, ((u + width) * var7), ((v + 0) * var8)); - wr.addVertexWithUV((x + 0), (y + 0), zLevel, ((u + 0) * var7), ((v + 0) * var8)); - tessellator.draw(); - } - - /** - * Renders the item's overlay information. Examples being stack count or damage on top of the item's image at the specified position. - */ - public static void renderItemOverlayIntoGUI(FontRenderer fontRenderer, ItemStack itemStack, int x, int y) - { - renderItemOverlayIntoGUI(fontRenderer, itemStack, x, y, true, true); - } - - /** - * Renders the item's overlay information. Examples being stack count or damage on top of the item's image at the specified position. - */ - public static void renderItemOverlayIntoGUI(FontRenderer fontRenderer, ItemStack itemStack, int x, int y, boolean showDamageBar, boolean showCount) - { - if (itemStack != null && (showDamageBar || showCount)) - { - if (itemStack.isItemDamaged() && showDamageBar) - { - int var11 = (int) Math.round(13.0D - itemStack.getItemDamage() * 13.0D / itemStack.getMaxDamage()); - int var7 = (int) Math.round(255.0D - itemStack.getItemDamage() * 255.0D / itemStack.getMaxDamage()); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_DEPTH_TEST); - GL11.glDisable(GL11.GL_TEXTURE_2D); - Tessellator var8 = Tessellator.getInstance(); - int var9 = 255 - var7 << 16 | var7 << 8; - int var10 = (255 - var7) / 4 << 16 | 16128; - renderQuad(var8, x + 2, y + 13, 13, 2, 0); - renderQuad(var8, x + 2, y + 13, 12, 1, var10); - renderQuad(var8, x + 2, y + 13, var11, 1, var9); - GL11.glEnable(GL11.GL_TEXTURE_2D); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_DEPTH_TEST); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - } - - if (showCount) - { - int count = 0; - - if (itemStack.getMaxStackSize() > 1) - count = HUDUtils.countInInventory(Minecraft.getMinecraft().thePlayer, itemStack.getItem(), itemStack.getItemDamage()); - else if (itemStack.getItem().equals(Items.bow)) - count = HUDUtils.countInInventory(Minecraft.getMinecraft().thePlayer, Items.arrow); - - if (count > 1) - { - String var6 = "" + count; - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_DEPTH_TEST); - fontRenderer.drawString(var6, x + 19 - 2 - fontRenderer.getStringWidth(var6), y + 6 + 3, 16777215); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_DEPTH_TEST); - } - } - } - } - - /** - * Adds a quad to the tesselator at the specified position with the set width and height and color. Args: tessellator, x, y, width, - * height, color - */ - public static void renderQuad(Tessellator tessellator, int x, int y, int width, int height, int color) - { - WorldRenderer wr = tessellator.getWorldRenderer(); - wr.startDrawingQuads(); -// wr.setColorOpaque_I(color); - wr.addVertex((x + 0), (y + 0), 0.0D); - wr.addVertex((x + 0), (y + height), 0.0D); - wr.addVertex((x + width), (y + height), 0.0D); - wr.addVertex((x + width), (y + 0), 0.0D); - tessellator.draw(); - } - - public static int countInInventory(EntityPlayer player, Item item) - { - return countInInventory(player, item, -1); - } - - public static int countInInventory(EntityPlayer player, Item item, int md) - { - int count = 0; - for (int i = 0; i < player.inventory.mainInventory.length; i++) - if (player.inventory.mainInventory[i] != null && item.equals(player.inventory.mainInventory[i].getItem()) && (md == -1 || player.inventory.mainInventory[i].getItemDamage() == md)) - count += player.inventory.mainInventory[i].stackSize; - return count; - } - - public static String stripCtrl(String s) - { - return s.replaceAll("(?i)\247[0-9a-fklmnor]", ""); - } -} - diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RenderFakeBlocks.java b/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RenderFakeBlocks.java deleted file mode 100644 index 954edba0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RenderFakeBlocks.java +++ /dev/null @@ -1,103 +0,0 @@ -package WayofTime.alchemicalWizardry.client.renderer; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.WorldRenderer; -import net.minecraft.world.World; - -/* - * Created in Scala by Alex-Hawks - * Translated and implemented by Arcaratus - */ -public class RenderFakeBlocks -{ - public static void drawFakeBlock(WayofTime.alchemicalWizardry.api.Vector3 vector3, Block block, int meta, double minX, double minY, double minZ, World world) - { - double maxX = minX + 1; - double maxY = minY + 1; - double maxZ = minZ + 1; - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer wr = tessellator.getWorldRenderer(); - - wr.startDrawingQuads(); -// wr.setColorRGBA(255, 255, 255, 200); - - float texMinU, texMaxU, texMinV, texMaxV; - - texMinU = getMinU(block, meta, 0); - texMaxU = getMaxU(block, meta, 0); - texMinV = getMinV(block, meta, 0); - texMaxV = getMaxV(block, meta, 0); - wr.addVertexWithUV(minX, minY, minZ, texMinU, texMinV); - wr.addVertexWithUV(maxX, minY, minZ, texMaxU, texMinV); - wr.addVertexWithUV(maxX, minY, maxZ, texMaxU, texMaxV); - wr.addVertexWithUV(minX, minY, maxZ, texMinU, texMaxV); - - texMinU = getMinU(block, meta, 1); - texMaxU = getMaxU(block, meta, 1); - texMinV = getMinV(block, meta, 1); - texMaxV = getMaxV(block, meta, 1); - wr.addVertexWithUV(minX, maxY, maxZ, texMinU, texMaxV); - wr.addVertexWithUV(maxX, maxY, maxZ, texMaxU, texMaxV); - wr.addVertexWithUV(maxX, maxY, minZ, texMaxU, texMinV); - wr.addVertexWithUV(minX, maxY, minZ, texMinU, texMinV); - - texMinU = getMinU(block, meta, 2); - texMaxU = getMaxU(block, meta, 2); - texMinV = getMinV(block, meta, 2); - texMaxV = getMaxV(block, meta, 2); - wr.addVertexWithUV(maxX, minY, minZ, texMinU, texMaxV); - wr.addVertexWithUV(minX, minY, minZ, texMaxU, texMaxV); - wr.addVertexWithUV(minX, maxY, minZ, texMaxU, texMinV); - wr.addVertexWithUV(maxX, maxY, minZ, texMinU, texMinV); - - texMinU = getMinU(block, meta, 3); - texMaxU = getMaxU(block, meta, 3); - texMinV = getMinV(block, meta, 3); - texMaxV = getMaxV(block, meta, 3); - wr.addVertexWithUV(minX, minY, maxZ, texMinU, texMaxV); - wr.addVertexWithUV(maxX, minY, maxZ, texMaxU, texMaxV); - wr.addVertexWithUV(maxX, maxY, maxZ, texMaxU, texMinV); - wr.addVertexWithUV(minX, maxY, maxZ, texMinU, texMinV); - - texMinU = getMinU(block, meta, 4); - texMaxU = getMaxU(block, meta, 4); - texMinV = getMinV(block, meta, 4); - texMaxV = getMaxV(block, meta, 4); - wr.addVertexWithUV(minX, minY, minZ, texMinU, texMaxV); - wr.addVertexWithUV(minX, minY, maxZ, texMaxU, texMaxV); - wr.addVertexWithUV(minX, maxY, maxZ, texMaxU, texMinV); - wr.addVertexWithUV(minX, maxY, minZ, texMinU, texMinV); - - texMinU = getMinU(block, meta, 5); - texMaxU = getMaxU(block, meta, 5); - texMinV = getMinV(block, meta, 5); - texMaxV = getMaxV(block, meta, 5); - wr.addVertexWithUV(maxX, minY, maxZ, texMinU, texMaxV); - wr.addVertexWithUV(maxX, minY, minZ, texMaxU, texMaxV); - wr.addVertexWithUV(maxX, maxY, minZ, texMaxU, texMinV); - wr.addVertexWithUV(maxX, maxY, maxZ, texMinU, texMinV); - - tessellator.draw(); - } - - private static float getMinU(Block block, int meta, int side) - { - return 0; - } - - private static float getMaxU(Block block, int meta, int side) - { - return 256; - } - - private static float getMinV(Block block, int meta, int side) - { - return 0; - } - - private static float getMaxV(Block block, int meta, int side) - { - return 256; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RenderHelper.java b/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RenderHelper.java deleted file mode 100644 index 7c551e80..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RenderHelper.java +++ /dev/null @@ -1,326 +0,0 @@ -package WayofTime.alchemicalWizardry.client.renderer; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiChat; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.WorldRenderer; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.api.alchemy.energy.IReagentHandler; -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainerInfo; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; -import WayofTime.alchemicalWizardry.api.spell.APISpellHelper; -import WayofTime.alchemicalWizardry.common.items.armour.OmegaArmour; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RenderHelper -{ - public static boolean enableItemName = false; - public static boolean enabled = true; - public static boolean showInChat = true; - - public static int lpBarX = 12; - public static int lpBarY = 75; - - public static int zLevel = 0; - - private static int xOffsetDefault = +50; - public static int xOffset = xOffsetDefault; - private static int yOffsetDefault = 2; - public static int yOffset = yOffsetDefault; - private static int yOffsetBottomCenterDefault = 41; - public static int yOffsetBottomCenter = yOffsetBottomCenterDefault; - private static boolean applyXOffsetToCenterDefault = true; - public static boolean applyXOffsetToCenter = applyXOffsetToCenterDefault; - private static boolean applyYOffsetToMiddleDefault = false; - public static boolean applyYOffsetToMiddle = applyYOffsetToMiddleDefault; - - public static String listMode = "horizontal"; - public static String alignMode = "bottomcenter"; - - private static ScaledResolution scaledResolution; - - public static boolean onTickInGame(Minecraft mc) - { - if (enabled && (mc.inGameHasFocus || mc.currentScreen == null || (mc.currentScreen instanceof GuiChat && showInChat)) - && !mc.gameSettings.showDebugInfo) - { - EntityPlayer player = mc.thePlayer; - player.getEntityData(); - if (SpellHelper.canPlayerSeeAlchemy(player)) - { - GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); - scaledResolution = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight); - displayArmorStatus(mc); - GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); - } - - ItemStack stack = player.inventory.armorItemInSlot(2); - if(stack != null && stack.getItem() instanceof OmegaArmour) - { - int maxAmount = (int) APISpellHelper.getPlayerMaxReagentAmount(player); - - if(maxAmount > 0) - { - float val = APISpellHelper.getPlayerCurrentReagentAmount(player); - ReagentStack reagentStack = new ReagentStack(APISpellHelper.getPlayerReagentType(player), (int) val); - - if(reagentStack != null && reagentStack.amount > 0) - { - renderTestHUD(mc, reagentStack, maxAmount); - } - } - } - - if(SpellHelper.canPlayerSeeLPBar(player)) - { - int max = APISpellHelper.getPlayerMaxLPTag(player); - - if(max > 1) - { - renderLPHUD(mc, APISpellHelper.getPlayerLPTag(player), max); - } - } - - float maxHP = APISpellHelper.getCurrentAdditionalMaxHP(player); -// System.out.println("MaxHP: " + maxHP); - if(maxHP > 0) - { - renderHPHUD(mc, APISpellHelper.getCurrentAdditionalHP(player), maxHP); - } - } - - return true; - } - - private static void renderLPHUD(Minecraft mc, int lpAmount, int maxAmount) - { - GL11.glPushMatrix(); - int xSize = 32; - int ySize = 32; - - int amount = Math.max((int) (256 * ((double)(maxAmount - lpAmount) / maxAmount)), 0); - - int x = (lpBarX - xSize / 2) * 8; - int y = (lpBarY - ySize / 2) * 8; - - ResourceLocation test2 = new ResourceLocation("alchemicalwizardry", "textures/gui/container1.png"); - GL11.glColor4f(1, 0, 0, 1.0F); - mc.getTextureManager().bindTexture(test2); - - GL11.glScalef(1f/8f, 1f/8f, 1f/8f); - - drawTexturedModalRect(x, y + amount, 0, amount, 256, 256 - amount); - - ResourceLocation test = new ResourceLocation("alchemicalwizardry", "textures/gui/lpVial.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - mc.getTextureManager().bindTexture(test); - - - drawTexturedModalRect(x, y, 0, 0, 256, 256); - - GL11.glPopMatrix(); - } - - private static void renderHPHUD(Minecraft mc, float hpAmount, float maxAmount) - { - GL11.glPushMatrix(); - int xSize = 32; - int ySize = 32; - - int amount = Math.max((int) (256 * ((double)(hpAmount) / maxAmount)), 0); - - int x = (lpBarX + 8 - xSize / 2) * 8; - int y = (lpBarY + 32 - ySize / 2) * 8; - - ResourceLocation test2 = new ResourceLocation("alchemicalwizardry", "textures/gui/HPBar2.png"); - GL11.glColor4f(1, 0, 0, 1.0F); - mc.getTextureManager().bindTexture(test2); - - GL11.glScalef(1f/8f, 1f/8f, 1f/8f); - - drawTexturedModalRect(x, y, amount, 0, amount, 256); - - ResourceLocation test = new ResourceLocation("alchemicalwizardry", "textures/gui/HPBar1.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - mc.getTextureManager().bindTexture(test); - - - drawTexturedModalRect(x, y, 0, 0, 256, 256); - - GL11.glPopMatrix(); - } - - private static List getHUDElements(Minecraft mc) - { - List elements = new ArrayList(); - - MovingObjectPosition movingobjectposition = mc.objectMouseOver; - World world = mc.theWorld; - - if (movingobjectposition == null) - { - return elements; - } else - { - if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - BlockPos pos = movingobjectposition.func_178782_a(); - - TileEntity tile = world.getTileEntity(pos); - - if (!(tile instanceof IReagentHandler)) - { - return elements; - } - - IReagentHandler relay = (IReagentHandler) tile; - - ReagentContainerInfo[] infos = relay.getContainerInfo(movingobjectposition.field_178784_b); - - if (infos != null) - { - for (ReagentContainerInfo info : infos) - { - if (info == null || info.reagent == null || info.reagent.reagent == null) - { - continue; - } - - ItemStack itemStack = ReagentRegistry.getItemForReagent(info.reagent.reagent); - - if (itemStack != null) - elements.add(new HUDElement(itemStack, 16, 16, 2, info.reagent.amount)); - } - } - } - } - - return elements; - } - - private static int getX(int width) - { - if (alignMode.toLowerCase().contains("center")) - return scaledResolution.getScaledWidth() / 2 - width / 2 + (applyXOffsetToCenter ? xOffset : 0); - else if (alignMode.toLowerCase().contains("right")) - return scaledResolution.getScaledWidth() - width - xOffset; - else - return xOffset; - } - - private static int getY(int rowCount, int height) - { - if (alignMode.toLowerCase().contains("middle")) - return (scaledResolution.getScaledHeight() / 2) - ((rowCount * height) / 2) + (applyYOffsetToMiddle ? yOffset : 0); - else if (alignMode.equalsIgnoreCase("bottomleft") || alignMode.equalsIgnoreCase("bottomright")) - return scaledResolution.getScaledHeight() - (rowCount * height) - yOffset; - else if (alignMode.equalsIgnoreCase("bottomcenter")) - return scaledResolution.getScaledHeight() - (rowCount * height) - yOffsetBottomCenter; - else - return yOffset; - } - - private static int getElementsWidth(List elements) - { - int r = 0; - for (HUDElement he : elements) - r += he.width(); - - return r; - } - - public static void drawTexturedModalRect(int p_73729_1_, int p_73729_2_, int p_73729_3_, int p_73729_4_, double p_73729_5_, double p_73729_6_) - { - float f = 0.00390625F; - float f1 = 0.00390625F; - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer wr = tessellator.getWorldRenderer(); - wr.startDrawingQuads(); - wr.addVertexWithUV((double)p_73729_1_, p_73729_2_ + p_73729_6_, (double)zLevel, (p_73729_3_ * f), (p_73729_4_ + p_73729_6_) * f1); - wr.addVertexWithUV(p_73729_1_ + p_73729_5_, p_73729_2_ + p_73729_6_, (double)zLevel, (p_73729_3_ + p_73729_5_) * f, (p_73729_4_ + p_73729_6_) * f1); - wr.addVertexWithUV(p_73729_1_ + p_73729_5_, (double)p_73729_2_, (double)zLevel, (p_73729_3_ + p_73729_5_) * f, p_73729_4_ * f1); - wr.addVertexWithUV((double)p_73729_1_, (double)p_73729_2_, (double)zLevel, (double)(p_73729_3_ * f), p_73729_4_ * f1); - tessellator.draw(); - } - - private static void renderTestHUD(Minecraft mc, ReagentStack reagentStack, int maxAmount) - { - GL11.glPushMatrix(); - Reagent reagent = reagentStack.reagent; - int xSize = 32; - int ySize = 32; - - int amount = Math.max((int) (256 * ((double)(maxAmount - reagentStack.amount) / maxAmount)), 0); - - int x = (lpBarX + 16 - xSize / 2) * 8; - int y = (lpBarY - ySize / 2) * 8; - - GL11.glScalef(1f/8f, 1f/8f, 1f/8f); - - ResourceLocation test2 = new ResourceLocation("alchemicalwizardry", "textures/gui/container1.png"); - GL11.glColor4f(reagent.getColourRed() / 255f, reagent.getColourGreen() / 255f, reagent.getColourBlue() / 255f, 1.0F); - mc.getTextureManager().bindTexture(test2); - - drawTexturedModalRect(x, y + amount, 0, amount, 256, 256 - amount); - - ResourceLocation test = new ResourceLocation("alchemicalwizardry", "textures/gui/container.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - mc.getTextureManager().bindTexture(test); - - - drawTexturedModalRect(x, y, 0, 0, 256, 256); - - GL11.glPopMatrix(); - } - - private static void displayArmorStatus(Minecraft mc) - { - List elements = getHUDElements(mc); - - if (elements.size() > 0) - { - int yOffset = enableItemName ? 18 : 16; - - if (listMode.equalsIgnoreCase("vertical")) - { - int yBase = getY(elements.size(), yOffset); - - for (HUDElement e : elements) - { - e.renderToHud((alignMode.toLowerCase().contains("right") ? getX(0) : getX(e.width())), yBase); - yBase += yOffset; - } - } else if (listMode.equalsIgnoreCase("horizontal")) - { - int totalWidth = getElementsWidth(elements); - int yBase = getY(1, yOffset); - int xBase = getX(totalWidth); - int prevX = 0; - - for (HUDElement e : elements) - { - e.renderToHud(xBase + prevX + (alignMode.toLowerCase().contains("right") ? e.width() : 0), yBase); - prevX += (e.width()); - } - } //else if (listMode.equalsIgnoreCase("compound")) - { - //TODO - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RitualDivinerRender.java b/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RitualDivinerRender.java deleted file mode 100644 index 9b877d3f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RitualDivinerRender.java +++ /dev/null @@ -1,96 +0,0 @@ -package WayofTime.alchemicalWizardry.client.renderer; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import net.minecraftforge.client.event.RenderWorldLastEvent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.api.Vector3; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.rituals.Rituals; -import WayofTime.alchemicalWizardry.common.items.ItemRitualDiviner; - -/** - * Created in Scala by Alex-Hawks - * Translated and implemented by Arcaratus - */ -@SideOnly(Side.CLIENT) -public class RitualDivinerRender -{ - @SubscribeEvent - public void render(RenderWorldLastEvent event) - { - Minecraft minecraft = Minecraft.getMinecraft(); - EntityPlayer player = minecraft.thePlayer; - World world = player.worldObj; - - if (minecraft.objectMouseOver == null || minecraft.objectMouseOver.typeOfHit != MovingObjectPosition.MovingObjectType.BLOCK) - { - return; - } - - BlockPos pos = minecraft.objectMouseOver.func_178782_a(); - - TileEntity tileEntity = world.getTileEntity(pos); - - if (!(tileEntity instanceof IMasterRitualStone)) - { - return; - } - - Vector3 vec3 = new Vector3(pos.getX(), pos.getY(), pos.getZ()); - double posX = player.lastTickPosX + (player.posX - player.lastTickPosX) * event.partialTicks; - double posY = player.lastTickPosY + (player.posY - player.lastTickPosY) * event.partialTicks; - double posZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * event.partialTicks; - - if (player.inventory.getCurrentItem() != null && player.inventory.getCurrentItem().getItem() instanceof ItemRitualDiviner) - { - ItemRitualDiviner ritualDiviner = (ItemRitualDiviner) player.inventory.getCurrentItem().getItem(); - int direction = ritualDiviner.getDirection(player.inventory.getCurrentItem()); - RitualEffect ritualEffect = getEffectFromString(ritualDiviner.getCurrentRitual(player.inventory.getCurrentItem())); - - if (ritualEffect == null) - { - return; - } - - GL11.glPushMatrix(); - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - for (RitualComponent ritualComponent : ritualEffect.getRitualComponentList()) - { - Vector3 vX = vec3.add(new Vector3(ritualComponent.getX(direction), ritualComponent.getY(), ritualComponent.getZ(direction))); - double minX = vX.x - posX; - double minY = vX.y - posY; - double minZ = vX.z - posZ; - - if (!world.getBlockState(new BlockPos(vX.x, vX.y, vX.z)).getBlock().isOpaqueCube()) - { - RenderFakeBlocks.drawFakeBlock(vX, ModBlocks.ritualStone, ritualComponent.getStoneType(), minX, minY, minZ, world); - } - } - GL11.glPopMatrix(); - } - } - - public static RitualEffect getEffectFromString(String name) - { - Rituals ritual = Rituals.ritualMap.get(name); - - if (ritual == null) - return null; - - return ritual.effect; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java b/src/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java deleted file mode 100644 index beb46388..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java +++ /dev/null @@ -1,825 +0,0 @@ -package WayofTime.alchemicalWizardry.common; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.IProjectile; -import net.minecraft.entity.monster.EntityCreeper; -import net.minecraft.entity.monster.EntityMob; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.entity.projectile.EntityArrow; -import net.minecraft.entity.projectile.EntityThrowable; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumParticleTypes; -import net.minecraftforge.common.ISpecialArmor.ArmorProperties; -import net.minecraftforge.event.AnvilUpdateEvent; -import net.minecraftforge.event.entity.living.EnderTeleportEvent; -import net.minecraftforge.event.entity.living.LivingAttackEvent; -import net.minecraftforge.event.entity.living.LivingEvent.LivingJumpEvent; -import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; -import net.minecraftforge.event.entity.living.LivingHurtEvent; -import net.minecraftforge.event.entity.living.LivingSpawnEvent.CheckSpawn; -import net.minecraftforge.event.entity.player.EntityInteractEvent; -import net.minecraftforge.fml.client.event.ConfigChangedEvent; -import net.minecraftforge.fml.common.Optional; -import net.minecraftforge.fml.common.eventhandler.Event.Result; -import net.minecraftforge.fml.common.eventhandler.EventPriority; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerRespawnEvent; -import net.minecraftforge.fml.common.registry.GameRegistry; -import net.minecraftforge.oredict.OreDictionary; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.BloodMagicConfiguration; -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.api.event.TeleposeEvent; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.api.spell.APISpellHelper; -import WayofTime.alchemicalWizardry.common.entity.projectile.EnergyBlastProjectile; -import WayofTime.alchemicalWizardry.common.items.BoundBlade; -import WayofTime.alchemicalWizardry.common.items.armour.BoundArmour; -import WayofTime.alchemicalWizardry.common.items.armour.OmegaArmour; -import WayofTime.alchemicalWizardry.common.omega.OmegaParadigm; -import WayofTime.alchemicalWizardry.common.omega.OmegaRegistry; -import WayofTime.alchemicalWizardry.common.omega.ReagentRegenConfiguration; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import WayofTime.alchemicalWizardry.common.tileEntity.TEMasterStone; - -public class AlchemicalWizardryEventHooks -{ - public static Map playerFlightBuff = new HashMap(); - public static List playersWith1Step = new ArrayList(); - - public static Map> respawnMap = new HashMap>(); - public static Map> forceSpawnMap = new HashMap>(); - - public static Random rand = new Random(); - - @SubscribeEvent - public void onEntityInteractEvent(EntityInteractEvent event) - { - EntityPlayer player = event.entityPlayer; - OmegaParadigm parad = OmegaRegistry.getOmegaParadigmOfWeilder(player); - if(parad == null) - { - return; - } - ItemStack heldItem = player.getHeldItem(); - if(heldItem == null) - { - parad.onEmptyHandEntityInteract(player, event.target); - }else - { - if(heldItem.getItem() instanceof BoundBlade) - { - parad.onBoundSwordInteractWithEntity(player, event.target); - } - } - } - - @SubscribeEvent - public void onAnvilUpdateEvent(AnvilUpdateEvent event) - { - if(event.isCancelable() && event.left != null && event.right != null && (event.left.getItem() instanceof BoundArmour || event.right.getItem() instanceof BoundArmour)) - { - event.setCanceled(true); - } - } - - @SubscribeEvent(priority=EventPriority.HIGHEST) - public void onLivingHurtEvent(LivingHurtEvent event) - { - if(!event.isCanceled() && event.entityLiving instanceof EntityPlayer && !event.entityLiving.worldObj.isRemote) - { - EntityPlayer player = (EntityPlayer)event.entityLiving; - - if(APISpellHelper.getCurrentAdditionalMaxHP(player) > 0) - { - APISpellHelper.setPlayerReagentRegenCooldownTag(player, 20 * 20); - } - - float prevHp = APISpellHelper.getCurrentAdditionalHP((EntityPlayer)event.entityLiving); - if(prevHp > 0) - { - float recalculatedAmount = ArmorProperties.applyArmor(player, player.inventory.armorInventory, event.source, event.ammount); - if (recalculatedAmount <= 0) return; - recalculatedAmount = SpellHelper.applyPotionDamageCalculations(player, event.source, recalculatedAmount); //Recalculated damage - - float ratio = recalculatedAmount / event.ammount; - - float f1 = recalculatedAmount; - recalculatedAmount = Math.max(recalculatedAmount - player.getAbsorptionAmount(), 0.0F); - player.setAbsorptionAmount(player.getAbsorptionAmount() - (f1 - recalculatedAmount)); - - if(prevHp > recalculatedAmount) - { - float hp = (prevHp - recalculatedAmount); //New HP - this is obviously > 0... - -// event.setCanceled(true); - event.ammount = 0; - Reagent reagent = APISpellHelper.getPlayerReagentType(player); - OmegaParadigm paradigm = OmegaRegistry.getParadigmForReagent(reagent); - if(paradigm != null) - { - ItemStack chestStack = player.inventory.armorInventory[2]; - - if(chestStack != null && chestStack.getItem() instanceof OmegaArmour) - { - if(((OmegaArmour)chestStack.getItem()).paradigm == paradigm) - { - paradigm.onHPBarDepleted(player, chestStack); - } - } - } - - APISpellHelper.setCurrentAdditionalHP(player, hp); - NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getAddedHPPacket(hp, APISpellHelper.getCurrentAdditionalMaxHP(player)), (EntityPlayerMP)player); - -// if(event.ammount <= 0.3) -// { -// event.ammount++; -// } - }else - { - APISpellHelper.setCurrentAdditionalHP(player, 0); - NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getAddedHPPacket(0, APISpellHelper.getCurrentAdditionalMaxHP(player)), (EntityPlayerMP)player); - - event.ammount -= prevHp / ratio; - if(event.ammount < 0) - { - event.ammount = 0; - } - } - } - } - } - - @SubscribeEvent - public void omegaUpdateReagentAndHpEvent(LivingUpdateEvent event) - { - if(event.entityLiving instanceof EntityPlayer && !event.entityLiving.worldObj.isRemote) - { - EntityPlayer player = (EntityPlayer)event.entityLiving; - Reagent reagent = APISpellHelper.getPlayerReagentType(player); - float reagentAmount = APISpellHelper.getPlayerCurrentReagentAmount(player); - - boolean hasReagentChanged = false; - - if(reagentAmount > 0 && OmegaRegistry.hasParadigm(reagent)) - { - int cooldown = APISpellHelper.getPlayerReagentRegenCooldownTag(player); - boolean canHealHPBar = true; - if(cooldown > 0) - { - float extra = 0; - if(player.isPotionActive(AlchemicalWizardry.customPotionSoulHarden)) - { - extra += 0.25f * (1 + player.getActivePotionEffect(AlchemicalWizardry.customPotionSoulHarden).getAmplifier()); - } - - if(player.isPotionActive(AlchemicalWizardry.customPotionSoulFray)) - { - extra -= 0.25f * (1 + player.getActivePotionEffect(AlchemicalWizardry.customPotionSoulFray).getAmplifier()); - } - - int deduction = - 1 - (extra >= 0 ? (rand.nextFloat() < extra ? 1 : 0) : (rand.nextFloat() < -extra/2 ? -1 : 0)); - - APISpellHelper.setPlayerReagentRegenCooldownTag(player, Math.max(cooldown + deduction, 0)); - canHealHPBar = false; - } - - OmegaParadigm parad = OmegaRegistry.getParadigmForReagent(reagent); - ReagentRegenConfiguration config = parad.getRegenConfig(player); - - if(parad.isPlayerWearingFullSet(player)) - { - if(canHealHPBar) - { - int tickRate = config.tickRate; - - if(player.isPotionActive(Potion.regeneration)) - { - int i = player.getActivePotionEffect(Potion.regeneration).getAmplifier(); - double factor = Math.pow(1.5, i+1); - tickRate = Math.max((int)(tickRate / factor), 1); - } - - if(event.entityLiving.worldObj.getWorldTime() % tickRate == 0) - { - boolean hasHealthChanged = false; - int maxHealth = parad.getMaxAdditionalHealth(); - - float health = APISpellHelper.getCurrentAdditionalHP(player); - - if(health > maxHealth) - { - health = maxHealth; - hasHealthChanged = true; - }else if(health < maxHealth) - { - float addedAmount = Math.min(Math.min((reagentAmount / config.costPerPoint), config.healPerTick), maxHealth - health); - float drain = addedAmount * config.costPerPoint; - - reagentAmount -= drain; - hasReagentChanged = true; - - health += addedAmount; - - hasHealthChanged = true; - } - - if(player instanceof EntityPlayerMP) - { - if(hasHealthChanged) - { - APISpellHelper.setCurrentAdditionalHP(player, health); - NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getAddedHPPacket(health, maxHealth), (EntityPlayerMP)player); - } - } - } - } - - }else - { - reagentAmount = 0; - APISpellHelper.setPlayerMaxReagentAmount(player, 0); - NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getReagentBarPacket(null, 0, 0), (EntityPlayerMP)player); - APISpellHelper.setCurrentAdditionalHP(player, 0); - NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getAddedHPPacket(0, 0), (EntityPlayerMP)player); - } - //Consumes the amount - float costPerTick = parad.getCostPerTickOfUse(player); - if(parad.doDrainReagent(player)) - { - if(reagentAmount > costPerTick) - { - hasReagentChanged = true; - reagentAmount = Math.max(0, reagentAmount - costPerTick); - }else - { - hasReagentChanged = true; - reagentAmount = 0; - } - } - - - hasReagentChanged = true; - } - - if(reagentAmount <= 0) - { - boolean hasRevertedArmour = false; - ItemStack[] armourInventory = player.inventory.armorInventory; - for(ItemStack stack : armourInventory) - { - if(stack != null && stack.getItem() instanceof OmegaArmour) - { - ((OmegaArmour)stack.getItem()).revertArmour(player, stack); - hasRevertedArmour = true; - } - } - - if(hasRevertedArmour) - { - APISpellHelper.setCurrentAdditionalHP(player, 0); - NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getAddedHPPacket(0, 0), (EntityPlayerMP)player); - } - } - - if(player instanceof EntityPlayerMP) - { - if(hasReagentChanged) - { - APISpellHelper.setPlayerCurrentReagentAmount(player, reagentAmount); - NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getReagentBarPacket(reagent, reagentAmount, APISpellHelper.getPlayerMaxReagentAmount(player)), (EntityPlayerMP)player); - } - } - } - } - - @SubscribeEvent(priority=EventPriority.HIGHEST) - public void onPlayerDamageEvent(LivingAttackEvent event) - { - if (event.source.isProjectile()) - { - if (event.entityLiving.isPotionActive(AlchemicalWizardry.customPotionProjProt) && event.isCancelable()) - { - event.setCanceled(true); - } - } - } - - @SubscribeEvent - public void onLivingSpawnEvent(CheckSpawn event) - { - if (!(event.entityLiving instanceof EntityMob)) - { - return; - } - - String respawnRitual = "AW028SpawnWard"; - - int dimension = event.world.provider.getDimensionId(); - if (respawnMap.containsKey(dimension)) - { - List list = respawnMap.get(dimension); - - if (list != null) - { - for (CoordAndRange coords : list) - { - TileEntity tile = event.world.getTileEntity(coords.getPos()); - - if (tile instanceof TEMasterStone && ((TEMasterStone) tile).isRunning && ((TEMasterStone) tile).getCurrentRitual().equals(respawnRitual)) - { - if (event.x > coords.xCoord - coords.horizRadius && event.x < coords.xCoord + coords.horizRadius && event.z > coords.zCoord - coords.horizRadius && event.z < coords.zCoord + coords.horizRadius && event.y > coords.yCoord - coords.vertRadius && event.y < coords.yCoord + coords.vertRadius) - { - switch (event.getResult()) - { - case ALLOW: - event.setResult(Result.DEFAULT); - break; - case DEFAULT: - event.setResult(Result.DENY); - break; - case DENY: - break; - default: - break; - } - break; - } - } else - { - list.remove(coords); - } - } - } - } - - if (event.entityLiving instanceof EntityCreeper) - { - return; - } - - String forceSpawnRitual = "AW029VeilOfEvil"; - - if (forceSpawnMap.containsKey(dimension)) - { - List list = forceSpawnMap.get(dimension); - - if (list != null) - { - for (CoordAndRange coords : list) - { - TileEntity tile = event.world.getTileEntity(coords.getPos()); - - if (tile instanceof TEMasterStone && ((TEMasterStone) tile).isRunning && ((TEMasterStone) tile).getCurrentRitual().equals(forceSpawnRitual)) - { - if (event.x > coords.xCoord - coords.horizRadius && event.x < coords.xCoord + coords.horizRadius && event.z > coords.zCoord - coords.horizRadius && event.z < coords.zCoord + coords.horizRadius && event.y > coords.yCoord - coords.vertRadius && event.y < coords.yCoord + coords.vertRadius) - { - switch (event.getResult()) - { - case ALLOW: - break; - case DEFAULT: - event.setResult(Result.ALLOW); - break; - case DENY: - event.setResult(Result.DEFAULT); - break; - default: - break; - } - break; - } - } else - { - list.remove(coords); - } - } - } - } - } - - @SubscribeEvent - public void onPlayerRespawnEvent(PlayerRespawnEvent event) - { - if (AlchemicalWizardry.respawnWithDebuff && event.player != null) - { - event.player.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionSoulFray.id, 20 * 60 * 5, 0)); - } - } - - @SubscribeEvent - public void onLivingJumpEvent(LivingJumpEvent event) - { -// event.entityLiving.getEntityAttribute(SharedMonsterAttributes.maxHealth).removeModifier(new AttributeModifier(new UUID(493295, 1), "HealthModifier", 2, 0)); - //event.entityLiving.getEntityAttribute(SharedMonsterAttributes.maxHealth).applyModifier(new AttributeModifier(new UUID(493295, 1), "HealthModifier", 2, 0)); - - if (event.entityLiving.isPotionActive(AlchemicalWizardry.customPotionBoost)) - { - int i = event.entityLiving.getActivePotionEffect(AlchemicalWizardry.customPotionBoost).getAmplifier(); - event.entityLiving.motionY += (0.1f) * (2 + i); - } - - if (event.entityLiving.isPotionActive(AlchemicalWizardry.customPotionHeavyHeart)) - { - event.entityLiving.motionY = 0; - } - } - - @SubscribeEvent - public void onEndermanTeleportEvent(EnderTeleportEvent event) - { - if (event.entityLiving.isPotionActive(AlchemicalWizardry.customPotionPlanarBinding) && event.isCancelable()) - { - event.setCanceled(true); - } - } - - @SubscribeEvent - public void onEntityDamaged(LivingAttackEvent event) - { - EntityLivingBase entityAttacked = event.entityLiving; - - if (entityAttacked.isPotionActive(AlchemicalWizardry.customPotionReciprocation)) - { - Entity entityAttacking = event.source.getSourceOfDamage(); - - if (entityAttacking != null && entityAttacking instanceof EntityLivingBase) - { - int i = event.entityLiving.getActivePotionEffect(AlchemicalWizardry.customPotionReciprocation).getAmplifier(); - float damageRecieve = event.ammount / 2 * (i + 1); - entityAttacking.attackEntityFrom(DamageSource.generic, damageRecieve); - } - } - - if (entityAttacked.isPotionActive(AlchemicalWizardry.customPotionFlameCloak)) - { - int i = event.entityLiving.getActivePotionEffect(AlchemicalWizardry.customPotionFlameCloak).getAmplifier(); - - Entity entityAttacking = event.source.getSourceOfDamage(); - - if (entityAttacking != null && entityAttacking instanceof EntityLivingBase && !entityAttacking.isImmuneToFire() && !((EntityLivingBase) entityAttacking).isPotionActive(Potion.fireResistance)) - { - entityAttacking.attackEntityFrom(DamageSource.inFire, 2 * i + 2); - entityAttacking.setFire(3); - } - } - } - - -// @SubscribeEvent -// public void onFOVUpdate(FOVUpdateEvent event) -// { -// event.setResult(Result.DENY); -// } - // @SubscribeEvent - // public void onPlayerTickEnd(PlayerTickEvent event) - // { - // if(event.type.equals(Type.PLAYER) && event.phase.equals(TickEvent.Phase.END)) - // { - // ObfuscationReflectionHelper.setPrivateValue(PlayerCapabilities.class, event.player.capabilities, Float.valueOf(0.1f), new String[]{"walkSpeed", "g", "field_75097_g"}); - // } - // } - - @SubscribeEvent - public void onEntityUpdate(LivingUpdateEvent event) - { - EntityLivingBase entityLiving = event.entityLiving; - double x = entityLiving.posX; - double y = entityLiving.posY; - double z = entityLiving.posZ; - - BlockPos blockVector = entityLiving.getPosition(); - int xPos = blockVector.getX(); - int yPos = blockVector.getY(); - int zPos = blockVector.getZ(); - - if (entityLiving instanceof EntityPlayer) - { - if(!entityLiving.worldObj.isRemote && entityLiving.worldObj.getTotalWorldTime() % 20 == 0) - { - if(entityLiving instanceof EntityPlayerMP) - { - String ownerName = SoulNetworkHandler.getUsername((EntityPlayer)entityLiving); - NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getLPPacket(SoulNetworkHandler.getCurrentEssence(ownerName), SoulNetworkHandler.getMaximumForOrbTier(SoulNetworkHandler.getCurrentMaxOrb(ownerName))), (EntityPlayerMP)entityLiving); - } - } -// ObfuscationReflectionHelper.setPrivateValue(PlayerCapabilities.class, ((EntityPlayer) event.entityLiving).capabilities, 0.1F, "walkSpeed", "g", "field_75097_g"); - } - - if (entityLiving instanceof EntityPlayer && entityLiving.worldObj.isRemote) - { - EntityPlayer entityPlayer = (EntityPlayer) entityLiving; - boolean highStepListed = playersWith1Step.contains(entityPlayer.getDisplayName()); - boolean hasHighStep = entityPlayer.isPotionActive(AlchemicalWizardry.customPotionBoost); - - if (hasHighStep && !highStepListed) - { - playersWith1Step.add(SpellHelper.getUsername(entityPlayer)); - } - - if (!hasHighStep && highStepListed) - { - playersWith1Step.remove(SpellHelper.getUsername(entityPlayer)); - entityPlayer.stepHeight = 0.5F; - } - } - - if (event.entityLiving.isPotionActive(AlchemicalWizardry.customPotionFeatherFall)) - { - event.entityLiving.fallDistance = 0; - } - - if (event.entityLiving.isPotionActive(AlchemicalWizardry.customPotionDrowning) && ! event.entityLiving.isPotionActive(Potion.waterBreathing)) - { - int i = event.entityLiving.getActivePotionEffect(AlchemicalWizardry.customPotionDrowning).getAmplifier(); - - if (event.entityLiving.worldObj.getWorldTime() % (20 / (i + 1)) == 0) - { - event.entityLiving.attackEntityFrom(DamageSource.drown, 2); - event.entityLiving.hurtResistantTime = Math.min(event.entityLiving.hurtResistantTime, 20 / (i + 1)); - } - } - -// event.entityLiving.getEntityAttribute(SharedMonsterAttributes.movementSpeed).removeAllModifiers(); - - if (event.entityLiving.isPotionActive(AlchemicalWizardry.customPotionBoost)) - { - int i = event.entityLiving.getActivePotionEffect(AlchemicalWizardry.customPotionBoost).getAmplifier(); - //if(!entity.isSneaking()) - { - float percentIncrease = (i + 1) * 0.05f; - -// AttributeModifier speedModifier = new AttributeModifier(new UUID(213241, 3), "Potion Boost", percentIncrease, 0); -// -// event.entityLiving.getEntityAttribute(SharedMonsterAttributes.movementSpeed).applyModifier(speedModifier); - - if (event.entityLiving instanceof EntityPlayer) - { - EntityPlayer entityPlayer = (EntityPlayer) event.entityLiving; - entityPlayer.stepHeight = 1.0f; - - if ((entityPlayer.onGround || entityPlayer.capabilities.isFlying) && entityPlayer.moveForward > 0F) - entityPlayer.moveFlying(0F, 1F, entityPlayer.capabilities.isFlying ? (percentIncrease / 2.0f) : percentIncrease); - } - } - } - - if (event.entityLiving.isPotionActive(AlchemicalWizardry.customPotionProjProt)) - { - int i = event.entityLiving.getActivePotionEffect(AlchemicalWizardry.customPotionProjProt).getAmplifier(); - EntityLivingBase entity = event.entityLiving; - int posX = (int) Math.round(entity.posX - 0.5f); - int posY = (int) Math.round(entity.posY); - int posZ = (int) Math.round(entity.posZ - 0.5f); - int d0 = (int) ((i + 1) * 2.5); - AxisAlignedBB axisalignedbb = new AxisAlignedBB(posX - 0.5, posY - 0.5, posZ - 0.5, posX + 0.5, posY + 0.5, posZ + 0.5).expand(d0, d0, d0); - List list = event.entityLiving.worldObj.getEntitiesWithinAABB(Entity.class, axisalignedbb); - Iterator iterator = list.iterator(); - - while (iterator.hasNext()) - { - Entity projectile = (Entity) iterator.next(); - - if (projectile == null) - { - continue; - } - - if (!(projectile instanceof IProjectile) || (AlchemicalWizardry.isBotaniaLoaded && isManaBurst(projectile))) - { - continue; - } - - Entity throwingEntity = null; - - if (projectile instanceof EntityArrow) - { - throwingEntity = ((EntityArrow) projectile).shootingEntity; - } else if (projectile instanceof EnergyBlastProjectile) - { - throwingEntity = ((EnergyBlastProjectile) projectile).shootingEntity; - } else if (projectile instanceof EntityThrowable) - { - throwingEntity = ((EntityThrowable) projectile).getThrower(); - } - - if (throwingEntity != null && throwingEntity.equals(entity)) - { - continue; - } - - double delX = projectile.posX - entity.posX; - double delY = projectile.posY - entity.posY; - double delZ = projectile.posZ - entity.posZ; - - double angle = (delX*projectile.motionX + delY*projectile.motionY + delZ*projectile.motionZ)/ - (Math.sqrt(delX * delX + delY * delY + delZ * delZ)*Math.sqrt(projectile.motionX*projectile.motionX + projectile.motionY* projectile.motionY + projectile.motionZ*projectile.motionZ)); - angle = Math.acos(angle); - if (angle < 3*(Math.PI/4)) { - //angle is < 135 degrees - continue; - } - - if (throwingEntity != null) - { - delX = -projectile.posX + throwingEntity.posX; - delY = -projectile.posY + (throwingEntity.posY + throwingEntity.getEyeHeight()); - delZ = -projectile.posZ + throwingEntity.posZ; - } - - double curVel = Math.sqrt(delX * delX + delY * delY + delZ * delZ); - - delX /= curVel; - delY /= curVel; - delZ /= curVel; - double newVel = Math.sqrt(projectile.motionX * projectile.motionX + projectile.motionY * projectile.motionY + projectile.motionZ * projectile.motionZ); - projectile.motionX = newVel * delX; - projectile.motionY = newVel * delY; - projectile.motionZ = newVel * delZ; - //TODO make this not affect player's projectiles - } - } - - if (event.entityLiving.isPotionActive(AlchemicalWizardry.customPotionFlight)) - { - if (event.entityLiving instanceof EntityPlayer) - { - EntityPlayer entityPlayer = (EntityPlayer) event.entityLiving; - String ownerName = SpellHelper.getUsername(entityPlayer); - playerFlightBuff.put(ownerName, true); - entityPlayer.capabilities.allowFlying = true; - } - } else - { - if (event.entityLiving instanceof EntityPlayer) - { - EntityPlayer entityPlayer = (EntityPlayer) event.entityLiving; - String ownerName = SpellHelper.getUsername(entityPlayer); - - if (!playerFlightBuff.containsKey(ownerName)) - { - playerFlightBuff.put(ownerName, false); - } - - if (playerFlightBuff.get(ownerName)) - { - playerFlightBuff.put(ownerName, false); - - if (!entityPlayer.capabilities.isCreativeMode) - { - entityPlayer.capabilities.allowFlying = false; - entityPlayer.capabilities.isFlying = false; - entityPlayer.sendPlayerAbilities(); - } - } - } - } - - if (entityLiving.isPotionActive(AlchemicalWizardry.customPotionFlameCloak)) - { - entityLiving.worldObj.spawnParticle(EnumParticleTypes.FLAME, x + SpellHelper.gaussian(1), y - 1.3 + SpellHelper.gaussian(0.3), z + SpellHelper.gaussian(1), 0, 0.06d, 0); - - int i = event.entityLiving.getActivePotionEffect(AlchemicalWizardry.customPotionFlameCloak).getAmplifier(); - double range = i * 0.5; - - List entities = SpellHelper.getEntitiesInRange(entityLiving.worldObj, x, y, z, range, range); - if (entities != null) - { - for (Entity entity : entities) - { - if (!entity.equals(entityLiving) && !entity.isImmuneToFire() && !(entity instanceof EntityLivingBase && ((EntityLivingBase) entity).isPotionActive(Potion.fireResistance))) - { - entity.setFire(3); - } - } - } - } - - if (entityLiving.isPotionActive(AlchemicalWizardry.customPotionIceCloak)) - { - if (entityLiving.worldObj.getWorldTime() % 2 == 0) - entityLiving.worldObj.spawnParticle(EnumParticleTypes.REDSTONE, x + SpellHelper.gaussian(1), y - 1.3 + SpellHelper.gaussian(0.3), z + SpellHelper.gaussian(1), 0x74, 0xbb, 0xfb); - - int r = event.entityLiving.getActivePotionEffect(AlchemicalWizardry.customPotionIceCloak).getAmplifier(); - int horizRange = r + 1; - int vertRange = 1; - - if (!entityLiving.worldObj.isRemote) - { - for (int i = -horizRange; i <= horizRange; i++) - { - for (int k = -horizRange; k <= horizRange; k++) - { - for (int j = -vertRange - 1; j <= vertRange - 1; j++) - { - SpellHelper.freezeWaterBlock(entityLiving.worldObj, new BlockPos(xPos + i, yPos + j, zPos + k)); - } - } - } - } - } - - if (entityLiving.isPotionActive(AlchemicalWizardry.customPotionHeavyHeart)) - { - entityLiving.worldObj.spawnParticle(EnumParticleTypes.FLAME, x + SpellHelper.gaussian(1), y - 1.3 + SpellHelper.gaussian(0.3), z + SpellHelper.gaussian(1), 0, 0.06d, 0); - - int i = event.entityLiving.getActivePotionEffect(AlchemicalWizardry.customPotionHeavyHeart).getAmplifier(); - double decrease = 0.025 * (i + 1); - - if (entityLiving.motionY > -0.9) - { - entityLiving.motionY -= decrease; - } - - if(entityLiving instanceof EntityPlayer) - { - SpellHelper.setPlayerSpeedFromServer((EntityPlayer)entityLiving, entityLiving.motionX, entityLiving.motionY - decrease, entityLiving.motionZ); - } - } - - if (entityLiving.isPotionActive(AlchemicalWizardry.customPotionFireFuse)) - { - entityLiving.worldObj.spawnParticle(EnumParticleTypes.FLAME, x + SpellHelper.gaussian(1), y - 1.3 + SpellHelper.gaussian(0.3), z + SpellHelper.gaussian(1), 0, 0.06d, 0); - - int r = event.entityLiving.getActivePotionEffect(AlchemicalWizardry.customPotionFireFuse).getAmplifier(); - int radius = r + 1; - - if (entityLiving.getActivePotionEffect(AlchemicalWizardry.customPotionFireFuse).getDuration() <= 2) - { - entityLiving.worldObj.createExplosion(null, x, y, z, radius, false); - } - } - } - - @SubscribeEvent(priority = EventPriority.LOWEST) - public void onTelepose(TeleposeEvent event) { - for (int i = 0; i < BloodMagicConfiguration.teleposerBlacklist.length; i++) { - String[] blockData = BloodMagicConfiguration.teleposerBlacklist[i].split(":"); - - // If the block follows full syntax: modid:blockname:meta - if (blockData.length == 3) { - - Block block = GameRegistry.findBlock(blockData[0], blockData[1]); - int meta; - - // Check if it's an int, if so, parse it. If not, set meta to 0 to avoid crashing. - if (blockData[2].matches("-?\\d+")) - meta = Integer.parseInt(blockData[2]); - else if (blockData[2].equals("*")) - meta = OreDictionary.WILDCARD_VALUE; - else - meta = 0; - - if (block != null) - if ((block == event.initialBlock || block == event.finalBlock) && (meta == event.initialBlock.getMetaFromState(event.initialState) || meta == event.finalBlock.getMetaFromState(event.finalState) || meta == OreDictionary.WILDCARD_VALUE)) - event.setCanceled(true); - - // If the block uses shorthand syntax: modid:blockname - } else if (blockData.length == 2) { - - Block block = GameRegistry.findBlock(blockData[0], blockData[1]); - int meta = 0; - - if (block != null) - if (( block == event.initialBlock || block == event.finalBlock) && (meta == event.initialBlock.getMetaFromState(event.initialState) || meta == event.finalBlock.getMetaFromState(event.finalState) || meta == OreDictionary.WILDCARD_VALUE)) - event.setCanceled(true); - } - } - } - - @SubscribeEvent - public void onConfigChanged(ConfigChangedEvent.OnConfigChangedEvent event) { - if (event.modID.equals("AWWayofTime")) { - BloodMagicConfiguration.syncConfig(); - AlchemicalWizardry.logger.info("Refreshing configuration file."); - } - } - - @Optional.Method(modid = "Botania") - private boolean isManaBurst(Entity entity) - { -// if(entity instanceof IManaBurst) { -// ItemStack lens = ((IManaBurst)entity).getSourceLens(); -// return !(lens.getItemDamage()!=8 && lens.getItemDamage()!=11); -// } -// else - return false; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryFuelHandler.java b/src/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryFuelHandler.java deleted file mode 100644 index 730ac5cd..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryFuelHandler.java +++ /dev/null @@ -1,67 +0,0 @@ -package WayofTime.alchemicalWizardry.common; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.server.MinecraftServer; -import net.minecraftforge.fml.common.IFuelHandler; -import WayofTime.alchemicalWizardry.ModItems; -import WayofTime.alchemicalWizardry.common.items.LavaCrystal; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class AlchemicalWizardryFuelHandler implements IFuelHandler -{ - @Override - public int getBurnTime(ItemStack fuel) - { - if (fuel == null) - { - return 0; - } - - Item fuelItem = fuel.getItem(); - - if (fuelItem.equals(ModItems.lavaCrystal)) - { - LavaCrystal item = (LavaCrystal) fuel.getItem(); - - if (item.hasEnoughEssence(fuel)) - { - return 200; - } else - { - NBTTagCompound tag = fuel.getTagCompound(); - - if (tag == null) - { - return 0; - } - - if (MinecraftServer.getServer() == null) - { - return 0; - } - - if (MinecraftServer.getServer().getConfigurationManager() == null) - { - return 0; - } - - EntityPlayer owner = SpellHelper.getPlayerForUsername(tag.getString("ownerName")); - - if (owner == null) - { - return 0; - } - - owner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); - return 0; - } - } - - return 0; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/ArmourComponent.java b/src/main/java/WayofTime/alchemicalWizardry/common/ArmourComponent.java deleted file mode 100644 index fb4f155b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/ArmourComponent.java +++ /dev/null @@ -1,23 +0,0 @@ -package WayofTime.alchemicalWizardry.common; - -public class ArmourComponent -{ - private int xOff; - private int zOff; - - public ArmourComponent(int xOff, int zOff) - { - this.xOff = xOff; - this.zOff = zOff; - } - - public int getXOff() - { - return xOff; - } - - public int getZOff() - { - return zOff; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/ClientToServerPacketHandler.java b/src/main/java/WayofTime/alchemicalWizardry/common/ClientToServerPacketHandler.java deleted file mode 100644 index 7a5f2fed..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/ClientToServerPacketHandler.java +++ /dev/null @@ -1,15 +0,0 @@ -package WayofTime.alchemicalWizardry.common; - -import net.minecraftforge.fml.common.network.NetworkRegistry; -import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper; -import net.minecraftforge.fml.relauncher.Side; - -public class ClientToServerPacketHandler -{ - public static final SimpleNetworkWrapper INSTANCE = NetworkRegistry.INSTANCE.newSimpleChannel("alchemicalwizardry"); - - public static void init() - { - INSTANCE.registerMessage(MessageKeyPressed.class, MessageKeyPressed.class, 0, Side.SERVER); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/CommonProxy.java b/src/main/java/WayofTime/alchemicalWizardry/common/CommonProxy.java deleted file mode 100644 index 1e9201a8..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/CommonProxy.java +++ /dev/null @@ -1,67 +0,0 @@ -package WayofTime.alchemicalWizardry.common; - -import net.minecraft.world.World; -import net.minecraftforge.fml.common.registry.EntityRegistry; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.spell.EntitySpellProjectile; -import WayofTime.alchemicalWizardry.common.entity.mob.BookEntityItem; -import WayofTime.alchemicalWizardry.common.entity.mob.MailOrderEntityItem; -import WayofTime.alchemicalWizardry.common.entity.projectile.EnergyBlastProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.EntityBloodLightProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.EntityEnergyBazookaMainProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.EntityEnergyBazookaSecondaryProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.EntityMeteor; -import WayofTime.alchemicalWizardry.common.entity.projectile.EntityParticleBeam; -import WayofTime.alchemicalWizardry.common.entity.projectile.ExplosionProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.FireProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.HolyProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.IceProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.LightningBoltProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.MudProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.TeleportProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.WaterProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.WindGustProjectile; - -public class CommonProxy -{ - // Client stuff - public void registerRenderers() - { - // Nothing here as the server doesn't render graphics! - } - - public void registerPostSideObjects() {} - - public void registerEntities() {} - - public World getClientWorld() - { - return null; - } - - public void registerEvents() {} - - public void registerEntityTrackers() - { - EntityRegistry.registerModEntity(EnergyBlastProjectile.class, "energyBlastProjectile", 0, AlchemicalWizardry.instance, 128, 5, true); - EntityRegistry.registerModEntity(FireProjectile.class, "fireProjectile", 1, AlchemicalWizardry.instance, 128, 5, true); - EntityRegistry.registerModEntity(IceProjectile.class, "iceProjectile", 2, AlchemicalWizardry.instance, 128, 5, true); - EntityRegistry.registerModEntity(ExplosionProjectile.class, "explosionProjectile", 3, AlchemicalWizardry.instance, 128, 5, true); - EntityRegistry.registerModEntity(HolyProjectile.class, "holyProjectile", 4, AlchemicalWizardry.instance, 128, 5, true); - EntityRegistry.registerModEntity(WindGustProjectile.class, "windGustProjectile", 5, AlchemicalWizardry.instance, 128, 5, true); - EntityRegistry.registerModEntity(LightningBoltProjectile.class, "lightningBoltProjectile", 6, AlchemicalWizardry.instance, 128, 5, true); - EntityRegistry.registerModEntity(WaterProjectile.class, "waterProjectile", 7, AlchemicalWizardry.instance, 128, 5, true); - EntityRegistry.registerModEntity(MudProjectile.class, "mudProjectile", 8, AlchemicalWizardry.instance, 128, 5, true); - EntityRegistry.registerModEntity(TeleportProjectile.class, "teleportProjectile", 9, AlchemicalWizardry.instance, 128, 5, true); - EntityRegistry.registerModEntity(EntityEnergyBazookaMainProjectile.class, "energyBazookaMain", 10, AlchemicalWizardry.instance, 128, 3, true); - EntityRegistry.registerModEntity(EntityEnergyBazookaSecondaryProjectile.class, "energyBazookaSecondary", 11, AlchemicalWizardry.instance, 128, 3, true); - EntityRegistry.registerModEntity(EntityBloodLightProjectile.class, "bloodLightProjectile", 12, AlchemicalWizardry.instance, 128, 3, true); - EntityRegistry.registerModEntity(EntityMeteor.class, "meteor", 13, AlchemicalWizardry.instance, 120, 3, true); - EntityRegistry.registerModEntity(EntitySpellProjectile.class, "spellProjectile", 14, AlchemicalWizardry.instance, 128, 3, true); - EntityRegistry.registerModEntity(EntityParticleBeam.class, "particleBeam", 15, AlchemicalWizardry.instance, 120, 3, true); - EntityRegistry.registerModEntity(MailOrderEntityItem.class, "catalogueEntityItem", 16, AlchemicalWizardry.instance, 120, 3, true); - EntityRegistry.registerModEntity(BookEntityItem.class, "bookEntityItem", 17, AlchemicalWizardry.instance, 120, 3, true); - } - - public void initRendering() {} -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/CoordAndRange.java b/src/main/java/WayofTime/alchemicalWizardry/common/CoordAndRange.java deleted file mode 100644 index a388a048..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/CoordAndRange.java +++ /dev/null @@ -1,37 +0,0 @@ -package WayofTime.alchemicalWizardry.common; - -import net.minecraft.util.BlockPos; - -public class CoordAndRange -{ - public int xCoord; - public int yCoord; - public int zCoord; - public int horizRadius; - public int vertRadius; - - public CoordAndRange(BlockPos pos, int horiz, int vert) - { - this(pos.getX(), pos.getY(), pos.getZ(), horiz, vert); - } - - public CoordAndRange(int x, int y, int z, int horiz, int vert) - { - this.xCoord = x; - this.yCoord = y; - this.zCoord = z; - this.horizRadius = horiz; - this.vertRadius = vert; - } - - public BlockPos getPos() - { - return new BlockPos(xCoord, yCoord, zCoord); - } - - @Override - public boolean equals(Object o) - { - return o instanceof CoordAndRange ? ((CoordAndRange) o).xCoord == this.xCoord && ((CoordAndRange) o).yCoord == this.yCoord && ((CoordAndRange) o).zCoord == this.zCoord && ((CoordAndRange) o).horizRadius == this.horizRadius && ((CoordAndRange) o).vertRadius == this.vertRadius : false; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/EntityAITargetAggro.java b/src/main/java/WayofTime/alchemicalWizardry/common/EntityAITargetAggro.java deleted file mode 100644 index 1396e5ae..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/EntityAITargetAggro.java +++ /dev/null @@ -1,24 +0,0 @@ -package WayofTime.alchemicalWizardry.common; - -import WayofTime.alchemicalWizardry.common.entity.mob.EntityDemon; -import net.minecraft.entity.ai.EntityAINearestAttackableTarget; - -public class EntityAITargetAggro extends EntityAINearestAttackableTarget -{ - private EntityDemon theCreature; - - public EntityAITargetAggro(EntityDemon par1EntityDemon, Class par2Class, int par3, boolean par4) - { - super(par1EntityDemon, par2Class, par4); - this.theCreature = par1EntityDemon; - } - - /** - * Returns whether the EntityAIBase should begin execution. - */ - @Override - public boolean shouldExecute() - { - return theCreature.isAggro() && super.shouldExecute(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/EntityAITargetAggroCloaking.java b/src/main/java/WayofTime/alchemicalWizardry/common/EntityAITargetAggroCloaking.java deleted file mode 100644 index 53de1ddd..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/EntityAITargetAggroCloaking.java +++ /dev/null @@ -1,29 +0,0 @@ -package WayofTime.alchemicalWizardry.common; - -import net.minecraft.entity.EntityLivingBase; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityDemon; - -public class EntityAITargetAggroCloaking extends EntityAITargetAggro -{ - int cloakLevel; //Level of cloaking that the owner demon is fooled by - public EntityAITargetAggroCloaking(EntityDemon par1EntityDemon, Class par2Class, int par3, boolean par4, int cloak) - { - super(par1EntityDemon, par2Class, par3, par4); - this.cloakLevel = cloak; - } - - @Override - public boolean shouldExecute() - { - EntityLivingBase target = this.taskOwner.getAITarget(); - boolean cloakActive = false; - - if(target != null && target.isPotionActive(AlchemicalWizardry.customPotionBoost.id)) - { - cloakActive = target.getActivePotionEffect(AlchemicalWizardry.customPotionBoost).getAmplifier() >= cloakLevel; - } - - return !cloakActive && super.shouldExecute(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/IBindingAgent.java b/src/main/java/WayofTime/alchemicalWizardry/common/IBindingAgent.java deleted file mode 100644 index f2dcdc7d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/IBindingAgent.java +++ /dev/null @@ -1,6 +0,0 @@ -package WayofTime.alchemicalWizardry.common; - -public interface IBindingAgent -{ - float getSuccessRateForPotionNumber(int potionEffects); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/ICatalyst.java b/src/main/java/WayofTime/alchemicalWizardry/common/ICatalyst.java deleted file mode 100644 index c3677580..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/ICatalyst.java +++ /dev/null @@ -1,8 +0,0 @@ -package WayofTime.alchemicalWizardry.common; - -public interface ICatalyst -{ - int getCatalystLevel(); - - boolean isConcentration(); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/IDemon.java b/src/main/java/WayofTime/alchemicalWizardry/common/IDemon.java deleted file mode 100644 index e1d9cfdd..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/IDemon.java +++ /dev/null @@ -1,14 +0,0 @@ -package WayofTime.alchemicalWizardry.common; - -public interface IDemon -{ - void setSummonedConditions(); - - boolean isAggro(); - - void setAggro(boolean aggro); - - boolean getDoesDropCrystal(); - - void setDropCrystal(boolean crystal); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/IFillingAgent.java b/src/main/java/WayofTime/alchemicalWizardry/common/IFillingAgent.java deleted file mode 100644 index df415cbf..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/IFillingAgent.java +++ /dev/null @@ -1,6 +0,0 @@ -package WayofTime.alchemicalWizardry.common; - -public interface IFillingAgent -{ - int getFilledAmountForPotionNumber(int potionEffects); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/ItemType.java b/src/main/java/WayofTime/alchemicalWizardry/common/ItemType.java deleted file mode 100644 index 9ec2079b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/ItemType.java +++ /dev/null @@ -1,93 +0,0 @@ -package WayofTime.alchemicalWizardry.common; - -import java.util.Objects; - -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -/** - * Represents an item together with metadata and NBT tag. - * - * @author ljfa-ag - */ -public class ItemType -{ - public final Item item; - public final int meta; - public final NBTTagCompound nbtTag; - - public ItemType(Item item, int meta, NBTTagCompound nbtTag) - { - this.item = Objects.requireNonNull(item); - this.meta = meta; - this.nbtTag = nbtTag; - } - - public ItemType(Item item, int meta) - { - this(item, meta, null); - } - - public ItemType(Item item) - { - this(item, 0, null); - } - - public ItemType(Block block, int meta, NBTTagCompound nbtTag) - { - this(Item.getItemFromBlock(block), meta, nbtTag); - } - - public ItemType(Block block, int meta) - { - this(block, meta, null); - } - - public ItemType(Block block) - { - this(block, 0, null); - } - - public ItemStack createStack(int count) - { - ItemStack result = new ItemStack(item, count, meta); - result.setTagCompound(nbtTag); - return result; - } - - @Override - public boolean equals(Object obj) - { - if (this == obj) - return true; - if (obj == null || getClass() != obj.getClass()) - return false; - ItemType other = (ItemType) obj; - return item == other.item && meta == other.meta && Objects.equals(nbtTag, other.nbtTag); - } - - @Override - public int hashCode() - { - final int prime = 31; - int result = 1; - result = prime * result + item.hashCode(); - result = prime * result + meta; - result = prime * result + ((nbtTag == null) ? 0 : nbtTag.hashCode()); - return result; - } - - @Override - public String toString() - { - return item.getUnlocalizedName() + "@" + meta; - } - - public static ItemType fromStack(ItemStack stack) - { - return new ItemType(stack.getItem(), stack.getItemDamage(), stack.getTagCompound()); - } - -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/LifeBucketHandler.java b/src/main/java/WayofTime/alchemicalWizardry/common/LifeBucketHandler.java deleted file mode 100644 index fada6f98..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/LifeBucketHandler.java +++ /dev/null @@ -1,44 +0,0 @@ -package WayofTime.alchemicalWizardry.common; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.item.ItemStack; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import net.minecraftforge.event.entity.player.FillBucketEvent; -import net.minecraftforge.fml.common.eventhandler.Event.Result; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.ModItems; - -public class LifeBucketHandler -{ - @SubscribeEvent - public void onBucketFill(FillBucketEvent event) - { - ItemStack result = fillCustomBucket(event.world, event.target); - - if (result == null) - { - return; - } - - event.result = result; - event.setResult(Result.ALLOW); - } - - public ItemStack fillCustomBucket(World world, MovingObjectPosition pos) - { - IBlockState state = world.getBlockState(pos.func_178782_a()); - Block block = state.getBlock(); - - if (block != null && (block.equals(ModBlocks.blockLifeEssence)) && block.getMetaFromState(state) == 0) - { - world.setBlockToAir(pos.func_178782_a()); - return new ItemStack(ModItems.bucketLife); - } else - { - return null; - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/LifeEssence.java b/src/main/java/WayofTime/alchemicalWizardry/common/LifeEssence.java deleted file mode 100644 index fdc69542..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/LifeEssence.java +++ /dev/null @@ -1,25 +0,0 @@ -package WayofTime.alchemicalWizardry.common; - -import net.minecraftforge.fluids.Fluid; - -public class LifeEssence extends Fluid -{ - public LifeEssence(String fluidName) - { - super(fluidName); - this.setDensity(2000); - this.setViscosity(2000); - } - - @Override - public int getColor() - { - return 0xEEEEEE; - } - - @Override - public String getLocalizedName() - { - return "Life Essence"; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/MessageKeyPressed.java b/src/main/java/WayofTime/alchemicalWizardry/common/MessageKeyPressed.java deleted file mode 100644 index 055f91ff..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/MessageKeyPressed.java +++ /dev/null @@ -1,67 +0,0 @@ -package WayofTime.alchemicalWizardry.common; - -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; -import WayofTime.alchemicalWizardry.common.items.armour.OmegaArmour; - -public class MessageKeyPressed implements IMessage, IMessageHandler -{ - private byte keyPressed; - - public MessageKeyPressed() - { - } - - public MessageKeyPressed(Key key) - { - if (key == Key.OMEGA_ACTIVE) - { - this.keyPressed = (byte) Key.OMEGA_ACTIVE.ordinal(); - } - } - - @Override - public void fromBytes(ByteBuf buf) - { - this.keyPressed = buf.readByte(); - } - - @Override - public void toBytes(ByteBuf buf) - { - buf.writeByte(keyPressed); - } - - @Override - public IMessage onMessage(MessageKeyPressed message, MessageContext ctx) - { - EntityPlayer entityPlayer = ctx.getServerHandler().playerEntity; - - if(message.keyPressed == Key.OMEGA_ACTIVE.ordinal()) - { - if(entityPlayer != null) - { - ItemStack[] armourInventory = entityPlayer.inventory.armorInventory; - if(armourInventory[2] != null) - { - ItemStack chestStack = armourInventory[2]; - if(chestStack.getItem() instanceof OmegaArmour) - { - ((OmegaArmour)chestStack.getItem()).onOmegaKeyPressed(entityPlayer, chestStack); - } - } - } - } - - return null; - } - - public enum Key - { - OMEGA_ACTIVE - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/ModLivingDropsEvent.java b/src/main/java/WayofTime/alchemicalWizardry/common/ModLivingDropsEvent.java deleted file mode 100644 index 185c1584..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/ModLivingDropsEvent.java +++ /dev/null @@ -1,36 +0,0 @@ -package WayofTime.alchemicalWizardry.common; - -import net.minecraft.entity.passive.EntityAnimal; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraftforge.event.entity.living.LivingDropsEvent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import WayofTime.alchemicalWizardry.ModItems; - -public class ModLivingDropsEvent -{ - public static double rand; - - @SubscribeEvent - public void onEntityDrop(LivingDropsEvent event) - { - if (event.source.getDamageType().equals("player")) - { - rand = Math.random(); - - if (!(event.entityLiving instanceof EntityAnimal)) - { - PotionEffect effect = event.entityLiving.getActivePotionEffect(Potion.weakness); - - if (effect != null) - { - if (effect.getAmplifier() >= 2) - if (rand < 0.50d) - { - event.entityLiving.dropItem(ModItems.weakBloodShard, 1); - } - } - } - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/NewPacketHandler.java b/src/main/java/WayofTime/alchemicalWizardry/common/NewPacketHandler.java deleted file mode 100644 index f11a4853..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/NewPacketHandler.java +++ /dev/null @@ -1,1100 +0,0 @@ -package WayofTime.alchemicalWizardry.common; - -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelFutureListener; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.SimpleChannelInboundHandler; - -import java.util.EnumMap; -import java.util.LinkedList; -import java.util.List; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.network.Packet; -import net.minecraft.network.PacketBuffer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.FMLCommonHandler; -import net.minecraftforge.fml.common.network.FMLEmbeddedChannel; -import net.minecraftforge.fml.common.network.FMLIndexedMessageToMessageCodec; -import net.minecraftforge.fml.common.network.FMLOutboundHandler; -import net.minecraftforge.fml.common.network.NetworkRegistry; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.ColourAndCoords; -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.spell.APISpellHelper; -import WayofTime.alchemicalWizardry.common.tileEntity.TEAltar; -import WayofTime.alchemicalWizardry.common.tileEntity.TEMasterStone; -import WayofTime.alchemicalWizardry.common.tileEntity.TEOrientable; -import WayofTime.alchemicalWizardry.common.tileEntity.TEPedestal; -import WayofTime.alchemicalWizardry.common.tileEntity.TEPlinth; -import WayofTime.alchemicalWizardry.common.tileEntity.TEReagentConduit; -import WayofTime.alchemicalWizardry.common.tileEntity.TESocket; -import WayofTime.alchemicalWizardry.common.tileEntity.TETeleposer; -import WayofTime.alchemicalWizardry.common.tileEntity.TEChemistrySet; - -public enum NewPacketHandler -{ - INSTANCE; - - private EnumMap channels; - - NewPacketHandler() - { - this.channels = NetworkRegistry.INSTANCE.newChannel("BloodMagic", new TEAltarCodec()); - if (FMLCommonHandler.instance().getSide() == Side.CLIENT) - { - addClientHandler(); - } - if(FMLCommonHandler.instance().getSide() == Side.SERVER) - { - System.out.println("Server sided~"); - addServerHandler(); - } - } - - @SideOnly(Side.CLIENT) - private void addClientHandler() - { - FMLEmbeddedChannel clientChannel = this.channels.get(Side.CLIENT); - - String tileAltarCodec = clientChannel.findChannelHandlerNameForType(TEAltarCodec.class); - clientChannel.pipeline().addAfter(tileAltarCodec, "TEAltarHandler", new TEAltarMessageHandler()); - clientChannel.pipeline().addAfter(tileAltarCodec, "TEOrientableHandler", new TEOrientableMessageHandler()); - clientChannel.pipeline().addAfter(tileAltarCodec, "TEPedestalHandler", new TEPedestalMessageHandler()); - clientChannel.pipeline().addAfter(tileAltarCodec, "TEPlinthHandler", new TEPlinthMessageHandler()); - clientChannel.pipeline().addAfter(tileAltarCodec, "TESocketHandler", new TESocketMessageHandler()); - clientChannel.pipeline().addAfter(tileAltarCodec, "TETeleposerHandler", new TETeleposerMessageHandler()); - clientChannel.pipeline().addAfter(tileAltarCodec, "TEWritingTableHandler", new TEWritingTableMessageHandler()); - clientChannel.pipeline().addAfter(tileAltarCodec, "ParticleHandler", new ParticleMessageHandler()); - clientChannel.pipeline().addAfter(tileAltarCodec, "VelocityHandler", new VelocityMessageHandler()); - clientChannel.pipeline().addAfter(tileAltarCodec, "TEMasterStoneHandler", new TEMasterStoneMessageHandler()); - clientChannel.pipeline().addAfter(tileAltarCodec, "TEReagentConduitHandler", new TEReagentConduitMessageHandler()); - clientChannel.pipeline().addAfter(tileAltarCodec, "CurrentLPMessageHandler", new CurrentLPMessageHandler()); - clientChannel.pipeline().addAfter(tileAltarCodec, "CurrentReagentBarMessageHandler", new CurrentReagentBarMessageHandler()); - clientChannel.pipeline().addAfter(tileAltarCodec, "CurrentAddedHPMessageHandler", new CurrentAddedHPMessageHandler()); - } - - @SideOnly(Side.SERVER) - private void addServerHandler() - { - FMLEmbeddedChannel serverChannel = this.channels.get(Side.SERVER); - - String messageCodec = serverChannel.findChannelHandlerNameForType(TEAltarCodec.class); - serverChannel.pipeline().addAfter(messageCodec, "KeyboardMessageHandler", new KeyboardMessageHandler()); - } - - private static class TEAltarMessageHandler extends SimpleChannelInboundHandler - { - @Override - protected void channelRead0(ChannelHandlerContext ctx, TEAltarMessage msg) throws Exception - { - World world = AlchemicalWizardry.proxy.getClientWorld(); - TileEntity te = world.getTileEntity(msg.pos); - if (te instanceof TEAltar) - { - TEAltar altar = (TEAltar) te; - - altar.handlePacketData(msg.items, msg.fluids, msg.capacity); - } - } - } - - private static class TEOrientableMessageHandler extends SimpleChannelInboundHandler - { - @Override - protected void channelRead0(ChannelHandlerContext ctx, TEOrientableMessage msg) throws Exception - { - World world = AlchemicalWizardry.proxy.getClientWorld(); - TileEntity te = world.getTileEntity(msg.pos); - if (te instanceof TEOrientable) - { - ((TEOrientable) te).setInputDirection(EnumFacing.getFront(msg.input)); - ((TEOrientable) te).setOutputDirection(EnumFacing.getFront(msg.output)); - } - } - } - - private static class TEPedestalMessageHandler extends SimpleChannelInboundHandler - { - @Override - protected void channelRead0(ChannelHandlerContext ctx, TEPedestalMessage msg) throws Exception - { - World world = AlchemicalWizardry.proxy.getClientWorld(); - TileEntity te = world.getTileEntity(msg.pos); - if (te instanceof TEPedestal) - { - TEPedestal pedestal = (TEPedestal) te; - - pedestal.handlePacketData(msg.items); - } - } - } - - private static class TEPlinthMessageHandler extends SimpleChannelInboundHandler - { - @Override - protected void channelRead0(ChannelHandlerContext ctx, TEPlinthMessage msg) throws Exception - { - World world = AlchemicalWizardry.proxy.getClientWorld(); - TileEntity te = world.getTileEntity(msg.pos); - if (te instanceof TEPlinth) - { - TEPlinth Plinth = (TEPlinth) te; - - Plinth.handlePacketData(msg.items); - } - } - } - - private static class TESocketMessageHandler extends SimpleChannelInboundHandler - { - @Override - protected void channelRead0(ChannelHandlerContext ctx, TESocketMessage msg) throws Exception - { - World world = AlchemicalWizardry.proxy.getClientWorld(); - TileEntity te = world.getTileEntity(msg.pos); - if (te instanceof TESocket) - { - TESocket Socket = (TESocket) te; - - Socket.handlePacketData(msg.items); - } - } - } - - private static class TETeleposerMessageHandler extends SimpleChannelInboundHandler - { - @Override - protected void channelRead0(ChannelHandlerContext ctx, TETeleposerMessage msg) throws Exception - { - World world = AlchemicalWizardry.proxy.getClientWorld(); - TileEntity te = world.getTileEntity(msg.pos); - if (te instanceof TETeleposer) - { - TETeleposer Teleposer = (TETeleposer) te; - - Teleposer.handlePacketData(msg.items); - } - } - } - - private static class TEWritingTableMessageHandler extends SimpleChannelInboundHandler - { - @Override - protected void channelRead0(ChannelHandlerContext ctx, TEWritingTableMessage msg) throws Exception - { - World world = AlchemicalWizardry.proxy.getClientWorld(); - TileEntity te = world.getTileEntity(msg.pos); - if (te instanceof TEChemistrySet) - { - TEChemistrySet WritingTable = (TEChemistrySet) te; - - WritingTable.handlePacketData(msg.items); - } - } - } - - private static class ParticleMessageHandler extends SimpleChannelInboundHandler - { - @Override - protected void channelRead0(ChannelHandlerContext ctx, ParticleMessage msg) throws Exception - { - World world = AlchemicalWizardry.proxy.getClientWorld(); - - world.spawnParticle(EnumParticleTypes.func_179342_a(msg.particle), msg.xCoord, msg.yCoord, msg.zCoord, msg.xVel, msg.yVel, msg.zVel); - } - } - - private static class VelocityMessageHandler extends SimpleChannelInboundHandler - { - @Override - protected void channelRead0(ChannelHandlerContext ctx, VelocityMessage msg) throws Exception - { - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - - if (player != null) - { - player.motionX = msg.xVel; - player.motionY = msg.yVel; - player.motionZ = msg.zVel; - } - } - } - - private static class TEMasterStoneMessageHandler extends SimpleChannelInboundHandler - { - @Override - protected void channelRead0(ChannelHandlerContext ctx, TEMasterStoneMessage msg) throws Exception - { - World world = AlchemicalWizardry.proxy.getClientWorld(); - TileEntity te = world.getTileEntity(msg.pos); - if (te instanceof TEMasterStone) - { - TEMasterStone masterStone = (TEMasterStone) te; - - masterStone.setCurrentRitual(msg.ritual); - masterStone.isRunning = msg.isRunning; - } - } - } - - private static class TEReagentConduitMessageHandler extends SimpleChannelInboundHandler - { - @Override - protected void channelRead0(ChannelHandlerContext ctx, TEReagentConduitMessage msg) throws Exception - { - World world = AlchemicalWizardry.proxy.getClientWorld(); - TileEntity te = world.getTileEntity(msg.pos); - if (te instanceof TEReagentConduit) - { - TEReagentConduit reagentConduit = (TEReagentConduit) te; - - reagentConduit.destinationList = msg.destinationList; - } - } - } - - private static class CurrentLPMessageHandler extends SimpleChannelInboundHandler - { - @Override - protected void channelRead0(ChannelHandlerContext ctx, CurrentLPMessage msg) throws Exception - { - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - - APISpellHelper.setPlayerLPTag(player, msg.currentLP); - APISpellHelper.setPlayerMaxLPTag(player, msg.maxLP); - } - } - - private static class CurrentReagentBarMessageHandler extends SimpleChannelInboundHandler - { - @Override - protected void channelRead0(ChannelHandlerContext ctx, CurrentReagentBarMessage msg) throws Exception - { - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - - APISpellHelper.setPlayerReagentType(player, msg.reagent); - APISpellHelper.setPlayerCurrentReagentAmount(player, msg.currentAR); - APISpellHelper.setPlayerMaxReagentAmount(player, msg.maxAR); - } - } - - private static class CurrentAddedHPMessageHandler extends SimpleChannelInboundHandler - { - @Override - protected void channelRead0(ChannelHandlerContext ctx, CurrentAddedHPMessage msg) throws Exception - { - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - - APISpellHelper.setCurrentAdditionalHP(player, msg.currentHP); - APISpellHelper.setCurrentAdditionalMaxHP(player, msg.maxHP); - } - } - - private static class KeyboardMessageHandler extends SimpleChannelInboundHandler - { - public KeyboardMessageHandler() - { - System.out.println("I am being created"); - } - @Override - protected void channelRead0(ChannelHandlerContext ctx, KeyboardMessage msg) throws Exception - { - System.out.println("Hmmm"); - - } - } - - public static class BMMessage - { - int index; - } - - public static class TEAltarMessage extends BMMessage - { - BlockPos pos; - - int[] items; - int[] fluids; - int capacity; - } - - public static class TEOrientableMessage extends BMMessage - { - BlockPos pos; - - int input; - int output; - } - - public static class TEPedestalMessage extends BMMessage - { - BlockPos pos; - - int[] items; - } - - public static class TEPlinthMessage extends BMMessage - { - BlockPos pos; - - int[] items; - } - - public static class TESocketMessage extends BMMessage - { - BlockPos pos; - - int[] items; - } - - public static class TETeleposerMessage extends BMMessage - { - BlockPos pos; - - int[] items; - } - - public static class TEWritingTableMessage extends BMMessage - { - BlockPos pos; - - int[] items; - } - - public static class ParticleMessage extends BMMessage - { - int particle; - - double xCoord; - double yCoord; - double zCoord; - - double xVel; - double yVel; - double zVel; - } - - public static class VelocityMessage extends BMMessage - { - double xVel; - double yVel; - double zVel; - } - - public static class TEMasterStoneMessage extends BMMessage - { - BlockPos pos; - - String ritual; - boolean isRunning; - } - - public static class TEReagentConduitMessage extends BMMessage - { - BlockPos pos; - - List destinationList; - } - - public static class CurrentLPMessage extends BMMessage - { - int currentLP; - int maxLP; - } - - public static class CurrentReagentBarMessage extends BMMessage - { - String reagent; - float currentAR; - float maxAR; - } - - public static class CurrentAddedHPMessage extends BMMessage - { - float currentHP; - float maxHP; - } - - public static class KeyboardMessage extends BMMessage - { - byte keyPressed; - } - - private class ClientToServerCodec extends FMLIndexedMessageToMessageCodec - { - public ClientToServerCodec() - { - } - - @Override - public void encodeInto(ChannelHandlerContext ctx, BMMessage msg, ByteBuf target) throws Exception - { - target.writeInt(msg.index); - - -// switch(msg.index) - { - - } - } - - @Override - public void decodeInto(ChannelHandlerContext ctx, ByteBuf source, BMMessage msg) - { - int index = source.readInt(); - - System.out.println("Packet is recieved and being decoded"); - -// switch(index) - { - - } - } - } - - private class TEAltarCodec extends FMLIndexedMessageToMessageCodec - { - public TEAltarCodec() - { - addDiscriminator(0, TEAltarMessage.class); - addDiscriminator(1, TEOrientableMessage.class); - addDiscriminator(2, TEPedestalMessage.class); - addDiscriminator(3, TEPlinthMessage.class); - addDiscriminator(4, TESocketMessage.class); - addDiscriminator(5, TETeleposerMessage.class); - addDiscriminator(6, TEWritingTableMessage.class); - addDiscriminator(7, ParticleMessage.class); - addDiscriminator(8, VelocityMessage.class); - addDiscriminator(9, TEMasterStoneMessage.class); - addDiscriminator(10, TEReagentConduitMessage.class); - addDiscriminator(11, CurrentLPMessage.class); - addDiscriminator(12, CurrentReagentBarMessage.class); - addDiscriminator(13, CurrentAddedHPMessage.class); - addDiscriminator(14, KeyboardMessage.class); - } - - @Override - public void encodeInto(ChannelHandlerContext ctx, BMMessage msg, ByteBuf target) throws Exception - { - PacketBuffer newBuffer = new PacketBuffer(target); - newBuffer.writeInt(msg.index); - - switch (msg.index) - { - case 0: - newBuffer.writeBlockPos(((TEAltarMessage) msg).pos); - - newBuffer.writeBoolean(((TEAltarMessage) msg).items != null); - if (((TEAltarMessage) msg).items != null) - { - int[] items = ((TEAltarMessage) msg).items; - for (int j = 0; j < items.length; j++) - { - int i = items[j]; - newBuffer.writeInt(i); - } - } - - newBuffer.writeBoolean(((TEAltarMessage) msg).fluids != null); - if (((TEAltarMessage) msg).fluids != null) - { - int[] fluids = ((TEAltarMessage) msg).fluids; - for (int j = 0; j < fluids.length; j++) - { - int i = fluids[j]; - newBuffer.writeInt(i); - } - } - - newBuffer.writeInt(((TEAltarMessage) msg).capacity); - - break; - - case 1: - newBuffer.writeBlockPos(((TEOrientableMessage) msg).pos); - - newBuffer.writeInt(((TEOrientableMessage) msg).input); - newBuffer.writeInt(((TEOrientableMessage) msg).output); - - break; - - case 2: - newBuffer.writeBlockPos(((TEPedestalMessage) msg).pos); - - newBuffer.writeBoolean(((TEPedestalMessage) msg).items != null); - if (((TEPedestalMessage) msg).items != null) - { - int[] items = ((TEPedestalMessage) msg).items; - for (int j = 0; j < items.length; j++) - { - int i = items[j]; - newBuffer.writeInt(i); - } - } - - break; - - case 3: - newBuffer.writeBlockPos(((TEPlinthMessage) msg).pos); - - newBuffer.writeBoolean(((TEPlinthMessage) msg).items != null); - if (((TEPlinthMessage) msg).items != null) - { - int[] items = ((TEPlinthMessage) msg).items; - for (int j = 0; j < items.length; j++) - { - int i = items[j]; - newBuffer.writeInt(i); - } - } - - break; - - case 4: - newBuffer.writeBlockPos(((TESocketMessage) msg).pos); - - newBuffer.writeBoolean(((TESocketMessage) msg).items != null); - if (((TESocketMessage) msg).items != null) - { - int[] items = ((TESocketMessage) msg).items; - for (int j = 0; j < items.length; j++) - { - int i = items[j]; - newBuffer.writeInt(i); - } - } - - break; - - case 5: - newBuffer.writeBlockPos(((TETeleposerMessage) msg).pos); - - newBuffer.writeBoolean(((TETeleposerMessage) msg).items != null); - if (((TETeleposerMessage) msg).items != null) - { - int[] items = ((TETeleposerMessage) msg).items; - for (int j = 0; j < items.length; j++) - { - int i = items[j]; - newBuffer.writeInt(i); - } - } - - break; - - case 6: - newBuffer.writeBlockPos(((TEWritingTableMessage) msg).pos); - - newBuffer.writeBoolean(((TEWritingTableMessage) msg).items != null); - if (((TEWritingTableMessage) msg).items != null) - { - int[] items = ((TEWritingTableMessage) msg).items; - for (int j = 0; j < items.length; j++) - { - int i = items[j]; - newBuffer.writeInt(i); - } - } - - break; - - case 7: - newBuffer.writeInt(((ParticleMessage) msg).particle); - - newBuffer.writeDouble(((ParticleMessage) msg).xCoord); - newBuffer.writeDouble(((ParticleMessage) msg).yCoord); - newBuffer.writeDouble(((ParticleMessage) msg).zCoord); - - newBuffer.writeDouble(((ParticleMessage) msg).xVel); - newBuffer.writeDouble(((ParticleMessage) msg).yVel); - newBuffer.writeDouble(((ParticleMessage) msg).zVel); - - break; - - case 8: - newBuffer.writeDouble(((VelocityMessage) msg).xVel); - newBuffer.writeDouble(((VelocityMessage) msg).yVel); - newBuffer.writeDouble(((VelocityMessage) msg).zVel); - - break; - - case 9: - newBuffer.writeBlockPos(((TEMasterStoneMessage) msg).pos); - - String ritual = ((TEMasterStoneMessage) msg).ritual; - newBuffer.writeInt(ritual.length()); - for (int i = 0; i < ritual.length(); i++) - { - newBuffer.writeChar(ritual.charAt(i)); - } - - newBuffer.writeBoolean(((TEMasterStoneMessage) msg).isRunning); - - break; - - case 10: - newBuffer.writeBlockPos(((TEReagentConduitMessage) msg).pos); - - List list = ((TEReagentConduitMessage) msg).destinationList; - newBuffer.writeInt(list.size()); - - for (ColourAndCoords colourSet : list) - { - newBuffer.writeInt(colourSet.colourRed); - newBuffer.writeInt(colourSet.colourGreen); - newBuffer.writeInt(colourSet.colourBlue); - newBuffer.writeInt(colourSet.colourIntensity); - newBuffer.writeInt(colourSet.xCoord); - newBuffer.writeInt(colourSet.yCoord); - newBuffer.writeInt(colourSet.zCoord); - } - - break; - - case 11: - newBuffer.writeInt(((CurrentLPMessage) msg).currentLP); - newBuffer.writeInt(((CurrentLPMessage) msg).maxLP); - - break; - - case 12: - char[] charSet = ((CurrentReagentBarMessage)msg).reagent.toCharArray(); - newBuffer.writeInt(charSet.length); - for(char cha : charSet) - { - newBuffer.writeChar(cha); - } - newBuffer.writeFloat(((CurrentReagentBarMessage)msg).currentAR); - newBuffer.writeFloat(((CurrentReagentBarMessage)msg).maxAR); - - break; - - case 13: - newBuffer.writeFloat(((CurrentAddedHPMessage) msg).currentHP); - newBuffer.writeFloat(((CurrentAddedHPMessage) msg).maxHP); - - break; - - case 14: - System.out.println("Packet is being encoded"); - - newBuffer.writeByte(((KeyboardMessage)msg).keyPressed); - break; - } - } - - - @Override - public void decodeInto(ChannelHandlerContext ctx, ByteBuf dat, BMMessage msg) - { - PacketBuffer newBuffer = new PacketBuffer(dat); - int index = newBuffer.readInt(); - - switch (index) - { - case 0: - ((TEAltarMessage) msg).pos = newBuffer.readBlockPos(); - boolean hasStacks = newBuffer.readBoolean(); - - ((TEAltarMessage) msg).items = new int[TEAltar.sizeInv * 3]; - if (hasStacks) - { - ((TEAltarMessage) msg).items = new int[TEAltar.sizeInv * 3]; - for (int i = 0; i < ((TEAltarMessage) msg).items.length; i++) - { - ((TEAltarMessage) msg).items[i] = newBuffer.readInt(); - } - } - - boolean hasFluids = newBuffer.readBoolean(); - ((TEAltarMessage) msg).fluids = new int[6]; - if (hasFluids) - for (int i = 0; i < ((TEAltarMessage) msg).fluids.length; i++) - { - ((TEAltarMessage) msg).fluids[i] = newBuffer.readInt(); - } - - ((TEAltarMessage) msg).capacity = newBuffer.readInt(); - - break; - - case 1: - ((TEOrientableMessage) msg).pos = newBuffer.readBlockPos(); - - ((TEOrientableMessage) msg).input = newBuffer.readInt(); - ((TEOrientableMessage) msg).output = newBuffer.readInt(); - - break; - - case 2: - ((TEPedestalMessage) msg).pos = newBuffer.readBlockPos(); - - boolean hasStacks1 = newBuffer.readBoolean(); - - ((TEPedestalMessage) msg).items = new int[TEPedestal.sizeInv * 3]; - if (hasStacks1) - { - ((TEPedestalMessage) msg).items = new int[TEPedestal.sizeInv * 3]; - for (int i = 0; i < ((TEPedestalMessage) msg).items.length; i++) - { - ((TEPedestalMessage) msg).items[i] = newBuffer.readInt(); - } - } - - break; - - case 3: - ((TEPlinthMessage) msg).pos = newBuffer.readBlockPos(); - - boolean hasStacks2 = newBuffer.readBoolean(); - - ((TEPlinthMessage) msg).items = new int[TEPlinth.sizeInv * 3]; - if (hasStacks2) - { - ((TEPlinthMessage) msg).items = new int[TEPlinth.sizeInv * 3]; - for (int i = 0; i < ((TEPlinthMessage) msg).items.length; i++) - { - ((TEPlinthMessage) msg).items[i] = newBuffer.readInt(); - } - } - - break; - - case 4: - ((TESocketMessage) msg).pos = newBuffer.readBlockPos(); - - boolean hasStacks3 = newBuffer.readBoolean(); - - ((TESocketMessage) msg).items = new int[TESocket.sizeInv * 3]; - if (hasStacks3) - { - ((TESocketMessage) msg).items = new int[TESocket.sizeInv * 3]; - for (int i = 0; i < ((TESocketMessage) msg).items.length; i++) - { - ((TESocketMessage) msg).items[i] = newBuffer.readInt(); - } - } - - break; - - case 5: - ((TETeleposerMessage) msg).pos = newBuffer.readBlockPos(); - - boolean hasStacks4 = newBuffer.readBoolean(); - - ((TETeleposerMessage) msg).items = new int[TETeleposer.sizeInv * 3]; - if (hasStacks4) - { - ((TETeleposerMessage) msg).items = new int[TETeleposer.sizeInv * 3]; - for (int i = 0; i < ((TETeleposerMessage) msg).items.length; i++) - { - ((TETeleposerMessage) msg).items[i] = newBuffer.readInt(); - } - } - - break; - - case 6: - ((TEWritingTableMessage) msg).pos = newBuffer.readBlockPos(); - - boolean hasStacks5 = newBuffer.readBoolean(); - - ((TEWritingTableMessage) msg).items = new int[TEChemistrySet.sizeInv * 3]; - if (hasStacks5) - { - ((TEWritingTableMessage) msg).items = new int[TEChemistrySet.sizeInv * 3]; - for (int i = 0; i < ((TEWritingTableMessage) msg).items.length; i++) - { - ((TEWritingTableMessage) msg).items[i] = newBuffer.readInt(); - } - } - - break; - - case 7: - ((ParticleMessage) msg).particle = newBuffer.readInt(); - - ((ParticleMessage) msg).xCoord = newBuffer.readDouble(); - ((ParticleMessage) msg).yCoord = newBuffer.readDouble(); - ((ParticleMessage) msg).zCoord = newBuffer.readDouble(); - - ((ParticleMessage) msg).xVel = newBuffer.readDouble(); - ((ParticleMessage) msg).yVel = newBuffer.readDouble(); - ((ParticleMessage) msg).zVel = newBuffer.readDouble(); - - break; - - case 8: - ((VelocityMessage) msg).xVel = newBuffer.readDouble(); - ((VelocityMessage) msg).yVel = newBuffer.readDouble(); - ((VelocityMessage) msg).zVel = newBuffer.readDouble(); - - break; - - case 9: - ((TEMasterStoneMessage) msg).pos = newBuffer.readBlockPos(); - - int ritualStrSize = newBuffer.readInt(); - String ritual = ""; - - for (int i = 0; i < ritualStrSize; i++) - { - ritual = ritual + newBuffer.readChar(); - } - - ((TEMasterStoneMessage) msg).ritual = ritual; - ((TEMasterStoneMessage) msg).isRunning = newBuffer.readBoolean(); - - break; - - case 10: - ((TEReagentConduitMessage) msg).pos = newBuffer.readBlockPos(); - - int listSize = newBuffer.readInt(); - - List list = new LinkedList(); - - for (int i = 0; i < listSize; i++) - { - list.add(new ColourAndCoords(newBuffer.readInt(), newBuffer.readInt(), newBuffer.readInt(), newBuffer.readInt(), newBuffer.readInt(), newBuffer.readInt(), newBuffer.readInt())); - } - - ((TEReagentConduitMessage) msg).destinationList = list; - - break; - - case 11: - ((CurrentLPMessage) msg).currentLP = newBuffer.readInt(); - ((CurrentLPMessage) msg).maxLP = newBuffer.readInt(); - - break; - - case 12: - int size1 = newBuffer.readInt(); - String str1 = ""; - for(int i=0; i achievements = new ArrayList(); - - public AchievementsMod(String name, int x, int y, ItemStack icon, Achievement parent) - { - super("achievement.alchemicalwizardry:" + name, "alchemicalwizardry:" + name, x, y, icon, parent); - achievements.add(this); - registerStat(); - } - - public AchievementsMod(String name, int x, int y, Item icon, Achievement parent) - { - this(name, x, y, new ItemStack(icon), parent); - } - - public AchievementsMod(String name, int x, int y, Block icon, Achievement parent) - { - this(name, x, y, new ItemStack(icon), parent); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/AchievementsRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/common/achievements/AchievementsRegistry.java deleted file mode 100644 index cd5f27b5..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/AchievementsRegistry.java +++ /dev/null @@ -1,49 +0,0 @@ -package WayofTime.alchemicalWizardry.common.achievements; - -import WayofTime.alchemicalWizardry.ModItems; -import net.minecraft.item.Item; -import net.minecraft.block.Block; -import net.minecraft.stats.Achievement; - -import java.util.ArrayList; -import java.util.List; - -public class AchievementsRegistry -{ - public final static List craftinglist = new ArrayList(); - public final static List pickupList = new ArrayList(); - - public static void init() - { - addItemsToCraftingList(); - addItemsToPickupList(); - } - - public static void addItemsToCraftingList() - { - craftinglist.add(ModItems.sacrificialDagger); - } - - public static void addItemsToPickupList() - { - pickupList.add(ModItems.weakBloodOrb); - } - - public static Achievement getAchievementForItem(Item item) - { - if (item == ModItems.sacrificialDagger) - { - return ModAchievements.firstPrick; - } - if (item == ModItems.weakBloodOrb) - { - return ModAchievements.weakOrb; - } - return null; - } - - public static Achievement getAchievementForBlock(Block block) - { - return null; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/ICraftAchievement.java b/src/main/java/WayofTime/alchemicalWizardry/common/achievements/ICraftAchievement.java deleted file mode 100644 index 47006462..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/ICraftAchievement.java +++ /dev/null @@ -1,11 +0,0 @@ -package WayofTime.alchemicalWizardry.common.achievements; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.stats.Achievement; - -public interface ICraftAchievement -{ - Achievement getAchievementOnCraft(ItemStack stack, EntityPlayer player, IInventory matrix); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/IPickupAchievement.java b/src/main/java/WayofTime/alchemicalWizardry/common/achievements/IPickupAchievement.java deleted file mode 100644 index 3d2a7351..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/IPickupAchievement.java +++ /dev/null @@ -1,11 +0,0 @@ -package WayofTime.alchemicalWizardry.common.achievements; - -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.stats.Achievement; - -public interface IPickupAchievement -{ - Achievement getAchievementOnPickup(ItemStack stack, EntityPlayer player, EntityItem item); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/ModAchievements.java b/src/main/java/WayofTime/alchemicalWizardry/common/achievements/ModAchievements.java deleted file mode 100644 index ed4238ed..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/ModAchievements.java +++ /dev/null @@ -1,26 +0,0 @@ -package WayofTime.alchemicalWizardry.common.achievements; - -import net.minecraft.stats.Achievement; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.AchievementPage; -import net.minecraftforge.fml.common.FMLCommonHandler; -import WayofTime.alchemicalWizardry.ModItems; - -public class ModAchievements -{ - public static AchievementPage alchemicalWizardryPage; - - public static Achievement firstPrick; - public static Achievement weakOrb; - - public static void init() - { - firstPrick = new AchievementsMod(StatCollector.translateToLocal("firstPrick"), 0, 0, ModItems.sacrificialDagger, null); - weakOrb = new AchievementsMod(StatCollector.translateToLocal("weakOrb"), 3, 0, ModItems.weakBloodOrb, firstPrick); - - alchemicalWizardryPage = new AchievementPage("AlchemicalWizardry", AchievementsMod.achievements.toArray(new Achievement[AchievementsMod.achievements.size()])); - AchievementPage.registerAchievementPage(alchemicalWizardryPage); - AchievementsRegistry.init(); - FMLCommonHandler.instance().bus().register(new AchievementTrigger()); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/alchemy/CombinedPotionComponent.java b/src/main/java/WayofTime/alchemicalWizardry/common/alchemy/CombinedPotionComponent.java deleted file mode 100644 index 72c5d5c9..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/alchemy/CombinedPotionComponent.java +++ /dev/null @@ -1,27 +0,0 @@ -package WayofTime.alchemicalWizardry.common.alchemy; - -import net.minecraft.potion.Potion; - -public class CombinedPotionComponent -{ - public Potion result; - public Potion pot1; - public Potion pot2; - - public CombinedPotionComponent(Potion result, Potion pot1, Potion pot2) - { - this.result = result; - this.pot1 = pot1; - this.pot2 = pot2; - } - - public boolean isRecipeValid(Potion test1, Potion test2) - { - return (test1 == pot1 && test2 == pot2) || (test1 == pot2 && test2 == pot1); - } - - public boolean isRecipeValid(int test1, int test2) - { - return (test1 == pot1.id && test2 == pot2.id) || (test1 == pot2.id && test2 == pot1.id); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/alchemy/CombinedPotionRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/common/alchemy/CombinedPotionRegistry.java deleted file mode 100644 index 0c0c4618..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/alchemy/CombinedPotionRegistry.java +++ /dev/null @@ -1,182 +0,0 @@ -package WayofTime.alchemicalWizardry.common.alchemy; - -import WayofTime.alchemicalWizardry.api.alchemy.AlchemyPotionHelper; -import WayofTime.alchemicalWizardry.common.items.potion.AlchemyFlask; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; - -import java.util.ArrayList; -import java.util.List; - -public class CombinedPotionRegistry -{ - public static List potionList = new ArrayList(); - - public static void registerCombinedPotionRecipe(Potion result, Potion pot1, Potion pot2) - { - potionList.add(new CombinedPotionComponent(result, pot1, pot2)); - } - - public static boolean isRecipeValid(Potion pot1, Potion pot2) - { - for (CombinedPotionComponent recipe : potionList) - { - if (recipe.isRecipeValid(pot1, pot2)) - { - return true; - } - } - - return false; - } - - public static boolean isRecipeValid(int pot1, int pot2) - { - for (CombinedPotionComponent recipe : potionList) - { - if (recipe.isRecipeValid(pot1, pot2)) - { - return true; - } - } - - return false; - } - - public static Potion getPotion(Potion pot1, Potion pot2) - { - for (CombinedPotionComponent recipe : potionList) - { - if (recipe.isRecipeValid(pot1, pot2)) - { - return recipe.result; - } - } - - return null; - } - - public static Potion getPotion(int pot1, int pot2) - { - for (CombinedPotionComponent recipe : potionList) - { - if (recipe.isRecipeValid(pot1, pot2)) - { - return recipe.result; - } - } - - return null; - } - - public static ItemStack applyPotionEffect(ItemStack stack) - { - if (stack == null || !(stack.getItem() instanceof AlchemyFlask)) - { - return null; - } - - List list = AlchemyFlask.getEffects(stack); - if (list == null) - { - return stack; - } - - boolean isDone = false; - - for (AlchemyPotionHelper helper1 : list) - { - if (isDone) - { - continue; - } - - for (int i = 0; i < list.size(); i++) - { - if (isDone) - { - continue; - } - - AlchemyPotionHelper helper2 = list.get(i); - - PotionEffect potEffect = getResultantPotion(helper1, helper2); - - if (potEffect != null) - { - AlchemyPotionHelper potHelper = new AlchemyPotionHelper(potEffect.getPotionID(), potEffect.getDuration(), 0, potEffect.getAmplifier()); - - list.remove(helper1); - list.remove(helper2); - - list.add(potHelper); - - isDone = true; - } - } - } - - if (isDone) - { - AlchemyFlask.setEffects(stack, list); - - return stack; - } - - return null; - } - - public static boolean hasCombinablePotionEffect(ItemStack stack) - { - if (stack == null || !(stack.getItem() instanceof AlchemyFlask)) - { - return false; - } - - List list = AlchemyFlask.getEffects(stack); - if (list == null) - { - return false; - } - - for (AlchemyPotionHelper helper1 : list) - { - for (AlchemyPotionHelper helper2 : list) - { - int pot1 = helper1.getPotionID(); - int pot2 = helper2.getPotionID(); - - if (isRecipeValid(pot1, pot2)) - { - return true; - } - } - } - - return false; - } - - public static PotionEffect getResultantPotion(AlchemyPotionHelper potE1, AlchemyPotionHelper potE2) - { - if (potE1 == null || potE2 == null) - { - return null; - } - - int pot1 = potE1.getPotionID(); - int pot2 = potE2.getPotionID(); - - if (isRecipeValid(pot1, pot2)) - { - int duration = (int) ((potE1.getTickDuration() * Math.pow(8.0f / 3.0f, potE1.getdurationFactor()) + potE2.getdurationFactor() * Math.pow(8.0f / 3.0f, potE2.getdurationFactor())) / 2.0); - int amplifier = (potE1.getConcentration() + potE2.getConcentration()) / 2; - - Potion pot = getPotion(pot1, pot2); - - return new PotionEffect(pot.id, duration, amplifier); - } - - return null; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/alchemy/ICombinationalCatalyst.java b/src/main/java/WayofTime/alchemicalWizardry/common/alchemy/ICombinationalCatalyst.java deleted file mode 100644 index 22d02030..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/alchemy/ICombinationalCatalyst.java +++ /dev/null @@ -1,5 +0,0 @@ -package WayofTime.alchemicalWizardry.common.alchemy; - -public interface ICombinationalCatalyst -{ -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockAlchemicalCalcinator.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockAlchemicalCalcinator.java deleted file mode 100644 index ae0548f9..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockAlchemicalCalcinator.java +++ /dev/null @@ -1,158 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import WayofTime.alchemicalWizardry.api.items.interfaces.IBloodOrb; -import WayofTime.alchemicalWizardry.api.items.interfaces.IReagentManipulator; -import WayofTime.alchemicalWizardry.common.tileEntity.TEAlchemicalCalcinator; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; - -import java.util.Random; - -public class BlockAlchemicalCalcinator extends BlockContainer -{ - public BlockAlchemicalCalcinator() - { - super(Material.rock); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) - { - return new TEAlchemicalCalcinator(); - } - - @Override - public int getRenderType() - { - return -1; - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public boolean hasTileEntity(IBlockState blockState) - { - return true; - } - - @Override - public boolean canProvidePower() - { - return true; - } - - @Override - public void breakBlock(World world, BlockPos blockPos, IBlockState blockState) - { - dropItems(world, blockPos); - super.breakBlock(world, blockPos, blockState); - } - - private void dropItems(World world, BlockPos blockPos) - { - Random rand = new Random(); - TileEntity tileEntity = world.getTileEntity(blockPos); - - if (!(tileEntity instanceof IInventory)) - { - return; - } - - IInventory inventory = (IInventory) tileEntity; - - for (int i = 0; i < inventory.getSizeInventory(); i++) - { - ItemStack item = inventory.getStackInSlot(i); - - if (item != null && item.stackSize > 0) - { - float rx = rand.nextFloat() * 0.8F + 0.1F; - float ry = rand.nextFloat() * 0.8F + 0.1F; - float rz = rand.nextFloat() * 0.8F + 0.1F; - EntityItem entityItem = new EntityItem(world, blockPos.getX() + rx, blockPos.getY() + ry, blockPos.getZ() + rz, new ItemStack(item.getItem(), item.stackSize, item.getItemDamage())); - - if (item.hasTagCompound()) - { - entityItem.getEntityItem().setTagCompound((NBTTagCompound) item.getTagCompound().copy()); - } - - float factor = 0.05F; - entityItem.motionX = rand.nextGaussian() * factor; - entityItem.motionY = rand.nextGaussian() * factor + 0.2F; - entityItem.motionZ = rand.nextGaussian() * factor; - world.spawnEntityInWorld(entityItem); - item.stackSize = 0; - } - } - } - - @Override - public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) - { - TEAlchemicalCalcinator tileEntity = (TEAlchemicalCalcinator) world.getTileEntity(blockPos); - - if (tileEntity == null || player.isSneaking()) - { - return false; - } - - ItemStack playerItem = player.getCurrentEquippedItem(); - - if (playerItem != null) - { - if (playerItem.getItem() instanceof IReagentManipulator) - { - return false; - } - - if (playerItem.getItem() instanceof IBloodOrb) - { - if (tileEntity.getStackInSlot(0) == null) - { - ItemStack newItem = playerItem.copy(); - newItem.stackSize = 1; - --playerItem.stackSize; - tileEntity.setInventorySlotContents(0, newItem); - } - } else if (tileEntity.getStackInSlot(1) == null) - { - ItemStack newItem = playerItem.copy(); - newItem.stackSize = 1; - --playerItem.stackSize; - tileEntity.setInventorySlotContents(1, newItem); - } - - } else - { - if (tileEntity.getStackInSlot(1) != null) - { - player.inventory.addItemStackToInventory(tileEntity.getStackInSlot(1)); - tileEntity.setInventorySlotContents(1, null); - } else if (tileEntity.getStackInSlot(0) != null) - { - player.inventory.addItemStackToInventory(tileEntity.getStackInSlot(0)); - tileEntity.setInventorySlotContents(0, null); - } - } - - tileEntity.getWorld().markBlockForUpdate(blockPos); - - return true; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockAltar.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockAltar.java deleted file mode 100644 index 9397611b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockAltar.java +++ /dev/null @@ -1,234 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import java.util.Random; - -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.ModItems; -import WayofTime.alchemicalWizardry.api.items.IAltarManipulator; -import WayofTime.alchemicalWizardry.common.items.Orb; -import WayofTime.alchemicalWizardry.common.items.sigil.holding.SigilOfHolding; -import WayofTime.alchemicalWizardry.common.tileEntity.TEAltar; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -public class BlockAltar extends BlockContainer -{ - public BlockAltar() - { - super(Material.rock); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - public boolean hasComparatorInputOverride() - { - return true; - } - - @Override - public int getComparatorInputOverride(World world, BlockPos blockPos) - { - TileEntity tile = world.getTileEntity(blockPos); - - if (tile instanceof TEAltar) - { - ItemStack stack = ((TEAltar) tile).getStackInSlot(0); - - if (stack != null && stack.getItem() instanceof Orb) - { - Orb bloodOrb = (Orb) stack.getItem(); - int maxEssence = bloodOrb.getMaxEssence(); - int currentEssence = bloodOrb.getCurrentEssence(stack); - int level = currentEssence * 15 / maxEssence; - return Math.min(15, level) % 16; - } - } - - return 0; - } - - @Override - public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) - { - TEAltar tileEntity = (TEAltar) world.getTileEntity(blockPos); - - if (tileEntity == null || player.isSneaking()) - { - return false; - } - - ItemStack playerItem = player.getCurrentEquippedItem(); - - if (playerItem != null) - { - if (playerItem.getItem().equals(ModItems.divinationSigil)) - { - if (player.worldObj.isRemote) - { - world.markBlockForUpdate(blockPos); - } else - { - tileEntity.sendChatInfoToPlayer(player); - } - - return true; - } else if (playerItem.getItem().equals(ModItems.itemSeerSigil)) - { - if (player.worldObj.isRemote) - { - world.markBlockForUpdate(blockPos); - } else - { - tileEntity.sendMoreChatInfoToPlayer(player); - } - - return true; - }else if(playerItem.getItem() instanceof IAltarManipulator) - { - return false; - } - else if (playerItem.getItem().equals(ModItems.sigilOfHolding)) - { - ItemStack item = SigilOfHolding.getCurrentSigil(playerItem); - - if (item != null && item.getItem().equals(ModItems.divinationSigil)) - { - if (player.worldObj.isRemote) - { - world.markBlockForUpdate(blockPos); - } else - { - tileEntity.sendChatInfoToPlayer(player); - } - - return true; - } else if (item != null && item.getItem().equals(ModItems.itemSeerSigil)) - { - if (player.worldObj.isRemote) - { - world.markBlockForUpdate(blockPos); - } else - { - tileEntity.sendMoreChatInfoToPlayer(player); - } - - return true; - } - } - } - - if (tileEntity.getStackInSlot(0) == null && playerItem != null) - { - ItemStack newItem = playerItem.copy(); - newItem.stackSize = 1; - --playerItem.stackSize; - tileEntity.setInventorySlotContents(0, newItem); - tileEntity.startCycle(); - } else if (tileEntity.getStackInSlot(0) != null && playerItem == null) - { - player.inventory.addItemStackToInventory(tileEntity.getStackInSlot(0)); - tileEntity.setInventorySlotContents(0, null); - tileEntity.setActive(); - } - world.markBlockForUpdate(blockPos); - return true; - } - - @Override - public void breakBlock(World world, BlockPos blockPos, IBlockState blockState) - { - dropItems(world, blockPos); - super.breakBlock(world, blockPos, blockState); - } - - private void dropItems(World world, BlockPos blockPos) - { - Random rand = new Random(); - TileEntity tileEntity = world.getTileEntity(blockPos); - - if (!(tileEntity instanceof IInventory)) - { - return; - } - - IInventory inventory = (IInventory) tileEntity; - - for (int i = 0; i < inventory.getSizeInventory(); i++) - { - ItemStack item = inventory.getStackInSlot(i); - - if (item != null && item.stackSize > 0) - { - float rx = rand.nextFloat() * 0.8F + 0.1F; - float ry = rand.nextFloat() * 0.8F + 0.1F; - float rz = rand.nextFloat() * 0.8F + 0.1F; - EntityItem entityItem = new EntityItem(world, blockPos.getX() + rx, blockPos.getY() + ry, blockPos.getZ() + rz, new ItemStack(item.getItem(), item.stackSize, item.getItemDamage())); - - if (item.hasTagCompound()) - { - entityItem.getEntityItem().setTagCompound((NBTTagCompound) item.getTagCompound().copy()); - } - - float factor = 0.05F; - entityItem.motionX = rand.nextGaussian() * factor; - entityItem.motionY = rand.nextGaussian() * factor + 0.2F; - entityItem.motionZ = rand.nextGaussian() * factor; - world.spawnEntityInWorld(entityItem); - item.stackSize = 0; - } - } - } - - @Override - public int getRenderType() - { - return -1; - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public boolean hasTileEntity(IBlockState blockState) - { - return true; - } - - @Override - @SideOnly(Side.CLIENT) - public void randomDisplayTick(World world, BlockPos blockPos, IBlockState blockState, Random rand) - { - TEAltar tileEntity = (TEAltar) world.getTileEntity(blockPos); - - if (!tileEntity.isActive()) - { - return; - } - - if (rand.nextInt(3) != 0) - { - return; - } - } - - @Override - public TileEntity createNewTileEntity(World var1, int var2) - { - return new TEAltar(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockArmourForge.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockArmourForge.java deleted file mode 100644 index 3a806593..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockArmourForge.java +++ /dev/null @@ -1,322 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.ModItems; -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.common.ArmourComponent; -import WayofTime.alchemicalWizardry.common.items.armour.BoundArmour; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import WayofTime.alchemicalWizardry.common.tileEntity.TESocket; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.List; - -public class BlockArmourForge extends Block -{ - public static List helmetList = new ArrayList(); - public static List plateList = new ArrayList(); - public static List leggingsList = new ArrayList(); - public static List bootsList = new ArrayList(); - - public BlockArmourForge() - { - super(Material.iron); - setHardness(2.0F); - setResistance(5.0F); - setCreativeTab(AlchemicalWizardry.tabBloodMagic); - } - - @Override - public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) - { - if (world.isRemote) - { - return false; - } - - int armourType = getArmourType(world, blockPos); - - if (armourType == -1) - { - return false; - } - - int direction = getDirectionForArmourType(world, blockPos, armourType); - - if (!isParadigmValid(armourType, direction, world, blockPos)) - { - return false; - } - - List list = null; - ItemStack armourPiece = null; - - switch (armourType) - { - case 0: - list = plateList; - armourPiece = new ItemStack(ModItems.boundChestplate, 1, 0); - break; - - case 1: - list = leggingsList; - armourPiece = new ItemStack(ModItems.boundLeggings, 1, 0); - break; - - case 2: - list = helmetList; - armourPiece = new ItemStack(ModItems.boundHelmet, 1, 0); - break; - - case 3: - list = bootsList; - armourPiece = new ItemStack(ModItems.boundBoots, 1, 0); - break; - } - - if (list == null) - { - return false; - } - - if (armourPiece == null) - { - return false; - } - - if (armourPiece.getTagCompound() == null) - { - armourPiece.setTagCompound(new NBTTagCompound()); - } - - for (ArmourComponent ac : list) - { - int xOff = ac.getXOff(); - int zOff = ac.getZOff(); - TileEntity tileEntity; - - switch (direction) - { - case 1: - tileEntity = world.getTileEntity(blockPos.add(xOff, 0, -zOff)); - break; - - case 2: - tileEntity = world.getTileEntity(blockPos.add(zOff, 0, xOff)); - break; - - case 3: - tileEntity = world.getTileEntity(blockPos.add(-xOff, 0, zOff)); - break; - - case 4: - tileEntity = world.getTileEntity(blockPos.add(-zOff, 0, -xOff)); - break; - - case 5: - tileEntity = world.getTileEntity(blockPos.add(xOff, zOff, 0)); - break; - - case 6: - tileEntity = world.getTileEntity(blockPos.add(0, zOff, xOff)); - break; - - default: - tileEntity = null; - } - - if (tileEntity instanceof TESocket) - { - ItemStack itemStack = ((TESocket) tileEntity).getStackInSlot(0); - BlockPos tilePos = tileEntity.getPos(); - ((TESocket) tileEntity).setInventorySlotContents(0, null); - world.setBlockToAir(tilePos); - - for (int i = 0; i < 8; i++) - { - SpellHelper.sendIndexedParticleToAllAround(world, tilePos, 20, world.provider.getDimensionId(), 1, tilePos); - } - - if (itemStack != null) - { - Item item = itemStack.getItem(); - - if (item instanceof ArmourUpgrade) - { - ((BoundArmour) armourPiece.getItem()).hasAddedToInventory(armourPiece, itemStack.copy()); - ((TESocket) tileEntity).setInventorySlotContents(0, null); - } - } - } - } - - if (armourPiece != null) - { - int xOff = (world.rand.nextInt(11) - 5); - int zOff = (int) (Math.sqrt(25 - xOff * xOff) * (world.rand.nextInt(2) - 0.5) * 2); - world.addWeatherEffect(new EntityLightningBolt(world, blockPos.getX() + xOff, blockPos.getY() + 5, blockPos.getZ() + zOff)); - world.spawnEntityInWorld(new EntityItem(world, blockPos.getX(), blockPos.getY() + 1, blockPos.getZ(), armourPiece)); - } - - return true; - } - - //0 for plate, 1 for leggings, 2 for helmet, 3 for boots - public int getArmourType(World world, BlockPos blockPos) - { - for (int i = 0; i <= 3; i++) - { - if (getDirectionForArmourType(world, blockPos, i) != -1) - { - return i; - } - } - - return -1; - } - - public int getDirectionForArmourType(World world, BlockPos blockPos, int armourType) - { - for (int i = 1; i <= 6; i++) - { - if (isParadigmValid(armourType, i, world, blockPos)) - { - return i; - } - } - - return -1; - } - - public boolean isParadigmValid(int armourType, int direction, World world, BlockPos blockPos) - { - List list = null; - - switch (armourType) - { - case 0: - list = plateList; - break; - - case 1: - list = leggingsList; - break; - - case 2: - list = helmetList; - break; - - case 3: - list = bootsList; - break; - } - - if (list == null) - { - return false; - } - - for (ArmourComponent ac : list) - { - int xOff = ac.getXOff(); - int zOff = ac.getZOff(); - - switch (direction) - { - case 1: - if (!(world.getTileEntity(blockPos.add(xOff, 0, -zOff)) instanceof TESocket)) - { - return false; - } - - break; - - case 2: - if (!(world.getTileEntity(blockPos.add(zOff, 0, xOff)) instanceof TESocket)) - { - return false; - } - - break; - - case 3: - if (!(world.getTileEntity(blockPos.add(-xOff, 0, zOff)) instanceof TESocket)) - { - return false; - } - - break; - - case 4: - if (!(world.getTileEntity(blockPos.add(-zOff, 0, -xOff)) instanceof TESocket)) - { - return false; - } - - break; - - case 5: - if (!(world.getTileEntity(blockPos.add(xOff, zOff, 0)) instanceof TESocket)) - { - return false; - } - - break; - - case 6: - if (!(world.getTileEntity(blockPos.add(0, zOff, xOff)) instanceof TESocket)) - { - return false; - } - - break; - - default: - return false; - } - } - - return true; - } - - public static void initializeRecipes() - { - helmetList.add(new ArmourComponent(-1, 1)); - helmetList.add(new ArmourComponent(0, 1)); - helmetList.add(new ArmourComponent(1, 1)); - helmetList.add(new ArmourComponent(-1, 0)); - helmetList.add(new ArmourComponent(1, 0)); - bootsList.add(new ArmourComponent(-1, 1)); - bootsList.add(new ArmourComponent(1, 1)); - bootsList.add(new ArmourComponent(-1, 0)); - bootsList.add(new ArmourComponent(1, 0)); - plateList.add(new ArmourComponent(-1, 0)); - plateList.add(new ArmourComponent(1, 0)); - plateList.add(new ArmourComponent(-1, -1)); - plateList.add(new ArmourComponent(0, -1)); - plateList.add(new ArmourComponent(1, -1)); - plateList.add(new ArmourComponent(-1, -2)); - plateList.add(new ArmourComponent(0, -2)); - plateList.add(new ArmourComponent(1, -2)); - leggingsList.add(new ArmourComponent(-1, 1)); - leggingsList.add(new ArmourComponent(0, 1)); - leggingsList.add(new ArmourComponent(1, 1)); - leggingsList.add(new ArmourComponent(-1, 0)); - leggingsList.add(new ArmourComponent(1, 0)); - leggingsList.add(new ArmourComponent(-1, -1)); - leggingsList.add(new ArmourComponent(1, -1)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockBelljar.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockBelljar.java deleted file mode 100644 index 6ed3c8c0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockBelljar.java +++ /dev/null @@ -1,157 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainer; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.common.tileEntity.TEBelljar; - -public class BlockBelljar extends BlockContainer -{ - public BlockBelljar() - { - super(Material.glass); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) - { - if (this.equals(ModBlocks.blockCrystalBelljar)) - { - par3List.add(new ItemStack(par1, 1, 0)); - - for(Reagent reagent : ReagentRegistry.reagentList.values()) - { - ItemStack stack = new ItemStack(par1, 1, 0); - NBTTagCompound tag = new NBTTagCompound(); - - ReagentContainer[] tanks = new ReagentContainer[1]; - tanks[0] = new ReagentContainer(reagent, 16000, 16000); - - NBTTagList tagList = new NBTTagList(); - - NBTTagCompound savedTag = new NBTTagCompound(); - if (tanks[0] != null) - { - tanks[0].writeToNBT(savedTag); - } - tagList.appendTag(savedTag); - - - tag.setTag("reagentTanks", tagList); - - stack.setTagCompound(tag); - - par3List.add(stack); - } - } else - { - super.getSubBlocks(par1, par2CreativeTabs, par3List); - } - } - - @Override - public void onBlockPlacedBy(World world, BlockPos blockPos, IBlockState blockState, EntityLivingBase entityLiving, ItemStack stack) - { - TileEntity tile = world.getTileEntity(blockPos); - - if (tile instanceof TEBelljar) - { - NBTTagCompound tag = stack.getTagCompound(); - if (tag != null) - { - ((TEBelljar) tile).readTankNBTOnPlace(tag); - } - } - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) - { - return new TEBelljar(); - } - - @Override - public int getRenderType() - { - return -1; - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public boolean hasTileEntity(IBlockState blockState) - { - return true; - } - - @Override - public boolean hasComparatorInputOverride() - { - return true; - } - - @Override - public int getComparatorInputOverride(World world, BlockPos blockPos) - { - TileEntity tile = world.getTileEntity(blockPos); - if (tile instanceof TEBelljar) - { - return ((TEBelljar) tile).getRSPowerOutput(); - } - return 15; - } - - @Override - public void onBlockHarvested(World world, BlockPos blockPos, IBlockState blockState, EntityPlayer player) - { - this.dropBlockAsItem(world, blockPos, blockState, 0); - super.onBlockHarvested(world, blockPos, blockState, player); - } - - @Override - public ArrayList getDrops(IBlockAccess world, BlockPos blockPos, IBlockState blockState, int fortune) - { - ArrayList list = new ArrayList(); - - TileEntity tile = world.getTileEntity(blockPos); - - if (tile instanceof TEBelljar) - { - ItemStack drop = new ItemStack(this); - NBTTagCompound tag = new NBTTagCompound(); - ((TEBelljar) tile).writeTankNBT(tag); - drop.setTagCompound(tag); - - list.add(drop); - } - - return list; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockBloodLightSource.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockBloodLightSource.java deleted file mode 100644 index 827fd08e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockBloodLightSource.java +++ /dev/null @@ -1,58 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import java.util.List; -import java.util.Random; - -public class BlockBloodLightSource extends Block -{ - public BlockBloodLightSource() - { - super(Material.cloth); - } - - @Override - public int getLightValue(IBlockAccess world, BlockPos blockPos) - { - return 15; - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public void randomDisplayTick(World world, BlockPos blockPos, IBlockState blockState, Random rand) - { - if (rand.nextInt(3) != 0) - { - float f = 1.0F; - float f1 = f * 0.6F + 0.4F; - float f2 = f * f * 0.7F - 0.5F; - float f3 = f * f * 0.6F - 0.7F; - world.spawnParticle(EnumParticleTypes.REDSTONE, blockPos.getX() + 0.5D + rand.nextGaussian() / 8, blockPos.getY() + 0.5D, blockPos.getZ() + 0.5D + rand.nextGaussian() / 8, f1, f2, f3); - } - } - - @Override - public void addCollisionBoxesToList(World par1World, BlockPos blockPos, IBlockState blockState, AxisAlignedBB par5AxisAlignedBB, List par6List, Entity par7Entity) - { - this.setBlockBounds(0.40F, 0.40F, 0.40F, 0.60F, 0.60F, 0.60F); - } - - public int quantityDropped(Random par1Random) - { - return 0; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockBloodRune.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockBloodRune.java deleted file mode 100644 index 7bf74a8d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockBloodRune.java +++ /dev/null @@ -1,101 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.properties.IProperty; -import net.minecraft.block.properties.PropertyInteger; -import net.minecraft.block.state.BlockState; -import net.minecraft.block.state.IBlockState; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.ModBlocks; - -public class BlockBloodRune extends Block -{ - public static final PropertyInteger INTEGER = PropertyInteger.create("rune", 0, 5); - - public BlockBloodRune() - { - super(Material.iron); - this.setDefaultState(this.blockState.getBaseState().withProperty(INTEGER, Integer.valueOf(0))); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - protected BlockState createBlockState() - { - return new BlockState(this, new IProperty[] {INTEGER}); - } - - @Override - public IBlockState getStateFromMeta(int meta) - { - return this.getDefaultState().withProperty(INTEGER, Integer.valueOf(meta)); - } - - @Override - public int getMetaFromState(IBlockState state) - { - return ((Integer)state.getValue(INTEGER)).intValue(); - } - - public int getRuneEffect(int metaData) - { - switch (metaData) - { - case 0: - return 0; - - case 1: //Altar Capacity rune - return 5; - - case 2: //Filling/emptying rune - return 6; - - case 3: //Orb Capacity rune - return 7; - - case 4: //Better Capacity rune - return 8; - - case 5: //Acceleration rune - return 9; - } - - return 0; - } - - @Override - @SideOnly(Side.CLIENT) - - /** - * returns a list of items with the same ID, but different meta (eg: dye returns 16 items) - */ - public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) - { - if (this.equals(ModBlocks.bloodRune)) - { - par3List.add(new ItemStack(par1, 1, 0)); - par3List.add(new ItemStack(par1, 1, 1)); - par3List.add(new ItemStack(par1, 1, 2)); - par3List.add(new ItemStack(par1, 1, 3)); - par3List.add(new ItemStack(par1, 1, 4)); - par3List.add(new ItemStack(par1, 1, 5)); - } else - { - super.getSubBlocks(par1, par2CreativeTabs, par3List); - } - } - - @Override - public int damageDropped(IBlockState blockState) - { - return blockState.getBlock().damageDropped(blockState); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockBloodStoneBrick.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockBloodStoneBrick.java deleted file mode 100644 index dea4dc65..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockBloodStoneBrick.java +++ /dev/null @@ -1,14 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; - -public class BlockBloodStoneBrick extends Block -{ - public BlockBloodStoneBrick() - { - super(Material.iron); - setHardness(2.0F); - setResistance(5.0F); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockChemistrySet.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockChemistrySet.java deleted file mode 100644 index 9830f182..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockChemistrySet.java +++ /dev/null @@ -1,130 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.tileEntity.TEChemistrySet; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; - -import java.util.List; -import java.util.Random; - -public class BlockChemistrySet extends BlockContainer -{ - public BlockChemistrySet() - { - super(Material.wood); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) - { - TileEntity tileEntity = world.getTileEntity(blockPos); - - if (tileEntity == null || player.isSneaking()) - { - return false; - } - - //code to open gui explained later - player.openGui(AlchemicalWizardry.instance, 0, world, blockPos.getX(), blockPos.getY(), blockPos.getZ()); - return true; - } - - @Override - public void breakBlock(World world, BlockPos blockPos, IBlockState blockState) - { - dropItems(world, blockPos); - super.breakBlock(world, blockPos, blockState); - } - - private void dropItems(World world, BlockPos blockPos) - { - Random rand = new Random(); - TileEntity tileEntity = world.getTileEntity(blockPos); - - if (!(tileEntity instanceof IInventory)) - { - return; - } - - IInventory inventory = (IInventory) tileEntity; - - for (int i = 0; i < inventory.getSizeInventory(); i++) - { - ItemStack item = inventory.getStackInSlot(i); - - if (item != null && item.stackSize > 0) - { - float rx = rand.nextFloat() * 0.8F + 0.1F; - float ry = rand.nextFloat() * 0.8F + 0.1F; - float rz = rand.nextFloat() * 0.8F + 0.1F; - EntityItem entityItem = new EntityItem(world, blockPos.getX() + rx, blockPos.getY() + ry, blockPos.getZ() + rz, new ItemStack(item.getItem(), item.stackSize, item.getItemDamage())); - - if (item.hasTagCompound()) - { - entityItem.getEntityItem().setTagCompound((NBTTagCompound) item.getTagCompound().copy()); - } - - float factor = 0.05F; - entityItem.motionX = rand.nextGaussian() * factor; - entityItem.motionY = rand.nextGaussian() * factor + 0.2F; - entityItem.motionZ = rand.nextGaussian() * factor; - world.spawnEntityInWorld(entityItem); - item.stackSize = 0; - } - } - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) - { - return new TEChemistrySet(); - } - - @Override - public int getRenderType() - { - return -1; - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public boolean hasTileEntity(IBlockState blockState) - { - return true; - } - - @Override - public void addCollisionBoxesToList(World worldIn, BlockPos pos, IBlockState state, AxisAlignedBB mask, List list, Entity collidingEntity) - { - this.setBlockBounds(0.4375F, 0.0F, 0.4375F, 0.5625F, 0.9375F, 0.5625F); - super.addCollisionBoxesToList(worldIn, pos, state, mask, list, collidingEntity); - this.setBlockBoundsForItemRender(); - super.addCollisionBoxesToList(worldIn, pos, state, mask, list, collidingEntity); - } - - @Override - public void setBlockBoundsForItemRender() - { - this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.125F, 1.0F); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockConduit.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockConduit.java deleted file mode 100644 index 0974291e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockConduit.java +++ /dev/null @@ -1,47 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import WayofTime.alchemicalWizardry.common.tileEntity.TEConduit; -import net.minecraft.block.state.IBlockState; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; - -public class BlockConduit extends BlockOrientable -{ - public BlockConduit() - { - super(); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - public void breakBlock(World world, BlockPos blockPos, IBlockState blockState) - { - super.breakBlock(world, blockPos, blockState); - } - - @Override - public TileEntity createNewTileEntity(World world, int noClue) - { - return new TEConduit(); - } - - @Override - public int getRenderType() - { - return -1; - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public boolean hasTileEntity(IBlockState blockState) - { - return true; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockCrystal.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockCrystal.java deleted file mode 100644 index 1c917c3c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockCrystal.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import WayofTime.alchemicalWizardry.ModBlocks; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; - -public class BlockCrystal extends Block -{ - public BlockCrystal() - { - super(Material.iron); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - @SideOnly(Side.CLIENT) - /** - * returns a list of items with the same ID, but different meta (eg: dye returns 16 items) - */ - public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) - { - if (this.equals(ModBlocks.blockCrystal)) - { - par3List.add(new ItemStack(par1, 1, 0)); - par3List.add(new ItemStack(par1, 1, 1)); - } else - { - super.getSubBlocks(par1, par2CreativeTabs, par3List); - } - } - - @Override - public int damageDropped(IBlockState blockState) - { - return blockState.getBlock().damageDropped(blockState); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockDemonPortal.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockDemonPortal.java deleted file mode 100644 index 9dee123f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockDemonPortal.java +++ /dev/null @@ -1,54 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.TEDemonPortal; - -public class BlockDemonPortal extends BlockContainer -{ - public BlockDemonPortal() - { - super(Material.rock); - setHardness(1000); - setResistance(10000); - } - - @Override - public void onBlockHarvested(World world, BlockPos blockPos, IBlockState blockState, EntityPlayer player) - { - TileEntity tile = world.getTileEntity(blockPos); - if(tile instanceof TEDemonPortal) - { - ((TEDemonPortal) tile).notifyPortalOfBreak(); - } - - super.onBlockHarvested(world, blockPos, blockState, player); - } - - @Override - public TileEntity createNewTileEntity(World var1, int var2) - { - return new TEDemonPortal(); - } - - @Override - public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) - { - if (world.isRemote) - { - return false; - } - - TEDemonPortal tileEntity = (TEDemonPortal) world.getTileEntity(blockPos); - - tileEntity.rightClickBlock(player, side.getIndex()); - - return false; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockEfficiencyRune.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockEfficiencyRune.java deleted file mode 100644 index 2dbb1792..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockEfficiencyRune.java +++ /dev/null @@ -1,17 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -public class BlockEfficiencyRune extends BlockBloodRune -{ - public BlockEfficiencyRune() - { - super(); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - public int getRuneEffect(int metaData) - { - return 2; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockEmptySocket.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockEmptySocket.java deleted file mode 100644 index 8aa7e951..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockEmptySocket.java +++ /dev/null @@ -1,20 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; - -public class BlockEmptySocket extends Block -{ - public BlockEmptySocket() - { - super(Material.iron); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - public boolean isOpaqueCube() - { - return false; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockEnchantmentGlyph.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockEnchantmentGlyph.java deleted file mode 100644 index 2eee791d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockEnchantmentGlyph.java +++ /dev/null @@ -1,79 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.common.omega.IEnchantmentGlyph; - -public class BlockEnchantmentGlyph extends Block implements IEnchantmentGlyph -{ - public BlockEnchantmentGlyph() - { - super(Material.iron); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - public int getAdditionalStabilityForFaceCount(World world, BlockPos pos, int meta, int faceCount) - { - switch(meta) - { - case 0: - return -faceCount * 10; - case 1: - return -faceCount * 20; - default: - return -faceCount * 20; - } - } - - @Override - public int getEnchantability(World world, BlockPos pos, int meta) - { - switch(meta) - { - case 0: - return 1; - default: - return 0; - } - } - - @Override - public int getEnchantmentLevel(World world, BlockPos pos, int meta) - { - switch(meta) - { - case 1: - return 1; - default: - return 0; - } - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) - { - for(int i=0; i<2; i++) - { - par3List.add(new ItemStack(par1, 1, i)); - } - } - - @Override - public int damageDropped(IBlockState blockState) - { - return blockState.getBlock().damageDropped(blockState); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockFilledSocket.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockFilledSocket.java deleted file mode 100644 index d59b4cb9..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockFilledSocket.java +++ /dev/null @@ -1,117 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.common.tileEntity.TESocket; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; - -import java.util.Random; - -public class BlockFilledSocket extends BlockContainer -{ - public BlockFilledSocket() - { - super(Material.rock); - setHardness(2.0F); - setResistance(5.0F); - //func_111022_d("AlchemicalWizardry:blocks"); - } - - @Override - public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState blockState, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) - { - TESocket tileEntity = (TESocket) world.getTileEntity(blockPos); - - if (tileEntity == null || player.isSneaking()) - { - return false; - } - - ItemStack playerItem = player.getCurrentEquippedItem(); - if (tileEntity.getStackInSlot(0) == null && playerItem != null) - { - if (playerItem.getItem() instanceof ArmourUpgrade) - { - ItemStack newItem = playerItem.copy(); - newItem.stackSize = 1; - --playerItem.stackSize; - tileEntity.setInventorySlotContents(0, newItem); - return true; - } - else - { - return false; - } - } - else if (tileEntity.getStackInSlot(0) != null && playerItem == null) - { - player.inventory.addItemStackToInventory(tileEntity.getStackInSlot(0)); - tileEntity.setInventorySlotContents(0, null); - tileEntity.setActive(); - return true; - } - world.markBlockForUpdate(blockPos); - return false; - } - - @Override - public void breakBlock(World world, BlockPos blockPos, IBlockState blockState) - { - dropItems(world, blockPos); - super.breakBlock(world, blockPos, blockState); - } - - private void dropItems(World world, BlockPos blockPos) - { - Random rand = new Random(); - TileEntity tileEntity = world.getTileEntity(blockPos); - - if (!(tileEntity instanceof IInventory)) - { - return; - } - - IInventory inventory = (IInventory) tileEntity; - - for (int i = 0; i < inventory.getSizeInventory(); i++) - { - ItemStack item = inventory.getStackInSlot(i); - - if (item != null && item.stackSize > 0) - { - float rx = rand.nextFloat() * 0.8F + 0.1F; - float ry = rand.nextFloat() * 0.8F + 0.1F; - float rz = rand.nextFloat() * 0.8F + 0.1F; - EntityItem entityItem = new EntityItem(world, blockPos.getX() + rx, blockPos.getY() + ry, blockPos.getZ() + rz, new ItemStack(item.getItem(), item.stackSize, item.getItemDamage())); - - if (item.hasTagCompound()) - { - entityItem.getEntityItem().setTagCompound((NBTTagCompound) item.getTagCompound().copy()); - } - - float factor = 0.05F; - entityItem.motionX = rand.nextGaussian() * factor; - entityItem.motionY = rand.nextGaussian() * factor + 0.2F; - entityItem.motionZ = rand.nextGaussian() * factor; - world.spawnEntityInWorld(entityItem); - item.stackSize = 0; - } - } - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) - { - return new TESocket(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockImperfectRitualStone.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockImperfectRitualStone.java deleted file mode 100644 index 6e409014..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockImperfectRitualStone.java +++ /dev/null @@ -1,109 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.entity.monster.EntityZombie; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; - -public class BlockImperfectRitualStone extends Block -{ - public BlockImperfectRitualStone() - { - super(Material.iron); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) - { - if(SpellHelper.isFakePlayer(player)) - { - return false; - } - { - Block block = world.getBlockState(blockPos.add(0, 1, 0)).getBlock(); - - if (block == Blocks.water) - { - if (!player.capabilities.isCreativeMode && !world.isRemote) - { - SoulNetworkHandler.hurtPlayer(player, 5000); - } - - if (!world.isRemote) - { - world.addWeatherEffect(new EntityLightningBolt(world, blockPos.getX(), blockPos.getY() + 2, blockPos.getZ())); - } - - world.getWorldInfo().setRaining(true); - - if (world.isRemote) - { - world.setRainStrength(1.0F); - world.setThunderStrength(1.0f); - } - - world.getWorldInfo().setThunderTime(0); - world.getWorldInfo().setThundering(true); - return true; - } else if (block == Blocks.coal_block) - { - if (!player.capabilities.isCreativeMode && !world.isRemote) - { - SoulNetworkHandler.hurtPlayer(player, 5000); - } - - EntityZombie zomb = new EntityZombie(world); - zomb.setPosition(blockPos.getX() + 0.5, blockPos.getY() + 2, blockPos.getZ() + 0.5); - zomb.addPotionEffect(new PotionEffect(Potion.fireResistance.id, 2000)); - zomb.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 20000, 7)); - zomb.addPotionEffect(new PotionEffect(Potion.resistance.id, 20000, 3)); - - if (!world.isRemote) - { - world.spawnEntityInWorld(zomb); - world.addWeatherEffect(new EntityLightningBolt(world, blockPos.getX(), blockPos.getY() + 2, blockPos.getZ())); - } - - return true; - } else if (block == Blocks.lapis_block) - { - if (!player.capabilities.isCreativeMode && !world.isRemote) - { - SoulNetworkHandler.hurtPlayer(player, 5000); - } - - if (!world.isRemote) - { - world.addWeatherEffect(new EntityLightningBolt(world, blockPos.getX(), blockPos.getY() + 2, blockPos.getZ())); - world.setWorldTime((world.getWorldTime() / 24000) * 24000 + 13800); - } - } else if (block == Blocks.bedrock) - { - if (!player.capabilities.isCreativeMode && !world.isRemote) - { - SoulNetworkHandler.hurtPlayer(player, 5000); - } - - if (!world.isRemote) - { - world.addWeatherEffect(new EntityLightningBolt(world, blockPos.getX(), blockPos.getY() + 2, blockPos.getZ())); - } - - player.addPotionEffect(new PotionEffect(Potion.resistance.id, 60 * 20, 1)); - } - } - return false; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockIncenseCrucible.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockIncenseCrucible.java deleted file mode 100644 index d12a848c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockIncenseCrucible.java +++ /dev/null @@ -1,153 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import java.util.Random; - -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.sacrifice.IIncense; -import WayofTime.alchemicalWizardry.common.tileEntity.TECrucible; - -public class BlockIncenseCrucible extends BlockContainer -{ - public BlockIncenseCrucible() - { - super(Material.anvil); - this.setHardness(2.0f); - this.setResistance(1.5f); - this.setBlockBounds(0.3125F, 0.0F, 0.3125F, 0.6875F, 0.625F, 0.6875F); - } - - @Override - public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) - { - TECrucible tileEntity = (TECrucible) world.getTileEntity(blockPos); - - if (tileEntity == null || player.isSneaking()) - { - return false; - } - - ItemStack playerItem = player.getCurrentEquippedItem(); - - if (tileEntity.getStackInSlot(0) == null && playerItem != null && playerItem.getItem() instanceof IIncense) - { - ItemStack newItem = playerItem.copy(); - newItem.stackSize = 1; - --playerItem.stackSize; - tileEntity.setInventorySlotContents(0, newItem); -// } else if (tileEntity.getStackInSlot(0) != null && playerItem == null) //Disabled currently -// { -// player.inventory.addItemStackToInventory(tileEntity.getStackInSlot(0)); -// tileEntity.setInventorySlotContents(0, null); - } - world.markBlockForUpdate(blockPos); - return true; - } - -// @Override -// public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) -// { -// return null; -// } - - @Override - public void setBlockBoundsBasedOnState(IBlockAccess world, BlockPos blockPos) - { - this.setBlockBounds(0.3125F, 0.0F, 0.3125F, 0.6875F, 0.625F, 0.6875F); - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) - { - return new TECrucible(); - } - - @Override - public void randomDisplayTick(World world, BlockPos blockPos, IBlockState blockState, Random rand) - { - if (rand.nextInt(3) != 0) - { - TECrucible tile = (TECrucible)world.getTileEntity(blockPos); - tile.spawnClientParticle(world, blockPos, rand); - } - } - - @Override - public void breakBlock(World world, BlockPos blockPos, IBlockState blockState) - { - dropItems(world, blockPos); - super.breakBlock(world, blockPos, blockState); - } - - @Override - public boolean hasComparatorInputOverride() - { - return true; - } - - @Override - public int getComparatorInputOverride(World world, BlockPos blockPos) - { - TileEntity tile = world.getTileEntity(blockPos); - if (tile instanceof TECrucible) - { - return ((TECrucible) tile).getRSPowerOutput(); - } - return 15; - } - - private void dropItems(World world, BlockPos blockPos) - { - Random rand = new Random(); - TileEntity tileEntity = world.getTileEntity(blockPos); - - if (!(tileEntity instanceof IInventory)) - { - return; - } - - IInventory inventory = (IInventory) tileEntity; - - for (int i = 0; i < inventory.getSizeInventory(); i++) - { - ItemStack item = inventory.getStackInSlot(i); - - if (item != null && item.stackSize > 0) - { - float rx = rand.nextFloat() * 0.8F + 0.1F; - float ry = rand.nextFloat() * 0.8F + 0.1F; - float rz = rand.nextFloat() * 0.8F + 0.1F; - EntityItem entityItem = new EntityItem(world, blockPos.getX() + rx, blockPos.getY() + ry, blockPos.getZ() + rz, new ItemStack(item.getItem(), item.stackSize, item.getItemDamage())); - - if (item.hasTagCompound()) - { - entityItem.getEntityItem().setTagCompound((NBTTagCompound) item.getTagCompound().copy()); - } - - float factor = 0.05F; - entityItem.motionX = rand.nextGaussian() * factor; - entityItem.motionY = rand.nextGaussian() * factor + 0.2F; - entityItem.motionZ = rand.nextGaussian() * factor; - world.spawnEntityInWorld(entityItem); - item.stackSize = 0; - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockLargeBloodStoneBrick.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockLargeBloodStoneBrick.java deleted file mode 100644 index 1f12e28d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockLargeBloodStoneBrick.java +++ /dev/null @@ -1,14 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; - -public class BlockLargeBloodStoneBrick extends Block -{ - public BlockLargeBloodStoneBrick() - { - super(Material.iron); - setHardness(2.0F); - setResistance(5.0F); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockLifeEssence.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockLifeEssence.java deleted file mode 100644 index 37276de0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockLifeEssence.java +++ /dev/null @@ -1,29 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import net.minecraft.block.material.Material; -import net.minecraft.util.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.fluids.BlockFluidClassic; - -public class BlockLifeEssence extends BlockFluidClassic -{ - public BlockLifeEssence() - { - super(AlchemicalWizardry.lifeEssenceFluid, Material.water); - AlchemicalWizardry.lifeEssenceFluid.setBlock(this); - } - - @Override - public boolean canDisplace(IBlockAccess world, BlockPos blockPos) - { - return !world.getBlockState(blockPos).getBlock().getMaterial().isLiquid() && super.canDisplace(world, blockPos); - } - - @Override - public boolean displaceIfPossible(World world, BlockPos blockPos) - { - return !world.getBlockState(blockPos).getBlock().getMaterial().isLiquid() && super.displaceIfPossible(world, blockPos); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockMasterStone.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockMasterStone.java deleted file mode 100644 index d30f3e5e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockMasterStone.java +++ /dev/null @@ -1,85 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import WayofTime.alchemicalWizardry.common.items.ActivationCrystal; -import WayofTime.alchemicalWizardry.common.tileEntity.TEMasterStone; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.Explosion; -import net.minecraft.world.World; - -public class BlockMasterStone extends BlockContainer -{ - public BlockMasterStone() - { - super(Material.iron); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - public void onBlockHarvested(World world, BlockPos blockPos, IBlockState blockState, EntityPlayer player) - { - TileEntity tile = world.getTileEntity(blockPos); - if (tile instanceof TEMasterStone) - { - ((TEMasterStone) tile).useOnRitualBroken(); - } - - super.onBlockHarvested(world, blockPos, blockState, player); - } - - @Override - public void onBlockDestroyedByExplosion(World world, BlockPos blockPos, Explosion explosion) - { - super.onBlockDestroyedByExplosion(world, blockPos, explosion); - TileEntity tile = world.getTileEntity(blockPos); - if (tile instanceof TEMasterStone) - { - ((TEMasterStone) tile).useOnRitualBrokenExplosion(); - } - } - - @Override - public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) - { - TEMasterStone tileEntity = (TEMasterStone) world.getTileEntity(blockPos); - - if (tileEntity == null || player.isSneaking()) - { - return false; - } - - ItemStack playerItem = player.getCurrentEquippedItem(); - - if (playerItem == null) - { - return false; - } - - Item item = playerItem.getItem(); - - if (!(item instanceof ActivationCrystal)) - { - return false; - } - - ActivationCrystal acItem = (ActivationCrystal) item; -// tileEntity.setOwner(acItem.getOwnerName(playerItem)); - tileEntity.activateRitual(world, acItem.getCrystalLevel(playerItem), playerItem, player, ActivationCrystal.getOwnerName(playerItem)); - world.markBlockForUpdate(blockPos); - return true; - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) - { - return new TEMasterStone(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockMimic.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockMimic.java deleted file mode 100644 index 7737d3ac..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockMimic.java +++ /dev/null @@ -1,210 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.particle.EffectRenderer; -import net.minecraft.client.particle.EntityDiggingFX; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.*; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.common.tileEntity.TEMimicBlock; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -public class BlockMimic extends BlockContainer -{ - public BlockMimic() - { - super(Material.water); - setHardness(2.0F); - setResistance(5.0F); -// this.setBlockBounds(0, 0, 0, 0, 0, 0); - } - - @Override - @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockAccess world, BlockPos blockPos, EnumFacing side) - { - TileEntity TE = world.getTileEntity(blockPos); - if(!(TE instanceof TEMimicBlock)) - { - return true; - } - TEMimicBlock mimic = (TEMimicBlock)TE; - - Block block = mimic.getBlock(); - - return block == null || block.shouldSideBeRendered(world, blockPos, side); - } - - @Override - public boolean canCollideCheck(IBlockState blockState, boolean bool) - { - return blockState.getBlock().getMetaFromState(blockState) == 1; - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) - { - return new TEMimicBlock(); - } - - @Override - public boolean canSilkHarvest(World world, BlockPos pos, IBlockState state, EntityPlayer player) - { - return false; - } - - @Override - public int quantityDropped(Random random) - { - return 0; - } - - @Override - public boolean isBlockSolid(IBlockAccess world, BlockPos blockPos, EnumFacing side) - { - TileEntity tile = world.getTileEntity(blockPos); - if(tile instanceof TEMimicBlock) - { - Block block = ((TEMimicBlock) tile).getBlock(); - int mimicMeta = ((TEMimicBlock) tile).getMetaOfMimic(); - - if(block != null) - { - return block.isBlockSolid(world, blockPos, side); //side was mimicM - } - } - return super.isBlockSolid(world, blockPos, side); - } - - @Override - public boolean addHitEffects(World world, MovingObjectPosition target, EffectRenderer effectRenderer) - { - TileEntity tile = world.getTileEntity(target.func_178782_a()); - - TEMimicBlock TE = (TEMimicBlock)tile; - - if (TE != null) - { - Block block = TE.getBlock(); - - double xOffset = target.func_178782_a().getX() + world.rand.nextDouble() * (block.getBlockBoundsMaxX() - block.getBlockBoundsMinX() - 0.1F * 2.0F) + 0.1F + block.getBlockBoundsMinX(); - double yOffset = target.func_178782_a().getY() + world.rand.nextDouble() * (block.getBlockBoundsMaxY() - block.getBlockBoundsMinY() - 0.1F * 2.0F) + 0.1F + block.getBlockBoundsMinY(); - double zOffset = target.func_178782_a().getZ() + world.rand.nextDouble() * (block.getBlockBoundsMaxZ() - block.getBlockBoundsMinZ() - 0.1F * 2.0F) + 0.1F + block.getBlockBoundsMinZ(); - - switch (target.subHit) - { - case 0: - yOffset = target.func_178782_a().getY() + block.getBlockBoundsMinY() - 0.1D; - break; - case 1: - yOffset = target.func_178782_a().getY() + block.getBlockBoundsMaxY() + 0.1D; - break; - case 2: - zOffset = target.func_178782_a().getZ() + block.getBlockBoundsMinZ() - 0.1D; - break; - case 3: - zOffset = target.func_178782_a().getZ() + block.getBlockBoundsMaxZ() + 0.1D; - break; - case 4: - xOffset = target.func_178782_a().getX() + block.getBlockBoundsMinX() - 0.1D; - break; - case 5: - xOffset = target.func_178782_a().getX() + block.getBlockBoundsMaxX() + 0.1D; - break; - } - -// BlockMimic.addHitEffect(TE, target, xOffset, yOffset, zOffset, null, effectRenderer); - - return true; - - } - - return super.addHitEffects(world, target, effectRenderer); - } - - @Override - public AxisAlignedBB getCollisionBoundingBox(World world, BlockPos blockPos, IBlockState blockState) - { - TEMimicBlock tile = (TEMimicBlock)world.getTileEntity(blockPos); - Block block = tile.getBlock(); - - return block != null ? block.getCollisionBoundingBox(world, blockPos, blockState) : super.getCollisionBoundingBox(world, blockPos, blockState); - } - - @Override - @SideOnly(Side.CLIENT) - public int colorMultiplier(IBlockAccess blockAccess, BlockPos blockPos, int renderPass) - { - TEMimicBlock TE = (TEMimicBlock)blockAccess.getTileEntity(blockPos); - if (TE != null) - { - Block block = TE.getBlock(); - if(block != null) - { - return block.colorMultiplier(blockAccess, blockPos); - } - } - - return super.colorMultiplier(blockAccess, blockPos); - } - -/* @Override - public void velocityToAddToEntity(World world, BlockPos, Entity entity, Vec3 vec) - { - TEMimicBlock TE = (TEMimicBlock)world.getTileEntity(x, y, z); - if (TE != null) - { - Block block = TE.getBlock(); - if(block != null) - { - block.velocityToAddToEntity(world, x, y, z, entity, vec); - } - } - } - No longer in 1.8 apparently - - public static void addHitEffect(TEMimicBlock TE, MovingObjectPosition target, double x, double y, double z, ItemStack itemStack, EffectRenderer effectRenderer) - { - EntityDiggingFX particle = new EntityDiggingFX(TE.getWorld(), x, y, z, 0.0D, 0.0D, 0.0D, TE.getBlock(), TE.getMetaOfMimic()); - effectRenderer.addEffect(particle.func_174846_a(target.func_178782_a()).multiplyVelocity(0.2F).multipleParticleScaleBy(0.6F)); - } -*/ - @Override - public void onEntityCollidedWithBlock(World world, BlockPos blockPos, Entity entity) - { - TEMimicBlock TE = (TEMimicBlock)world.getTileEntity(blockPos); - if (TE != null) - { - if(TE.getBlockEffectWhileInside(entity, blockPos)) - { - return; - }else - { - Block block = TE.getBlock(); - if(block != null) - { - block.onEntityCollidedWithBlock(world, blockPos, entity); - return; - } - } - } - - super.onEntityCollidedWithBlock(world, blockPos, entity); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockOrientable.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockOrientable.java deleted file mode 100644 index 0e919d8e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockOrientable.java +++ /dev/null @@ -1,90 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import WayofTime.alchemicalWizardry.common.tileEntity.TEOrientable; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; - -public class BlockOrientable extends BlockContainer -{ - public BlockOrientable() - { - super(Material.rock); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - public TileEntity createNewTileEntity(World world, int dunno) - { - return new TEOrientable(); - } - - @Override - public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) - { - //Right-click orients the output face. Shift-right-click orients the input face. - if (world.isRemote) - { - return false; - } - - TileEntity tile = world.getTileEntity(blockPos); - - if (tile instanceof TEOrientable) - { - TEOrientable newTile = (TEOrientable) tile; - if (player.isSneaking()) - { - int nextSide = TEOrientable.getIntForEnumFacing(newTile.getInputDirection()) + 1; - - if (nextSide > 5) - { - nextSide = 0; - } - if (EnumFacing.getFront(nextSide) == newTile.getOutputDirection()) - { - nextSide++; - if (nextSide > 5) - { - nextSide = 0; - } - } - - newTile.setInputDirection(EnumFacing.getFront(nextSide)); - } else - { - int nextSide = TEOrientable.getIntForEnumFacing(newTile.getOutputDirection()) + 1; - - if (nextSide > 5) - { - nextSide = 0; - } - if (EnumFacing.getFront(nextSide) == newTile.getInputDirection()) - { - nextSide++; - if (nextSide > 5) - { - nextSide = 0; - } - } - - newTile.setOutputDirection(EnumFacing.getFront(nextSide)); - } - } - - world.markBlockForUpdate(blockPos); - return true; - } - - @Override - public int damageDropped(IBlockState blockState) - { - return blockState.getBlock().damageDropped(blockState); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockPedestal.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockPedestal.java deleted file mode 100644 index 0a7ce6f4..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockPedestal.java +++ /dev/null @@ -1,127 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import java.util.Random; - -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.common.tileEntity.TEPedestal; - -public class BlockPedestal extends BlockContainer -{ - public BlockPedestal() - { - super(Material.rock); - setHardness(2.0F); - setResistance(5.0F); - float f = 0.3125F; - this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, 0.6F, 0.5F + f); - } - - @Override - public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) - { - TEPedestal tileEntity = (TEPedestal) world.getTileEntity(blockPos); - - if (tileEntity == null || player.isSneaking()) - { - return false; - } - - ItemStack playerItem = player.getCurrentEquippedItem(); - - if (tileEntity.getStackInSlot(0) == null && playerItem != null) - { - ItemStack newItem = playerItem.copy(); - newItem.stackSize = 1; - --playerItem.stackSize; - tileEntity.setInventorySlotContents(0, newItem); - } else if (tileEntity.getStackInSlot(0) != null && playerItem == null) - { - player.inventory.addItemStackToInventory(tileEntity.getStackInSlot(0)); - tileEntity.setInventorySlotContents(0, null); - tileEntity.setActive(); - } - world.markBlockForUpdate(blockPos); - return true; - } - - @Override - public void breakBlock(World world, BlockPos blockPos, IBlockState blockState) - { - dropItems(world, blockPos); - super.breakBlock(world, blockPos, blockState); - } - - private void dropItems(World world, BlockPos blockPos) - { - Random rand = new Random(); - TileEntity tileEntity = world.getTileEntity(blockPos); - - if (!(tileEntity instanceof IInventory)) - { - return; - } - - IInventory inventory = (IInventory) tileEntity; - - for (int i = 0; i < inventory.getSizeInventory(); i++) - { - ItemStack item = inventory.getStackInSlot(i); - - if (item != null && item.stackSize > 0) - { - float rx = rand.nextFloat() * 0.8F + 0.1F; - float ry = rand.nextFloat() * 0.8F + 0.1F; - float rz = rand.nextFloat() * 0.8F + 0.1F; - EntityItem entityItem = new EntityItem(world, blockPos.getX() + rx, blockPos.getY() + ry, blockPos.getZ() + rz, new ItemStack(item.getItem(), item.stackSize, item.getItemDamage())); - - if (item.hasTagCompound()) - { - entityItem.getEntityItem().setTagCompound((NBTTagCompound) item.getTagCompound().copy()); - } - - float factor = 0.05F; - entityItem.motionX = rand.nextGaussian() * factor; - entityItem.motionY = rand.nextGaussian() * factor + 0.2F; - entityItem.motionZ = rand.nextGaussian() * factor; - world.spawnEntityInWorld(entityItem); - item.stackSize = 0; - } - } - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) - { - return new TEPedestal(); - } - - @Override - public int getRenderType() - { - return -1; - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public boolean hasTileEntity(IBlockState blockState) - { - return true; - } - -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockPlinth.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockPlinth.java deleted file mode 100644 index 6d4b79e7..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockPlinth.java +++ /dev/null @@ -1,127 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import java.util.Random; - -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.common.tileEntity.TEPlinth; - -public class BlockPlinth extends BlockContainer -{ - public BlockPlinth() - { - super(Material.rock); - setHardness(2.0F); - setResistance(5.0F); - float f = 0.0625F; - this.setBlockBounds(f, 0.0F, f, 1.0f - f, 0.875f, 1.0f - f); - } - - @Override - public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) - { - TEPlinth tileEntity = (TEPlinth) world.getTileEntity(blockPos); - - if (tileEntity == null || player.isSneaking()) - { - return false; - } - - ItemStack playerItem = player.getCurrentEquippedItem(); - - if (tileEntity.getStackInSlot(0) == null && playerItem != null) - { - ItemStack newItem = playerItem.copy(); - newItem.stackSize = 1; - --playerItem.stackSize; - tileEntity.setInventorySlotContents(0, newItem); - } else if (tileEntity.getStackInSlot(0) != null && playerItem == null) - { - player.inventory.addItemStackToInventory(tileEntity.getStackInSlot(0)); - tileEntity.setInventorySlotContents(0, null); - tileEntity.setActive(); - } - world.markBlockForUpdate(blockPos); - return true; - } - - @Override - public void breakBlock(World world, BlockPos blockPos, IBlockState blockState) - { - dropItems(world, blockPos); - super.breakBlock(world, blockPos, blockState); - } - - private void dropItems(World world, BlockPos blockPos) - { - Random rand = new Random(); - TileEntity tileEntity = world.getTileEntity(blockPos); - - if (!(tileEntity instanceof IInventory)) - { - return; - } - - IInventory inventory = (IInventory) tileEntity; - - for (int i = 0; i < inventory.getSizeInventory(); i++) - { - ItemStack item = inventory.getStackInSlot(i); - - if (item != null && item.stackSize > 0) - { - float rx = rand.nextFloat() * 0.8F + 0.1F; - float ry = rand.nextFloat() * 0.8F + 0.1F; - float rz = rand.nextFloat() * 0.8F + 0.1F; - EntityItem entityItem = new EntityItem(world, blockPos.getX() + rx, blockPos.getY() + ry, blockPos.getZ() + rz, new ItemStack(item.getItem(), item.stackSize, item.getItemDamage())); - - if (item.hasTagCompound()) - { - entityItem.getEntityItem().setTagCompound((NBTTagCompound) item.getTagCompound().copy()); - } - - float factor = 0.05F; - entityItem.motionX = rand.nextGaussian() * factor; - entityItem.motionY = rand.nextGaussian() * factor + 0.2F; - entityItem.motionZ = rand.nextGaussian() * factor; - world.spawnEntityInWorld(entityItem); - item.stackSize = 0; - } - } - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) - { - return new TEPlinth(); - } - - @Override - public int getRenderType() - { - return -1; - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public boolean hasTileEntity(IBlockState blockState) - { - return true; - } - -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockReagentConduit.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockReagentConduit.java deleted file mode 100644 index f6cb50a5..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockReagentConduit.java +++ /dev/null @@ -1,57 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.common.tileEntity.TEReagentConduit; - -public class BlockReagentConduit extends BlockContainer -{ - public BlockReagentConduit() - { - super(Material.cloth); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) - { - return new TEReagentConduit(); - } - - @Override - public boolean canProvidePower() - { - return true; - } - - @Override - public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) - { - return super.onBlockActivated(world, blockPos, state, player, side, hitX, hitY, hitZ); - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public int getRenderType() - { - return -1; - } - -// @Override -// public AxisAlignedBB getCollisionBoundingBoxFromPool(World p_149668_1_, int p_149668_2_, int p_149668_3_, int p_149668_4_) -// { -// return null; -// } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockRitualStone.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockRitualStone.java deleted file mode 100644 index 6a5ed2db..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockRitualStone.java +++ /dev/null @@ -1,69 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import WayofTime.alchemicalWizardry.api.rituals.IRitualStone; -import WayofTime.alchemicalWizardry.common.items.ScribeTool; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; - -public class BlockRitualStone extends Block implements IRitualStone -{ - public BlockRitualStone() - { - super(Material.iron); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - public int damageDropped(IBlockState blockState) - { - return 0; - } - - @Override - public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) - { - ItemStack playerItem = player.getCurrentEquippedItem(); - - if (playerItem == null) - { - return false; - } - - Item item = playerItem.getItem(); - - if (!(item instanceof ScribeTool)) - { - return false; - } - - if (playerItem.getMaxDamage() <= playerItem.getItemDamage() && !(playerItem.getMaxDamage() == 0)) - { - return false; - } - - ScribeTool scribeTool = (ScribeTool) item; - - if (!player.capabilities.isCreativeMode) - { - playerItem.setItemDamage(playerItem.getItemDamage() + 1); - } - - world.setBlockState(blockPos, state.getBlock().getStateFromMeta(scribeTool.getType()), 3); - world.markBlockForUpdate(blockPos); - return true; - } - - @Override - public boolean isRuneType(World world, BlockPos blockPos, IBlockState blockState, int runeType) - { - return blockState.getBlock().getMetaFromState(blockState) == runeType; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockRuneOfSacrifice.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockRuneOfSacrifice.java deleted file mode 100644 index a5786b30..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockRuneOfSacrifice.java +++ /dev/null @@ -1,17 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -public class BlockRuneOfSacrifice extends BlockBloodRune -{ - public BlockRuneOfSacrifice() - { - super(); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - public int getRuneEffect(int metaData) - { - return 3; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockRuneOfSelfSacrifice.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockRuneOfSelfSacrifice.java deleted file mode 100644 index c7b729a0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockRuneOfSelfSacrifice.java +++ /dev/null @@ -1,17 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -public class BlockRuneOfSelfSacrifice extends BlockBloodRune -{ - public BlockRuneOfSelfSacrifice() - { - super(); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - public int getRuneEffect(int metaData) - { - return 4; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSchematicSaver.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSchematicSaver.java deleted file mode 100644 index 7d7ab440..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSchematicSaver.java +++ /dev/null @@ -1,42 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import WayofTime.alchemicalWizardry.common.tileEntity.TESchematicSaver; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; - -public class BlockSchematicSaver extends BlockContainer -{ - public BlockSchematicSaver() - { - super(Material.rock); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - public TileEntity createNewTileEntity(World var1, int var2) - { - return new TESchematicSaver(); - } - - @Override - public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) - { - if (world.isRemote) - { - return false; - } - - TESchematicSaver tileEntity = (TESchematicSaver) world.getTileEntity(blockPos); - - tileEntity.rightClickBlock(); - - return false; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpectral.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpectral.java deleted file mode 100644 index 5ad9f527..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpectral.java +++ /dev/null @@ -1,95 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import WayofTime.alchemicalWizardry.common.tileEntity.TESpectralBlock; -import net.minecraft.block.Block; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.Random; - -public class BlockSpectral extends BlockContainer -{ - public BlockSpectral() - { - super(Material.rock); - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public int quantityDropped(Random par1Random) - { - return 0; - } - - @Override - @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockAccess p_149646_1_, BlockPos blockPos, EnumFacing side) - { - Block block = p_149646_1_.getBlockState(blockPos).getBlock(); - - if (p_149646_1_.getBlockState(blockPos) != p_149646_1_.getBlockState(blockPos.add(-side.getFrontOffsetX(), -side.getFrontOffsetY(), -side.getFrontOffsetZ()))) - { - return true; - } - - if (block == this) - { - return false; - } - - return block != this && super.shouldSideBeRendered(p_149646_1_, blockPos, side); - } - - @Override - public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) - { - if (player.isSneaking()) - { - return false; - } - - ItemStack playerItem = player.getCurrentEquippedItem(); - - if (playerItem != null) - { - if (playerItem.getItem() instanceof ItemBlock) - { - world.addBlockEvent(blockPos, ((ItemBlock) playerItem.getItem()).getBlock(), playerItem.getItemDamage(), 3); - - if (!player.capabilities.isCreativeMode) - { - playerItem.stackSize--; - } - - return true; - } else - { - return false; - } - } - - return true; - } - - @Override - public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) - { - return new TESpectralBlock(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpectralContainer.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpectralContainer.java deleted file mode 100644 index 9b024b1b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpectralContainer.java +++ /dev/null @@ -1,57 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import WayofTime.alchemicalWizardry.common.tileEntity.TESpectralContainer; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import java.util.List; -import java.util.Random; - -public class BlockSpectralContainer extends BlockContainer -{ - public BlockSpectralContainer() - { - super(Material.cloth); - this.setBlockBounds(0, 0, 0, 0, 0, 0); - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public void addCollisionBoxesToList(World worldIn, BlockPos pos, IBlockState state, AxisAlignedBB mask, List list, Entity collidingEntity) {} - - @Override - public int quantityDropped(Random par1Random) - { - return 0; - } - - @Override - public boolean isReplaceable(World world, BlockPos blockPos) - { - return true; - } - - @Override - public boolean isAir(IBlockAccess world, BlockPos blockPos) - { - return true; - } - - @Override - public TileEntity createNewTileEntity(World var1, int var2) - { - return new TESpectralContainer(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpeedRune.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpeedRune.java deleted file mode 100644 index 4db82016..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpeedRune.java +++ /dev/null @@ -1,17 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -public class BlockSpeedRune extends BlockBloodRune -{ - public BlockSpeedRune() - { - super(); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - public int getRuneEffect(int metaData) - { - return 1; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpellEffect.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpellEffect.java deleted file mode 100644 index c7f31294..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpellEffect.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpellEffectBlock; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; - -public class BlockSpellEffect extends BlockOrientable -{ - public BlockSpellEffect() - { - super(); - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) - { - return new TESpellEffectBlock(); - } - - @Override - public int getRenderType() - { - return -1; - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) - { - if (this.equals(ModBlocks.blockSpellEffect)) - { - for (int i = 0; i < 4; i++) - { - par3List.add(new ItemStack(par1, 1, i)); - } - } else - { - super.getSubBlocks(par1, par2CreativeTabs, par3List); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpellEnhancement.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpellEnhancement.java deleted file mode 100644 index 1a0f3ddf..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpellEnhancement.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpellEnhancementBlock; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; - -public class BlockSpellEnhancement extends BlockOrientable -{ - public BlockSpellEnhancement() - { - super(); - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) - { - return new TESpellEnhancementBlock(); - } - - @Override - public int getRenderType() - { - return -1; - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) - { - if (this.equals(ModBlocks.blockSpellEnhancement)) - { - for (int i = 0; i < 15; i++) - { - par3List.add(new ItemStack(par1, 1, i)); - } - } else - { - super.getSubBlocks(par1, par2CreativeTabs, par3List); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpellModifier.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpellModifier.java deleted file mode 100644 index 241f9fd8..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpellModifier.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpellModifierBlock; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; - -public class BlockSpellModifier extends BlockOrientable -{ - public BlockSpellModifier() - { - super(); - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) - { - return new TESpellModifierBlock(); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) - { - if (this.equals(ModBlocks.blockSpellModifier)) - { - for (int i = 0; i < 4; i++) - { - par3List.add(new ItemStack(par1, 1, i)); - } - } else - { - super.getSubBlocks(par1, par2CreativeTabs, par3List); - } - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public int getRenderType() - { - return -1; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpellParadigm.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpellParadigm.java deleted file mode 100644 index 6c8d15b9..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpellParadigm.java +++ /dev/null @@ -1,87 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.common.items.ItemComplexSpellCrystal; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpellParadigmBlock; -import net.minecraft.block.state.IBlockState; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; - -public class BlockSpellParadigm extends BlockOrientable -{ - public BlockSpellParadigm() - { - super(); - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) - { - return new TESpellParadigmBlock(); - } - - @Override - @SideOnly(Side.CLIENT) - /** - * returns a list of items with the same ID, but different meta (eg: dye returns 16 items) - */ - public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) - { - if (this.equals(ModBlocks.blockSpellParadigm)) - { - par3List.add(new ItemStack(par1, 1, 0)); - par3List.add(new ItemStack(par1, 1, 1)); - par3List.add(new ItemStack(par1, 1, 2)); - par3List.add(new ItemStack(par1, 1, 3)); - } else - { - super.getSubBlocks(par1, par2CreativeTabs, par3List); - } - } - - @Override - public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) - { - ItemStack stack = player.getCurrentEquippedItem(); - - if (stack != null && stack.getItem() instanceof ItemComplexSpellCrystal) - { - if (stack.getTagCompound() == null) - { - stack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound itemTag = stack.getTagCompound(); - itemTag.setInteger("xCoord", blockPos.getX()); - itemTag.setInteger("yCoord", blockPos.getY()); - itemTag.setInteger("zCoord", blockPos.getZ()); - itemTag.setInteger("dimensionId", world.provider.getDimensionId()); - return true; - } - - return super.onBlockActivated(world, blockPos, state, player, side, hitX, hitY, hitZ); - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public int getRenderType() - { - return -1; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpellTable.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpellTable.java deleted file mode 100644 index 89b4746e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockSpellTable.java +++ /dev/null @@ -1,63 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import WayofTime.alchemicalWizardry.common.items.BlankSpell; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpellTable; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; - -public class BlockSpellTable extends BlockContainer -{ - public BlockSpellTable() - { - super(Material.rock); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) - { - TESpellTable tileEntity = (TESpellTable) world.getTileEntity(blockPos); - - if (tileEntity == null || player.isSneaking()) - { - return false; - } - - ItemStack playerItem = player.getCurrentEquippedItem(); - - if (playerItem != null) - { - if (playerItem.getItem() instanceof BlankSpell) - { - if (playerItem.getTagCompound() == null) - { - playerItem.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound itemTag = playerItem.getTagCompound(); - itemTag.setInteger("xCoord", blockPos.getX()); - itemTag.setInteger("yCoord", blockPos.getY()); - itemTag.setInteger("zCoord", blockPos.getZ()); - itemTag.setInteger("dimensionId", world.provider.getDimensionId()); - return true; - } - } - - return false; - } - - @Override - public TileEntity createNewTileEntity(World world, int metaMaybe) - { - return new TESpellTable(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockStabilityGlyph.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockStabilityGlyph.java deleted file mode 100644 index 55be5fde..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockStabilityGlyph.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.common.omega.IStabilityGlyph; - -public class BlockStabilityGlyph extends Block implements IStabilityGlyph -{ - public BlockStabilityGlyph() - { - super(Material.iron); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - public int getAdditionalStabilityForFaceCount(World world, BlockPos pos, int meta, int faceCount) - { - switch(meta) - { - case 0: - return faceCount * 2; - default: - return faceCount; - } - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) - { - for(int i=0; i<1; i++) - { - par3List.add(new ItemStack(par1, 1, i)); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockTeleposer.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockTeleposer.java deleted file mode 100644 index 56a31494..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockTeleposer.java +++ /dev/null @@ -1,253 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.BlockMobSpawner; -import net.minecraft.block.BlockPortal; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -//import net.minecraftforge.fml.common.Optional; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.event.TeleposeEvent; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.TEDemonPortal; -import WayofTime.alchemicalWizardry.common.items.TelepositionFocus; -import WayofTime.alchemicalWizardry.common.tileEntity.TETeleposer; -//import codechicken.multipart.MultipartHelper; -//import codechicken.multipart.TileMultipart; - -public class BlockTeleposer extends BlockContainer -{ - public BlockTeleposer() - { - super(Material.rock); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) - { - ItemStack playerItem = player.getCurrentEquippedItem(); - - if (playerItem != null) - { - if (playerItem.getItem() instanceof TelepositionFocus) - { - SoulNetworkHandler.checkAndSetItemPlayer(playerItem, player); - - if (playerItem.getTagCompound() == null) - { - playerItem.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound itemTag = playerItem.getTagCompound(); - itemTag.setInteger("xCoord", pos.getX()); - itemTag.setInteger("yCoord", pos.getY()); - itemTag.setInteger("zCoord", pos.getZ()); - itemTag.setInteger("dimensionId", world.provider.getDimensionId()); - return true; - } - } - player.openGui(AlchemicalWizardry.instance, 1, world, pos.getX(), pos.getY(), pos.getZ()); - return true; - } - - @Override - public void breakBlock(World world, BlockPos pos, IBlockState state) - { - dropItems(world, pos); - super.breakBlock(world, pos, state); - } - - private void dropItems(World world, BlockPos pos) - { - Random rand = new Random(); - TileEntity tileEntity = world.getTileEntity(pos); - - if (!(tileEntity instanceof IInventory)) - { - return; - } - - IInventory inventory = (IInventory) tileEntity; - - for (int i = 0; i < inventory.getSizeInventory(); i++) - { - ItemStack item = inventory.getStackInSlot(i); - - if (item != null && item.stackSize > 0) - { - float rx = rand.nextFloat() * 0.8F + 0.1F; - float ry = rand.nextFloat() * 0.8F + 0.1F; - float rz = rand.nextFloat() * 0.8F + 0.1F; - EntityItem entityItem = new EntityItem(world, pos.getX() + rx, pos.getY() + ry, pos.getZ() + rz, new ItemStack(item.getItem(), item.stackSize, item.getItemDamage())); - - if (item.hasTagCompound()) - { - entityItem.getEntityItem().setTagCompound((NBTTagCompound) item.getTagCompound().copy()); - } - - float factor = 0.05F; - entityItem.motionX = rand.nextGaussian() * factor; - entityItem.motionY = rand.nextGaussian() * factor + 0.2F; - entityItem.motionZ = rand.nextGaussian() * factor; - world.spawnEntityInWorld(entityItem); - item.stackSize = 0; - } - } - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) - { - return new TETeleposer(); - } - - public static boolean swapBlocks(Object caller, World worldI, World worldF, BlockPos posi, BlockPos posf) - { - return swapBlocks(caller, worldI, worldF, posi, posf, true, 3); - } - - public static boolean swapBlocksWithoutSound(Object caller, World worldI, World worldF, BlockPos posi, BlockPos posf) - { - return swapBlocks(caller, worldI, worldF, posi, posf, false, 3); - } - - public static boolean swapBlocks(Object caller, World worldI, World worldF, BlockPos posi, BlockPos posf, boolean doSound, int flag) - { - TileEntity tileEntityI = worldI.getTileEntity(posi); - TileEntity tileEntityF = worldF.getTileEntity(posf); - - NBTTagCompound nbttag1 = new NBTTagCompound(); - NBTTagCompound nbttag2 = new NBTTagCompound(); - - if (tileEntityI != null) - { - tileEntityI.writeToNBT(nbttag1); - } - - if (tileEntityF != null) - { - tileEntityF.writeToNBT(nbttag2); - } - - IBlockState stateI = worldI.getBlockState(posi); - Block blockI = stateI.getBlock(); - IBlockState stateF = worldF.getBlockState(posf); - Block blockF = stateF.getBlock(); - - - if (blockI.equals(Blocks.air) && blockF.equals(Blocks.air)) - { - return false; - } - - if (blockI instanceof BlockMobSpawner || blockF instanceof BlockMobSpawner || caller instanceof TEDemonPortal ? false : blockI instanceof BlockPortal || blockF instanceof BlockPortal) - { - return false; - } - - TeleposeEvent evt = new TeleposeEvent(worldI, posi, stateI, worldF, posf, stateF); - if (MinecraftForge.EVENT_BUS.post(evt)) - return false; - - if(doSound) - { - worldI.playSoundEffect(posi.getX(), posi.getY(), posi.getZ(), "mob.endermen.portal", 1.0F, 1.0F); - worldF.playSoundEffect(posf.getX(), posf.getY(), posf.getZ(), "mob.endermen.portal", 1.0F, 1.0F); - } - - //CLEAR TILES - Block finalBlock = blockF; - - if (finalBlock != null) - { - TileEntity tileToSet = finalBlock.createTileEntity(worldF, stateF); - - worldF.setTileEntity(posf, tileToSet); - } - - if (blockI != null) - { - TileEntity tileToSet = blockI.createTileEntity(worldI, stateI); - - worldI.setTileEntity(posi, tileToSet); - } - - //TILES CLEARED - worldF.setBlockState(posf, stateI, flag); - - if (tileEntityI != null) - { - TileEntity newTileEntityI = TileEntity.createAndLoadEntity(nbttag1); - -// if(AlchemicalWizardry.isFMPLoaded && isMultipart(tileEntityI)) - { -// newTileEntityI = createMultipartFromNBT(worldF, nbttag1); - } - - worldF.setTileEntity(posf, newTileEntityI); - - newTileEntityI.setPos(posf); -// if(AlchemicalWizardry.isFMPLoaded && isMultipart(tileEntityI)) - { -// sendDescriptorOfTile(worldF, newTileEntityI); - } - } - - worldI.setBlockState(posi, stateF, flag); - - if (tileEntityF != null) - { - TileEntity newTileEntityF = TileEntity.createAndLoadEntity(nbttag2); -// if(AlchemicalWizardry.isFMPLoaded && isMultipart(tileEntityF)) - { -// newTileEntityF = createMultipartFromNBT(worldI, nbttag2); - } - - worldI.setTileEntity(posi, newTileEntityF); - - newTileEntityF.setPos(posi); - -// if(AlchemicalWizardry.isFMPLoaded && isMultipart(tileEntityF)) - { -// sendDescriptorOfTile(worldI, newTileEntityF); - } - } - - return true; - } - -/* @Optional.Method(modid = "ForgeMultipart") - public static boolean isMultipart(TileEntity tile) - { - return tile instanceof TileMultipart; - } - - @Optional.Method(modid = "ForgeMultipart") - public static TileEntity createMultipartFromNBT(World world, NBTTagCompound tag) - { - return MultipartHelper.createTileFromNBT(world, tag); - } - - @Optional.Method(modid = "ForgeMultipart") - public static void sendDescriptorOfTile(World world, TileEntity tile) - { - MultipartHelper.sendDescPacket(world, tile); - } - */ -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/IOrientable.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/IOrientable.java deleted file mode 100644 index f270aa72..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/IOrientable.java +++ /dev/null @@ -1,14 +0,0 @@ -package WayofTime.alchemicalWizardry.common.block; - -import net.minecraft.util.EnumFacing; - -public interface IOrientable -{ - EnumFacing getInputDirection(); - - EnumFacing getOutputDirection(); - - void setInputDirection(EnumFacing direction); - - void setOutputDirection(EnumFacing direction); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/AltarComponent.java b/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/AltarComponent.java deleted file mode 100644 index 06e1a3e6..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/AltarComponent.java +++ /dev/null @@ -1,66 +0,0 @@ -package WayofTime.alchemicalWizardry.common.bloodAltarUpgrade; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; - -public class AltarComponent -{ - private int x; - private int y; - private int z; - private Block block; - private int metadata; - private boolean isBloodRune; - private boolean isUpgradeSlot; - - public AltarComponent(int x, int y, int z, Block block, int metadata, boolean isBloodRune, boolean isUpgradeSlot) - { - this.x = x; - this.y = y; - this.z = z; - this.block = block; - this.metadata = metadata; - this.isBloodRune = isBloodRune; - this.isUpgradeSlot = isUpgradeSlot; - } - - public int getX() - { - return x; - } - - public int getY() - { - return y; - } - - public int getZ() - { - return z; - } - - public Block getBlock() - { - return block; - } - - public int getMetadata() - { - return metadata; - } - - public IBlockState getBlockState() - { - return block.getStateFromMeta(getMetadata()); - } - - public boolean isBloodRune() - { - return isBloodRune; - } - - public boolean isUpgradeSlot() - { - return isUpgradeSlot; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/AltarUpgradeComponent.java b/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/AltarUpgradeComponent.java deleted file mode 100644 index 9bf8496f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/AltarUpgradeComponent.java +++ /dev/null @@ -1,117 +0,0 @@ -package WayofTime.alchemicalWizardry.common.bloodAltarUpgrade; - -public class AltarUpgradeComponent -{ - private int speedUpgrades; - private int efficiencyUpgrades; - private int sacrificeUpgrades; - private int selfSacrificeUpgrades; - private int displacementUpgrades; - private int altarCapacitiveUpgrades; - private int orbCapacitiveUpgrades; - private int betterCapacitiveUpgrades; - private int accelerationUpgrades; - - public AltarUpgradeComponent() - { - speedUpgrades = 0; - efficiencyUpgrades = 0; - sacrificeUpgrades = 0; - selfSacrificeUpgrades = 0; - displacementUpgrades = 0; - altarCapacitiveUpgrades = 0; - orbCapacitiveUpgrades = 0; - betterCapacitiveUpgrades = 0; - accelerationUpgrades = 0; - } - - public void addSpeedUpgrade() - { - speedUpgrades++; - } - - public void addEfficiencyUpgrade() - { - efficiencyUpgrades++; - } - - public void addSacrificeUpgrade() - { - sacrificeUpgrades++; - } - - public void addSelfSacrificeUpgrade() - { - selfSacrificeUpgrades++; - } - - public void addDisplacementUpgrade() - { - displacementUpgrades++; - } - - public void addaltarCapacitiveUpgrade() - { - altarCapacitiveUpgrades++; - } - - public void addorbCapacitiveUpgrade() - { - orbCapacitiveUpgrades++; - } - - public void addBetterCapacitiveUpgrade() - { - betterCapacitiveUpgrades++; - } - - public void addAccelerationUpgrade() - { - accelerationUpgrades++; - } - - public int getSpeedUpgrades() - { - return speedUpgrades; - } - - public int getEfficiencyUpgrades() - { - return efficiencyUpgrades; - } - - public int getSacrificeUpgrades() - { - return sacrificeUpgrades; - } - - public int getSelfSacrificeUpgrades() - { - return selfSacrificeUpgrades; - } - - public int getDisplacementUpgrades() - { - return displacementUpgrades; - } - - public int getAltarCapacitiveUpgrades() - { - return this.altarCapacitiveUpgrades; - } - - public int getOrbCapacitiveUpgrades() - { - return this.orbCapacitiveUpgrades; - } - - public int getBetterCapacitiveUpgrades() - { - return this.betterCapacitiveUpgrades; - } - - public int getAccelerationUpgrades() - { - return this.accelerationUpgrades; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/UpgradedAltars.java b/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/UpgradedAltars.java deleted file mode 100644 index 013b550b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/UpgradedAltars.java +++ /dev/null @@ -1,261 +0,0 @@ -package WayofTime.alchemicalWizardry.common.bloodAltarUpgrade; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.api.altarRecipeRegistry.IFadedRune; -import WayofTime.alchemicalWizardry.common.block.BlockBloodRune; - -public class UpgradedAltars -{ - public static List secondTierAltar = new ArrayList(); - public static List thirdTierAltar = new ArrayList(); - public static List fourthTierAltar = new ArrayList(); - public static List fifthTierAltar = new ArrayList(); - public static List sixthTierAltar = new ArrayList(); - public static int highestAltar = 6; - - public static int isAltarValid(World world, BlockPos pos) - { - for (int i = highestAltar; i >= 2; i--) - { - if (checkAltarIsValid(world, pos, i)) - { - return i; - } - } - - return 1; - } - - public static boolean checkAltarIsValid(World world, BlockPos pos, int altarTier) - { - List list = UpgradedAltars.getAltarUpgradeListForTier(altarTier); - - for (AltarComponent ac : list) - { - BlockPos newPos = pos.add(ac.getX(), ac.getY(), ac.getZ()); - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - - if (ac.isBloodRune()) - { - if (!(block instanceof BlockBloodRune)) - { - return false; - } - } else - { - int metadata = block.getMetaFromState(state); - - if (((ac.getBlock() != block) || (ac.getMetadata() != metadata)) && !(ac.getBlock() == Blocks.stonebrick && !world.isAirBlock(newPos))) - { - return false; - } - } - } - - return true; - } - - public static AltarUpgradeComponent getUpgrades(World world, BlockPos pos, int altarTier) - { - if(world.isRemote) - { - return null; - } - AltarUpgradeComponent upgrades = new AltarUpgradeComponent(); - List list = UpgradedAltars.getAltarUpgradeListForTier(altarTier); - - for (AltarComponent ac : list) - { - BlockPos newPos = pos.add(ac.getX(), ac.getY(), ac.getZ()); - - if (ac.isUpgradeSlot()) - { - //Currently checks the getRuneEffect. - //TODO Change so that it uses the metadata instead, with the BlockID. - IBlockState state = world.getBlockState(newPos); - Block testBlock = state.getBlock(); - int meta = testBlock.getMetaFromState(state); - - if (testBlock instanceof BlockBloodRune) - { - if (testBlock instanceof IFadedRune && altarTier > ((IFadedRune)testBlock).getAltarTierLimit(meta)) - { - return UpgradedAltars.getUpgrades(world, pos, ((IFadedRune)testBlock).getAltarTierLimit(meta)); - } - - switch (((BlockBloodRune) testBlock).getRuneEffect(meta)) - { - case 1: - upgrades.addSpeedUpgrade(); - break; - - case 2: - upgrades.addEfficiencyUpgrade(); - break; - - case 3: - upgrades.addSacrificeUpgrade(); - break; - - case 4: - upgrades.addSelfSacrificeUpgrade(); - break; - - case 5: - upgrades.addaltarCapacitiveUpgrade(); - break; - - case 6: - upgrades.addDisplacementUpgrade(); - break; - - case 7: - upgrades.addorbCapacitiveUpgrade(); - break; - - case 8: - upgrades.addBetterCapacitiveUpgrade(); - break; - - case 9: - upgrades.addAccelerationUpgrade(); - break; - } - } - } - } - - return upgrades; - } - - public static void loadAltars() - { - secondTierAltar.add(new AltarComponent(-1, -1, -1, ModBlocks.bloodRune, 0, true, false)); - secondTierAltar.add(new AltarComponent(0, -1, -1, ModBlocks.bloodRune, 0, true, true)); - secondTierAltar.add(new AltarComponent(1, -1, -1, ModBlocks.bloodRune, 0, true, false)); - secondTierAltar.add(new AltarComponent(-1, -1, 0, ModBlocks.bloodRune, 0, true, true)); - secondTierAltar.add(new AltarComponent(1, -1, 0, ModBlocks.bloodRune, 0, true, true)); - secondTierAltar.add(new AltarComponent(-1, -1, 1, ModBlocks.bloodRune, 0, true, false)); - secondTierAltar.add(new AltarComponent(0, -1, 1, ModBlocks.bloodRune, 0, true, true)); - secondTierAltar.add(new AltarComponent(1, -1, 1, ModBlocks.bloodRune, 0, true, false)); - thirdTierAltar.add(new AltarComponent(-1, -1, -1, ModBlocks.bloodRune, 0, true, true)); - thirdTierAltar.add(new AltarComponent(0, -1, -1, ModBlocks.bloodRune, 0, true, true)); - thirdTierAltar.add(new AltarComponent(1, -1, -1, ModBlocks.bloodRune, 0, true, true)); - thirdTierAltar.add(new AltarComponent(-1, -1, 0, ModBlocks.bloodRune, 0, true, true)); - thirdTierAltar.add(new AltarComponent(1, -1, 0, ModBlocks.bloodRune, 0, true, true)); - thirdTierAltar.add(new AltarComponent(-1, -1, 1, ModBlocks.bloodRune, 0, true, true)); - thirdTierAltar.add(new AltarComponent(0, -1, 1, ModBlocks.bloodRune, 0, true, true)); - thirdTierAltar.add(new AltarComponent(1, -1, 1, ModBlocks.bloodRune, 0, true, true)); - thirdTierAltar.add(new AltarComponent(-3, -1, -3, Blocks.stonebrick, 0, false, false)); - thirdTierAltar.add(new AltarComponent(-3, 0, -3, Blocks.stonebrick, 0, false, false)); - thirdTierAltar.add(new AltarComponent(3, -1, -3, Blocks.stonebrick, 0, false, false)); - thirdTierAltar.add(new AltarComponent(3, 0, -3, Blocks.stonebrick, 0, false, false)); - thirdTierAltar.add(new AltarComponent(-3, -1, 3, Blocks.stonebrick, 0, false, false)); - thirdTierAltar.add(new AltarComponent(-3, 0, 3, Blocks.stonebrick, 0, false, false)); - thirdTierAltar.add(new AltarComponent(3, -1, 3, Blocks.stonebrick, 0, false, false)); - thirdTierAltar.add(new AltarComponent(3, 0, 3, Blocks.stonebrick, 0, false, false)); - thirdTierAltar.add(new AltarComponent(-3, 1, -3, Blocks.glowstone, 0, false, false)); - thirdTierAltar.add(new AltarComponent(3, 1, -3, Blocks.glowstone, 0, false, false)); - thirdTierAltar.add(new AltarComponent(-3, 1, 3, Blocks.glowstone, 0, false, false)); - thirdTierAltar.add(new AltarComponent(3, 1, 3, Blocks.glowstone, 0, false, false)); - - for (int i = -2; i <= 2; i++) - { - thirdTierAltar.add(new AltarComponent(3, -2, i, ModBlocks.bloodRune, 0, true, true)); - thirdTierAltar.add(new AltarComponent(-3, -2, i, ModBlocks.bloodRune, 0, true, true)); - thirdTierAltar.add(new AltarComponent(i, -2, 3, ModBlocks.bloodRune, 0, true, true)); - thirdTierAltar.add(new AltarComponent(i, -2, -3, ModBlocks.bloodRune, 0, true, true)); - } - - fourthTierAltar.addAll(thirdTierAltar); - - for (int i = -3; i <= 3; i++) - { - fourthTierAltar.add(new AltarComponent(5, -3, i, ModBlocks.bloodRune, 0, true, true)); - fourthTierAltar.add(new AltarComponent(-5, -3, i, ModBlocks.bloodRune, 0, true, true)); - fourthTierAltar.add(new AltarComponent(i, -3, 5, ModBlocks.bloodRune, 0, true, true)); - fourthTierAltar.add(new AltarComponent(i, -3, -5, ModBlocks.bloodRune, 0, true, true)); - } - - for (int i = -2; i <= 1; i++) - { - fourthTierAltar.add(new AltarComponent(5, i, 5, Blocks.stonebrick, 0, false, false)); - fourthTierAltar.add(new AltarComponent(5, i, -5, Blocks.stonebrick, 0, false, false)); - fourthTierAltar.add(new AltarComponent(-5, i, -5, Blocks.stonebrick, 0, false, false)); - fourthTierAltar.add(new AltarComponent(-5, i, 5, Blocks.stonebrick, 0, false, false)); - } - - fourthTierAltar.add(new AltarComponent(5, 2, 5, ModBlocks.largeBloodStoneBrick, 0, false, false)); - fourthTierAltar.add(new AltarComponent(5, 2, -5, ModBlocks.largeBloodStoneBrick, 0, false, false)); - fourthTierAltar.add(new AltarComponent(-5, 2, -5, ModBlocks.largeBloodStoneBrick, 0, false, false)); - fourthTierAltar.add(new AltarComponent(-5, 2, 5, ModBlocks.largeBloodStoneBrick, 0, false, false)); - fifthTierAltar.addAll(fourthTierAltar); - fifthTierAltar.add(new AltarComponent(-8, -3, 8, Blocks.beacon, 0, false, false)); - fifthTierAltar.add(new AltarComponent(-8, -3, -8, Blocks.beacon, 0, false, false)); - fifthTierAltar.add(new AltarComponent(8, -3, -8, Blocks.beacon, 0, false, false)); - fifthTierAltar.add(new AltarComponent(8, -3, 8, Blocks.beacon, 0, false, false)); - - for (int i = -6; i <= 6; i++) - { - fifthTierAltar.add(new AltarComponent(8, -4, i, ModBlocks.bloodRune, 0, true, true)); - fifthTierAltar.add(new AltarComponent(-8, -4, i, ModBlocks.bloodRune, 0, true, true)); - fifthTierAltar.add(new AltarComponent(i, -4, 8, ModBlocks.bloodRune, 0, true, true)); - fifthTierAltar.add(new AltarComponent(i, -4, -8, ModBlocks.bloodRune, 0, true, true)); - } - - sixthTierAltar.addAll(fifthTierAltar); - - for(int i = -4; i <= 2; i++) - { - sixthTierAltar.add(new AltarComponent(11, i, 11, Blocks.stonebrick, 0, false, false)); - sixthTierAltar.add(new AltarComponent(-11, i, -11, Blocks.stonebrick, 0, false, false)); - sixthTierAltar.add(new AltarComponent(11, i, -11, Blocks.stonebrick, 0, false, false)); - sixthTierAltar.add(new AltarComponent(-11, i, 11, Blocks.stonebrick, 0, false, false)); - } - - sixthTierAltar.add(new AltarComponent(11, 3, 11, ModBlocks.blockCrystal, 0, false, false)); - sixthTierAltar.add(new AltarComponent(-11, 3, -11, ModBlocks.blockCrystal, 0, false, false)); - sixthTierAltar.add(new AltarComponent(11, 3, -11, ModBlocks.blockCrystal, 0, false, false)); - sixthTierAltar.add(new AltarComponent(-11, 3, 11, ModBlocks.blockCrystal, 0, false, false)); - - for (int i = -9; i <= 9; i++) - { - sixthTierAltar.add(new AltarComponent(11, -5, i, ModBlocks.bloodRune, 0, true, true)); - sixthTierAltar.add(new AltarComponent(-11, -5, i, ModBlocks.bloodRune, 0, true, true)); - sixthTierAltar.add(new AltarComponent(i, -5, 11, ModBlocks.bloodRune, 0, true, true)); - sixthTierAltar.add(new AltarComponent(i, -5, -11, ModBlocks.bloodRune, 0, true, true)); - } - } - - public static List getAltarUpgradeListForTier(int tier) - { - switch (tier) - { - case 2: - return secondTierAltar; - - case 3: - return thirdTierAltar; - - case 4: - return fourthTierAltar; - - case 5: - return fifthTierAltar; - - case 6: - return sixthTierAltar; - } - - return null; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/book/BloodMagicGuide.java b/src/main/java/WayofTime/alchemicalWizardry/common/book/BloodMagicGuide.java deleted file mode 100644 index 071bfd5a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/book/BloodMagicGuide.java +++ /dev/null @@ -1,836 +0,0 @@ -//package WayofTime.alchemicalWizardry.common.book; -// -//import java.awt.Color; -//import java.util.ArrayList; -//import java.util.List; -// -//import net.minecraft.item.ItemStack; -//import net.minecraft.item.crafting.IRecipe; -//import net.minecraft.util.ResourceLocation; -//import net.minecraft.util.StatCollector; -//import WayofTime.alchemicalWizardry.AlchemicalWizardry; -//import WayofTime.alchemicalWizardry.ModBlocks; -//import WayofTime.alchemicalWizardry.ModItems; -//import WayofTime.alchemicalWizardry.api.guide.OrbRecipeRenderer; -//import WayofTime.alchemicalWizardry.api.guide.PageAltarRecipe; -//import WayofTime.alchemicalWizardry.common.guide.RecipeHolder; -//import amerifrance.guideapi.api.GuideRegistry; -//import amerifrance.guideapi.api.abstraction.CategoryAbstract; -//import amerifrance.guideapi.api.abstraction.EntryAbstract; -//import amerifrance.guideapi.api.abstraction.IPage; -//import amerifrance.guideapi.api.base.Book; -//import amerifrance.guideapi.api.util.BookBuilder; -//import amerifrance.guideapi.api.util.PageHelper; -//import amerifrance.guideapi.categories.CategoryItemStack; -//import amerifrance.guideapi.entries.EntryUniText; -//import amerifrance.guideapi.pages.PageIRecipe; -//import amerifrance.guideapi.pages.PageUnlocImage; -// -//public class BloodMagicGuide -//{ -// public static Book bloodMagicGuide; -// public static List categories = new ArrayList(); -// -// public static void registerGuide() -// { -// registerArchitectBook(); -// registerRitualBook(); -// registerDemonBook(); -// registerSpellBook(); -// registerAlchemyBook(); -// -// BookBuilder bmBookBuilder = new BookBuilder(); -// bmBookBuilder.setCategories(categories).setUnlocBookTitle("guide.BloodMagic.book.title").setUnlocWelcomeMessage("guide.BloodMagic.welcomeMessage").setUnlocDisplayName("guide.BloodMagic.book.name").setBookColor(new Color(190, 10, 0)).setAuthor("--Blood Magic"); -// -//// bloodMagicGuide = new Book(categories, "guide.BloodMagic.book.title", "guide.BloodMagic.welcomeMessage", "guide.BloodMagic.book.name", new Color(190, 10, 0)); -// bloodMagicGuide = bmBookBuilder.build(); -// GuideRegistry.registerBook(bloodMagicGuide); -// } -// -// public static PageIRecipe getOrbPageForRecipe(IRecipe recipe) -// { -// return new PageIRecipe(recipe, new OrbRecipeRenderer(recipe)); -// } -// -// public static void registerArchitectBook() -// { -// List entries = new ArrayList(); -// -// ArrayList introPages = new ArrayList(); -// introPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.intro"))); -// entries.add(new EntryUniText(introPages, "guide.BloodMagic.entryName.architect.intro")); -// -// ArrayList bloodAltarPages = new ArrayList(); -// bloodAltarPages.add(new PageIRecipe(RecipeHolder.bloodAltarRecipe)); -// bloodAltarPages.add(new PageIRecipe(RecipeHolder.knifeRecipe)); -// bloodAltarPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.bloodAltar.1"))); -// bloodAltarPages.add(new PageAltarRecipe(RecipeHolder.weakBloodOrbRecipe)); -// bloodAltarPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.bloodAltar.2"))); -// entries.add(new EntryUniText(bloodAltarPages, "guide.BloodMagic.entryName.architect.bloodAltar")); -// -// ArrayList soulNetworkPages = new ArrayList(); -// soulNetworkPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.soulNetwork"))); -// entries.add(new EntryUniText(soulNetworkPages, "guide.BloodMagic.entryName.architect.soulNetwork")); -// -// ArrayList blankSlatePages = new ArrayList(); -// blankSlatePages.add(new PageAltarRecipe(RecipeHolder.blankSlateRecipe)); -// blankSlatePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.blankSlate"))); -// entries.add(new EntryUniText(blankSlatePages, "guide.BloodMagic.entryName.architect.blankSlate")); -// -// ArrayList divinationSigilPages = new ArrayList(); -// divinationSigilPages.add(getOrbPageForRecipe(RecipeHolder.divinationSigilRecipe)); -// divinationSigilPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.divination"))); -// entries.add(new EntryUniText(divinationSigilPages, "guide.BloodMagic.entryName.architect.divination")); -// -// ArrayList waterSigilPages = new ArrayList(); -// waterSigilPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.waterSigil.1"))); -// waterSigilPages.add(getOrbPageForRecipe(RecipeHolder.waterSigilRecipe)); -// waterSigilPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.waterSigil.2"))); -// entries.add(new EntryUniText(waterSigilPages, "guide.BloodMagic.entryName.architect.waterSigil")); -// -// ArrayList lavaCrystalPages = new ArrayList(); -// lavaCrystalPages.add(getOrbPageForRecipe(RecipeHolder.lavaCrystalRecipe)); -// lavaCrystalPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.lavaCrystal"))); -// entries.add(new EntryUniText(lavaCrystalPages, "guide.BloodMagic.entryName.architect.lavaCrystal")); -// -// ArrayList hellHarvestPages = new ArrayList(); -// hellHarvestPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.hellHarvest"))); -// entries.add(new EntryUniText(hellHarvestPages, "guide.BloodMagic.entryName.architect.hellHarvest")); -// -// ArrayList lavaSigilPages = new ArrayList(); -// lavaSigilPages.add(new PageIRecipe(RecipeHolder.lavaSigilRecipe)); -// lavaSigilPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.lavaSigil"))); -// entries.add(new EntryUniText(lavaSigilPages, "guide.BloodMagic.entryName.architect.lavaSigil")); -// -// ArrayList blankRunePages = new ArrayList(); -// blankRunePages.add(getOrbPageForRecipe(RecipeHolder.blankRuneRecipe)); -// blankRunePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.blankRunes.1"))); -// blankRunePages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/altars/T2.png"), true)); -// blankRunePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.blankRunes.2"))); -// entries.add(new EntryUniText(blankRunePages, "guide.BloodMagic.entryName.architect.blankRunes")); -// -// ArrayList speedRunePages = new ArrayList(); -// speedRunePages.add(new PageIRecipe(RecipeHolder.speedRuneRecipe)); -// speedRunePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.speedRunes"))); -// entries.add(new EntryUniText(speedRunePages, "guide.BloodMagic.entryName.architect.speedRunes")); -// -// ArrayList apprenticeOrbPages = new ArrayList(); -// apprenticeOrbPages.add(new PageAltarRecipe(RecipeHolder.apprenticeBloodOrbRecipe)); -// apprenticeOrbPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.apprenticeOrb"))); -// entries.add(new EntryUniText(apprenticeOrbPages, "guide.BloodMagic.entryName.architect.apprenticeOrb")); -// -// ArrayList voidSigilPages = new ArrayList(); -// voidSigilPages.add(getOrbPageForRecipe(RecipeHolder.voidSigilRecipe)); -// voidSigilPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.voidSigil"))); -// entries.add(new EntryUniText(voidSigilPages, "guide.BloodMagic.entryName.architect.voidSigil")); -// -// ArrayList airSigilPages = new ArrayList(); -// airSigilPages.add(getOrbPageForRecipe(RecipeHolder.airSigilRecipe)); -// airSigilPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.airSigil"))); -// entries.add(new EntryUniText(airSigilPages, "guide.BloodMagic.entryName.architect.airSigil")); -// -// ArrayList sightSigilPages = new ArrayList(); -// sightSigilPages.add(getOrbPageForRecipe(RecipeHolder.sightSigilRecipe)); -// sightSigilPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.sightSigil"))); -// entries.add(new EntryUniText(sightSigilPages, "guide.BloodMagic.entryName.architect.sightSigil")); -// -// ArrayList advancedAltarPages = new ArrayList(); -// advancedAltarPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.advancedAltar"))); -// entries.add(new EntryUniText(advancedAltarPages, "guide.BloodMagic.entryName.architect.advancedAltar")); -// -// ArrayList fastMinerPages = new ArrayList(); -// fastMinerPages.add(getOrbPageForRecipe(RecipeHolder.fastMinerRecipe)); -// fastMinerPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.fastMiner"))); -// entries.add(new EntryUniText(fastMinerPages, "guide.BloodMagic.entryName.architect.fastMiner")); -// -// ArrayList soulFrayPages = new ArrayList(); -// soulFrayPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.soulFray"))); -// entries.add(new EntryUniText(soulFrayPages, "guide.BloodMagic.entryName.architect.soulFray")); -// -// ArrayList greenGrovePages = new ArrayList(); -// greenGrovePages.add(getOrbPageForRecipe(RecipeHolder.greenGroveRecipe)); -// greenGrovePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.greenGrove"))); -// entries.add(new EntryUniText(greenGrovePages, "guide.BloodMagic.entryName.architect.greenGrove")); -// -// ArrayList daggerPages = new ArrayList(); -// daggerPages.add(new PageAltarRecipe(RecipeHolder.daggerRecipe)); -// daggerPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.dagger"))); -// entries.add(new EntryUniText(daggerPages, "guide.BloodMagic.entryName.architect.dagger")); -// -// ArrayList sacrificePages = new ArrayList(); -// sacrificePages.add(getOrbPageForRecipe(RecipeHolder.selfSacrificeRuneRecipe)); -// sacrificePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.sacrifice.1"))); -// sacrificePages.add(getOrbPageForRecipe(RecipeHolder.sacrificeRuneRecipe)); -// sacrificePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.sacrifice.2"))); -// entries.add(new EntryUniText(sacrificePages, "guide.BloodMagic.entryName.architect.sacrifice")); -// -// ArrayList bloodPackPages = new ArrayList(); -// bloodPackPages.add(new PageIRecipe(RecipeHolder.bloodPackRecipe)); -// bloodPackPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.bloodPack"))); -// entries.add(new EntryUniText(bloodPackPages, "guide.BloodMagic.entryName.architect.bloodPack")); -// -// ArrayList fivePeoplePages = new ArrayList(); -// fivePeoplePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.fivePeople"))); -// entries.add(new EntryUniText(fivePeoplePages, "guide.BloodMagic.entryName.architect.fivePeople")); -// -// ArrayList tier3Pages = new ArrayList(); -// tier3Pages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/altars/T3.png"), true)); -// tier3Pages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.tier3"))); -// entries.add(new EntryUniText(tier3Pages, "guide.BloodMagic.entryName.architect.tier3")); -// -// ArrayList magicianOrbPages = new ArrayList(); -// magicianOrbPages.add(new PageAltarRecipe(RecipeHolder.magicianBloodOrbRecipe)); -// magicianOrbPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.magicianOrb"))); -// entries.add(new EntryUniText(magicianOrbPages, "guide.BloodMagic.entryName.architect.magicianOrb")); -// -// ArrayList newRunePages = new ArrayList(); -// newRunePages.add(getOrbPageForRecipe(RecipeHolder.capacityRuneRecipe)); -// newRunePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.newRune.1"))); -// newRunePages.add(getOrbPageForRecipe(RecipeHolder.dislocationRuneRecipe)); -// newRunePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.newRune.2"))); -// entries.add(new EntryUniText(newRunePages, "guide.BloodMagic.entryName.architect.newRune")); -// -// ArrayList magnetismPages = new ArrayList(); -// magnetismPages.add(getOrbPageForRecipe(RecipeHolder.magnetismSigilRecipe)); -// magnetismPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.magnetism"))); -// entries.add(new EntryUniText(magnetismPages, "guide.BloodMagic.entryName.architect.magnetism")); -// -// ArrayList phantomBridgePages = new ArrayList(); -// phantomBridgePages.add(getOrbPageForRecipe(RecipeHolder.phantomBridgeRecipe)); -// phantomBridgePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.phantomBridge"))); -// entries.add(new EntryUniText(phantomBridgePages, "guide.BloodMagic.entryName.architect.phantomBridge")); -// -// ArrayList holdingPages = new ArrayList(); -// holdingPages.add(getOrbPageForRecipe(RecipeHolder.holdingSigilRecipe)); -// holdingPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.holding"))); -// entries.add(new EntryUniText(holdingPages, "guide.BloodMagic.entryName.architect.holding")); -// -// ArrayList elementalAffinityPages = new ArrayList(); -// elementalAffinityPages.add(getOrbPageForRecipe(RecipeHolder.affinitySigilRecipe)); -// elementalAffinityPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.elementalAffinity"))); -// entries.add(new EntryUniText(elementalAffinityPages, "guide.BloodMagic.entryName.architect.elementalAffinity")); -// -// ArrayList ritualStonesPages = new ArrayList(); -// ritualStonesPages.add(getOrbPageForRecipe(RecipeHolder.ritualStoneRecipe)); -// ritualStonesPages.add(getOrbPageForRecipe(RecipeHolder.masterStoneRecipe)); -// ritualStonesPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.ritualStones"))); -// entries.add(new EntryUniText(ritualStonesPages, "guide.BloodMagic.entryName.architect.ritualStones")); -// -// ArrayList bloodLampPages = new ArrayList(); -// bloodLampPages.add(getOrbPageForRecipe(RecipeHolder.bloodLampRecipe)); -// bloodLampPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.bloodLamp"))); -// entries.add(new EntryUniText(bloodLampPages, "guide.BloodMagic.entryName.architect.bloodLamp")); -// -// ArrayList boundArmourPages = new ArrayList(); -// boundArmourPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.boundArmour.1"))); -// boundArmourPages.add(new PageIRecipe(RecipeHolder.emptySocketRecipe)); -// boundArmourPages.add(new PageAltarRecipe(RecipeHolder.filledSocketRecipe)); -// boundArmourPages.add(getOrbPageForRecipe(RecipeHolder.soulForgeRecipe)); -// boundArmourPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.boundArmour.2"))); -// entries.add(new EntryUniText(boundArmourPages, "guide.BloodMagic.entryName.architect.boundArmour")); -// -// if(AlchemicalWizardry.isThaumcraftLoaded) -// { -// ArrayList sanguineArmourPages = new ArrayList(); -// sanguineArmourPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.sanguineArmour"), new ItemStack(ModItems.sanguineRobe))); -// entries.add(new EntryUniText(sanguineArmourPages, "guide.BloodMagic.entryName.architect.sanguineArmour")); -// } -// -// ArrayList soulSuppressPages = new ArrayList(); -// soulSuppressPages.add(new PageIRecipe(RecipeHolder.inhibitorRecipe)); -// soulSuppressPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.soulSuppress"))); -// entries.add(new EntryUniText(soulSuppressPages, "guide.BloodMagic.entryName.architect.soulSuppress")); -// -// ArrayList ritualDivinerPages = new ArrayList(); -// ritualDivinerPages.add(new PageIRecipe(RecipeHolder.ritualDiviner1Recipe)); -// ritualDivinerPages.add(new PageIRecipe(RecipeHolder.ritualDiviner2Recipe)); -// ritualDivinerPages.add(new PageIRecipe(RecipeHolder.ritualDiviner3Recipe)); -// ritualDivinerPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.ritualDiviner"))); -// entries.add(new EntryUniText(ritualDivinerPages, "guide.BloodMagic.entryName.architect.ritualDiviner")); -// -// ArrayList bloodShardPages = new ArrayList(); -// bloodShardPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.bloodShard"), new ItemStack(ModItems.weakBloodShard))); -// entries.add(new EntryUniText(bloodShardPages, "guide.BloodMagic.entryName.architect.bloodShard")); -// -// ArrayList tier4AltarPages = new ArrayList(); -// tier4AltarPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.tier4Altar.1"))); -// tier4AltarPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/altars/T4.png"), true)); -// tier4AltarPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.tier4Altar.2"))); -// entries.add(new EntryUniText(tier4AltarPages, "guide.BloodMagic.entryName.architect.tier4Altar")); -// -// ArrayList masterOrbPages = new ArrayList(); -// masterOrbPages.add(new PageAltarRecipe(RecipeHolder.masterBloodOrbRecipe)); -// masterOrbPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.masterOrb"))); -// entries.add(new EntryUniText(masterOrbPages, "guide.BloodMagic.entryName.architect.masterOrb")); -// -// ArrayList whirlwindPages = new ArrayList(); -// whirlwindPages.add(getOrbPageForRecipe(RecipeHolder.whirlwindSigilRecipe)); -// whirlwindPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.whirlwind"))); -// entries.add(new EntryUniText(whirlwindPages, "guide.BloodMagic.entryName.architect.whirlwind")); -// -// ArrayList compressionPages = new ArrayList(); -// compressionPages.add(getOrbPageForRecipe(RecipeHolder.compressionSigilRecipe)); -// compressionPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.compression"))); -// entries.add(new EntryUniText(compressionPages, "guide.BloodMagic.entryName.architect.compression")); -// -// ArrayList severancePages = new ArrayList(); -// severancePages.add(getOrbPageForRecipe(RecipeHolder.enderSeveranceSigilRecipe)); -// severancePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.severance"))); -// entries.add(new EntryUniText(severancePages, "guide.BloodMagic.entryName.architect.severance")); -// -// ArrayList teleposerPages = new ArrayList(); -// teleposerPages.add(new PageAltarRecipe(RecipeHolder.teleposerFocusRecipe1)); -// teleposerPages.add(new PageIRecipe(RecipeHolder.teleposerRecipe)); -// teleposerPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.teleposer"))); -// entries.add(new EntryUniText(teleposerPages, "guide.BloodMagic.entryName.architect.teleposer")); -// -// ArrayList suppressionPages = new ArrayList(); -// suppressionPages.add(getOrbPageForRecipe(RecipeHolder.suppressionSigilRecipe)); -// suppressionPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.suppression"))); -// entries.add(new EntryUniText(suppressionPages, "guide.BloodMagic.entryName.architect.suppression")); -// -// ArrayList superiorCapacityPages = new ArrayList(); -// superiorCapacityPages.add(getOrbPageForRecipe(RecipeHolder.superiorCapacityRecipe)); -// superiorCapacityPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.superiorCapacity"))); -// entries.add(new EntryUniText(superiorCapacityPages, "guide.BloodMagic.entryName.architect.superiorCapacity")); -// -// ArrayList orbRunePages = new ArrayList(); -// orbRunePages.add(getOrbPageForRecipe(RecipeHolder.orbRuneRecipe)); -// orbRunePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.orbRune"))); -// entries.add(new EntryUniText(orbRunePages, "guide.BloodMagic.entryName.architect.orbRune")); -// -// ArrayList fieldTripPages = new ArrayList(); -// fieldTripPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.fieldTrip"))); -// entries.add(new EntryUniText(fieldTripPages, "guide.BloodMagic.entryName.architect.fieldTrip")); -// -// ArrayList bindingKeyPages = new ArrayList(); -// bindingKeyPages.add(new PageIRecipe(RecipeHolder.keyOfBindingRecipe)); -// bindingKeyPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.bindingKey"))); -// entries.add(new EntryUniText(bindingKeyPages, "guide.BloodMagic.entryName.architect.bindingKey")); -// -// ArrayList tier5AltarPages = new ArrayList(); -// tier5AltarPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/altars/T5.png"), true)); -// tier5AltarPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.tier5Altar"))); -// entries.add(new EntryUniText(tier5AltarPages, "guide.BloodMagic.entryName.architect.tier5Altar")); -// -// ArrayList priceOfPowerPages = new ArrayList(); -// priceOfPowerPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.priceOfPower"))); -// entries.add(new EntryUniText(priceOfPowerPages, "guide.BloodMagic.entryName.architect.priceOfPower")); -// -// ArrayList demonicOrbPages = new ArrayList(); -// demonicOrbPages.add(new PageAltarRecipe(RecipeHolder.archmageBloodOrbRecipe)); -// demonicOrbPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.demonicOrb"))); -// entries.add(new EntryUniText(demonicOrbPages, "guide.BloodMagic.entryName.architect.demonicOrb")); -// -// ArrayList energyBazookaPages = new ArrayList(); -// demonicOrbPages.add(getOrbPageForRecipe(RecipeHolder.energyBazookaRecipe)); -// energyBazookaPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.energyBazooka"))); -// entries.add(new EntryUniText(energyBazookaPages, "guide.BloodMagic.entryName.architect.energyBazooka")); -// -// ArrayList accelerationRunePages = new ArrayList(); -// demonicOrbPages.add(getOrbPageForRecipe(RecipeHolder.accelerationRuneRecipe)); -// accelerationRunePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.accelerationRune"))); -// entries.add(new EntryUniText(accelerationRunePages, "guide.BloodMagic.entryName.architect.accelerationRune")); -// -// ArrayList harvestPages = new ArrayList(); -// demonicOrbPages.add(getOrbPageForRecipe(RecipeHolder.harvestSigilRecipe)); -// harvestPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.harvest"))); -// entries.add(new EntryUniText(harvestPages, "guide.BloodMagic.entryName.architect.harvest")); -// -// ArrayList demonProblemPages = new ArrayList(); -// demonProblemPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.demonProblem"))); -// entries.add(new EntryUniText(demonProblemPages, "guide.BloodMagic.entryName.architect.demonProblem")); -// -// ArrayList tier6AltarPages = new ArrayList(); -// tier6AltarPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/altars/T6.png"), true)); -// tier6AltarPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.tier6Altar"))); -// tier6AltarPages.add(new PageIRecipe(RecipeHolder.crystalCluserRecipe)); -// tier6AltarPages.add(new PageAltarRecipe(RecipeHolder.transcendentBloodOrbRecipe)); -// entries.add(new EntryUniText(tier6AltarPages, "guide.BloodMagic.entryName.architect.tier6Altar")); -// -// ArrayList moreThanHumanPages = new ArrayList(); -// moreThanHumanPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.architect.moreThanHuman"))); -// entries.add(new EntryUniText(moreThanHumanPages, "guide.BloodMagic.entryName.architect.moreThanHuman")); -// -// categories.add(new CategoryItemStack(entries, "guide.BloodMagic.category.architect", new ItemStack(ModItems.divinationSigil))); -// } -// -// public static void registerRitualBook() -// { -// List entries = new ArrayList(); -// -//// ArrayList testPages = new ArrayList(); -//// testPages.add(PageRitualMultiBlock.getPageForRitual("AW031Convocation")); -//// entries.add(new EntryUniText(testPages, "Test page")); -// -// -// ArrayList introPages = new ArrayList(); -// introPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.intro"))); -// entries.add(new EntryUniText(introPages, "guide.BloodMagic.entryName.rituals.intro")); -// -// ArrayList weakRitualPages = new ArrayList(); -// weakRitualPages.add(getOrbPageForRecipe(RecipeHolder.weakRitualStoneRecipe)); -// weakRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.weakRitual"))); -// entries.add(new EntryUniText(weakRitualPages, "guide.BloodMagic.entryName.rituals.weakRitual")); -// -// ArrayList ritualsPages = new ArrayList(); -// ritualsPages.add(getOrbPageForRecipe(RecipeHolder.ritualStoneRecipe)); -// ritualsPages.add(getOrbPageForRecipe(RecipeHolder.masterStoneRecipe)); -// ritualsPages.add(new PageAltarRecipe(RecipeHolder.waterScribeTool)); -// ritualsPages.add(new PageAltarRecipe(RecipeHolder.fireScribeTool)); -// ritualsPages.add(new PageAltarRecipe(RecipeHolder.earthScribeTool)); -// ritualsPages.add(new PageAltarRecipe(RecipeHolder.airScribeTool)); -// ritualsPages.add(new PageIRecipe(RecipeHolder.ritualDiviner1Recipe)); -// ritualsPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.rituals"))); -// ritualsPages.add(new PageAltarRecipe(RecipeHolder.weakActivationRecipe)); -// entries.add(new EntryUniText(ritualsPages, "guide.BloodMagic.entryName.rituals.rituals")); -// -// ArrayList waterRitualPages = new ArrayList(); -// waterRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Water.png"), true)); -// waterRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.waterRitual"))); -// entries.add(new EntryUniText(waterRitualPages, "guide.BloodMagic.entryName.rituals.waterRitual")); -// -// ArrayList lavaRitualPages = new ArrayList(); -// lavaRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Lava.png"), true)); -// lavaRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.lavaRitual"))); -// entries.add(new EntryUniText(lavaRitualPages, "guide.BloodMagic.entryName.rituals.lavaRitual")); -// -// ArrayList groveRitualPages = new ArrayList(); -// groveRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/GreenGrove.png"), true)); -// groveRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.groveRitual"))); -// entries.add(new EntryUniText(groveRitualPages, "guide.BloodMagic.entryName.rituals.groveRitual")); -// -// ArrayList interdictionRitualPages = new ArrayList(); -// interdictionRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Interdiction.png"), true)); -// interdictionRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.interdictionRitual"))); -// entries.add(new EntryUniText(interdictionRitualPages, "guide.BloodMagic.entryName.rituals.interdictionRitual")); -// -// ArrayList containmentRitualPages = new ArrayList(); -// containmentRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Containment.png"), true)); -// containmentRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.containmentRitual"))); -// entries.add(new EntryUniText(containmentRitualPages, "guide.BloodMagic.entryName.rituals.containmentRitual")); -// -// ArrayList bindingRitualPages = new ArrayList(); -// bindingRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Binding.png"), true)); -// bindingRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.bindingRitual"))); -// entries.add(new EntryUniText(bindingRitualPages, "guide.BloodMagic.entryName.rituals.bindingRitual")); -// -// ArrayList beastModePages = new ArrayList(); -// beastModePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.beastMode"))); -// entries.add(new EntryUniText(beastModePages, "guide.BloodMagic.entryName.rituals.beastMode")); -// -// ArrayList unbindingRitualPages = new ArrayList(); -// unbindingRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Unbinding.png"), true)); -// unbindingRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.unbindingRitual"))); -// entries.add(new EntryUniText(unbindingRitualPages, "guide.BloodMagic.entryName.rituals.unbindingRitual")); -// -// ArrayList jumpRitualPages = new ArrayList(); -// jumpRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Jump.png"), true)); -// jumpRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.jumpRitual"))); -// entries.add(new EntryUniText(jumpRitualPages, "guide.BloodMagic.entryName.rituals.jumpRitual")); -// -// ArrayList duskInkPages = new ArrayList(); -// duskInkPages.add(new PageAltarRecipe(RecipeHolder.duskRecipe)); -// duskInkPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.duskInk"))); -// entries.add(new EntryUniText(duskInkPages, "guide.BloodMagic.entryName.rituals.duskInk")); -// -// ArrayList magnetismRitualPages = new ArrayList(); -// magnetismRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Magnetism.png"), true)); -// magnetismRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.magnetismRitual"))); -// entries.add(new EntryUniText(magnetismRitualPages, "guide.BloodMagic.entryName.rituals.magnetismRitual")); -// -// ArrayList crusherRitualPages = new ArrayList(); -// crusherRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Crusher.png"), true)); -// crusherRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.crusherRitual"))); -// entries.add(new EntryUniText(crusherRitualPages, "guide.BloodMagic.entryName.rituals.crusherRitual")); -// -// ArrayList speedRitualPages = new ArrayList(); -// speedRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Speed.png"), true)); -// speedRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.speedRitual"))); -// entries.add(new EntryUniText(speedRitualPages, "guide.BloodMagic.entryName.rituals.speedRitual")); -// -// ArrayList shepherdRitualPages = new ArrayList(); -// shepherdRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/AnimalGrowth.png"), true)); -// shepherdRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.shepherdRitual"))); -// entries.add(new EntryUniText(shepherdRitualPages, "guide.BloodMagic.entryName.rituals.shepherdRitual")); -// -// ArrayList darkMagicPages = new ArrayList(); -// darkMagicPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.darkMagic"))); -// entries.add(new EntryUniText(darkMagicPages, "guide.BloodMagic.entryName.rituals.darkMagic")); -// -// ArrayList knifeAndSufferingRitualPages = new ArrayList(); -// knifeAndSufferingRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/WellOfSuffering.png"), true)); -// knifeAndSufferingRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.knifeAndSufferingRitual.1"))); -// knifeAndSufferingRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/FeatheredKnife.png"), true)); -// knifeAndSufferingRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.knifeAndSufferingRitual.2"))); -// entries.add(new EntryUniText(knifeAndSufferingRitualPages, "guide.BloodMagic.entryName.rituals.knifeAndSufferingRitual")); -// -// ArrayList regenerationRitualPages = new ArrayList(); -// regenerationRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Regeneration.png"), true)); -// regenerationRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.regenerationRitual"))); -// entries.add(new EntryUniText(regenerationRitualPages, "guide.BloodMagic.entryName.rituals.regenerationRitual")); -// -// ArrayList harvestFestivalPages = new ArrayList(); -// harvestFestivalPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.harvestFestival"))); -// entries.add(new EntryUniText(harvestFestivalPages, "guide.BloodMagic.entryName.rituals.harvestFestival")); -// -// ArrayList thenThereWereFivePages = new ArrayList(); -// thenThereWereFivePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.thenThereWereFive"))); -// entries.add(new EntryUniText(thenThereWereFivePages, "guide.BloodMagic.entryName.rituals.thenThereWereFive")); -// -// ArrayList alchemyRitualPages = new ArrayList(); -// alchemyRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Alchemy.png"), true)); -// alchemyRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.alchemyRitual"))); -// entries.add(new EntryUniText(alchemyRitualPages, "guide.BloodMagic.entryName.rituals.alchemyRitual")); -// -// ArrayList domeRitualPages = new ArrayList(); -// domeRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Dome.png"), true)); -// domeRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.domeRitual"))); -// entries.add(new EntryUniText(domeRitualPages, "guide.BloodMagic.entryName.rituals.domeRitual")); -// -// ArrayList awakenedCrystalPages = new ArrayList(); -// awakenedCrystalPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.awakenedCrystal"))); -// entries.add(new EntryUniText(awakenedCrystalPages, "guide.BloodMagic.entryName.rituals.awakenedCrystal")); -// -// ArrayList featheredEarthRitualPages = new ArrayList(); -// featheredEarthRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/FeatheredEarth.png"), true)); -// featheredEarthRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.featheredEarthRitual"))); -// entries.add(new EntryUniText(featheredEarthRitualPages, "guide.BloodMagic.entryName.rituals.featheredEarthRitual")); -// -// ArrayList gaiaRitualPages = new ArrayList(); -// gaiaRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Gaia.png"), true)); -// gaiaRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.gaiaRitual"))); -// entries.add(new EntryUniText(gaiaRitualPages, "guide.BloodMagic.entryName.rituals.gaiaRitual")); -// -// ArrayList condorRitualPages = new ArrayList(); -// condorRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Flight.png"), true)); -// condorRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.condorRitual"))); -// entries.add(new EntryUniText(condorRitualPages, "guide.BloodMagic.entryName.rituals.condorRitual")); -// -// ArrayList meteorRitualPages = new ArrayList(); -// meteorRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Meteor.png"), true)); -// meteorRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.meteorRitual"))); -// entries.add(new EntryUniText(meteorRitualPages, "guide.BloodMagic.entryName.rituals.meteorRitual")); -// -// ArrayList expulsionRitualPages = new ArrayList(); -// expulsionRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Expulsion.png"), true)); -// expulsionRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.expulsionRitual"))); -// entries.add(new EntryUniText(expulsionRitualPages, "guide.BloodMagic.entryName.rituals.expulsionRitual")); -// -// ArrayList costOfProgressPages = new ArrayList(); -// costOfProgressPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.costOfProgress.1"))); -// costOfProgressPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.costOfProgress.2"))); -// entries.add(new EntryUniText(costOfProgressPages, "guide.BloodMagic.entryName.rituals.costOfProgress")); -// -// ArrayList zephyrRitualPages = new ArrayList(); -// zephyrRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Zephyr.png"), true)); -// zephyrRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.zephyrRitual"))); -// entries.add(new EntryUniText(zephyrRitualPages, "guide.BloodMagic.entryName.rituals.zephyrRitual")); -// -// ArrayList harvestRitualPages = new ArrayList(); -// harvestRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Harvest.png"), true)); -// harvestRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.harvestRitual"))); -// entries.add(new EntryUniText(harvestRitualPages, "guide.BloodMagic.entryName.rituals.harvestRitual")); -// -// ArrayList eternalSoulRitualPages = new ArrayList(); -// eternalSoulRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/EternalSoul.png"), true)); -// eternalSoulRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.eternalSoulRitual"))); -// entries.add(new EntryUniText(eternalSoulRitualPages, "guide.BloodMagic.entryName.rituals.eternalSoulRitual")); -// -// ArrayList ellipsoidRitualPages = new ArrayList(); -// ellipsoidRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Ellipsoid.png"), true)); -// ellipsoidRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.ellipsoidRitual"))); -// entries.add(new EntryUniText(ellipsoidRitualPages, "guide.BloodMagic.entryName.rituals.ellipsoidRitual")); -// -// ArrayList evaporationRitualPages = new ArrayList(); -// evaporationRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Evaporation.png"), true)); -// evaporationRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.evaporationRitual"))); -// entries.add(new EntryUniText(evaporationRitualPages, "guide.BloodMagic.entryName.rituals.evaporationRitual")); -// -// ArrayList sacrosanctityRitualPages = new ArrayList(); -// sacrosanctityRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Sacrosanctity.png"), true)); -// sacrosanctityRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.sacrosanctityRitual"))); -// entries.add(new EntryUniText(sacrosanctityRitualPages, "guide.BloodMagic.entryName.rituals.sacrosanctityRitual")); -// -// ArrayList evilRitualPages = new ArrayList(); -// evilRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/VeilOfEvil.png"), true)); -// evilRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.evilRitual"))); -// entries.add(new EntryUniText(evilRitualPages, "guide.BloodMagic.entryName.rituals.evilRitual")); -// -// ArrayList stomachRitualPages = new ArrayList(); -// stomachRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Stomach.png"), true)); -// stomachRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.stomachRitual"))); -// entries.add(new EntryUniText(stomachRitualPages, "guide.BloodMagic.entryName.rituals.stomachRitual")); -// -// ArrayList reagentEffectsRitualPages = new ArrayList(); -// for(int i=1; i<=24; i++) -// { -// reagentEffectsRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.reagentEffects." + i))); -// } -// entries.add(new EntryUniText(reagentEffectsRitualPages, "guide.BloodMagic.entryName.rituals.reagentEffects")); -// -// ArrayList conclaveOfMagesPages = new ArrayList(); -// conclaveOfMagesPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.conclaveOfMages"))); -// entries.add(new EntryUniText(conclaveOfMagesPages, "guide.BloodMagic.entryName.rituals.conclaveOfMages")); -// -// ArrayList forbiddenParadisePages = new ArrayList(); -// forbiddenParadisePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.forbiddenParadise"))); -// entries.add(new EntryUniText(forbiddenParadisePages, "guide.BloodMagic.entryName.rituals.forbiddenParadise")); -// -// ArrayList convocationRitualPages = new ArrayList(); -// convocationRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/Convocation.png"), true)); -// convocationRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.convocationRitual"))); -// entries.add(new EntryUniText(convocationRitualPages, "guide.BloodMagic.entryName.rituals.convocationRitual")); -// -// ArrayList longHaulPages = new ArrayList(); -// longHaulPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.longHaul"))); -// entries.add(new EntryUniText(longHaulPages, "guide.BloodMagic.entryName.rituals.longHaul")); -// -// ArrayList phantomHandsRitualPages = new ArrayList(); -// phantomHandsRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/PhantomHands.png"), true)); -// phantomHandsRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.phantomHandsRitual"))); -// entries.add(new EntryUniText(phantomHandsRitualPages, "guide.BloodMagic.entryName.rituals.phantomHandsRitual")); -// -// ArrayList anvilRitualPages = new ArrayList(); -// anvilRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/BeatingAnvil.png"), true)); -// anvilRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.anvilRitual"))); -// entries.add(new EntryUniText(anvilRitualPages, "guide.BloodMagic.entryName.rituals.anvilRitual")); -// -// ArrayList dawnInkPages = new ArrayList(); -// dawnInkPages.add(new PageAltarRecipe(RecipeHolder.dawnRecipe)); -// dawnInkPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.dawnInk"))); -// entries.add(new EntryUniText(dawnInkPages, "guide.BloodMagic.entryName.rituals.dawnInk")); -// -// ArrayList symmetryRitualPages = new ArrayList(); -// symmetryRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/SymmetryOmega.png"), true)); -// symmetryRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.symmetryRitual"))); -// entries.add(new EntryUniText(symmetryRitualPages, "guide.BloodMagic.entryName.rituals.symmetryRitual")); -// -// ArrayList stallingRitualPages = new ArrayList(); -// stallingRitualPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/rituals/StallingOmega.png"), true)); -// stallingRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.stallingRitual"))); -// entries.add(new EntryUniText(stallingRitualPages, "guide.BloodMagic.entryName.rituals.stallingRitual")); -// -// ArrayList newMoonRitualPages = new ArrayList(); -// newMoonRitualPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.rituals.newMoonRitual"))); -// entries.add(new EntryUniText(newMoonRitualPages, "guide.BloodMagic.entryName.rituals.newMoonRitual")); -// -// categories.add(new CategoryItemStack(entries, "guide.BloodMagic.category.rituals", new ItemStack(ModBlocks.blockMasterStone))); -// } -// -// public static void registerDemonBook() -// { -// List entries = new ArrayList(); -// -// ArrayList ashesPages = new ArrayList(); -// ashesPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.demons.ashes"))); -// entries.add(new EntryUniText(ashesPages, "guide.BloodMagic.entryName.demons.ashes")); -// -// ArrayList tamedDemonPages = new ArrayList(); -// tamedDemonPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.demons.tamedDemon"))); -// entries.add(new EntryUniText(tamedDemonPages, "guide.BloodMagic.entryName.demons.tamedDemon")); -// -// ArrayList futurePages = new ArrayList(); -// futurePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.demons.future"))); -// entries.add(new EntryUniText(futurePages, "guide.BloodMagic.entryName.demons.future")); -// -// ArrayList knightPages = new ArrayList(); -// knightPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.demons.knight"))); -// entries.add(new EntryUniText(knightPages, "guide.BloodMagic.entryName.demons.knight")); -// -// ArrayList demonShardPages = new ArrayList(); -// demonShardPages.addAll(PageHelper.pagesForLongText((StatCollector.translateToLocal("aw.entries.demons.demonShard")), new ItemStack(ModItems.demonBloodShard))); -// entries.add(new EntryUniText(demonShardPages, "guide.BloodMagic.entryName.demons.demonShard")); -// -// -// ArrayList demonSummoningPages = new ArrayList(); -// demonSummoningPages.add(new PageIRecipe(RecipeHolder.arcanePedestalRecipe)); -// demonSummoningPages.add(new PageIRecipe(RecipeHolder.arcanePlinthRecipe)); -// demonSummoningPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/demons/Ring1.png"), true)); -// demonSummoningPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/demons/Ring2.png"), true)); -// demonSummoningPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.demons.demonSummoning"))); -// entries.add(new EntryUniText(demonSummoningPages, "guide.BloodMagic.entryName.demons.demonSummoning")); -// -// ArrayList keysGatePages = new ArrayList(); -// for(int i=1; i<=10; i++) -// { -// keysGatePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.demons.keysGate." + i))); -// } -// entries.add(new EntryUniText(keysGatePages, "guide.BloodMagic.entryName.demons.keysGate")); -// -// ArrayList futurePlansPages = new ArrayList(); -// futurePlansPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.demons.futurePlans"))); -// entries.add(new EntryUniText(futurePlansPages, "guide.BloodMagic.entryName.demons.futurePlans")); -// -// ArrayList demonInvasionPages = new ArrayList(); -// demonInvasionPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.demons.demonInvasion"))); -// entries.add(new EntryUniText(demonInvasionPages, "guide.BloodMagic.entryName.demons.demonInvasion")); -// -// ArrayList observationsPages = new ArrayList(); -// observationsPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.demons.observations"))); -// entries.add(new EntryUniText(observationsPages, "guide.BloodMagic.entryName.demons.observations")); -// -// categories.add(new CategoryItemStack(entries, "guide.BloodMagic.category.demons", new ItemStack(ModItems.demonBloodShard))); -// } -// -// public static void registerSpellBook() -// { -// List entries = new ArrayList(); -// -// ArrayList demonGirlPages = new ArrayList(); -// demonGirlPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.spells.demonGirl"))); -// entries.add(new EntryUniText(demonGirlPages, "guide.BloodMagic.entryName.spells.demonGirl")); -// -// ArrayList spellTablePages = new ArrayList(); -// spellTablePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.spells.spellTable.1"))); -// spellTablePages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/spells/SimpleSpellTable.png"), true)); -// spellTablePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.spells.spellTable.2"))); -// entries.add(new EntryUniText(spellTablePages, "guide.BloodMagic.entryName.spells.spellTable")); -// -// ArrayList simpleEffectsPages = new ArrayList(); -// for(int i=1; i<=11; i++) -// { -// simpleEffectsPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.spells.simpleEffects." + i))); -// } -// entries.add(new EntryUniText(simpleEffectsPages, "guide.BloodMagic.entryName.spells.simpleEffects")); -// -// ArrayList tableAndSkullsPages = new ArrayList(); -// tableAndSkullsPages.add(new PageAltarRecipe(RecipeHolder.blankSpellRecipe)); -// tableAndSkullsPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.spells.tableAndSkulls.1"))); -// tableAndSkullsPages.add(getOrbPageForRecipe(RecipeHolder.spellTableRecipe)); -// tableAndSkullsPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.spells.tableAndSkulls.2"))); -// entries.add(new EntryUniText(tableAndSkullsPages, "guide.BloodMagic.entryName.spells.tableAndSkulls")); -// -// ArrayList timePassesPages = new ArrayList(); -// timePassesPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.spells.timePasses"))); -// entries.add(new EntryUniText(timePassesPages, "guide.BloodMagic.entryName.spells.timePasses")); -// -// ArrayList complexSpellBasicsPages = new ArrayList(); -// complexSpellBasicsPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.spells.complexSpellBasics.1"))); -// complexSpellBasicsPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/spells/Paradigm.png"), true)); -// -// for(int i=2; i<=6; i++) -// complexSpellBasicsPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.spells.complexSpellBasics." + i))); -// -// complexSpellBasicsPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/spells/Effect.png"), true)); -// complexSpellBasicsPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.spells.complexSpellBasics.7"))); -// complexSpellBasicsPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/spells/Modifier.png"), true)); -// -// for(int i=8; i<=12; i++) -// complexSpellBasicsPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.spells.complexSpellBasics." + i))); -// -// complexSpellBasicsPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/spells/Enhancement.png"), true)); -// -// for(int i=13; i<=16; i++) -// complexSpellBasicsPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.spells.complexSpellBasics." + i))); -// -// complexSpellBasicsPages.add(new PageUnlocImage("", new ResourceLocation("alchemicalwizardry:textures/misc/screenshots/spells/Conduit.png"), true)); -// complexSpellBasicsPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.spells.complexSpellBasics.17"))); -// -// entries.add(new EntryUniText(complexSpellBasicsPages, "guide.BloodMagic.entryName.spells.complexSpellBasics")); -// -// ArrayList complexSpellEffectsPages = new ArrayList(); -// for(int i=1; i<=17; i++) -// complexSpellEffectsPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.spells.complexSpellEffects." + i))); -// entries.add(new EntryUniText(complexSpellEffectsPages, "guide.BloodMagic.entryName.spells.complexSpellEffects")); -// -// ArrayList offTopicPages = new ArrayList(); -// offTopicPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.spells.offTopic"))); -// entries.add(new EntryUniText(offTopicPages, "guide.BloodMagic.entryName.spells.offTopic")); -// -// ArrayList demonicPowerPages = new ArrayList(); -// demonicPowerPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.spells.demonicPower"))); -// entries.add(new EntryUniText(demonicPowerPages, "guide.BloodMagic.entryName.spells.demonicPower")); -// -// categories.add(new CategoryItemStack(entries, "guide.BloodMagic.category.spells", new ItemStack(ModItems.itemComplexSpellCrystal))); -// } -// -// public static void registerAlchemyBook() -// { -// List entries = new ArrayList(); -// -// ArrayList fatedMeetingPages = new ArrayList(); -// fatedMeetingPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.fatedMeeting"))); -// entries.add(new EntryUniText(fatedMeetingPages, "guide.BloodMagic.entryName.alchemy.fatedMeeting")); -// -// ArrayList firstStepsPages = new ArrayList(); -// firstStepsPages.add(getOrbPageForRecipe(RecipeHolder.alchemySetRecipe)); -// firstStepsPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.firstSteps"))); -// entries.add(new EntryUniText(firstStepsPages, "guide.BloodMagic.entryName.alchemy.firstSteps")); -// -// ArrayList chemistrySetPages = new ArrayList(); -// for(int i=1; i<=10; i++) -// chemistrySetPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.chemistrySet." + i))); -// entries.add(new EntryUniText(chemistrySetPages, "guide.BloodMagic.entryName.alchemy.chemistrySet")); -// -// ArrayList incensePages = new ArrayList(); -// incensePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.incense.1"))); -// incensePages.add(new PageIRecipe(RecipeHolder.crucibleRecipe)); -// incensePages.add(new PageIRecipe(RecipeHolder.woodAshRecipe)); -// incensePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.incense.2"))); -// incensePages.add(getOrbPageForRecipe(RecipeHolder.byrrusRecipe)); -// incensePages.add(getOrbPageForRecipe(RecipeHolder.livensRecipe)); -// incensePages.add(getOrbPageForRecipe(RecipeHolder.virRecipe)); -// incensePages.add(getOrbPageForRecipe(RecipeHolder.purpuraRecipe)); -// incensePages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.incense.3"))); -// entries.add(new EntryUniText(incensePages, "guide.BloodMagic.entryName.alchemy.incense")); -// -// ArrayList potionsPages = new ArrayList(); -// potionsPages.add(new PageAltarRecipe(RecipeHolder.flaskRecipe)); -// potionsPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.potions"))); -// entries.add(new EntryUniText(potionsPages, "guide.BloodMagic.entryName.alchemy.potions")); -// -// ArrayList reagentRevolutionPages = new ArrayList(); -// for(int i=1; i<=8; i++) -// reagentRevolutionPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.reagentRevolution." + i))); -// entries.add(new EntryUniText(reagentRevolutionPages, "guide.BloodMagic.entryName.alchemy.reagentRevolution")); -// -// ArrayList newPotionsPages = new ArrayList(); -// newPotionsPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.newPotions"))); -// entries.add(new EntryUniText(newPotionsPages, "guide.BloodMagic.entryName.alchemy.newPotions")); -// -// ArrayList soulSandPages = new ArrayList(); -// soulSandPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.soulSand"))); -// entries.add(new EntryUniText(soulSandPages, "guide.BloodMagic.entryName.alchemy.soulSand")); -// -// ArrayList timeGoesByPages = new ArrayList(); -// timeGoesByPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.timeGoesBy"))); -// entries.add(new EntryUniText(timeGoesByPages, "guide.BloodMagic.entryName.alchemy.timeGoesBy")); -// -// ArrayList catalystsPages = new ArrayList(); -// catalystsPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.catalysts"))); -// entries.add(new EntryUniText(catalystsPages, "guide.BloodMagic.entryName.alchemy.catalysts")); -// -// ArrayList activationCrystalPages = new ArrayList(); -// activationCrystalPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.activationCrystal"))); -// entries.add(new EntryUniText(activationCrystalPages, "guide.BloodMagic.entryName.alchemy.activationCrystal")); -// -// ArrayList reagentSystemPages = new ArrayList(); -// reagentSystemPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.reagentSystem.1"))); -// reagentSystemPages.add(new PageIRecipe(RecipeHolder.calcinatorRecipe)); -// reagentSystemPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.reagentSystem.2"))); -// reagentSystemPages.add(new PageIRecipe(RecipeHolder.belljarRecipe)); -// reagentSystemPages.add(new PageIRecipe(RecipeHolder.relayRecipe)); -// reagentSystemPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.reagentSystem.3"))); -// reagentSystemPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.reagentSystem.4"))); -// reagentSystemPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.reagentSystem.5"))); -// reagentSystemPages.add(new PageIRecipe(RecipeHolder.routerRecipe)); -// reagentSystemPages.add(new PageIRecipe(RecipeHolder.segmenterRecipe)); -// reagentSystemPages.add(new PageIRecipe(RecipeHolder.cleanserRecipe)); -// reagentSystemPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.reagentSystem.6"))); -// -// reagentSystemPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.reagentSystem.7"))); -// -// entries.add(new EntryUniText(reagentSystemPages, "guide.BloodMagic.entryName.alchemy.reagentSystem")); -// -// ArrayList magusSecretPages = new ArrayList(); -// magusSecretPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.magusSecret"))); -// entries.add(new EntryUniText(magusSecretPages, "guide.BloodMagic.entryName.alchemy.magusSecret")); -// -// ArrayList simpleCreationsPages = new ArrayList(); -// simpleCreationsPages.addAll(PageHelper.pagesForLongText(StatCollector.translateToLocal("aw.entries.alchemy.simpleCreations"))); -// entries.add(new EntryUniText(simpleCreationsPages, "guide.BloodMagic.entryName.alchemy.simpleCreations")); -// -// categories.add(new CategoryItemStack(entries, "guide.BloodMagic.category.alchemy", new ItemStack(ModItems.alchemyFlask))); -// } -//} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/compress/AdvancedCompressionHandler.java b/src/main/java/WayofTime/alchemicalWizardry/common/compress/AdvancedCompressionHandler.java deleted file mode 100644 index 42061aa6..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/compress/AdvancedCompressionHandler.java +++ /dev/null @@ -1,178 +0,0 @@ -package WayofTime.alchemicalWizardry.common.compress; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.compress.CompressionHandler; -import WayofTime.alchemicalWizardry.api.compress.CompressionRegistry; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class AdvancedCompressionHandler extends CompressionHandler -{ - @Override - public ItemStack compressInventory(ItemStack[] inv, World world) - { - return test(inv, true, world); - } - - public ItemStack test(ItemStack[] inv, boolean doDrain, World world) - { - for(ItemStack invStack : inv) - { - if(invStack == null) - { - continue; - } - - for(int i=2; i<=3; i++) - { - ItemStack stacky = getRecipe(invStack, world, i); - if(stacky!=null) - { - int threshold = CompressionRegistry.getItemThreshold(invStack); - - int needed = i*i; - int neededLeft = iterateThroughInventory(invStack, threshold + invStack.getMaxStackSize() - needed, inv, needed, false); - if(neededLeft <= 0) - { - iterateThroughInventory(invStack, 0, inv, needed, true); - return stacky; - } - } - } - } - - return null; - } - - public int iterateThroughInventory(ItemStack required, int kept, ItemStack[] inv, int needed, boolean doDrain) - { - int i = -1; - - for(ItemStack invStack : inv) - { - i++; - - if(invStack == null) - { - continue; - } - - if(invStack.isItemEqual(required) && (invStack.getTagCompound() == null ? required.getTagCompound() == null : invStack.getTagCompound().equals(required.getTagCompound()))) - { - int stackSize = invStack.stackSize; - int used = 0; - if(kept > 0) - { - int remainingFromStack = Math.max(stackSize - kept, 0); - used += stackSize - remainingFromStack; - } - - kept -= used; - - if(kept <= 0 && needed > 0) - { - int remainingFromStack = Math.max(stackSize - used - needed, 0); - if(doDrain) - { - invStack.stackSize = remainingFromStack + used; - if(invStack.stackSize <= 0) - { - inv[i] = null; - } - } - - needed -= (stackSize - used - remainingFromStack); - } - - if(needed <= 0) - { - return 0; - } - } - } - - return needed; - } - - public static boolean isResultStackReversible(ItemStack stack, int gridSize, World world) - { - if(stack == null) - { - return false; - } - InventoryCrafting inventory = new InventoryCrafting(new Container() - { - public boolean canInteractWith(EntityPlayer player) - { - return false; - } - }, 2, 2); - - inventory.setInventorySlotContents(0, stack); - - ItemStack returnStack = StorageBlockCraftingManager.getInstance().findMatchingRecipe(inventory, world); - if(returnStack == null) - { - return false; - } - - ItemStack compressedStack = null; - switch(gridSize) - { - case 2: - compressedStack = get22Recipe(returnStack, world); - break; - case 3: - compressedStack = get33Recipe(returnStack, world); - break; - } - - if(compressedStack == null) - { - return false; - }else - { - return SpellHelper.areItemStacksEqual(stack, compressedStack); - } - } - - public static ItemStack getRecipe(ItemStack stack, World world, int gridSize) - { - InventoryCrafting inventory = new InventoryCrafting(new Container() - { - public boolean canInteractWith(EntityPlayer player) - { - return false; - } - }, gridSize, gridSize); - for(int i=0; i 0) - { - int remainingFromStack = Math.max(stackSize - kept, 0); - used += stackSize - remainingFromStack; - } - - kept -= used; - - if(kept <= 0 && needed > 0) - { - int remainingFromStack = Math.max(stackSize - used - needed, 0); - if(doDrain) - { - invStack.stackSize = remainingFromStack + used; - if(invStack.stackSize <= 0) - { - inv[i] = null; - } - } - - needed -= (stackSize - used - remainingFromStack); - } - - if(needed <= 0) - { - return 0; - } - } - } - - return needed; - } - - public int getLeftover() - { - return this.leftover; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/compress/StorageBlockCraftingManager.java b/src/main/java/WayofTime/alchemicalWizardry/common/compress/StorageBlockCraftingManager.java deleted file mode 100644 index b8ce890d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/compress/StorageBlockCraftingManager.java +++ /dev/null @@ -1,261 +0,0 @@ -package WayofTime.alchemicalWizardry.common.compress; - -import java.util.LinkedList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class StorageBlockCraftingManager -{ - private static final StorageBlockCraftingManager instance = new StorageBlockCraftingManager(); - private List recipes = new LinkedList(); - - public static StorageBlockCraftingManager getInstance() - { - return instance; - } - - public void addStorageBlockRecipes() - { - this.recipes = new StorageBlockCraftingRecipeAssimilator().getPackingRecipes(); - - System.out.println("Total number of compression recipes: " + this.recipes.size()); -// List tempRecipeList = new LinkedList(); -// -// World world = DimensionManager.getWorld(0); -// -// for(Object obj : this.recipes) -// { -// if(obj instanceof IRecipe) -// { -// IRecipe recipe = (IRecipe)obj; -// ItemStack outputStack = recipe.getRecipeOutput(); -// if(outputStack == null || outputStack.getItem() == null) -// { -// continue; -// } -// -// if(recipe instanceof ShapedRecipes) -// { -// ShapedRecipes sRecipe = (ShapedRecipes)recipe; -// ItemStack[] input = sRecipe.recipeItems; -// -// if(outputStack.stackSize == 1 && (input.length == 9 || input.length == 4)) -// { -// tempRecipeList.add(recipe); -// }else if((outputStack.stackSize == 9 || outputStack.stackSize == 4) && input.length == 1) -// { -// tempRecipeList.add(recipe); -// } -// } -// else if(recipe instanceof ShapelessRecipes) -// { -// ShapelessRecipes sRecipe = (ShapelessRecipes)recipe; -// List input = sRecipe.recipeItems; -// -// if(outputStack.stackSize == 1 && (input.size() == 9 || input.size() == 4)) -// { -// Object obj1 = input.get(0); -// if(obj1 != null) -// { -// boolean allMatch = true; -// for(Object obj2 : input) -// { -// if(obj2 == null || !obj2.equals(obj1)) -// { -// allMatch = false; -// break; -// } -// } -// if(allMatch) -// { -// tempRecipeList.add(recipe); -// } -// } -// -// }else if((outputStack.stackSize == 9 || outputStack.stackSize == 4) && input.size() == 1) -// { -// tempRecipeList.add(recipe); -// } -// } -// else if((outputStack.stackSize == 1 && (recipe.getRecipeSize() == 9 || recipe.getRecipeSize() == 4)) || ((outputStack.stackSize == 9 || outputStack.stackSize == 4) && recipe.getRecipeSize() == 1)) -// { -// tempRecipeList.add(recipe); -// continue; -// } -// } -// } -// -// List tempRecipeList2 = new LinkedList(); -// -// for(Object obj : tempRecipeList) -// { -// if(obj instanceof IRecipe) -// { -// IRecipe recipe = (IRecipe)obj; -// ItemStack outputStack = recipe.getRecipeOutput(); -// if(outputStack == null || outputStack.getItem() == null) -// { -// continue; -// } -// -// if(isResultStackReversible(outputStack, 2, world, tempRecipeList) || isResultStackReversible(outputStack, 3, world, tempRecipeList)) -// { -// tempRecipeList2.add(recipe); -// AlchemicalWizardry.logger.info("Now adding recipe for " + outputStack + " to the compression handler."); -// } -// } -// } -// -// this.recipes = tempRecipeList2; - } - - private static boolean isResultStackReversible(ItemStack stack, int gridSize, World world, List list) - { - if(stack == null) - { - return false; - } - InventoryCrafting inventory = new InventoryCrafting(new Container() - { - public boolean canInteractWith(EntityPlayer player) - { - return false; - } - }, 2, 2); - - inventory.setInventorySlotContents(0, stack); - - ItemStack returnStack = StorageBlockCraftingManager.getInstance().findMatchingRecipe(inventory, world, list); - if(returnStack == null || returnStack.getItem() == null) - { - return false; - } - - ItemStack compressedStack = null; - switch(gridSize) - { - case 2: - compressedStack = get22Recipe(returnStack, world, list); - break; - case 3: - compressedStack = get33Recipe(returnStack, world, list); - break; - } - - if(compressedStack == null) - { - return false; - }else - { - return SpellHelper.areItemStacksEqual(stack, compressedStack); - } - } - - private static ItemStack getRecipe(ItemStack stack, World world, int gridSize, List list) - { - InventoryCrafting inventory = new InventoryCrafting(new Container() - { - public boolean canInteractWith(EntityPlayer player) - { - return false; - } - }, gridSize, gridSize); - for(int i=0; i getPackingRecipes() { - // grab all recipes potentially suitable for packing or unpacking - - List packingRecipes = new LinkedList(); - List unpackingRecipes = new ArrayList(); - - for (IRecipe recipe : getCraftingRecipes()) { - ItemStack output = recipe.getRecipeOutput(); - if (output == null || output.getItem() == null) continue; - - if (output.stackSize == 1) { - PackingRecipe packingRecipe = getPackingRecipe(recipe); - - if (packingRecipe != null) { - packingRecipes.add(packingRecipe); - } - } else if ((output.stackSize == 4 || output.stackSize == 9) && recipe.getRecipeSize() == 1) { - unpackingRecipes.add(recipe); - } - } - - // grab all packing recipes which accept the output of any of the unpacking recipes - - Container container = makeDummyContainer(); - InventoryCrafting inventoryUnpack = new InventoryCrafting(container, 2, 2); - InventoryCrafting inventory2x2 = new InventoryCrafting(container, 2, 2); - InventoryCrafting inventory3x3 = new InventoryCrafting(container, 3, 3); - World world = null; // TODO: use a proper dummy world? - - List ret = new ArrayList(); - - for (IRecipe recipeUnpack : unpackingRecipes) { - ItemStack unpacked = recipeUnpack.getRecipeOutput(); - InventoryCrafting inventory = null; - - for (Iterator it = packingRecipes.iterator(); it.hasNext(); ) { - PackingRecipe recipePack = it.next(); - - // check if the packing recipe accepts the unpacking recipe's output - - boolean matched = false; - - if (recipePack.possibleInputs != null) { // the recipe could be parsed, use its inputs directly since that's faster - // verify recipe size - - if (recipePack.inputCount != unpacked.stackSize) continue; - - // check if any of the input options matches the unpacked item stack - - for (ItemStack stack : recipePack.possibleInputs) { - if (areInputsIdentical(unpacked, stack)) { - matched = true; - break; - } - } - } else { // unknown IRecipe, check through the recipe conventionally - // verify recipe size for 3x3 to skip anything smaller quickly - - if (unpacked.stackSize == 9 && recipePack.recipe.getRecipeSize() < 9) continue; - - // initialize inventory late, but only once per unpack recipe - - if (inventory == null) { - if (unpacked.stackSize == 4) { - inventory = inventory2x2; - } else { - inventory = inventory3x3; - } - - for (int i = 0; i < unpacked.stackSize; i++) { - inventory.setInventorySlotContents(i, unpacked.copy()); - } - } - - // check if the packing recipe accepts the unpacked item stack - - matched = recipePack.recipe.matches(inventory, world); - } - - if (matched) { - // check if the unpacking recipe accepts the packing recipe's output - - ItemStack packOutput = recipePack.recipe.getRecipeOutput(); - inventoryUnpack.setInventorySlotContents(0, packOutput.copy()); - - if (recipeUnpack.matches(inventoryUnpack, world)) { - ret.add(recipePack.recipe); - AlchemicalWizardry.logger.info("Adding the following recipe to the Compression Handler: " + packOutput); - it.remove(); - } - } - } - } - - return ret; - } - - @SuppressWarnings("unchecked") - private List getCraftingRecipes() { - return CraftingManager.getInstance().getRecipeList(); - } - - private Container makeDummyContainer() { - return new Container() { - @Override - public boolean canInteractWith(EntityPlayer p_75145_1_) { - return true; - } - }; - } - - private PackingRecipe getPackingRecipe(IRecipe recipe) { - if (recipe.getRecipeSize() < 4) return null; - - List inputs; - - if (recipe instanceof ShapedRecipes) { - inputs = Arrays.asList(((ShapedRecipes) recipe).recipeItems); - } else if (recipe instanceof ShapelessRecipes) { - inputs = ((ShapelessRecipes) recipe).recipeItems; - } else if (recipe instanceof ShapedOreRecipe) { - inputs = Arrays.asList(((ShapedOreRecipe) recipe).getInput()); - } else if (recipe instanceof ShapelessOreRecipe) { - inputs = ((ShapelessOreRecipe) recipe).getInput(); - } else { - return new PackingRecipe(recipe, null, -1); - } - - // check if the recipe inputs are size 4 or 9 - - int count = 0; - - for (Object o : inputs) { - if (o != null) count++; - } - - if (count != 4 && count != 9) return null; - - // grab identical inputs - - List identicalInputs = getIdenticalInputs(inputs); - if (identicalInputs == null) return null; - - return new PackingRecipe(recipe, identicalInputs, count); - } - - /** - * Determine the item stacks from the provided inputs which are suitable for every input element. - * - * @param inputs List of all inputs, null elements are being ignored. - * @return List List of all options. - */ - @SuppressWarnings("unchecked") - private List getIdenticalInputs(List inputs) { - List options = null; - - for (Object input : inputs) { - if (input == null) continue; - - List offers; - - if (input instanceof ItemStack) { - offers = Arrays.asList((ItemStack) input); - } else if (input instanceof List) { - offers = (List) input; - - if (offers.isEmpty()) return null; - } else { - throw new RuntimeException("invalid input: "+input.getClass()); - } - - if (options == null) { - options = new ArrayList(offers); - continue; - } - - for (Iterator it = options.iterator(); it.hasNext(); ) { - ItemStack stackReq = it.next(); - boolean found = false; - - for (ItemStack stackCmp : offers) { - if (areInputsIdentical(stackReq, stackCmp)) { - found = true; - break; - } - } - - if (!found) { - it.remove(); - - if (options.isEmpty()) return null; - } - } - } - - return options; - } - - private boolean areInputsIdentical(ItemStack a, ItemStack b) { - if (a.getItem() != b.getItem()) return false; - - int dmgA = a.getItemDamage(); - int dmgB = b.getItemDamage(); - - return dmgA == dmgB || dmgA == OreDictionary.WILDCARD_VALUE || dmgB == OreDictionary.WILDCARD_VALUE; - } - - private static class PackingRecipe { - PackingRecipe(IRecipe recipe, List possibleInputs, int inputCount) { - this.recipe = recipe; - this.possibleInputs = possibleInputs; - this.inputCount = inputCount; - } - - final IRecipe recipe; - final List possibleInputs; - final int inputCount; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/BlockSet.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/BlockSet.java deleted file mode 100644 index 6186b6c9..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/BlockSet.java +++ /dev/null @@ -1,375 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockDoor; -import net.minecraft.block.BlockLadder; -import net.minecraft.block.BlockRedstoneComparator; -import net.minecraft.block.BlockRedstoneRepeater; -import net.minecraft.block.BlockStairs; -import net.minecraft.block.BlockTorch; -import net.minecraft.block.BlockTrapDoor; -import net.minecraft.init.Blocks; -import net.minecraft.inventory.IInventory; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.registry.GameRegistry; -import net.minecraftforge.fml.common.registry.GameRegistry.UniqueIdentifier; -import WayofTime.alchemicalWizardry.api.Int3; -import WayofTime.alchemicalWizardry.common.demonVillage.loot.DemonVillageLootRegistry; -import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.IBlockPortalNode; -import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.ITilePortalNode; -import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.TEDemonPortal; - -public class BlockSet -{ - protected String blockid; - protected int[] metadata; - protected List positions; - - public BlockSet() - { - this(Blocks.stone); - } - - public BlockSet(String blockid) - { - this.blockid = blockid; - this.metadata = new int[4]; - positions = new ArrayList(); - } - - public BlockSet(Block block) - { - this(BlockSet.getPairedIdForBlock(block)); - } - - public BlockSet(Block block, int meta) - { - this(block); - for (int i = 0; i < metadata.length; i++) - { - metadata[i] = meta; - } - if (block instanceof BlockStairs) - { - int[] northSet = new int[]{2, 3, 0, 1}; - int[] eastSet = new int[]{1, 0, 2, 3}; - int[] southSet = new int[]{3, 2, 1, 0}; - int[] westSet = new int[]{0, 1, 3, 2}; - int[] northUpSet = new int[]{6, 7, 4, 5}; - int[] eastUpSet = new int[]{5, 4, 6, 7}; - int[] southUpSet = new int[]{7, 6, 5, 4}; - int[] westUpSet = new int[]{4, 5, 7, 6}; - - switch (meta) - { - case 0: - metadata = westSet; - break; - case 1: - metadata = eastSet; - break; - case 2: - metadata = northSet; - break; - case 3: - metadata = southSet; - break; - case 4: - metadata = westUpSet; - break; - case 5: - metadata = eastUpSet; - break; - case 6: - metadata = northUpSet; - break; - case 7: - metadata = southUpSet; - break; - } - } - else if(block instanceof BlockLadder) - { - int[] northSet = new int[]{3, 2, 5, 4}; - int[] eastSet = new int[]{4, 5, 3, 2}; - int[] southSet = new int[]{2, 3, 4, 5}; - int[] westSet = new int[]{5, 4, 2, 3}; - - switch (meta) - { - case 3: - metadata = northSet; - break; - case 4: - metadata = eastSet; - break; - case 2: - metadata = southSet; - break; - case 5: - metadata = westSet; - break; - } - }else if(block instanceof BlockTrapDoor) - { - int div = meta / 4; - int mod = meta % 4; - int[] northSet = new int[]{1 + div*4, div*4, 3 + div*4, 2 + div*4}; //Second one: 0 + - int[] eastSet = new int[]{2 + div*4, 3 + div*4, 1 + div*4, div*4}; //Last one: 0 + - int[] southSet = new int[]{div*4, 1 + div*4, 2 + div*4, 3 + div*4}; //First one: 0 + - int[] westSet = new int[]{3 + div*4, 2 + div*4, div*4, 1 + div*4}; //Third one: 0 + - - switch (mod) - { - case 0: - metadata = southSet; - break; - case 1: - metadata = northSet; - break; - case 2: - metadata = eastSet; - break; - case 3: - metadata = westSet; - break; - } - }else if(block instanceof BlockTorch) - { - int[] northSet = new int[]{3, 4, 1, 2}; - int[] eastSet = new int[]{2, 1, 3, 4}; - int[] southSet = new int[]{4, 3, 2, 1}; - int[] westSet = new int[]{1, 2, 4, 3}; - - - switch (meta) - { - case 1: - metadata = westSet; - break; - case 2: - metadata = eastSet; - break; - case 3: - metadata = northSet; - break; - case 4: - metadata = southSet; - break; - } - }else if(block instanceof BlockDoor) - { - int[] northSet = new int[]{3, 1, 2, 0}; - int[] eastSet = new int[]{0, 2, 3, 1}; - int[] southSet = new int[]{1, 3, 0, 2}; - int[] westSet = new int[]{2, 0, 1, 3}; - - - switch (meta) - { - case 0: - metadata = eastSet; - break; - case 1: - metadata = southSet; - break; - case 2: - metadata = westSet; - break; - case 3: - metadata = northSet; - break; - } - }else if(block instanceof BlockRedstoneComparator) - { - int div = meta / 4; - int mod = meta % 4; - int[] northSet = new int[]{div * 4, 2 + div * 4, 3 + div * 4, 1 + div * 4}; //First one: 0 + - int[] eastSet = new int[]{1 + div*4, 3 + div*4, div*4, 2 + div*4}; //Third one: 0 + - int[] southSet = new int[]{2 + div*4, div*4, 1 + div*4, 3 + div*4}; //Second one: 0 + - int[] westSet = new int[]{3 + div*4, 1 + div*4, 2 + div*4, div*4}; //Last one: 0 + - - switch (mod) - { - case 0: - metadata = northSet; - break; - case 1: - metadata = eastSet; - break; - case 2: - metadata = southSet; - break; - case 3: - metadata = westSet; - break; - } - }else if(block instanceof BlockRedstoneRepeater) - { - int div = meta / 4; - int mod = meta % 4; - int[] northSet = new int[]{div*4, 2 + div*4, 3 + div*4, 1 + div*4}; //First one: 0 + - int[] eastSet = new int[]{1 + div*4, 3 + div*4, div*4, 2 + div*4}; //Third one: 0 + - int[] southSet = new int[]{2 + div*4, div*4, 1 + div*4, 3 + div*4}; //Second one: 0 + - int[] westSet = new int[]{3 + div*4, 1 + div*4, 2 + div*4, div*4}; //Last one: 0 + - - - - switch (mod) - { - case 0: - metadata = northSet; - break; - case 1: - metadata = eastSet; - break; - case 2: - metadata = southSet; - break; - case 3: - metadata = westSet; - break; - } - } - - - } - - public List getPositions() - { - return positions; - } - - public void addPositionToBlock(int xOffset, int yOffset, int zOffset) - { - positions.add(new Int3(xOffset, yOffset, zOffset)); - } - - public Block getBlock() - { - return getBlockForString(blockid); - } - - public static String getPairedIdForBlock(Block block) - { - UniqueIdentifier un = GameRegistry.findUniqueIdentifierFor(block); - String name = ""; - - if (un != null) - { - name = un.modId + ":" + un.name; - } - - return name; - } - - public static Block getBlockForString(String str) - { - String[] parts = str.split(":"); - String modId = parts[0]; - String name = parts[1]; - return GameRegistry.findBlock(modId, name); - } - - public int getMetaForDirection(EnumFacing dir) - { - if (metadata.length < 4) - { - return 0; - } - - switch (dir) - { - case NORTH: - return metadata[0]; - case SOUTH: - return metadata[1]; - case WEST: - return metadata[2]; - case EAST: - return metadata[3]; - default: - return 0; - } - } - - public void buildAtIndex(TEDemonPortal teDemonPortal, World world, int xCoord, int yCoord, int zCoord, EnumFacing dir, int index, boolean populateInventories, int tier) - { - Block block = this.getBlock(); - if (index >= positions.size() || block == null) - { - return; - } - - Int3 position = positions.get(index); - int xOff = position.xCoord; - int yOff = position.yCoord; - int zOff = position.zCoord; - int meta = this.getMetaForDirection(dir); - - switch (dir) - { - case NORTH: - break; - case SOUTH: - xOff *= -1; - zOff *= -1; - break; - case WEST: - int temp = zOff; - zOff = xOff * -1; - xOff = temp; - break; - case EAST: - int temp2 = zOff * -1; - zOff = xOff; - xOff = temp2; - break; - default: - } - - BlockPos newPos = new BlockPos(xCoord + xOff, yCoord + yOff, zCoord + zOff); - world.setBlockState(newPos, block.getStateFromMeta(meta), 3); - if(populateInventories) - { - this.populateIfIInventory(world, newPos, tier); - } - if(block instanceof IBlockPortalNode) - { - TileEntity tile = world.getTileEntity(newPos); - if(tile instanceof ITilePortalNode) - { - ((ITilePortalNode) tile).setPortalLocation(teDemonPortal); - } - } - } - - public void populateIfIInventory(World world, BlockPos pos, int tier) - { - TileEntity tile = world.getTileEntity(pos); - if(tile instanceof IInventory) - { - DemonVillageLootRegistry.populateChest((IInventory)tile, tier); - } - } - - public void buildAll(TEDemonPortal teDemonPortal, World world, int xCoord, int yCoord, int zCoord, EnumFacing dir, boolean populateInventories, int tier) - { - for (int i = 0; i < positions.size(); i++) - { - this.buildAtIndex(teDemonPortal, world, xCoord, yCoord, zCoord, dir, i, populateInventories, tier); - } - } - - public boolean isContained(Block block, int defaultMeta) - { - Block thisBlock = this.getBlock(); - return thisBlock != null && thisBlock.equals(block) && this.metadata[0] == defaultMeta; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/BuildingSchematic.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/BuildingSchematic.java deleted file mode 100644 index 6c62e88a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/BuildingSchematic.java +++ /dev/null @@ -1,190 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.api.Int3; -import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.TEDemonPortal; - -public class BuildingSchematic -{ - public String name; - public int doorX; - public int doorZ; - public int doorY; - public int buildingTier; - public int buildingType; - public List blockList; - - public BuildingSchematic() - { - this(""); - } - - public BuildingSchematic(String name) - { - this.name = name; - blockList = new ArrayList(); - this.doorX = 0; - this.doorZ = 0; - this.doorY = 0; - this.buildingTier = 0; - this.buildingType = DemonBuilding.BUILDING_HOUSE; - } - - public void addBlockWithMeta(Block block, int meta, int xOffset, int yOffset, int zOffset) - { - for (BlockSet set : blockList) - { - if (set.isContained(block, meta)) - { - set.addPositionToBlock(xOffset, yOffset, zOffset); - return; - } - } - - BlockSet set = new BlockSet(block, meta); - set.addPositionToBlock(xOffset, yOffset, zOffset); - blockList.add(set); - } - - public void buildAll(TEDemonPortal teDemonPortal, World world, int xCoord, int yCoord, int zCoord, EnumFacing dir, boolean populateInventories) - { - for (BlockSet set : blockList) - { - set.buildAll(teDemonPortal, world, xCoord, yCoord, zCoord, dir, populateInventories, this.buildingTier); - } - } - - public GridSpaceHolder createGSH() - { - GridSpaceHolder holder = new GridSpaceHolder(); - - for (BlockSet set : blockList) - { - for (Int3 coords : set.getPositions()) - { - int gridX = (int) ((coords.xCoord + 2 * Math.signum(coords.xCoord)) / 5); - int gridZ = (int) ((coords.zCoord + 2 * Math.signum(coords.zCoord)) / 5); - - holder.setGridSpace(gridX, gridZ, new GridSpace(GridSpace.HOUSE, 0)); - } - } - - return holder; - } - - public Int3 getGridSpotOfDoor() - { - int gridX = (int) ((doorX + 2 * Math.signum(doorX)) / 5); - int gridZ = (int) ((doorZ + 2 * Math.signum(doorZ)) / 5); - - return new Int3(gridX, doorY, gridZ); - } - - public List getGriddedPositions(EnumFacing dir) - { - List positionList = new ArrayList(); - - for (BlockSet blockSet : blockList) - { - for (Int3 pos : blockSet.getPositions()) - { - int xOff = pos.xCoord; - int zOff = pos.zCoord; - - switch (dir) - { - case SOUTH: - xOff *= -1; - zOff *= -1; - break; - case WEST: - int temp = zOff; - zOff = xOff * -1; - xOff = temp; - break; - case EAST: - int temp2 = zOff * -1; - zOff = xOff; - xOff = temp2; - break; - default: - } - - Int3 nextPos = new Int3(xOff, 0, zOff); - if (!positionList.contains(nextPos)) - { - positionList.add(nextPos); - } - } - } - - return positionList; - } - - public void destroyAllInField(World world, int xCoord, int yCoord, int zCoord, EnumFacing dir) - { -// GridSpaceHolder grid = this.createGSH(); //GridSpaceHolder is not aware of the buildings - need to use the schematic - - List positionList = getGriddedPositions(dir); - - for (int i = this.getMinY(); i <= this.getMaxY(); i++) - { - for (Int3 pos : positionList) - { - BlockPos newPos = new BlockPos(xCoord + pos.xCoord, yCoord + i, zCoord + pos.zCoord); - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - if (block != ModBlocks.blockDemonPortal) - { - world.setBlockToAir(newPos); - } - } - } - } - - public int getMinY() - { - int min = 0; - for (BlockSet set : blockList) - { - for (Int3 pos : set.getPositions()) - { - if (pos.yCoord < min) - { - min = pos.yCoord; - } - } - } - - return min; - } - - public int getMaxY() - { - int max = 0; - for (BlockSet set : blockList) - { - for (Int3 pos : set.getPositions()) - { - if (pos.yCoord > max) - { - max = pos.yCoord; - } - } - } - return max; - } - - public String getName() - { - return this.name; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/DemonBuilding.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/DemonBuilding.java deleted file mode 100644 index fa6450d7..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/DemonBuilding.java +++ /dev/null @@ -1,121 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage; - -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.Int3; -import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.TEDemonPortal; - -public class DemonBuilding -{ - public static final int BUILDING_HOUSE = 0; - public static final int BUILDING_PORTAL = 1; - - public BuildingSchematic schematic; - public GridSpaceHolder area; - public int buildingTier; - public int buildingType; - public Int3 doorGridSpace; - - public DemonBuilding(BuildingSchematic schematic) - { - this.schematic = schematic; - this.buildingType = schematic.buildingType; - this.buildingTier = schematic.buildingTier; - this.area = this.createGSHForSchematic(schematic); - this.doorGridSpace = schematic.getGridSpotOfDoor(); - } - - public String getName() - { - return schematic.getName(); - } - - public boolean isValid(GridSpaceHolder master, int gridX, int gridZ, EnumFacing dir) - { - return area.doesContainAll(master, gridX, gridZ, dir); - } - - public void buildAll(TEDemonPortal teDemonPortal, World world, int xCoord, int yCoord, int zCoord, EnumFacing dir, boolean populateInventories) - { - schematic.buildAll(teDemonPortal, world, xCoord, yCoord, zCoord, dir, populateInventories); - } - - public void setAllGridSpaces(int xInit, int zInit, int yLevel, EnumFacing dir, int type, GridSpaceHolder master) - { - area.setAllGridSpaces(xInit, zInit, yLevel, dir, type, master); - } - - public GridSpaceHolder createGSHForSchematic(BuildingSchematic scheme) - { - switch (this.buildingType) - { - case DemonBuilding.BUILDING_HOUSE: - return scheme.createGSH(); - case DemonBuilding.BUILDING_PORTAL: - - } - return scheme.createGSH(); - } - - public Int3 getDoorSpace(EnumFacing dir) - { - int x; - int z; - switch (dir) - { - case SOUTH: - x = -doorGridSpace.xCoord; - z = -doorGridSpace.zCoord; - break; - case WEST: - x = doorGridSpace.zCoord; - z = -doorGridSpace.xCoord; - break; - case EAST: - x = -doorGridSpace.zCoord; - z = doorGridSpace.xCoord; - break; - default: - x = doorGridSpace.xCoord; - z = doorGridSpace.zCoord; - break; - } - - return new Int3(x, doorGridSpace.yCoord, z); - } - - public Int3 getGridOffsetFromRoad(EnumFacing sideOfRoad, int yLevel) - { - Int3 doorSpace = this.getDoorSpace(sideOfRoad); - int x = doorSpace.xCoord; - int z = doorSpace.zCoord; - - switch (sideOfRoad) - { - case SOUTH: - z++; - break; - case EAST: - x++; - break; - case WEST: - x--; - break; - default: - z--; - break; - } - - return new Int3(x, yLevel, z); - } - - public void destroyAllInField(World world, int xCoord, int yCoord, int zCoord, EnumFacing dir) - { - schematic.destroyAllInField(world, xCoord, yCoord, zCoord, dir); - } - - public int getNumberOfGridSpaces() - { - return area.getNumberOfGridSpaces(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/DemonCrosspath.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/DemonCrosspath.java deleted file mode 100644 index 6badd634..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/DemonCrosspath.java +++ /dev/null @@ -1,22 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage; - -import net.minecraft.world.World; - -public class DemonCrosspath -{ - private int xCoord; - private int yLevel; - private int zCoord; - - public DemonCrosspath(int xCoord, int yLevel, int zCoord) - { - this.xCoord = xCoord; - this.yLevel = yLevel; - this.zCoord = zCoord; - } - - public void createCrosspath(World world) - { - - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/DemonVillagePath.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/DemonVillagePath.java deleted file mode 100644 index eeb4da3c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/DemonVillagePath.java +++ /dev/null @@ -1,263 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockFlower; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.api.Int3; -import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.IRoadWard; -import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.TEDemonPortal; - -public class DemonVillagePath -{ - public int xPos; - public int yPos; - public int zPos; - public EnumFacing dir; - public int length; - - public static boolean canGoDown = true; - public static boolean tunnelIfObstructed = false; - public static boolean createBridgeInAirIfObstructed = false; - - public DemonVillagePath(int xi, int yi, int zi, EnumFacing dir2, int length) - { - this.xPos = xi; - this.yPos = yi; - this.zPos = zi; - this.dir = dir2; - this.length = length; - } - - public Int3AndBool constructFullPath(TEDemonPortal portal, World world, int clearance) - { - int xi = this.xPos; - int yi = this.yPos; - int zi = this.zPos; - int rad = this.getRoadRadius(); - int value = 0; - - int finalYPos = this.constructPartialPath(portal, world, clearance, xi - rad * dir.getFrontOffsetX(), yi, zi - rad * dir.getFrontOffsetZ(), dir, length + rad, false); - - for (int i = -rad; i <= rad; i++) - { - value = Math.max(this.constructPartialPath(portal, world, clearance, xi - rad * dir.getFrontOffsetX() + i * dir.getFrontOffsetZ(), yi, zi - rad * dir.getFrontOffsetZ() + i * dir.getFrontOffsetX(), dir, length + 2 * rad, true), value); - if(TEDemonPortal.printDebug) - System.out.println("" + (length + 2 * rad) + ", " + value + ""); - } - - Int3 position = new Int3(xi, finalYPos, zi); - - boolean bool = value >= length + 2 * rad; - - return new Int3AndBool(position, bool); - } - - public class Int3AndBool - { - public Int3 coords; - public boolean bool; - public Int3AndBool(Int3 int3, boolean bool) - { - this.coords = int3; - this.bool = bool; - } - } - - /** - * - * @param portal - * @param world - * @param clearance - * @param xi - * @param yi - * @param zi - * @param dir - * @param length - * @param doConstruct - * @return length if doConstruct, yi if !doConstruct - */ - public int constructPartialPath(TEDemonPortal portal, World world, int clearance, int xi, int yi, int zi, EnumFacing dir, int length, boolean doConstruct) - { - for (int i = 0; i < length; i++) - { - int xOffset = i * dir.getFrontOffsetX(); - int zOffset = i * dir.getFrontOffsetZ(); - - boolean completed = false; - - for (int yOffset = 0; yOffset <= clearance; yOffset++) - { - int sign = 1; - - BlockPos pos1 = new BlockPos(xi + xOffset, yi + sign * yOffset, zi + zOffset); - BlockPos highPos1 = pos1.offsetUp(); - - IBlockState state1 = world.getBlockState(pos1); - IBlockState highState1 = world.getBlockState(highPos1); - Block block1 = state1.getBlock(); - Block highBlock1 = highState1.getBlock(); - - if ((this.forceReplaceBlock(block1))||(!block1.isReplaceable(world, pos1) && this.isBlockReplaceable(block1) ) && (this.forceCanTunnelUnder(highBlock1) || highBlock1.isReplaceable(world, highPos1))) - { - if(doConstruct) - { - world.setBlockState(pos1, portal.getRoadState(), 3); - } - yi += sign * yOffset; - completed = true; - break; - } else if(canGoDown) - { - sign = -1; - pos1 = new BlockPos(xi + xOffset, yi + sign * yOffset, zi + zOffset); - highPos1 = pos1.offsetUp(); - - state1 = world.getBlockState(pos1); - highState1 = world.getBlockState(highPos1); - block1 = state1.getBlock(); - highBlock1 = highState1.getBlock(); - - if ((this.forceReplaceBlock(block1))||(!block1.isReplaceable(world, pos1) && this.isBlockReplaceable(block1) ) && (this.forceCanTunnelUnder(highBlock1) || highBlock1.isReplaceable(world, highPos1))) - { - if(doConstruct) - { - world.setBlockState(pos1, portal.getRoadState(), 3); - } - yi += sign * yOffset; - completed = true; - break; - } - } - } - - if(!completed) - { - boolean returnAmount = true; - if(createBridgeInAirIfObstructed) - { - BlockPos pos1 = new BlockPos(xi + xOffset, yi, zi + zOffset); - IBlockState state1 = world.getBlockState(pos1); - Block block1 = state1.getBlock(); - - if (block1.isReplaceable(world, pos1) || !this.isBlockReplaceable(block1) || !this.forceReplaceBlock(block1)) - { - returnAmount = false; - - if(doConstruct) - { - world.setBlockState(pos1, portal.getRoadState(), 3); - } - }else - { - returnAmount = true; - } - - }else if(tunnelIfObstructed) - { - BlockPos pos1 = new BlockPos(xi + xOffset, yi, zi + zOffset); - IBlockState state1 = world.getBlockState(pos1); - Block block1 = state1.getBlock(); - - if (!block1.isReplaceable(world, pos1) || this.isBlockReplaceable(block1) || !this.forceReplaceBlock(block1)) - { - returnAmount = false; - - if(doConstruct) - { - world.setBlockState(pos1, portal.getRoadState(), 3); - world.setBlockToAir(pos1.offsetUp(1)); - world.setBlockToAir(pos1.offsetUp(2)); - world.setBlockToAir(pos1.offsetUp(3)); - } - }else - { - returnAmount = true; - } - } - - if(returnAmount) - { - return doConstruct ? i : yi; - } - } - } - - return doConstruct ? length : yi; - } - - public Int3 getFinalLocation(World world, int clearance) - { - int xi = xPos; - int yi = yPos; - int zi = zPos; - - for (int i = 0; i < length; i++) - { - int xOffset = i * dir.getFrontOffsetX(); - int zOffset = i * dir.getFrontOffsetZ(); - - for (int yOffset = 0; yOffset <= clearance; yOffset++) - { - int sign = 1; - - BlockPos pos1 = new BlockPos(xi + xOffset, yi + sign * yOffset, zi + zOffset); - BlockPos highPos1 = pos1.offsetUp(); - - IBlockState state1 = world.getBlockState(pos1); - IBlockState highState1 = world.getBlockState(highPos1); - Block block1 = state1.getBlock(); - Block highBlock1 = highState1.getBlock(); - - if ((this.forceReplaceBlock(block1))||(!block1.isReplaceable(world, pos1) && this.isBlockReplaceable(block1) ) && (this.forceCanTunnelUnder(highBlock1) || highBlock1.isReplaceable(world, highPos1))) - { - yi += sign * yOffset; - break; - } else - { - sign = -1; - BlockPos pos2 = new BlockPos(xi + xOffset, yi + sign * yOffset, zi + zOffset); - BlockPos highPos2 = pos2.offsetUp(); - - IBlockState state2 = world.getBlockState(pos2); - IBlockState highState2 = world.getBlockState(highPos2); - Block block2 = state2.getBlock(); - Block highBlock2 = highState2.getBlock(); - - if ((this.forceReplaceBlock(block2))||(!block2.isReplaceable(world, pos2) && this.isBlockReplaceable(block2) ) && (this.forceCanTunnelUnder(highBlock2) || highBlock2.isReplaceable(world, highPos2))) - { - yi += sign * yOffset; - break; - } - } - } - } - - return new Int3(xi, yi, zi); - } - - public int getRoadRadius() - { - return 1; - } - - public boolean isBlockReplaceable(Block block) - { - return !(block.getMaterial() == Material.leaves || block.getMaterial() == Material.vine || block instanceof IRoadWard) &&!block.equals(ModBlocks.blockDemonPortal); - } - - public boolean forceReplaceBlock(Block block) - { - return block.getMaterial().isLiquid(); - } - - public boolean forceCanTunnelUnder(Block block) - { - return block instanceof BlockFlower || block == Blocks.double_plant; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/GridSpace.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/GridSpace.java deleted file mode 100644 index b21a30f4..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/GridSpace.java +++ /dev/null @@ -1,77 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage; - -import net.minecraft.nbt.NBTTagCompound; - -public class GridSpace -{ - public static final int EMPTY = 0; - public static final int MAIN_PORTAL = 1; - public static final int MINI_PORTAL = 2; - public static final int ROAD = 3; - public static final int CROSSROAD = 4; - public static final int HOUSE = 5; - - private int yLevel; - private int type; - - public GridSpace() - { - this(EMPTY, -1); - } - - public GridSpace(int type, int yLevel) - { - this.type = type; - this.yLevel = yLevel; - } - - public int getGridType() - { - return this.type; - } - - public void setGridType(int type) - { - this.type = type; - } - - public int getYLevel() - { - return this.yLevel; - } - - public void setYLevel(int yLevel) - { - this.yLevel = yLevel; - } - - public boolean isEmpty() - { - return type == EMPTY; - } - - public static GridSpace getGridFromTag(NBTTagCompound tag) - { - return new GridSpace(tag.getInteger("type"), tag.getInteger("yLevel")); - } - - public NBTTagCompound getTag() - { - NBTTagCompound tag = new NBTTagCompound(); - - tag.setInteger("type", type); - tag.setInteger("yLevel", yLevel); - - return tag; - } - - public boolean isRoadSegment() - { - return type == ROAD || type == CROSSROAD; - } - - public boolean isBuilding() - { - return type == HOUSE; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/GridSpaceHolder.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/GridSpaceHolder.java deleted file mode 100644 index bbb3c04f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/GridSpaceHolder.java +++ /dev/null @@ -1,313 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.TEDemonPortal; - -public class GridSpaceHolder -{ - public GridSpace[][] area; - public int negXRadius; //These variables indicate how much the grid has expanded from the 1x1 - public int posXRadius; //matrix in each direction - public int negZRadius; - public int posZRadius; - - public GridSpaceHolder() - { - area = new GridSpace[1][1]; - area[0][0] = new GridSpace(); - } - - public void expandAreaInNegX() - { - GridSpace[][] newGrid = new GridSpace[negXRadius + posXRadius + 2][negZRadius + posZRadius + 1]; - for (int i = 0; i <= negZRadius + posZRadius; i++) - { - newGrid[0][i] = new GridSpace(); - } - - for (int i = 0; i <= negXRadius + posXRadius; i++) - { - for (int j = 0; j <= negZRadius + posZRadius; j++) - { - newGrid[i + 1][j] = area[i][j]; - } - } - - area = newGrid; - negXRadius += 1; - } - - public void expandAreaInPosX() - { - GridSpace[][] newGrid = new GridSpace[negXRadius + posXRadius + 2][negZRadius + posZRadius + 1]; - - for (int i = 0; i <= negZRadius + posZRadius; i++) - { - newGrid[negXRadius + posXRadius + 1][i] = new GridSpace(); - } - - for (int i = 0; i <= negXRadius + posXRadius; i++) - { - for (int j = 0; j <= negZRadius + posZRadius; j++) - { - newGrid[i][j] = area[i][j]; - } - } - - area = newGrid; - posXRadius += 1; - } - - public void expandAreaInNegZ() - { - GridSpace[][] newGrid = new GridSpace[negXRadius + posXRadius + 1][negZRadius + posZRadius + 2]; - - for (int i = 0; i <= negXRadius + posXRadius; i++) - { - newGrid[i][0] = new GridSpace(); - } - - for (int i = 0; i <= negXRadius + posXRadius; i++) - { - for (int j = 0; j <= negZRadius + posZRadius; j++) - { - newGrid[i][j + 1] = area[i][j]; - } - } - - area = newGrid; - negZRadius += 1; - } - - public void expandAreaInPosZ() - { - GridSpace[][] newGrid = new GridSpace[negXRadius + posXRadius + 1][negZRadius + posZRadius + 2]; - - for (int i = 0; i <= negXRadius + posXRadius; i++) - { - newGrid[i][negZRadius + posZRadius + 1] = new GridSpace(); - } - - for (int i = 0; i <= negXRadius + posXRadius; i++) - { - for (int j = 0; j <= negZRadius + posZRadius; j++) - { - newGrid[i][j] = area[i][j]; - } - } - - area = newGrid; - posZRadius += 1; - } - - public GridSpace getGridSpace(int x, int z) - { - if (x > posXRadius || x < -negXRadius || z > posZRadius || z < -negZRadius) - { - return new GridSpace(); - } else - { - return (area[x + negXRadius][z + negZRadius]); - } - } - - public void setGridSpace(int x, int z, GridSpace space) - { - if (x > posXRadius) - { - this.expandAreaInPosX(); - this.setGridSpace(x, z, space); - } else if (x < -negXRadius) - { - this.expandAreaInNegX(); - this.setGridSpace(x, z, space); - } else if (z > posZRadius) - { - this.expandAreaInPosZ(); - this.setGridSpace(x, z, space); - } else if (z < -negZRadius) - { - this.expandAreaInNegZ(); - this.setGridSpace(x, z, space); - } else - { - area[x + negXRadius][z + negZRadius] = space; - } - } - - public boolean doesContainAll(GridSpaceHolder master, int xInit, int zInit, EnumFacing dir) - { - if (master != null) - { - if(TEDemonPortal.printDebug) - AlchemicalWizardry.logger.info("negXRadius: " + negXRadius + " posXRadius: " + posXRadius + " negZRadius: " + negZRadius + " posZRadius: " + posZRadius); - for (int i = -negXRadius; i <= posXRadius; i++) - { - for (int j = -negZRadius; j <= posZRadius; j++) - { - GridSpace thisSpace = this.getGridSpace(i, j); - if (thisSpace.isEmpty()) - { - continue; - } - - if(TEDemonPortal.printDebug) - AlchemicalWizardry.logger.info("x: " + i + " z: " + j); - - int xOff; - int zOff; - - switch (dir) - { - case SOUTH: - xOff = -i; - zOff = -j; - break; - case WEST: - xOff = j; - zOff = -i; - break; - case EAST: - xOff = -j; - zOff = i; - break; - default: - xOff = i; - zOff = j; - break; - } - if (!master.getGridSpace(xInit + xOff, zInit + zOff).isEmpty()) - { - return false; - } - } - } - return true; - } - return false; - } - - public void setAllGridSpaces(int xInit, int zInit, int yLevel, EnumFacing dir, int type, GridSpaceHolder master) - { - if(TEDemonPortal.printDebug) - AlchemicalWizardry.logger.info("Grid space selected: (" + xInit + "," + zInit + ")"); - if (master != null) - { - for (int i = -negXRadius; i <= posXRadius; i++) - { - for (int j = -negZRadius; j <= posZRadius; j++) - { - GridSpace thisSpace = this.getGridSpace(i, j); - if (thisSpace.isEmpty()) - { - continue; - } - - int xOff; - int zOff; - - switch (dir) - { - case SOUTH: - xOff = -i; - zOff = -j; - break; - case WEST: - xOff = j; - zOff = -i; - break; - case EAST: - xOff = -j; - zOff = i; - break; - default: - xOff = i; - zOff = j; - break; - } - - if(TEDemonPortal.printDebug) - AlchemicalWizardry.logger.info("Grid space (" + (xInit + xOff) + "," + (zInit + zOff) + ")"); - - master.setGridSpace(xInit + xOff, zInit + zOff, new GridSpace(type, yLevel)); - } - } - } - } - - public void destroyAllInGridSpaces(World world, int xCoord, int yCoord, int zCoord, EnumFacing dir) - { - for (int i = -negXRadius; i <= posXRadius; i++) - { - for (int j = -negZRadius; j <= posZRadius; j++) - { - GridSpace thisSpace = this.getGridSpace(i, j); - if (thisSpace.isEmpty()) - { - continue; - } - - int xOff; - int zOff; - - switch (dir) - { - case SOUTH: - xOff = -i; - zOff = -j; - break; - case WEST: - xOff = j; - zOff = -i; - break; - case EAST: - xOff = -j; - zOff = i; - break; - default: - xOff = i; - zOff = j; - break; - } - - for (int l = -2; l <= 2; l++) - { - for (int m = -2; m <= 2; m++) - { - BlockPos newPos = new BlockPos(xCoord + xOff * 5 + l, yCoord, zCoord + zOff * 5 + m); - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - if (block == ModBlocks.blockDemonPortal) - { - continue; - } - world.setBlockToAir(newPos); - } - } - } - } - } - - public int getNumberOfGridSpaces() - { - int num = 0; - for (int i = -this.negXRadius; i <= this.posXRadius; i++) - { - for (int j = -this.negZRadius; j <= this.posZRadius; j++) - { - if (!this.getGridSpace(i, j).isEmpty()) - { - num++; - } - } - } - - return num; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/ai/EntityAIOccasionalRangedAttack.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/ai/EntityAIOccasionalRangedAttack.java deleted file mode 100644 index 9d7ea89f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/ai/EntityAIOccasionalRangedAttack.java +++ /dev/null @@ -1,165 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.ai; - -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.EntityAIBase; -import net.minecraft.util.MathHelper; - -public class EntityAIOccasionalRangedAttack extends EntityAIBase -{ - /** The entity the AI instance has been applied to */ - private final EntityLiving entityHost; - /** The entity (as a RangedAttackMob) the AI instance has been applied to. */ - private final IOccasionalRangedAttackMob rangedAttackEntityHost; - private EntityLivingBase attackTarget; - /** - * A decrementing tick that spawns a ranged attack once this value reaches 0. It is then set back to the - * maxRangedAttackTime. - */ - private int rangedAttackTime; - private double entityMoveSpeed; - private int field_75318_f; - private int field_96561_g; - /** The maximum time the AI has to wait before peforming another ranged attack. */ - private int maxRangedAttackTime; - private float field_96562_i; - private float field_82642_h; - private double range; - - public EntityAIOccasionalRangedAttack(IOccasionalRangedAttackMob p_i1649_1_, double p_i1649_2_, int p_i1649_4_, float p_i1649_5_, double range) - { - this(p_i1649_1_, p_i1649_2_, p_i1649_4_, p_i1649_4_, p_i1649_5_, range); - } - - public EntityAIOccasionalRangedAttack(IOccasionalRangedAttackMob p_i1650_1_, double p_i1650_2_, int p_i1650_4_, int p_i1650_5_, float p_i1650_6_, double range) - { - this.rangedAttackTime = -1; - - if (!(p_i1650_1_ instanceof EntityLivingBase)) - { - throw new IllegalArgumentException("ArrowAttackGoal requires Mob implements RangedAttackMob"); - } - else - { - this.rangedAttackEntityHost = p_i1650_1_; - this.entityHost = (EntityLiving)p_i1650_1_; - this.entityMoveSpeed = p_i1650_2_; - this.field_96561_g = p_i1650_4_; - this.maxRangedAttackTime = p_i1650_5_; - this.field_96562_i = p_i1650_6_; - this.field_82642_h = p_i1650_6_ * p_i1650_6_; - this.setMutexBits(3); - this.range = range; - } - } - - /** - * Returns whether the EntityAIBase should begin execution. - */ - public boolean shouldExecute() - { - EntityLivingBase entitylivingbase = this.entityHost.getAttackTarget(); - - if (entitylivingbase == null) - { - return false; - } - else if(this.rangedAttackEntityHost.shouldUseRangedAttack() && this.isInRange(entitylivingbase)) - { - this.attackTarget = entitylivingbase; - return true; - }else - { - return false; - } - } - - /** - * Returns whether an in-progress EntityAIBase should continue executing - */ - public boolean continueExecuting() - { - return this.shouldExecute() || !this.entityHost.getNavigator().noPath() && this.rangedAttackEntityHost.shouldUseRangedAttack(); - } - - public boolean isInRange(EntityLivingBase target) - { - double xf = target.posX; - double yf = target.posY; - double zf = target.posZ; - - double xi = this.entityHost.posX; - double yi = this.entityHost.posY; - double zi = this.entityHost.posZ; - return (xi-xf)*(xi-xf) + (yi-yf)*(yi-yf) + (zi-zf)*(zi-zf) >= range*range; - } - - /** - * Resets the task - */ - public void resetTask() - { - this.attackTarget = null; - this.field_75318_f = 0; - this.rangedAttackTime = -1; - } - - /** - * Updates the task - */ - public void updateTask() - { - double d0 = this.entityHost.getDistanceSq(this.attackTarget.posX, this.attackTarget.getBoundingBox().minY, this.attackTarget.posZ); - boolean flag = this.entityHost.getEntitySenses().canSee(this.attackTarget); - - if (flag) - { - ++this.field_75318_f; - } - else - { - this.field_75318_f = 0; - } - - if (d0 <= (double)this.field_82642_h && this.field_75318_f >= 20) - { - this.entityHost.getNavigator().clearPathEntity(); - } - else - { - this.entityHost.getNavigator().tryMoveToEntityLiving(this.attackTarget, this.entityMoveSpeed); - } - - this.entityHost.getLookHelper().setLookPositionWithEntity(this.attackTarget, 30.0F, 30.0F); - float f; - - if (--this.rangedAttackTime == 0) - { - if (d0 > (double)this.field_82642_h || !flag) - { - return; - } - - f = MathHelper.sqrt_double(d0) / this.field_96562_i; - float f1 = f; - - if (f < 0.1F) - { - f1 = 0.1F; - } - - if (f1 > 1.0F) - { - f1 = 1.0F; - } - - this.rangedAttackEntityHost.attackEntityWithRangedAttack(this.attackTarget, f1); - this.rangedAttackTime = MathHelper.floor_float(f * (float)(this.maxRangedAttackTime - this.field_96561_g) + (float)this.field_96561_g); - } - else if (this.rangedAttackTime < 0) - { - f = MathHelper.sqrt_double(d0) / this.field_96562_i; - this.rangedAttackTime = MathHelper.floor_float(f * (float)(this.maxRangedAttackTime - this.field_96561_g) + (float)this.field_96561_g); - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/ai/EntityDemonAIHurtByTarget.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/ai/EntityDemonAIHurtByTarget.java deleted file mode 100644 index 303ab7a2..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/ai/EntityDemonAIHurtByTarget.java +++ /dev/null @@ -1,64 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.ai; - -import net.minecraft.entity.EntityCreature; -import net.minecraft.entity.ai.EntityAIHurtByTarget; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.IHoardDemon; -import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.TEDemonPortal; - -public class EntityDemonAIHurtByTarget extends EntityAIHurtByTarget -{ - boolean entityCallsForHelp; - - public EntityDemonAIHurtByTarget(EntityCreature demon, boolean callsForHelp) - { - super(demon, callsForHelp); - this.entityCallsForHelp = callsForHelp; - } - - @Override - public void startExecuting() - { - BlockPos portalPosition = ((IHoardDemon)this.taskOwner).getPortalLocation(); - if(portalPosition == null) - { - super.startExecuting(); - return; - } - - TileEntity portal = this.taskOwner.worldObj.getTileEntity(portalPosition); - - if((this.taskOwner.getAITarget() instanceof IHoardDemon && portalPosition.equals(((IHoardDemon)this.taskOwner.getAITarget()).getPortalLocation()))) - { - return; - } - - this.taskOwner.setAttackTarget(this.taskOwner.getAITarget()); - - if (this.entityCallsForHelp) - { - - if(portal instanceof TEDemonPortal) - { - ((TEDemonPortal) portal).notifyDemons(taskOwner, this.taskOwner.getAITarget(), 25); - } - -// double d0 = this.getTargetDistance(); -// List list = this.taskOwner.worldObj.getEntitiesWithinAABB(this.taskOwner.getClass(), new AxisAlignedBB(this.taskOwner.posX, this.taskOwner.posY, this.taskOwner.posZ, this.taskOwner.posX + 1.0D, this.taskOwner.posY + 1.0D, this.taskOwner.posZ + 1.0D).expand(d0, 10.0D, d0)); -// Iterator iterator = list.iterator(); -// -// while (iterator.hasNext()) -// { -// EntityCreature entitycreature = (EntityCreature)iterator.next(); -// -// if (this.taskOwner != entitycreature && entitycreature.getAttackTarget() == null && !entitycreature.isOnSameTeam(this.taskOwner.getAITarget())) -// { -// entitycreature.setAttackTarget(this.taskOwner.getAITarget()); -// } -// } - } - - super.startExecuting(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/ai/IOccasionalRangedAttackMob.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/ai/IOccasionalRangedAttackMob.java deleted file mode 100644 index 958575d6..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/ai/IOccasionalRangedAttackMob.java +++ /dev/null @@ -1,8 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.ai; - -import net.minecraft.entity.IRangedAttackMob; - -public interface IOccasionalRangedAttackMob extends IRangedAttackMob -{ - boolean shouldUseRangedAttack(); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/DemonHoardPacket.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/DemonHoardPacket.java deleted file mode 100644 index 8d0274ad..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/DemonHoardPacket.java +++ /dev/null @@ -1,15 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.demonHoard; - -import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.TEDemonPortal; -import net.minecraft.world.World; - -public abstract class DemonHoardPacket -{ - public DemonHoardPacket() {} - - public abstract int summonDemons(TEDemonPortal teDemonPortal, World world, int x, int y, int z, DemonType type, int tier, boolean spawnGuardian); - - public abstract boolean canFitType(DemonType type); - - public abstract float getRelativeChance(DemonType type, int tier, boolean spawnGuardian); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/DemonPacketMinorGrunt.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/DemonPacketMinorGrunt.java deleted file mode 100644 index cfd0ade8..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/DemonPacketMinorGrunt.java +++ /dev/null @@ -1,98 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.demonHoard; - -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGrunt; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntEarth; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntFire; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardian; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianEarth; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianFire; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianIce; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianWind; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntIce; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntWind; -import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.TEDemonPortal; - -public class DemonPacketMinorGrunt extends DemonHoardPacket -{ - @Override - public boolean canFitType(DemonType type) - { - return true; - } - - @Override - public float getRelativeChance(DemonType type, int tier, boolean spawnGuardian) - { - return 1.0f; - } - - @Override - public int summonDemons(TEDemonPortal teDemonPortal, World world, int x, int y, int z, DemonType type, int tier, boolean spawnGuardian) - { - EntityMinorDemonGrunt entity; - - { - switch(type) - { - case FIRE: - if(spawnGuardian) - { - entity = new EntityMinorDemonGruntGuardianFire(world); - }else - { - entity = new EntityMinorDemonGruntFire(world); - } - break; - case ICE: - if(spawnGuardian) - { - entity = new EntityMinorDemonGruntGuardianIce(world); - }else - { - entity = new EntityMinorDemonGruntIce(world); - } - break; - case EARTH: - if(spawnGuardian) - { - entity = new EntityMinorDemonGruntGuardianEarth(world); - }else - { - entity = new EntityMinorDemonGruntEarth(world); - } - break; - case WIND: - if(spawnGuardian) - { - entity = new EntityMinorDemonGruntGuardianWind(world); - }else - { - entity = new EntityMinorDemonGruntWind(world); - } - break; - case NORMAL: - default: - if(spawnGuardian) - { - entity = new EntityMinorDemonGruntGuardian(world); - }else - { - entity = new EntityMinorDemonGrunt(world); - } - break; - - } - } - - entity.setPosition(x, y, z); - - world.spawnEntityInWorld(entity); - - teDemonPortal.enthrallDemon(entity); - entity.setAggro(true); - entity.setDropCrystal(false); - - return spawnGuardian ? 3 : 1; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/DemonPacketRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/DemonPacketRegistry.java deleted file mode 100644 index 2d30d788..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/DemonPacketRegistry.java +++ /dev/null @@ -1,81 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.demonHoard; - -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; - -import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.TEDemonPortal; -import net.minecraft.world.World; - -public class DemonPacketRegistry -{ - public static Map packetMap = new HashMap(); - - public static boolean registerDemonPacket(String string, DemonHoardPacket packet) - { - if(!packetMap.containsValue(string) && packet != null) - { - packetMap.put(string, packet); - - return true; - } - - return false; - } - - public static String getDemonPacketName(DemonType type, int tier, boolean spawnGuardian) - { - float totalChance = 0; - - for(Entry entry : packetMap.entrySet()) - { - DemonHoardPacket packet = entry.getValue(); - - if(packet == null) - { - continue; - } - - totalChance += packet.getRelativeChance(type, tier, spawnGuardian); - } - - for(Entry entry : packetMap.entrySet()) - { - DemonHoardPacket packet = entry.getValue(); - - if(packet == null) - { - continue; - } - - float relativeChance = packet.getRelativeChance(type, tier, spawnGuardian); - - if(relativeChance >= totalChance) - { - return entry.getKey(); - }else - { - totalChance -= relativeChance; - } - } - - return ""; - } - - public static int spawnDemons(TEDemonPortal teDemonPortal, World world, int x, int y, int z, DemonType type, int tier, boolean spawnGuardian) - { - return spawnDemons(teDemonPortal, world, x, y, z, getDemonPacketName(type, tier, spawnGuardian), type, tier, spawnGuardian); - } - - public static int spawnDemons(TEDemonPortal teDemonPortal, World world, int x, int y, int z, String name, DemonType type, int tier, boolean spawnGuardian) - { - DemonHoardPacket packet = packetMap.get(name); - - if(packet != null) - { - return packet.summonDemons(teDemonPortal, world, x, y, z, type, tier, spawnGuardian); - } - - return 0; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/DemonType.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/DemonType.java deleted file mode 100644 index 75c5aed4..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/DemonType.java +++ /dev/null @@ -1,10 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.demonHoard; - -public enum DemonType -{ - NORMAL, - FIRE, - EARTH, - ICE, - WIND -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGrunt.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGrunt.java deleted file mode 100644 index f257f01b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGrunt.java +++ /dev/null @@ -1,518 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAIAttackOnCollide; -import net.minecraft.entity.ai.EntityAIFollowOwner; -import net.minecraft.entity.ai.EntityAILookIdle; -import net.minecraft.entity.ai.EntityAIOwnerHurtByTarget; -import net.minecraft.entity.ai.EntityAIOwnerHurtTarget; -import net.minecraft.entity.ai.EntityAISwimming; -import net.minecraft.entity.ai.EntityAIWander; -import net.minecraft.entity.ai.EntityAIWatchClosest; -import net.minecraft.entity.monster.EntityCreeper; -import net.minecraft.entity.monster.EntityGhast; -import net.minecraft.entity.passive.EntityAnimal; -import net.minecraft.entity.passive.EntityHorse; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemFood; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.ModItems; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.LocalRitualStorage; -import WayofTime.alchemicalWizardry.common.EntityAITargetAggroCloaking; -import WayofTime.alchemicalWizardry.common.demonVillage.ai.EntityAIOccasionalRangedAttack; -import WayofTime.alchemicalWizardry.common.demonVillage.ai.EntityDemonAIHurtByTarget; -import WayofTime.alchemicalWizardry.common.demonVillage.ai.IOccasionalRangedAttackMob; -import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.TEDemonPortal; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityDemon; -import WayofTime.alchemicalWizardry.common.entity.projectile.HolyProjectile; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class EntityMinorDemonGrunt extends EntityDemon implements IOccasionalRangedAttackMob, IHoardDemon -{ - private EntityAIOccasionalRangedAttack aiArrowAttack = new EntityAIOccasionalRangedAttack(this, 1.0D, 40, 40, 15.0F, 5); - private EntityAIAttackOnCollide aiAttackOnCollide = new EntityAIAttackOnCollide(this, EntityPlayer.class, 1.2D, false); - - private boolean isAngry = true; - private BlockPos demonPortal; - - private static float maxTamedHealth = 200.0F; - private static float maxUntamedHealth = 200.0F; - - private boolean enthralled = false; - - public EntityMinorDemonGrunt(World par1World) - { - super(par1World, AlchemicalWizardry.entityMinorDemonGruntID); - this.setSize(0.7F, 1.8F); -// this.getNavigator().setAvoidsWater(true); - this.tasks.addTask(1, new EntityAISwimming(this)); - this.tasks.addTask(2, this.aiSit); - this.tasks.addTask(3, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F)); - this.tasks.addTask(4, new EntityAIWander(this, 1.0D)); - this.tasks.addTask(5, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); - this.tasks.addTask(6, new EntityAILookIdle(this)); - this.targetTasks.addTask(1, new EntityAIOwnerHurtByTarget(this)); - this.targetTasks.addTask(2, new EntityAIOwnerHurtTarget(this)); - this.targetTasks.addTask(3, new EntityDemonAIHurtByTarget(this, true)); - this.targetTasks.addTask(4, new EntityAITargetAggroCloaking(this, EntityPlayer.class, 0, false, 0)); - this.setAggro(false); - this.setTamed(false); - - demonPortal = new BlockPos(0,0,0); - - if (par1World != null && !par1World.isRemote) - { - this.setCombatTask(); - } - - //this.isImmuneToFire = true; - } - - public boolean isTameable() - { - return false; - } - - @Override - protected void applyEntityAttributes() - { - super.applyEntityAttributes(); - //This line affects the speed of the monster - this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.30000001192092896D); - - if (this.isTamed()) - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxTamedHealth); - } else - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxUntamedHealth); - } - } - - @Override - protected void dropFewItems(boolean par1, int par2) - { - if(!this.getDoesDropCrystal()) - { - ItemStack lifeShardStack = new ItemStack(ModItems.baseItems, 1, 28); - ItemStack soulShardStack = new ItemStack(ModItems.baseItems, 1, 29); - - int dropAmount = 0; - - for(int i=0; i<=par2; i++) - { - dropAmount += this.worldObj.rand.nextFloat() < 0.6f ? 1 : 0; - } - - ItemStack drop = this.worldObj.rand.nextBoolean() ? lifeShardStack : soulShardStack; - drop.stackSize = dropAmount; - - if(dropAmount > 0) - { - this.entityDropItem(drop, 0.0f); - } - }else - { - super.dropFewItems(par1, par2); - } - } - - @Override - public void setPortalLocation(BlockPos position) - { - this.demonPortal = position; - } - - @Override - public BlockPos getPortalLocation() - { - return this.demonPortal; - } - - /** - * Returns true if the newer Entity AI code should be run - */ - public boolean isAIEnabled() - { - return true; - } - - /** - * Sets the active target the Task system uses for tracking - */ - public void setAttackTarget(EntityLivingBase par1EntityLivingBase) - { - super.setAttackTarget(par1EntityLivingBase); - - if (par1EntityLivingBase == null) - { - this.setAngry(false); - } else if (!this.isTamed()) - { - this.setAngry(true); - } - } - - /** - * main AI tick function, replaces updateEntityActionState - */ -// @Override -// protected void updateAITick() -// { -// this.dataWatcher.updateObject(18, Float.valueOf(this.getHealth())); -// } - - /** - * (abstract) Protected helper method to write subclass entity data to NBT. - */ - @Override - public void writeEntityToNBT(NBTTagCompound tag) - { - super.writeEntityToNBT(tag); - tag.setBoolean("Angry", this.isAngry()); - - tag.setInteger("xCoord", this.demonPortal.getX()); - tag.setInteger("yCoord", this.demonPortal.getY()); - tag.setInteger("zCoord", this.demonPortal.getZ()); - } - - /** - * (abstract) Protected helper method to read subclass entity data from NBT. - */ - @Override - public void readEntityFromNBT(NBTTagCompound tag) - { - super.readEntityFromNBT(tag); - this.setAngry(tag.getBoolean("Angry")); - this.demonPortal = new BlockPos(tag.getInteger("xCoord"), tag.getInteger("yCoord"), tag.getInteger("zCoord")); - - this.setCombatTask(); - } - - /** - * Returns the sound this mob makes while it's alive. - */ - @Override - protected String getLivingSound() - { - //TODO change sounds - return "none"; - } - - /** - * Returns the sound this mob makes when it is hurt. - */ - @Override - protected String getHurtSound() - { - return "none"; - } - - /** - * Returns the sound this mob makes on death. - */ - @Override - protected String getDeathSound() - { - return "mob.wolf.death"; - } - - /** - * Returns the volume for the sounds this mob makes. - */ - @Override - protected float getSoundVolume() - { - return 0.4F; - } - - /** - * 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. - */ - @Override - public void onLivingUpdate() - { - super.onLivingUpdate(); - } - - /** - * Called to update the entity's position/logic. - */ - @Override - public void onUpdate() - { - if(!this.enthralled) - { - TileEntity tile = this.worldObj.getTileEntity(this.demonPortal); - if(tile instanceof TEDemonPortal) - { - ((TEDemonPortal) tile).enthrallDemon(this); - this.enthralled = true; - }else if(tile instanceof IMasterRitualStone) - { - IMasterRitualStone stone = (IMasterRitualStone)tile; - LocalRitualStorage stor = stone.getLocalStorage(); -// if(stor instanceof LocalStorageAlphaPact) -// { -// LocalStorageAlphaPact storage = (LocalStorageAlphaPact)stor; -// -// storage.thrallDemon(this); -// } - } - } - super.onUpdate(); - } - - @Override - public float getEyeHeight() - { - return this.height * 0.8F; - } - - /** - * The speed it takes to move the entityliving's rotationPitch through the faceEntity method. This is only currently - * use in wolves. - */ - @Override - public int getVerticalFaceSpeed() - { - return this.isSitting() ? 20 : super.getVerticalFaceSpeed(); - } - - @Override - public void setTamed(boolean par1) - { - super.setTamed(par1); - - if (par1) - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxTamedHealth); - } else - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxUntamedHealth); - } - } - - /** - * Called when a player interacts with a mob. e.g. gets milk from a cow, gets into the saddle on a pig. - */ - @Override - public boolean interact(EntityPlayer par1EntityPlayer) - { - ItemStack itemstack = par1EntityPlayer.inventory.getCurrentItem(); - - if (this.isTamed()) - { - if (itemstack != null) - { - if (itemstack.getItem() instanceof ItemFood) - { - ItemFood itemfood = (ItemFood) itemstack.getItem(); - - if (itemfood.isWolfsFavoriteMeat() && this.dataWatcher.getWatchableObjectFloat(18) < maxTamedHealth) - { - if (!par1EntityPlayer.capabilities.isCreativeMode) - { - --itemstack.stackSize; - } - - this.heal((float) itemfood.getHealAmount(itemstack)); - - if (itemstack.stackSize <= 0) - { - par1EntityPlayer.inventory.setInventorySlotContents(par1EntityPlayer.inventory.currentItem, null); - } - - return true; - } - } - } - - if (this.getOwner() instanceof EntityPlayer && SpellHelper.getUsername(par1EntityPlayer).equalsIgnoreCase(SpellHelper.getUsername((EntityPlayer) this.getOwner())) && !this.isBreedingItem(itemstack)) - { - if (!this.worldObj.isRemote) - { - this.aiSit.setSitting(!this.isSitting()); - this.isJumping = false; -// this.setPathToEntity(null); -// this.setTarget(null); - this.setAttackTarget(null); - } - - this.sendSittingMessageToPlayer(par1EntityPlayer, !this.isSitting()); - } - } else if (this.isTameable() && itemstack != null && itemstack.getItem().equals(ModItems.weakBloodOrb) && !this.isAngry()) - { - if (!par1EntityPlayer.capabilities.isCreativeMode) - { - --itemstack.stackSize; - } - - if (itemstack.stackSize <= 0) - { - par1EntityPlayer.inventory.setInventorySlotContents(par1EntityPlayer.inventory.currentItem, null); - } - - if (!this.worldObj.isRemote) - { - if (this.rand.nextInt(1) == 0) - { - this.setTamed(true); -// this.setPathToEntity(null); - this.setAttackTarget(null); - this.aiSit.setSitting(true); - this.setHealth(maxTamedHealth); - this.func_152115_b(par1EntityPlayer.getUniqueID().toString()); - this.playTameEffect(true); - this.worldObj.setEntityState(this, (byte) 7); - } else - { - this.playTameEffect(false); - this.worldObj.setEntityState(this, (byte) 6); - } - } - - return true; - } - - return super.interact(par1EntityPlayer); - } - - - public boolean isBreedingItem(ItemStack par1ItemStack) - { - return false; - } - - /** - * Determines whether this wolf is angry or not. - */ - public boolean isAngry() - { - return this.isAngry; - } - - /** - * Sets whether this wolf is angry or not. - */ - public void setAngry(boolean angry) - { - this.isAngry = angry; - } - - - /** - * Returns true if the mob is currently able to mate with the specified mob. - */ - @Override - public boolean canMateWith(EntityAnimal par1EntityAnimal) - { - return false; - } - - - /** - * Determines if an entity can be despawned, used on idle far away entities - */ - @Override - protected boolean canDespawn() - { - //return !this.isTamed() && this.ticksExisted > 2400; - return false; - } - - /** - * A call to determine if this entity should attack the other entity - */ - @Override - public boolean func_142018_a(EntityLivingBase par1EntityLivingBase, EntityLivingBase par2EntityLivingBase) - { - if (!(par1EntityLivingBase instanceof EntityCreeper) && !(par1EntityLivingBase instanceof EntityGhast)) - { - if (par1EntityLivingBase instanceof EntityDemon) - { - EntityDemon entitywolf = (EntityDemon) par1EntityLivingBase; - - if (entitywolf.isTamed() && entitywolf.getOwner() == par2EntityLivingBase) - { - return false; - } - } - - return par1EntityLivingBase instanceof EntityPlayer && par2EntityLivingBase instanceof EntityPlayer && !((EntityPlayer) par2EntityLivingBase).canAttackPlayer((EntityPlayer) par1EntityLivingBase) ? false : !(par1EntityLivingBase instanceof EntityHorse) || !((EntityHorse) par1EntityLivingBase).isTame(); - } else - { - return false; - } - } - - @Override - public boolean attackEntityAsMob(Entity par1Entity) - { - int i = this.isTamed() ? 20 : 20; - - if(par1Entity instanceof IHoardDemon && ((IHoardDemon) par1Entity).isSamePortal(this)) - { - return false; - } - - return par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) i); - } - - /** - * Attack the specified entity using a ranged attack. - */ - @Override - public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) - { - if(par1EntityLivingBase instanceof IHoardDemon && ((IHoardDemon) par1EntityLivingBase).isSamePortal(this)) - { - return; - } - HolyProjectile hol = new HolyProjectile(worldObj, this, par1EntityLivingBase, 1.8f, 0f, 15, 600); - this.worldObj.spawnEntityInWorld(hol); - } - - /** - * sets this entity's combat AI. - */ - public void setCombatTask() - { - this.tasks.removeTask(this.aiAttackOnCollide); - this.tasks.removeTask(this.aiArrowAttack); - this.tasks.addTask(4, this.aiArrowAttack); - this.tasks.addTask(5, this.aiAttackOnCollide); - } - - @Override - public boolean shouldUseRangedAttack() - { - return true; - } - - @Override - public boolean thrallDemon(BlockPos location) - { - this.setPortalLocation(location); - return true; - } - - @Override - public boolean isSamePortal(IHoardDemon demon) - { - BlockPos position = demon.getPortalLocation(); - TileEntity portal = worldObj.getTileEntity(this.demonPortal); - - return portal instanceof TEDemonPortal && portal == worldObj.getTileEntity(position); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntEarth.java deleted file mode 100644 index cf33c1f1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntEarth.java +++ /dev/null @@ -1,47 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.entity.projectile.ExplosionProjectile; - -public class EntityMinorDemonGruntEarth extends EntityMinorDemonGrunt -{ - public EntityMinorDemonGruntEarth(World par1World) - { - super(par1World); - this.setDemonID(AlchemicalWizardry.entityMinorDemonGruntEarthID); - } - - @Override - public boolean attackEntityAsMob(Entity par1Entity) - { - int i = this.isTamed() ? 20 : 20; - if(par1Entity instanceof IHoardDemon && ((IHoardDemon) par1Entity).isSamePortal(this)) - { - return false; - } - - if(par1Entity instanceof EntityLivingBase) - { - ((EntityLivingBase) par1Entity).addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 200, 2)); - } - - return par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) i); - } - - @Override - public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) - { - if(par1EntityLivingBase instanceof IHoardDemon && ((IHoardDemon) par1EntityLivingBase).isSamePortal(this)) - { - return; - } - ExplosionProjectile hol = new ExplosionProjectile(worldObj, this, par1EntityLivingBase, 1.8f, 0f, 15, 600, false); - this.worldObj.spawnEntityInWorld(hol); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntFire.java deleted file mode 100644 index b7b58e5a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntFire.java +++ /dev/null @@ -1,43 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.entity.projectile.FireProjectile; - -public class EntityMinorDemonGruntFire extends EntityMinorDemonGrunt -{ - public EntityMinorDemonGruntFire(World par1World) - { - super(par1World); - this.setDemonID(AlchemicalWizardry.entityMinorDemonGruntFireID); - this.isImmuneToFire = true; - } - - @Override - public boolean attackEntityAsMob(Entity par1Entity) - { - int i = this.isTamed() ? 20 : 20; - if(par1Entity instanceof IHoardDemon && ((IHoardDemon) par1Entity).isSamePortal(this)) - { - return false; - } - - par1Entity.setFire(10); - - return par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) i); - } - - @Override - public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) - { - if(par1EntityLivingBase instanceof IHoardDemon && ((IHoardDemon) par1EntityLivingBase).isSamePortal(this)) - { - return; - } - FireProjectile hol = new FireProjectile(worldObj, this, par1EntityLivingBase, 1.8f, 0f, 15, 600); - this.worldObj.spawnEntityInWorld(hol); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardian.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardian.java deleted file mode 100644 index ac38f3c5..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardian.java +++ /dev/null @@ -1,44 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.entity.projectile.HolyProjectile; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; - -public class EntityMinorDemonGruntGuardian extends EntityMinorDemonGrunt -{ - public EntityMinorDemonGruntGuardian(World par1World) - { - super(par1World); - this.setDemonID(AlchemicalWizardry.entityMinorDemonGruntGuardianID); - } - - @Override - public boolean attackEntityAsMob(Entity par1Entity) - { - int i = this.isTamed() ? 25 : 25; - - if(par1Entity instanceof IHoardDemon && ((IHoardDemon) par1Entity).isSamePortal(this)) - { - return false; - } - - return par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) i); - } - - /** - * Attack the specified entity using a ranged attack. - */ - @Override - public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) - { - if(par1EntityLivingBase instanceof IHoardDemon && ((IHoardDemon) par1EntityLivingBase).isSamePortal(this)) - { - return; - } - HolyProjectile hol = new HolyProjectile(worldObj, this, par1EntityLivingBase, 1.8f, 0f, 20, 600); - this.worldObj.spawnEntityInWorld(hol); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianEarth.java deleted file mode 100644 index a055ebb1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianEarth.java +++ /dev/null @@ -1,51 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.entity.projectile.ExplosionProjectile; - -public class EntityMinorDemonGruntGuardianEarth extends EntityMinorDemonGruntGuardian -{ - public EntityMinorDemonGruntGuardianEarth(World par1World) - { - super(par1World); - this.setDemonID(AlchemicalWizardry.entityMinorDemonGruntGuardianEarthID); - } - - @Override - public boolean attackEntityAsMob(Entity par1Entity) - { - int i = this.isTamed() ? 25 : 25; - - if(par1Entity instanceof IHoardDemon && ((IHoardDemon) par1Entity).isSamePortal(this)) - { - return false; - } - - if(par1Entity instanceof EntityLivingBase) - { - ((EntityLivingBase) par1Entity).addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 200, 4)); - } - - return par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) i); - } - - /** - * Attack the specified entity using a ranged attack. - */ - @Override - public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) - { - if(par1EntityLivingBase instanceof IHoardDemon && ((IHoardDemon) par1EntityLivingBase).isSamePortal(this)) - { - return; - } - ExplosionProjectile hol = new ExplosionProjectile(worldObj, this, par1EntityLivingBase, 1.8f, 0f, 20, 600, false); - this.worldObj.spawnEntityInWorld(hol); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianFire.java deleted file mode 100644 index 8e502f5f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianFire.java +++ /dev/null @@ -1,47 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.entity.projectile.FireProjectile; - -public class EntityMinorDemonGruntGuardianFire extends EntityMinorDemonGruntGuardian -{ - public EntityMinorDemonGruntGuardianFire(World par1World) - { - super(par1World); - this.setDemonID(AlchemicalWizardry.entityMinorDemonGruntGuardianFireID); - this.isImmuneToFire = true; - } - - @Override - public boolean attackEntityAsMob(Entity par1Entity) - { - int i = this.isTamed() ? 25 : 25; - - if(par1Entity instanceof IHoardDemon && ((IHoardDemon) par1Entity).isSamePortal(this)) - { - return false; - } - - par1Entity.setFire(15); - - return par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) i); - } - - /** - * Attack the specified entity using a ranged attack. - */ - @Override - public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) - { - if(par1EntityLivingBase instanceof IHoardDemon && ((IHoardDemon) par1EntityLivingBase).isSamePortal(this)) - { - return; - } - FireProjectile hol = new FireProjectile(worldObj, this, par1EntityLivingBase, 1.8f, 0f, 20, 600); - this.worldObj.spawnEntityInWorld(hol); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianIce.java deleted file mode 100644 index ea35c250..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianIce.java +++ /dev/null @@ -1,44 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.entity.projectile.IceProjectile; - -public class EntityMinorDemonGruntGuardianIce extends EntityMinorDemonGruntGuardian -{ - public EntityMinorDemonGruntGuardianIce(World par1World) - { - super(par1World); - this.setDemonID(AlchemicalWizardry.entityMinorDemonGruntGuardianIceID); - } - - @Override - public boolean attackEntityAsMob(Entity par1Entity) - { - int i = this.isTamed() ? 25 : 25; - - if(par1Entity instanceof IHoardDemon && ((IHoardDemon) par1Entity).isSamePortal(this)) - { - return false; - } - - return par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) i); - } - - /** - * Attack the specified entity using a ranged attack. - */ - @Override - public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) - { - if(par1EntityLivingBase instanceof IHoardDemon && ((IHoardDemon) par1EntityLivingBase).isSamePortal(this)) - { - return; - } - IceProjectile hol = new IceProjectile(worldObj, this, par1EntityLivingBase, 1.8f, 0f, 20, 600); - this.worldObj.spawnEntityInWorld(hol); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianWind.java deleted file mode 100644 index 86cd67d3..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianWind.java +++ /dev/null @@ -1,61 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.entity.projectile.WindGustProjectile; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class EntityMinorDemonGruntGuardianWind extends EntityMinorDemonGruntGuardian -{ - public EntityMinorDemonGruntGuardianWind(World par1World) - { - super(par1World); - this.setDemonID(AlchemicalWizardry.entityMinorDemonGruntGuardianWindID); - } - - @Override - public boolean attackEntityAsMob(Entity par1Entity) - { - int i = this.isTamed() ? 25 : 25; - - if(par1Entity instanceof IHoardDemon && ((IHoardDemon) par1Entity).isSamePortal(this)) - { - return false; - } - - if (par1Entity instanceof EntityPlayer) - { - SpellHelper.setPlayerSpeedFromServer((EntityPlayer) par1Entity, par1Entity.motionX, par1Entity.motionY + 4, par1Entity.motionZ); - } else if (par1Entity instanceof EntityLivingBase) - { - ((EntityLivingBase) par1Entity).motionY += 4.0D; - } - - return par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) i); - } - - @Override - public void onLivingUpdate() - { - super.onLivingUpdate(); - this.fallDistance = 0; - } - - /** - * Attack the specified entity using a ranged attack. - */ - @Override - public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) - { - if(par1EntityLivingBase instanceof IHoardDemon && ((IHoardDemon) par1EntityLivingBase).isSamePortal(this)) - { - return; - } - WindGustProjectile hol = new WindGustProjectile(worldObj, this, par1EntityLivingBase, 1.8f, 0f, 20, 600); - this.worldObj.spawnEntityInWorld(hol); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntIce.java deleted file mode 100644 index cff401ed..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntIce.java +++ /dev/null @@ -1,40 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.entity.projectile.IceProjectile; - -public class EntityMinorDemonGruntIce extends EntityMinorDemonGrunt -{ - public EntityMinorDemonGruntIce(World par1World) - { - super(par1World); - this.setDemonID(AlchemicalWizardry.entityMinorDemonGruntIceID); - } - - @Override - public boolean attackEntityAsMob(Entity par1Entity) - { - int i = this.isTamed() ? 20 : 20; - if(par1Entity instanceof IHoardDemon && ((IHoardDemon) par1Entity).isSamePortal(this)) - { - return false; - } - - return par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) i); - } - - @Override - public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) - { - if(par1EntityLivingBase instanceof IHoardDemon && ((IHoardDemon) par1EntityLivingBase).isSamePortal(this)) - { - return; - } - IceProjectile hol = new IceProjectile(worldObj, this, par1EntityLivingBase, 1.8f, 0f, 15, 600); - this.worldObj.spawnEntityInWorld(hol); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntWind.java deleted file mode 100644 index 488ae144..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntWind.java +++ /dev/null @@ -1,57 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.entity.projectile.WindGustProjectile; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class EntityMinorDemonGruntWind extends EntityMinorDemonGrunt -{ - public EntityMinorDemonGruntWind(World par1World) - { - super(par1World); - this.setDemonID(AlchemicalWizardry.entityMinorDemonGruntWindID); - } - - @Override - public boolean attackEntityAsMob(Entity par1Entity) - { - int i = this.isTamed() ? 20 : 20; - if(par1Entity instanceof IHoardDemon && ((IHoardDemon) par1Entity).isSamePortal(this)) - { - return false; - } - - if (par1Entity instanceof EntityPlayer) - { - SpellHelper.setPlayerSpeedFromServer((EntityPlayer) par1Entity, par1Entity.motionX, par1Entity.motionY + 3, par1Entity.motionZ); - } else if (par1Entity instanceof EntityLivingBase) - { - ((EntityLivingBase) par1Entity).motionY += 3.0D; - } - - return par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) i); - } - - @Override - public void onLivingUpdate() - { - super.onLivingUpdate(); - this.fallDistance = 0; - } - - @Override - public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) - { - if(par1EntityLivingBase instanceof IHoardDemon && ((IHoardDemon) par1EntityLivingBase).isSamePortal(this)) - { - return; - } - WindGustProjectile hol = new WindGustProjectile(worldObj, this, par1EntityLivingBase, 1.8f, 0f, 15, 600); - this.worldObj.spawnEntityInWorld(hol); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/IHoardDemon.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/IHoardDemon.java deleted file mode 100644 index aee48836..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/IHoardDemon.java +++ /dev/null @@ -1,14 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon; - -import net.minecraft.util.BlockPos; - -public interface IHoardDemon -{ - void setPortalLocation(BlockPos position); - - BlockPos getPortalLocation(); - - boolean thrallDemon(BlockPos location); - - boolean isSamePortal(IHoardDemon demon); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/loot/DemonVillageLootRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/loot/DemonVillageLootRegistry.java deleted file mode 100644 index b5e4d0d1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/loot/DemonVillageLootRegistry.java +++ /dev/null @@ -1,39 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.loot; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -import net.minecraft.inventory.IInventory; -import net.minecraft.util.WeightedRandomChestContent; -import net.minecraftforge.common.ChestGenHooks; -import WayofTime.alchemicalWizardry.ModItems; - -public class DemonVillageLootRegistry -{ - public static ArrayList list1 = new ArrayList(); - - public static void init() - { - String[] tier1Strings = new String[]{ChestGenHooks.DUNGEON_CHEST, ChestGenHooks.PYRAMID_DESERT_CHEST}; - for(String str : tier1Strings) - { - List contents = ChestGenHooks.getItems(str, new Random()); - if(contents != null) - { - for(WeightedRandomChestContent content : contents) - { - list1.add(content); - } - } - } - - list1.add(new WeightedRandomChestContent(ModItems.baseItems, 28, 1, 2, 5)); - list1.add(new WeightedRandomChestContent(ModItems.baseItems, 29, 1, 2, 5)); - } - - public static void populateChest(IInventory tile, int tier) - { - WeightedRandomChestContent.generateChestContents(new Random(), list1, tile, tile.getSizeInventory() / 3); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/BlockDemonChest.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/BlockDemonChest.java deleted file mode 100644 index f880b4e1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/BlockDemonChest.java +++ /dev/null @@ -1,41 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.tileEntity; - -import net.minecraft.block.BlockChest; -import net.minecraft.block.state.IBlockState; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; - -public class BlockDemonChest extends BlockChest implements IBlockPortalNode -{ - public BlockDemonChest() - { - super(0); - this.setHardness(2.5F).setStepSound(soundTypeWood).setUnlocalizedName("demonChest"); - this.setCreativeTab(AlchemicalWizardry.tabBloodMagic); - } - - @Override - public TileEntity createNewTileEntity(World var1, int var2) - { - return new TEDemonChest(); - } - - @Override - public void breakBlock(World world, BlockPos pos, IBlockState state) - { - TileEntity tile = world.getTileEntity(pos); - if(tile instanceof TEDemonChest) - { - ((TEDemonChest) tile).notifyPortalOfInteraction(); - } - super.breakBlock(world, pos, state); - } - - @Override - public boolean canPlaceBlockAt(World world, BlockPos pos) - { - return true; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/IBlockPortalNode.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/IBlockPortalNode.java deleted file mode 100644 index 8b1595dc..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/IBlockPortalNode.java +++ /dev/null @@ -1,6 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.tileEntity; - -public interface IBlockPortalNode -{ - -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/IRoadWard.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/IRoadWard.java deleted file mode 100644 index 09ce6e85..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/IRoadWard.java +++ /dev/null @@ -1,6 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.tileEntity; - -public interface IRoadWard -{ - -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/ITilePortalNode.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/ITilePortalNode.java deleted file mode 100644 index 2771254d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/ITilePortalNode.java +++ /dev/null @@ -1,6 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.tileEntity; - -public interface ITilePortalNode -{ - void setPortalLocation(TEDemonPortal teDemonPortal); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/TEDemonChest.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/TEDemonChest.java deleted file mode 100644 index 528d6142..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/TEDemonChest.java +++ /dev/null @@ -1,77 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.tileEntity; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityChest; -import net.minecraft.util.BlockPos; - -public class TEDemonChest extends TileEntityChest implements ITilePortalNode -{ - public BlockPos portalLocation = BlockPos.ORIGIN; - - @Override - public String getName() - { - return "Demon's Chest"; - } - - @Override - public void readFromNBT(NBTTagCompound tag) - { - super.readFromNBT(tag); - NBTTagCompound portalTag = tag.getCompoundTag("portalLocation"); - portalLocation = new BlockPos(portalTag.getInteger("xCoord"), portalTag.getInteger("yCoord"), portalTag.getInteger("zCoord")); - } - - @Override - public void writeToNBT(NBTTagCompound tag) - { - super.writeToNBT(tag); - NBTTagCompound portalTag = new NBTTagCompound(); - portalTag.setInteger("xCoord", portalLocation.getX()); - portalTag.setInteger("yCoord", portalLocation.getY()); - portalTag.setInteger("zCoord", portalLocation.getZ()); - tag.setTag("portalLocation", portalTag); - } - - @Override - public void openInventory(EntityPlayer player) - { - super.openInventory(player); - this.notifyPortalOfInteraction(); - } - - @Override - public void checkForAdjacentChests() {} - - @Override - public void setPortalLocation(TEDemonPortal teDemonPortal) - { - if(teDemonPortal != null) - { - portalLocation = teDemonPortal.getPos(); - } - } - - public TEDemonPortal getDemonPortal() - { - TileEntity tile = worldObj.getTileEntity(portalLocation); - if(tile instanceof TEDemonPortal) - { - return (TEDemonPortal)tile; - } - return null; - } - - public void notifyPortalOfInteraction() - { - TEDemonPortal portal = this.getDemonPortal(); - if(portal == null) - { - return; - } - - portal.notifyDemons(pos.getX(), pos.getY(), pos.getZ(), 50); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/TEDemonPortal.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/TEDemonPortal.java deleted file mode 100644 index d5a1fee6..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/TEDemonPortal.java +++ /dev/null @@ -1,1567 +0,0 @@ -package WayofTime.alchemicalWizardry.common.demonVillage.tileEntity; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Random; -import java.util.Set; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityCreature; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.server.gui.IUpdatePlayerListBox; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraftforge.common.util.Constants; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.Int3; -import WayofTime.alchemicalWizardry.common.block.BlockTeleposer; -import WayofTime.alchemicalWizardry.common.demonVillage.BuildingSchematic; -import WayofTime.alchemicalWizardry.common.demonVillage.DemonBuilding; -import WayofTime.alchemicalWizardry.common.demonVillage.DemonCrosspath; -import WayofTime.alchemicalWizardry.common.demonVillage.DemonVillagePath; -import WayofTime.alchemicalWizardry.common.demonVillage.DemonVillagePath.Int3AndBool; -import WayofTime.alchemicalWizardry.common.demonVillage.GridSpace; -import WayofTime.alchemicalWizardry.common.demonVillage.GridSpaceHolder; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.DemonPacketRegistry; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.DemonType; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.IHoardDemon; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - -public class TEDemonPortal extends TileEntity implements IUpdatePlayerListBox -{ - public DemonType type = DemonType.FIRE; - - public static boolean printDebug = false; - - public static int limit = 100; - - public static int demonLimit = 100; - - public static int buildingGridDelay = 25; - public static int roadGridDelay = 10; - public static int demonHoardDelay = 40; - public static float demonRoadChance = 0.3f; - public static float demonHouseChance = 0.6f; - public static float demonPortalChance = 0.5f; - public static float demonHoardChance = 0.8f; - public static float portalTickRate = 1f; - - public static int[] tierCostList = new int[]{1500}; - - public Set hoardList = new HashSet(); - - public static List buildingList = new ArrayList(); - public Random rand = new Random(); - private GridSpace[][] area; - - private int negXRadius; //These variables indicate how much the grid has expanded from the 1x1 - private int posXRadius; //matrix in each direction - private int negZRadius; - private int posZRadius; - - private boolean isInitialized; - - public int houseCooldown; - public int roadCooldown; - public int tier; //Tier of the demon portal - Should select buildings 2 below to this - public int demonHouseCooldown; - public int demonHoardCooldown; - - public float pointPool; - - public String nextDemonPortalName = ""; - public EnumFacing nextDemonPortalDirection = EnumFacing.DOWN; - - public int buildingStage = -1; - - public int delayBeforeParty = 0; - - public int lockdownTimer; - - public TEDemonPortal() - { - super(); - - negXRadius = posXRadius = negZRadius = posZRadius = 1; - - area = new GridSpace[negXRadius + posXRadius + 1][negZRadius + posZRadius + 1]; - for (int xIndex = -negXRadius; xIndex <= posXRadius; xIndex++) - { - for (int zIndex = -negZRadius; zIndex <= posZRadius; zIndex++) - { - if (Math.abs(xIndex) == 1 || Math.abs(zIndex) == 1) - { - this.setGridSpace(xIndex, zIndex, new GridSpace(GridSpace.ROAD, 4)); - } else - { - this.setGridSpace(xIndex, zIndex, new GridSpace()); - } - } - } - - isInitialized = false; - - this.setGridSpace(0, 0, new GridSpace(GridSpace.MAIN_PORTAL, pos.getY())); - - this.houseCooldown = 0; - this.roadCooldown = 0; - this.tier = 0; - this.lockdownTimer = 0; - } - - public boolean isLockedDown() - { - return this.lockdownTimer > 0; - } - - public float getRoadChance() - { - if(isLockedDown()) - { - return 0; - } - return demonRoadChance; - } - - public float getHouseChance() - { - if(isLockedDown()) - { - return 0; - } - return demonHouseChance; - } - - public float getDemonPortalChance() - { - if(isLockedDown()) - { - return 0; - } - return demonPortalChance; - } - - public float getDemonHoardChance() - { - return demonHoardChance; - } - - public boolean decreaseRandomCooldown(int amount) - { - float totalChance = 0; - - Map map = new HashMap(); - map.put("roadChance", this.getRoadChance()); - map.put("houseChance", this.getHouseChance()); - map.put("demonPortalChance", this.getDemonPortalChance()); - map.put("demonHoardChance", this.getDemonHoardChance()); - - String action = ""; - - for(Entry entry : map.entrySet()) - { - totalChance += entry.getValue(); - } - - float pointer = rand.nextFloat() * totalChance; - - for(Entry entry : map.entrySet()) - { - float value = entry.getValue(); - if(pointer <= value) - { - action = entry.getKey(); - break; - }else - { - pointer -= value; - } - } - - if(action.equals("roadChance")) - { - if(roadCooldown > 0) - { - roadCooldown -= amount; - }else - { - return false; - } - }else if(action.equals("houseChance")) - { - if(houseCooldown > 0) - { - houseCooldown -= amount; - }else - { - return false; - } - }else if(action.equals("demonPortalChance")) - { - demonHouseCooldown += amount; - }else if(action.equals("demonHoardChance")) - { - if(demonHoardCooldown > 0) - { - demonHoardCooldown -= amount; - }else - { - return false; - } - } - - return true; - } - - public void notifyDemons(EntityLivingBase demon, EntityLivingBase target, double radius) //TODO - { - this.lockdownTimer = 1000; - for(IHoardDemon thrallDemon : this.hoardList) - { - if(thrallDemon instanceof EntityCreature) - { - if(thrallDemon != demon && ((EntityCreature) thrallDemon).getAttackTarget() == null && !((EntityCreature) thrallDemon).isOnSameTeam(target)) - { - double xf = demon.posX; - double yf = demon.posY; - double zf = demon.posZ; - - double xi = ((EntityCreature) thrallDemon).posX; - double yi = ((EntityCreature) thrallDemon).posY; - double zi = ((EntityCreature) thrallDemon).posZ; - - if((xi-xf)*(xi-xf) + (yi-yf)*(yi-yf) + (zi-zf)*(zi-zf) <= radius*radius) - { - ((EntityCreature) thrallDemon).setAttackTarget(target); - }else - { - ((EntityCreature) thrallDemon).getNavigator().tryMoveToEntityLiving(target, 2); - } - } - } - } - } - - public void notifyDemons(int xf, int yf, int zf, double radius) - { - for(IHoardDemon thrallDemon : this.hoardList) - { - if(thrallDemon instanceof EntityCreature) - { - if(((EntityCreature) thrallDemon).getAttackTarget() == null) - { - double xi = ((EntityCreature) thrallDemon).posX; - double yi = ((EntityCreature) thrallDemon).posY; - double zi = ((EntityCreature) thrallDemon).posZ; - - if((xi-xf)*(xi-xf) + (yi-yf)*(yi-yf) + (zi-zf)*(zi-zf) <= radius*radius) - { - ((EntityCreature) thrallDemon).getNavigator().tryMoveToXYZ(xf, yf, zf, 1); - } - } - } - } - } - - public void enthrallDemon(EntityLivingBase demon) - { - if(demon instanceof IHoardDemon) - { - boolean enthrall = ((IHoardDemon) demon).thrallDemon(pos); - if(enthrall) - { - this.hoardList.add((IHoardDemon)demon); - } - } - } - - public void initialize() - { - if (isInitialized) - { - return; - } - - DemonType[] types = DemonType.values(); - this.type = types[rand.nextInt(types.length)]; - - for (int xIndex = -negXRadius; xIndex <= posXRadius; xIndex++) - { - for (int zIndex = -negZRadius; zIndex <= posZRadius; zIndex++) - { - if (Math.abs(xIndex) == 1 || Math.abs(zIndex) == 1) - { - this.setGridSpace(xIndex, zIndex, new GridSpace(GridSpace.ROAD, pos.getY())); - } else if (xIndex == 0 && zIndex == 0) - { - this.setGridSpace(0, 0, new GridSpace(GridSpace.MAIN_PORTAL, pos.getY())); - } else - { - this.setGridSpace(xIndex, zIndex, new GridSpace()); - } - } - } - - this.houseCooldown = TEDemonPortal.buildingGridDelay; - this.roadCooldown = TEDemonPortal.roadGridDelay; - this.demonHoardCooldown = TEDemonPortal.demonHoardDelay; - - this.createRandomRoad(); - - if (this.createRandomBuilding(DemonBuilding.BUILDING_PORTAL, tier) >= 1) - { - System.out.println("Portal building successfully found!"); - this.buildingStage = 0; - } - - isInitialized = true; - } - - public void createParty() - { - worldObj.createExplosion(null, pos.getX() + rand.nextInt(10) - rand.nextInt(10), pos.getY(), pos.getZ() + rand.nextInt(10) - rand.nextInt(10), 5*rand.nextFloat(), false); - } - - public void start() - { - this.delayBeforeParty = 200; - } - - /** - * Randomly increase one of the cooldowns such that a road, house, or a demon portal tier is caused. Demons are also randomly spawned via this mechanic. - */ - @Override - public void update() - { - if(worldObj.isRemote) - { - return; - } - - if(this.delayBeforeParty > 0) - { - this.delayBeforeParty--; - - if(rand.nextInt(20) == 0) - { - this.createParty(); - } - - if(delayBeforeParty <= 0) - { - worldObj.createExplosion(null, pos.getX(), pos.getY(), pos.getZ(), 15, false); - this.initialize(); - } - - return; - } - - if (!isInitialized) - { - return; - } - - lockdownTimer = Math.max(0, this.lockdownTimer - 1); - this.incrementPoints(); - this.assignPoints(); - - if(printDebug) - AlchemicalWizardry.logger.info("Roads: " + roadCooldown + " Buildings: " + houseCooldown + " Lockdown: " + lockdownTimer); - - if(buildingStage >= 0 && buildingStage <=2) - { - if(printDebug) - AlchemicalWizardry.logger.info("BuildingStage = " + buildingStage); - if(printDebug) - AlchemicalWizardry.logger.info("Tier = " + this.tier); - this.createPortalBuilding(buildingStage, nextDemonPortalName, tier); - buildingStage++; - return; - } - - if(this.roadCooldown <= 0) - { - int roadsMade = this.createRandomRoad(); - if (roadsMade > 0) - { - this.roadCooldown = TEDemonPortal.roadGridDelay * roadsMade; - //this.demonHouseCooldown += this.roadCooldown; - } - } - - if(this.houseCooldown <= 0) - { - int gridsUsed = this.createRandomBuilding(DemonBuilding.BUILDING_HOUSE, tier); - if (gridsUsed > 0) - { - this.houseCooldown = TEDemonPortal.buildingGridDelay * gridsUsed; - //this.demonHouseCooldown += this.houseCooldown; - } - } - - if(this.demonHoardCooldown <= 0) //TODO - { - if(this.hoardList.size() <= demonLimit) - { - int complexityCost = this.createRandomDemonHoard(this, tier, this.type, this.isLockedDown()); - if(complexityCost > 0) - { - this.demonHoardCooldown += TEDemonPortal.demonHoardDelay * complexityCost; - } - } - } - - if(this.tier < tierCostList.length && this.demonHouseCooldown > tierCostList[this.tier]) - { - this.tier++; - - if (this.createRandomBuilding(DemonBuilding.BUILDING_PORTAL, tier) >= 1) - { - this.buildingStage = 0; - } - } - - -// this.houseCooldown = Math.max(0, this.houseCooldown - 1); //Current dummy implementation of the increasing costs -// this.roadCooldown = Math.max(0, this.roadCooldown - 1); - } - - public void assignPoints() - { - if((int)this.pointPool > 0) - { - if(this.decreaseRandomCooldown((int)this.pointPool)) - { - this.pointPool -= (int)this.pointPool; - } - } - } - - public void incrementPoints() - { - this.pointPool += portalTickRate; - } - - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.negXRadius = par1NBTTagCompound.getInteger("negXRadius"); - this.negZRadius = par1NBTTagCompound.getInteger("negZRadius"); - this.posXRadius = par1NBTTagCompound.getInteger("posXRadius"); - this.posZRadius = par1NBTTagCompound.getInteger("posZRadius"); - this.houseCooldown = par1NBTTagCompound.getInteger("houseCooldown"); - this.roadCooldown = par1NBTTagCompound.getInteger("roadCooldown"); - this.demonHoardCooldown = par1NBTTagCompound.getInteger("demonHoardCooldown"); - - area = new GridSpace[negXRadius + posXRadius + 1][negZRadius + posZRadius + 1]; - - NBTTagList tagList = par1NBTTagCompound.getTagList("Grid", Constants.NBT.TAG_COMPOUND); - - for (int i = 0; i < tagList.tagCount(); i++) - { - int length = (negZRadius + posZRadius + 1); - - int x = i / length; - int z = i % length; - - NBTTagCompound tag = tagList.getCompoundTagAt(i); - GridSpace space = GridSpace.getGridFromTag(tag); - - area[x][z] = space; - } - - this.isInitialized = par1NBTTagCompound.getBoolean("init"); - - this.tier = par1NBTTagCompound.getInteger("tier"); - this.demonHouseCooldown = par1NBTTagCompound.getInteger("demonHouseCooldown"); - - this.nextDemonPortalName = par1NBTTagCompound.getString("nextDemonPortalName"); - this.buildingStage = par1NBTTagCompound.getInteger("buildingStage"); - this.nextDemonPortalDirection = EnumFacing.getFront(par1NBTTagCompound.getInteger("nextDemonPortalDirection")); - - this.pointPool = par1NBTTagCompound.getFloat("pointPool"); - this.lockdownTimer = par1NBTTagCompound.getInteger("lockdownTimer"); - this.delayBeforeParty = par1NBTTagCompound.getInteger("delayBeforeParty"); - this.type = DemonType.valueOf(par1NBTTagCompound.getString("demonType")); - } - - @Override - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("negXRadius", negXRadius); - par1NBTTagCompound.setInteger("negZRadius", negZRadius); - par1NBTTagCompound.setInteger("posXRadius", posXRadius); - par1NBTTagCompound.setInteger("posZRadius", posZRadius); - par1NBTTagCompound.setInteger("houseCooldown", houseCooldown); - par1NBTTagCompound.setInteger("roadCooldown", roadCooldown); - par1NBTTagCompound.setInteger("demonHoardCooldown", demonHoardCooldown); - - NBTTagList gridList = new NBTTagList(); - - for (int i = 0; i <= negXRadius + posXRadius; i++) - { - for (int j = 0; j <= negZRadius + posZRadius; j++) - { - GridSpace space = area[i][j]; - NBTTagCompound nextTag; - - if (space == null) - { - nextTag = new GridSpace().getTag(); - } else - { - nextTag = space.getTag(); - } - - gridList.appendTag(nextTag); - } - } - - par1NBTTagCompound.setTag("Grid", gridList); - - par1NBTTagCompound.setBoolean("init", this.isInitialized); - par1NBTTagCompound.setInteger("tier", this.tier); - par1NBTTagCompound.setInteger("demonHouseCooldown", this.demonHouseCooldown); - - par1NBTTagCompound.setString("nextDemonPortalName", nextDemonPortalName); - par1NBTTagCompound.setInteger("buildingStage", buildingStage); - - par1NBTTagCompound.setInteger("nextDemonPortalDirection", this.nextDemonPortalDirection.ordinal()); - par1NBTTagCompound.setFloat("pointPool", pointPool); - par1NBTTagCompound.setInteger("lockdownTimer", this.lockdownTimer); - par1NBTTagCompound.setInteger("delayBeforeParty", delayBeforeParty); - par1NBTTagCompound.setString("demonType", this.type.toString()); - } - - public int createRandomDemonHoard(TEDemonPortal teDemonPortal, int tier, DemonType type, boolean spawnGuardian) - { - int next = rand.nextInt(4); - EnumFacing dir; - - switch (next) - { - case 0: - dir = EnumFacing.NORTH; - break; - case 1: - dir = EnumFacing.SOUTH; - break; - case 2: - dir = EnumFacing.EAST; - break; - case 3: - dir = EnumFacing.WEST; - break; - default: - dir = EnumFacing.NORTH; - } - - Int3 road = findRoadSpaceFromDirection(dir, (rand.nextInt(negXRadius + negZRadius + posXRadius + posZRadius)) + 1); - if(road == null) - { - return 0; - } - - if(TEDemonPortal.printDebug) - System.out.println("Spawning Demons"); - - return DemonPacketRegistry.spawnDemons(teDemonPortal, worldObj, pos.getX() + road.xCoord * 5, road.yCoord + 1, pos.getZ() + road.zCoord * 5, type, tier, spawnGuardian); - } - - public int createRandomRoad() //Return the number of road spaces - { - int next = rand.nextInt(4); - EnumFacing dir; - - switch (next) - { - case 0: - dir = EnumFacing.NORTH; - break; - case 1: - dir = EnumFacing.SOUTH; - break; - case 2: - dir = EnumFacing.EAST; - break; - case 3: - dir = EnumFacing.WEST; - break; - default: - dir = EnumFacing.NORTH; - } - - Int3 road = findRoadSpaceFromDirection(dir, (rand.nextInt(negXRadius + negZRadius + posXRadius + posZRadius)) + 1); - - int x = road.xCoord; - int yLevel = road.yCoord; - int z = road.zCoord; - - if(printDebug) - AlchemicalWizardry.logger.info("X: " + x + " Z: " + z + " Direction: " + dir.toString()); - - List directions = this.findValidExtentionDirection(x, z); - - if (directions.size() <= 0) - { - return 0; - } - - int maxDistance = 5; - - int distance = 0; - EnumFacing dominantDirection = null; - - for (EnumFacing direction : directions) - { - int amt = this.getLength(direction, maxDistance, x, z); - if (amt > distance) - { - distance = amt; - dominantDirection = direction; - } else if (amt == distance && rand.nextBoolean()) - { - dominantDirection = direction; - } - } - - if (dominantDirection == null) - { - return 0; - } - if(printDebug) - AlchemicalWizardry.logger.info("I got here!"); - if(printDebug) - AlchemicalWizardry.logger.info("Distance: " + distance + " Direction: " + dominantDirection.toString() + " yLevel: " + yLevel); - - this.createGriddedRoad(x, yLevel, z, dominantDirection, distance + 1, true); - - return distance; - } - - public List findValidExtentionDirection(int x, int z) - { - List directions = new LinkedList(); - - if (this.getGridSpace(x, z) == null || !this.getGridSpace(x, z).isRoadSegment()) - { - return directions; - } - - GridSpace nextGrid = this.getGridSpace(x + 1, z); - if (nextGrid.isEmpty()) - { - directions.add(EnumFacing.EAST); - } - - nextGrid = this.getGridSpace(x - 1, z); - if (nextGrid.isEmpty()) - { - directions.add(EnumFacing.WEST); - } - - nextGrid = this.getGridSpace(x, z + 1); - if (nextGrid.isEmpty()) - { - directions.add(EnumFacing.SOUTH); - } - - nextGrid = this.getGridSpace(x, z - 1); - if (nextGrid.isEmpty()) - { - directions.add(EnumFacing.NORTH); - } - - return directions; - } - - public int getLength(EnumFacing dir, int maxLength, int x, int z) //Number of spaces forward - { - for (int i = 1; i <= maxLength; i++) - { - GridSpace space = this.getGridSpace(x + i * dir.getFrontOffsetX(), z + i * dir.getFrontOffsetZ()); - if (space.isEmpty()) - { - for (int k = 1; k <= this.getRoadSpacer(); k++) - { - GridSpace space1 = this.getGridSpace(x + i * dir.getFrontOffsetX() + dir.getFrontOffsetZ() * k, z + i * dir.getFrontOffsetZ() + dir.getFrontOffsetX() * k); - GridSpace space2 = this.getGridSpace(x + i * dir.getFrontOffsetX() - dir.getFrontOffsetZ() * k, z + i * dir.getFrontOffsetZ() - dir.getFrontOffsetX() * k); - - if (space1.isRoadSegment() || space2.isRoadSegment()) - { - return i - 1; - } - } - - continue; - } - if (space.isRoadSegment()) - { - return i; - } else - { - return i - 1; - } - } - return maxLength; - } - - public Int3 findRoadSpaceFromDirection(EnumFacing dir, int amount) //TODO - { - int index = 0; - if (dir == EnumFacing.NORTH) - { - if(printDebug) - System.out.print("NORTH!"); - for (int i = Math.max(0, -limit + negZRadius); i <= negZRadius + Math.min(posZRadius, limit); i++) - { - for (int j = Math.max(0, -limit + negXRadius); j <= negXRadius + Math.min(posXRadius, limit); j++) - { - GridSpace space = area[j][i]; - if (space.isRoadSegment()) - { - index++; - if (index >= amount) - { - return new Int3(j - negXRadius, space.getYLevel(), i - negZRadius); - } - } - } - } - } else if (dir == EnumFacing.SOUTH) - { - for (int i = negZRadius + Math.min(posZRadius, limit); i >= Math.max(0, -limit + negZRadius); i--) - { - for (int j = Math.max(0, -limit + negXRadius); j <= negXRadius + Math.min(posXRadius, limit); j++) - { - GridSpace space = area[j][i]; - if (space.isRoadSegment()) - { - index++; - if (index >= amount) - { - return new Int3(j - negXRadius, space.getYLevel(), i - negZRadius); - } - } - } - } - } else if (dir == EnumFacing.EAST) - { - for (int i = negXRadius + Math.min(posXRadius, limit); i >= Math.max(0, -limit + negXRadius); i--) - { - for (int j = Math.max(0, -limit + negZRadius); j <= negZRadius + Math.min(posZRadius, limit); j++) - { - GridSpace space = area[i][j]; - if (space.isRoadSegment()) - { - index++; - if (index >= amount) - { - return new Int3(i - negXRadius, space.getYLevel(), j - negZRadius); - } - } - } - } - } else if (dir == EnumFacing.WEST) - { - for (int i = Math.max(0, -limit + negXRadius); i <= negXRadius + Math.min(posXRadius, limit); i++) - { - for (int j = Math.max(0, -limit + negZRadius); j <= negZRadius + Math.min(posZRadius, limit); j++) - { - GridSpace space = area[i][j]; - if (space.isRoadSegment()) - { - index++; - if (index >= amount) - { - return new Int3(i - negXRadius, space.getYLevel(), j - negZRadius); - } - } - } - } - } - - return new Int3(0, 0, 0); - } - - public Int3 findEmptySpaceNearRoad(EnumFacing dir, int amount, int closeness) - { - int index = 0; - if (dir == EnumFacing.NORTH) - { - if(printDebug) - System.out.print("NORTH!"); - for (int i = 0; i <= negZRadius + posZRadius; i++) - { - for (int j = 0; j <= negXRadius + posXRadius; j++) - { - GridSpace space = area[j][i]; - if (space.isEmpty()) - { - int yLevel = this.findNearestRoadYLevel(j - negXRadius, i - negZRadius, closeness); - if (yLevel == -1) - { - continue; - } - index++; - if (index >= amount) - { - return new Int3(j - negXRadius, yLevel, i - negZRadius); - } - } - } - } - } else if (dir == EnumFacing.SOUTH) - { - for (int i = negZRadius + posZRadius; i >= 0; i--) - { - for (int j = 0; j <= negXRadius + posXRadius; j++) - { - GridSpace space = area[j][i]; - int yLevel = this.findNearestRoadYLevel(j - negXRadius, i - negZRadius, closeness); - if (yLevel == -1) - { - continue; - } - if (space.isEmpty()) - { - index++; - if (index >= amount) - { - return new Int3(j - negXRadius, yLevel, i - negZRadius); - } - } - } - } - } else if (dir == EnumFacing.EAST) - { - for (int i = negXRadius + posXRadius; i >= 0; i--) - { - for (int j = 0; j <= negZRadius + posZRadius; j++) - { - GridSpace space = area[i][j]; - int yLevel = this.findNearestRoadYLevel(i - negXRadius, j - negZRadius, closeness); - if (yLevel == -1) - { - continue; - } - if (space.isEmpty()) - { - index++; - if (index >= amount) - { - return new Int3(i - negXRadius, yLevel, j - negZRadius); - } - } - } - } - } else if (dir == EnumFacing.WEST) - { - for (int i = 0; i <= negXRadius + posXRadius; i++) - { - for (int j = 0; j <= negZRadius + posZRadius; j++) - { - GridSpace space = area[i][j]; - int yLevel = this.findNearestRoadYLevel(i - negXRadius, j - negZRadius, closeness); - if (yLevel == -1) - { - continue; - } - if (space.isEmpty()) - { - index++; - if (index >= amount) - { - return new Int3(i - negXRadius, yLevel, j - negZRadius); - } - } - } - } - } - - return new Int3(0, 0, 0); - } - - public Int3 findEmptySpaceFromDirection(EnumFacing dir, int amount) - { - int index = 0; - if (dir == EnumFacing.NORTH) - { - if(printDebug) - System.out.print("NORTH!"); - for (int i = 0; i <= negZRadius + posZRadius; i++) - { - for (int j = 0; j <= negXRadius + posXRadius; j++) - { - GridSpace space = area[j][i]; - if (space.isEmpty()) - { - index++; - if (index >= amount) - { - return new Int3(j - negXRadius, space.getYLevel(), i - negZRadius); - } - } - } - } - } else if (dir == EnumFacing.SOUTH) - { - for (int i = negZRadius + posZRadius; i >= 0; i--) - { - for (int j = 0; j <= negXRadius + posXRadius; j++) - { - GridSpace space = area[j][i]; - if (space.isEmpty()) - { - index++; - if (index >= amount) - { - return new Int3(j - negXRadius, space.getYLevel(), i - negZRadius); - } - } - } - } - } else if (dir == EnumFacing.EAST) - { - for (int i = negXRadius + posXRadius; i >= 0; i--) - { - for (int j = 0; j <= negZRadius + posZRadius; j++) - { - GridSpace space = area[i][j]; - if (space.isEmpty()) - { - index++; - if (index >= amount) - { - return new Int3(i - negXRadius, space.getYLevel(), j - negZRadius); - } - } - } - } - } else if (dir == EnumFacing.WEST) - { - for (int i = 0; i <= negXRadius + posXRadius; i++) - { - for (int j = 0; j <= negZRadius + posZRadius; j++) - { - GridSpace space = area[i][j]; - if (space.isEmpty()) - { - index++; - if (index >= amount) - { - return new Int3(i - negXRadius, space.getYLevel(), j - negZRadius); - } - } - } - } - } - - return new Int3(0, 0, 0); - } - - public int createGriddedRoad(int gridXi, int yi, int gridZi, EnumFacing dir, int gridLength, boolean convertStarter) //Total grid length - { - if (gridLength == 0 || gridLength == 1) - { - return 0; - } - - int initGridX = gridXi; - int initGridZ = gridZi; - int initY = yi; - - if (convertStarter) - { - this.setGridSpace(initGridX, initGridZ, new GridSpace(GridSpace.CROSSROAD, initY)); - - DemonCrosspath crosspath = new DemonCrosspath(pos.getX() + initGridX * 5, initY, pos.getZ() + initGridZ * 5); - crosspath.createCrosspath(worldObj); - } - - for (int index = 0; index < gridLength - 1; index++) - { - DemonVillagePath path = new DemonVillagePath(pos.getX() + initGridX * 5, initY, pos.getZ() + initGridZ * 5, dir, 6); - - Int3AndBool temp = path.constructFullPath(this, worldObj, this.getRoadStepClearance()); - Int3 next = temp.coords; - - if (next != null) - { - initY = next.yCoord; - if(printDebug) - AlchemicalWizardry.logger.info("" + initY); - } - - if(!temp.bool) - { - return index; - } - - initGridX += dir.getFrontOffsetX(); - initGridZ += dir.getFrontOffsetZ(); - - if (!this.getGridSpace(initGridX, initGridZ).isRoadSegment()) - { - this.setGridSpace(initGridX, initGridZ, new GridSpace(GridSpace.ROAD, initY)); - } - } - - return gridLength - 1; - } - - public void expandAreaInNegX() - { - GridSpace[][] newGrid = new GridSpace[negXRadius + posXRadius + 2][negZRadius + posZRadius + 1]; - for (int i = 0; i <= negZRadius + posZRadius; i++) - { - newGrid[0][i] = new GridSpace(); - } - - for (int i = 0; i <= negXRadius + posXRadius; i++) - { - for (int j = 0; j <= negZRadius + posZRadius; j++) - { - newGrid[i + 1][j] = area[i][j]; - } - } - - area = newGrid; - negXRadius += 1; - } - - public void expandAreaInPosX() - { - GridSpace[][] newGrid = new GridSpace[negXRadius + posXRadius + 2][negZRadius + posZRadius + 1]; - - for (int i = 0; i <= negZRadius + posZRadius; i++) - { - newGrid[negXRadius + posXRadius + 1][i] = new GridSpace(); - } - - for (int i = 0; i <= negXRadius + posXRadius; i++) - { - for (int j = 0; j <= negZRadius + posZRadius; j++) - { - newGrid[i][j] = area[i][j]; - } - } - - area = newGrid; - posXRadius += 1; - } - - public void expandAreaInNegZ() - { - GridSpace[][] newGrid = new GridSpace[negXRadius + posXRadius + 1][negZRadius + posZRadius + 2]; - - if(printDebug) - AlchemicalWizardry.logger.info("x " + newGrid.length + "z " + newGrid[0].length); - - for (int i = 0; i <= negXRadius + posXRadius; i++) - { - newGrid[i][0] = new GridSpace(); - } - - for (int i = 0; i <= negXRadius + posXRadius; i++) - { - for (int j = 0; j <= negZRadius + posZRadius; j++) - { - newGrid[i][j + 1] = area[i][j]; - } - } - - area = newGrid; - negZRadius += 1; - } - - public void expandAreaInPosZ() - { - GridSpace[][] newGrid = new GridSpace[negXRadius + posXRadius + 1][negZRadius + posZRadius + 2]; - - for (int i = 0; i <= negXRadius + posXRadius; i++) - { - newGrid[i][negZRadius + posZRadius + 1] = new GridSpace(); - } - - for (int i = 0; i <= negXRadius + posXRadius; i++) - { - for (int j = 0; j <= negZRadius + posZRadius; j++) - { - newGrid[i][j] = area[i][j]; - } - } - - area = newGrid; - posZRadius += 1; - } - - public GridSpace getGridSpace(int x, int z) - { - if (x > posXRadius || x < -negXRadius || z > posZRadius || z < -negZRadius) - { - return new GridSpace(); - } else - { - return (area[x + negXRadius][z + negZRadius]); - } - } - - public void setGridSpace(int x, int z, GridSpace space) - { - if (x > posXRadius) - { - this.expandAreaInPosX(); - this.setGridSpace(x, z, space); - } else if (x < -negXRadius) - { - this.expandAreaInNegX(); - this.setGridSpace(x, z, space); - } else if (z > posZRadius) - { - this.expandAreaInPosZ(); - this.setGridSpace(x, z, space); - } else if (z < -negZRadius) - { - this.expandAreaInNegZ(); - this.setGridSpace(x, z, space); - } else - { - area[x + negXRadius][z + negZRadius] = space; - } - } - - public void rightClickBlock(EntityPlayer player, int side) - { -// if (worldObj.isRemote) -// { -// return; -// } -// -// this.initialize(); -// -// if (EnumFacing.getOrientation(side) == EnumFacing.UP) -// { -// this.createRandomBuilding(DemonBuilding.BUILDING_HOUSE, 0); -// } else if (EnumFacing.getOrientation(side) == EnumFacing.DOWN) -// { -// this.createRandomBuilding(DemonBuilding.BUILDING_PORTAL, 0); -// } else -// { -// this.createRandomRoad(); -// } - } - - public int createRandomBuilding(int type, int tier) - { - switch (type) - { - case DemonBuilding.BUILDING_HOUSE: - return this.createRandomHouse(tier); - case DemonBuilding.BUILDING_PORTAL: - return this.createPortalBuilding(tier); - } - - return 0; - } - - public int createPortalBuilding(int buildingTier) //TODO Telepose block next time, then build the new building. - { - if(printDebug) - AlchemicalWizardry.logger.info("Hello, I am here!"); - int x = 0; - int z = 0; - -// GridSpace home = this.getGridSpace(x, z); -// int yLevel = home.getYLevel(); - -// GridSpaceHolder grid = this.createGSH(); - - List directions = new ArrayList(); - - for (int i = 2; i < 6; i++) - { - EnumFacing testDir = EnumFacing.getFront(i); - directions.add(testDir); - } - - if (directions.isEmpty()) - { - return 0; - } - - HashMap> schemMap = new HashMap>(); - - for (EnumFacing nextDir : directions) - { - for (DemonBuilding build : TEDemonPortal.buildingList) - { - if (build.buildingType != DemonBuilding.BUILDING_PORTAL || build.buildingTier != buildingTier) - { - continue; - } - System.out.println("This one matches!"); - if (schemMap.containsKey(nextDir)) - { - schemMap.get(nextDir).add(build); - } else - { - schemMap.put(nextDir, new ArrayList()); - schemMap.get(nextDir).add(build); - } - } - } - - if (schemMap.keySet().isEmpty()) - { - return 0; - } - - EnumFacing chosenDirection = (EnumFacing) schemMap.keySet().toArray()[new Random().nextInt(schemMap.keySet().size())]; - DemonBuilding build = schemMap.get(chosenDirection).get(new Random().nextInt(schemMap.get(chosenDirection).size())); -// Int3 portalSpace = build.getDoorSpace(chosenDirection); - - this.nextDemonPortalDirection = chosenDirection; - this.nextDemonPortalName = build.getName(); - -// build.destroyAllInField(worldObj, xCoord + (x) * 5, yLevel, zCoord + (z) * 5, chosenDirection.getOpposite()); -// -// int yOffset = portalSpace.yCoord; -// build.buildAll(worldObj, xCoord + (x) * 5, yLevel, zCoord + (z) * 5, chosenDirection.getOpposite()); -// build.setAllGridSpaces(x, z, yLevel, chosenDirection.getOpposite(), GridSpace.MAIN_PORTAL, grid); -// this.loadGSH(grid); - - return build.getNumberOfGridSpaces(); - } - - /** - * The Stage is at what point the portal is in reacting to the creation of the Demon Portal. - * Stage == 0 means just the saving - * Stage == 1 means to telepose the portal - * Stage == 2 means the teleposition is complete and that the building may be constructed - */ - public void createPortalBuilding(int stage, String name, int tier) - { - for(DemonBuilding build : TEDemonPortal.buildingList) - { - if(build.buildingType != DemonBuilding.BUILDING_PORTAL || build.buildingTier != tier) - { - continue; - } - - if(build.getName().equals(this.nextDemonPortalName)) - { - int x = 0; - int z = 0; - - GridSpace home = this.getGridSpace(x, z); - int yLevel = home.getYLevel(); - - GridSpaceHolder grid = this.createGSH(); - - EnumFacing chosenDirection = this.nextDemonPortalDirection; - Int3 portalSpace = build.getDoorSpace(chosenDirection); - int yOffset = portalSpace.yCoord; - - switch(stage) - { - case 0: - - break; - - case 1: - int yDestination = yLevel + yOffset; - if(pos.getY() != yDestination) - { - BlockTeleposer.swapBlocks(this, worldObj, worldObj, pos, new BlockPos(pos.getX(), yDestination, pos.getZ())); - }else - { - //Nuthin - just as a reminder that we can now increment properly - } - break; - - case 2: - build.destroyAllInField(worldObj, pos.getX() + (x) * 5, yLevel, pos.getZ() + (z) * 5, chosenDirection.getOpposite()); - - build.buildAll(this, worldObj, pos.getX() + (x) * 5, yLevel, pos.getZ() + (z) * 5, chosenDirection.getOpposite(), true); - build.setAllGridSpaces(x, z, yLevel, chosenDirection.getOpposite(), GridSpace.MAIN_PORTAL, grid); - this.loadGSH(grid); - break; - } - - return; - } - } - } - - public int createRandomHouse(int buildingTier) - { - int next = rand.nextInt(4); - EnumFacing dir; - - switch (next) - { - case 0: - dir = EnumFacing.NORTH; - break; - case 1: - dir = EnumFacing.SOUTH; - break; - case 2: - dir = EnumFacing.EAST; - break; - case 3: - dir = EnumFacing.WEST; - break; - default: - dir = EnumFacing.NORTH; - } - - Int3 space = this.findRoadSpaceFromDirection(dir, (rand.nextInt(negXRadius + negZRadius + posXRadius + posZRadius)) + 1); // Second: 1 * - - int x = space.xCoord; - int z = space.zCoord; - int yLevel = space.yCoord; - - if(printDebug) - AlchemicalWizardry.logger.info("Road space - x: " + x + " z: " + z); - - GridSpaceHolder grid = this.createGSH(); - - if (!this.getGridSpace(x, z).isRoadSegment()) - { - return 0; - } - - List directions = new ArrayList(); - - for (int i = 2; i < 6; i++) - { - EnumFacing testDir = EnumFacing.getFront(i); - if (this.getGridSpace(x + testDir.getFrontOffsetX(), z + testDir.getFrontOffsetZ()).isEmpty()) - { - directions.add(testDir); - } - } - - if (directions.isEmpty()) - { - return 0; - } - - HashMap> schemMap = new HashMap>(); - - for (EnumFacing nextDir : directions) - { - for (DemonBuilding build : TEDemonPortal.buildingList) - { - if (build.buildingTier != buildingTier || build.buildingType != DemonBuilding.BUILDING_HOUSE) - { - continue; - } - Int3 offsetSpace = build.getGridOffsetFromRoad(nextDir, yLevel); - int xOff = offsetSpace.xCoord; - int zOff = offsetSpace.zCoord; - - if (build.isValid(grid, x + xOff, z + zOff, nextDir.getOpposite())) - { - if (schemMap.containsKey(nextDir)) - { - schemMap.get(nextDir).add(build); - } else - { - schemMap.put(nextDir, new ArrayList()); - schemMap.get(nextDir).add(build); - } - } else - { - if(printDebug) - AlchemicalWizardry.logger.info("This ISN'T valid!"); - } - } - } - - if (schemMap.keySet().isEmpty()) - { - return 0; - } - - EnumFacing chosenDirection = (EnumFacing) schemMap.keySet().toArray()[new Random().nextInt(schemMap.keySet().size())]; - DemonBuilding build = schemMap.get(chosenDirection).get(new Random().nextInt(schemMap.get(chosenDirection).size())); - - Int3 offsetSpace = build.getGridOffsetFromRoad(chosenDirection, yLevel); - int xOff = offsetSpace.xCoord; - int zOff = offsetSpace.zCoord; - - build.destroyAllInField(worldObj, pos.getX() + (x + xOff) * 5, yLevel, pos.getZ() + (z + zOff) * 5, chosenDirection.getOpposite()); - build.buildAll(this, worldObj, pos.getX() + (x + xOff) * 5, yLevel, pos.getZ() + (z + zOff) * 5, chosenDirection.getOpposite(), true); - build.setAllGridSpaces(x + xOff, z + zOff, yLevel, chosenDirection.getOpposite(), GridSpace.HOUSE, grid); - this.loadGSH(grid); - - return build.getNumberOfGridSpaces(); - } - - public int findNearestRoadYLevel(int xCoord, int zCoord, int maxDistance) - { - for (int l = 1; l <= maxDistance; l++) - { - for (int i = -l; i <= l; i++) - { - for (int j = -l; j <= l; j++) - { - if (Math.abs(i) != l && Math.abs(j) != l) - { - continue; - } - - if (this.getGridSpace(xCoord + i, zCoord + j).isRoadSegment()) - { - return this.getGridSpace(xCoord + i, zCoord + j).getYLevel(); - } - } - } - } - - return -1; - } - - public void createRoad(int xi, int yi, int zi, EnumFacing dir, int length, boolean doesNotDrop) - { - if (dir.getFrontOffsetY() != 0) - { - return; - } - - DemonVillagePath path = new DemonVillagePath(xi, yi, zi, dir, length); - - path.constructFullPath(this, worldObj, this.getRoadStepClearance()); - } - - public int placeMaterialOnNextAvailable() - { - return 0; - } - - public int getRoadRadius() - { - return 1; - } - - public Block getRoadBlock() - { - switch(this.tier) - { - case 0: - return rand.nextFloat() < 0.6 ? Blocks.cobblestone : Blocks.mossy_cobblestone; - case 1: - return Blocks.stonebrick; - default: - return Blocks.nether_brick; - } - } - - public int getRoadMeta() - { - switch(this.tier) - { - case 1: - return rand.nextFloat() < 0.6 ? 1 : 0; - } - return 0; - } - - public IBlockState getRoadState() - { - return getRoadBlock().getStateFromMeta(getRoadMeta()); - } - - public int getRoadStepClearance() - { - return 10; - } - - public int getRoadSpacer() - { - return 1; - } - - public GridSpaceHolder createGSH() - { - GridSpaceHolder grid = new GridSpaceHolder(); - grid.area = this.area; - grid.negXRadius = this.negXRadius; - grid.negZRadius = this.negZRadius; - grid.posXRadius = this.posXRadius; - grid.posZRadius = this.posZRadius; - - return grid; - } - - public void loadGSH(GridSpaceHolder grid) - { - this.area = grid.area; - this.negXRadius = grid.negXRadius; - this.negZRadius = grid.negZRadius; - this.posXRadius = grid.posXRadius; - this.posZRadius = grid.posZRadius; - } - - public static void loadBuildingList() - { - String folder = "config/BloodMagic/schematics"; - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - - File file = new File(folder); - File[] files = file.listFiles(); - BufferedReader br; - - try - { - for (File f : files) - { - br = new BufferedReader(new FileReader(f)); - BuildingSchematic schema = gson.fromJson(br, BuildingSchematic.class); - TEDemonPortal.buildingList.add(new DemonBuilding(schema)); - } - } catch (FileNotFoundException e) - { - e.printStackTrace(); - } - } - - public void addToPoints(int addition) - { - this.demonHouseCooldown += addition; - } - - public void notifyPortalOfBreak() - { - for(IHoardDemon demon : hoardList) - { - if(demon instanceof Entity) - { - ((Entity) demon).setDead(); - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/BookEntityItem.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/BookEntityItem.java deleted file mode 100644 index 00187b3d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/BookEntityItem.java +++ /dev/null @@ -1,56 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.mob; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemStack; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; - -public class BookEntityItem extends EntityItem -{ - public BookEntityItem(World par1World, double par2, double par4, double par6) - { - super(par1World, par2, par4, par6); - this.isImmuneToFire = true; - this.lifespan = 72000; - } - - public BookEntityItem(World par1World, double par2, double par4, double par6, ItemStack par8ItemStack) - { - this(par1World, par2, par4, par6); - this.setEntityItemStack(par8ItemStack); - this.lifespan = (par8ItemStack.getItem() == null ? 6000 : par8ItemStack.getItem().getEntityLifespan(par8ItemStack, par1World)); - this.isImmuneToFire = true; - } - - public BookEntityItem(World world, Entity original, ItemStack stack) - { - this(world, original.posX, original.posY, original.posZ); - this.setDefaultPickupDelay(); - this.motionX = original.motionX; - this.motionY = original.motionY; - this.motionZ = original.motionZ; - this.setEntityItemStack(stack); - this.isImmuneToFire = true; - } - - public BookEntityItem(World par1world) - { - super(par1world); - } - - @Override - public void onUpdate() - { - super.onUpdate(); - } - - @Override - public boolean attackEntityFrom (DamageSource par1DamageSource, float par2) - { - if (par1DamageSource.getDamageType().equals("outOfWorld")) - return true; - return false; - } - -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityAirElemental.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityAirElemental.java deleted file mode 100644 index e1bad7e6..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityAirElemental.java +++ /dev/null @@ -1,31 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.mob; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.monster.IMob; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -public class EntityAirElemental extends EntityElemental implements IMob -{ - public EntityAirElemental(World world) - { - super(world, AlchemicalWizardry.entityAirElementalID); - } - - public void inflictEffectOnEntity(Entity target) - { - if (target instanceof EntityPlayer) - { - SpellHelper.setPlayerSpeedFromServer((EntityPlayer) target, target.motionX, target.motionY + 3, target.motionZ); - ((EntityLivingBase) target).addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionInhibit.id, 150, 0)); - } else if (target instanceof EntityLivingBase) - { - ((EntityLivingBase) target).motionY += 3.0D; - ((EntityLivingBase) target).addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionInhibit.id, 150, 0)); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityBileDemon.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityBileDemon.java deleted file mode 100644 index 08dbb8bc..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityBileDemon.java +++ /dev/null @@ -1,60 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.mob; - -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAIAttackOnCollide; -import net.minecraft.entity.ai.EntityAIFollowOwner; -import net.minecraft.entity.ai.EntityAIHurtByTarget; -import net.minecraft.entity.ai.EntityAILookIdle; -import net.minecraft.entity.ai.EntityAIOwnerHurtByTarget; -import net.minecraft.entity.ai.EntityAIOwnerHurtTarget; -import net.minecraft.entity.ai.EntityAISwimming; -import net.minecraft.entity.ai.EntityAIWander; -import net.minecraft.entity.ai.EntityAIWatchClosest; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.pathfinding.PathNavigateGround; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; - -public class EntityBileDemon extends EntityDemon -{ - public EntityBileDemon(World par1World) - { - super(par1World, AlchemicalWizardry.entityBileDemonID); - maxTamedHealth = 100.0F; - maxUntamedHealth = 200.0F; - this.setSize(1.3F, 2.0F); - ((PathNavigateGround)this.getNavigator()).func_179690_a(true); - this.tasks.addTask(1, new EntityAISwimming(this)); - this.tasks.addTask(2, new EntityAIAttackOnCollide(this, 1.0D, true)); - this.tasks.addTask(3, this.aiSit); - this.tasks.addTask(4, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F)); - this.tasks.addTask(5, new EntityAIWander(this, 1.0D)); - this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); - this.tasks.addTask(7, new EntityAILookIdle(this)); - this.targetTasks.addTask(1, new EntityAIOwnerHurtByTarget(this)); - this.targetTasks.addTask(2, new EntityAIOwnerHurtTarget(this)); - this.targetTasks.addTask(3, new EntityAIHurtByTarget(this, true)); - this.setTamed(false); - attackTimer = 0; - this.applyEntityAttributes(); - } - - @Override - protected void applyEntityAttributes() - { - super.applyEntityAttributes(); - //This line affects the speed of the monster - this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.20000001192092896D); - - //My guess is that this will alter the max health - if (this.isTamed()) - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxTamedHealth); - } else - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxUntamedHealth); - } - - //this.func_110148_a(SharedMonsterAttributes.field_111267_a).func_111128_a(10.0D); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityBoulderFist.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityBoulderFist.java deleted file mode 100644 index 7d431217..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityBoulderFist.java +++ /dev/null @@ -1,78 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.mob; - -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAIAttackOnCollide; -import net.minecraft.entity.ai.EntityAIFollowOwner; -import net.minecraft.entity.ai.EntityAIHurtByTarget; -import net.minecraft.entity.ai.EntityAILeapAtTarget; -import net.minecraft.entity.ai.EntityAILookIdle; -import net.minecraft.entity.ai.EntityAIOwnerHurtByTarget; -import net.minecraft.entity.ai.EntityAIOwnerHurtTarget; -import net.minecraft.entity.ai.EntityAISwimming; -import net.minecraft.entity.ai.EntityAIWander; -import net.minecraft.entity.ai.EntityAIWatchClosest; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.pathfinding.PathNavigateGround; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.EntityAITargetAggro; - -public class EntityBoulderFist extends EntityDemon -{ - private EntityAIAttackOnCollide aiAttackOnCollide = new EntityAIAttackOnCollide(this, EntityPlayer.class, 1.2D, false); - - public EntityBoulderFist(World par1World) - { - super(par1World, AlchemicalWizardry.entityBoulderFistID); - this.setSize(0.8F, 1.2F); - ((PathNavigateGround)this.getNavigator()).func_179690_a(true); - this.tasks.addTask(1, new EntityAISwimming(this)); - this.tasks.addTask(2, this.aiSit); - this.tasks.addTask(3, new EntityAILeapAtTarget(this, 0.4F)); - this.tasks.addTask(4, new EntityAIAttackOnCollide(this, 1.0D, true)); - this.tasks.addTask(5, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F)); - this.tasks.addTask(6, new EntityAIWander(this, 1.0D)); - this.tasks.addTask(7, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); - this.tasks.addTask(8, new EntityAILookIdle(this)); - this.targetTasks.addTask(1, new EntityAIOwnerHurtByTarget(this)); - this.targetTasks.addTask(2, new EntityAIOwnerHurtTarget(this)); - this.targetTasks.addTask(3, new EntityAIHurtByTarget(this, true)); - this.targetTasks.addTask(4, new EntityAITargetAggro(this, EntityPlayer.class, 0, false)); - this.setAggro(false); - this.setTamed(false); - - if (par1World != null && !par1World.isRemote) - { - this.setCombatTask(); - } - } - - @Override - protected void applyEntityAttributes() - { - super.applyEntityAttributes(); - //This line affects the speed of the monster - this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.30000001192092896D); - float maxTamedHealth = 60.0F; - float maxUntamedHealth = 50.0F; - - //My guess is that this will alter the max health - if (this.isTamed()) - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxTamedHealth); - } else - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxUntamedHealth); - } - } - - /** - * sets this entity's combat AI. - */ - public void setCombatTask() - { - this.tasks.removeTask(this.aiAttackOnCollide); - //this.tasks.removeTask(this.aiArrowAttack); - this.tasks.addTask(4, this.aiAttackOnCollide); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityDemon.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityDemon.java deleted file mode 100644 index e87ee5a8..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityDemon.java +++ /dev/null @@ -1,523 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.mob; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityAgeable; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.monster.EntityCreeper; -import net.minecraft.entity.monster.EntityGhast; -import net.minecraft.entity.passive.EntityAnimal; -import net.minecraft.entity.passive.EntityHorse; -import net.minecraft.entity.passive.EntityTameable; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.projectile.EntityArrow; -import net.minecraft.item.ItemFood; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.ModItems; -import WayofTime.alchemicalWizardry.common.IDemon; -import WayofTime.alchemicalWizardry.common.items.DemonCrystal; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class EntityDemon extends EntityTameable implements IDemon -{ - protected boolean isAggro; - protected String demonID; - - protected float maxTamedHealth = 100.0F; - protected float maxUntamedHealth = 200.0F; - protected int attackTimer; - - protected boolean dropCrystal = true; - - public EntityDemon(World par1World, String demonID) - { - super(par1World); - this.demonID = demonID; - } - - @Override - public boolean getDoesDropCrystal() - { - return dropCrystal; - } - - @Override - public void setDropCrystal(boolean crystal) - { - this.dropCrystal = crystal; - } - - @Override - public void setSummonedConditions() - { - this.setAggro(true); - } - - @Override - public boolean isAggro() - { - return this.isAggro; - } - - @Override - public void setAggro(boolean aggro) - { - this.isAggro = aggro; - } - - @Override - public EntityAgeable createChild(EntityAgeable entityageable) - { - // TODO Auto-generated method stub - return null; - } - - @Override - public void writeToNBT(NBTTagCompound tag) - { - super.writeToNBT(tag); - - tag.setBoolean("dropCrystal", this.getDoesDropCrystal()); - tag.setBoolean("isAggro", isAggro); - tag.setString("demonID", demonID); - } - - @Override - public void readFromNBT(NBTTagCompound tag) - { - super.readFromNBT(tag); - - this.setDropCrystal(tag.getBoolean("dropCrystal")); - isAggro = tag.getBoolean("isAggro"); - demonID = tag.getString("demonID"); - } - - @Override - protected void dropFewItems(boolean par1, int par2) - { - if(this.getDoesDropCrystal()) - { - ItemStack drop = new ItemStack(ModItems.demonPlacer); - - DemonCrystal.setDemonString(drop, this.getDemonID()); - - if ((this.getOwner() instanceof EntityPlayer)) - { - DemonCrystal.setOwnerName(drop, SpellHelper.getUsername((EntityPlayer) this.getOwner())); - } - - if (this.hasCustomName()) - { - drop.setStackDisplayName(this.getCustomNameTag()); - } - - this.entityDropItem(drop, 0.0f); - } - } - - public void onLivingUpdate() - { - super.onLivingUpdate(); - - if (!this.isAggro() && worldObj.getWorldTime() % 100 == 0) - { - this.heal(1); - } - } - - public void sendSittingMessageToPlayer(EntityPlayer owner, boolean isSitting) - { - if (owner != null && owner.worldObj.isRemote) - { - ChatComponentTranslation chatmessagecomponent; - - if (isSitting) - { - chatmessagecomponent = new ChatComponentTranslation("message.demon.willstay"); - } else - { - chatmessagecomponent = new ChatComponentTranslation("message.demon.shallfollow"); - } - - owner.addChatComponentMessage(chatmessagecomponent); - } - } - - public String getDemonID() - { - return this.demonID; - } - - protected void setDemonID(String id) - { - this.demonID = id; - } - - - /** - * Returns true if the newer Entity AI code should be run - */ - public boolean isAIEnabled() - { - return true; - } - - /** - * Sets the active target the Task system uses for tracking - */ - public void setAttackTarget(EntityLivingBase par1EntityLivingBase) - { - super.setAttackTarget(par1EntityLivingBase); - - if (par1EntityLivingBase == null) - { - this.setAngry(false); - } else if (!this.isTamed()) - { - this.setAngry(true); - } - } - - @Override - /** - * main AI tick function, replaces updateEntityActionState - */ - protected void updateAITick() - { - this.dataWatcher.updateObject(18, this.getHealth()); - } - - @Override - protected void entityInit() - { - super.entityInit(); - this.dataWatcher.addObject(18, this.getHealth()); - this.dataWatcher.addObject(19, 0); - //this.dataWatcher.addObject(20, new Byte((byte) BlockColored.getBlockFromDye(1))); - } - - /** - * Plays step sound at given x, y, z for the entity - */ - protected void playStepSound(int par1, int par2, int par3, int par4) - { - this.playSound("mob.zombie.step", 0.15F, 1.0F); - } - - @Override - /** - * (abstract) Protected helper method to write subclass entity data to NBT. - */ - public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeEntityToNBT(par1NBTTagCompound); - par1NBTTagCompound.setBoolean("Angry", this.isAngry()); - par1NBTTagCompound.setByte("attackTimer", (byte) attackTimer); - } - - @Override - /** - * (abstract) Protected helper method to read subclass entity data from NBT. - */ - public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readEntityFromNBT(par1NBTTagCompound); - this.setAngry(par1NBTTagCompound.getBoolean("Angry")); - - attackTimer = par1NBTTagCompound.getByte("attackTimer"); - } - - @Override - /** - * Returns the sound this mob makes while it's alive. - */ - protected String getLivingSound() - { - return "none"; - } - - @Override - /** - * Returns the sound this mob makes when it is hurt. - */ - protected String getHurtSound() - { - return "mob.irongolem.hit"; - } - - @Override - /** - * Returns the sound this mob makes on death. - */ - protected String getDeathSound() - { - return "mob.irongolem.death"; - } - - @Override - /** - * Returns the volume for the sounds this mob makes. - */ - protected float getSoundVolume() - { - return 1.0F; - } - - /** - * Returns the item ID for the item the mob drops on death. - */ - protected int getDropItemId() - { - return -1; - } - - public int getAttackTimer() - { - return attackTimer; - } - - @Override - /** - * Called to update the entity's position/logic. - */ - public void onUpdate() - { - super.onUpdate(); - } - - @Override - public float getEyeHeight() - { - return this.height * 0.8F; - } - - @Override - /** - * The speed it takes to move the entityliving's rotationPitch through the faceEntity method. This is only currently - * use in wolves. - */ - public int getVerticalFaceSpeed() - { - return this.isSitting() ? 20 : super.getVerticalFaceSpeed(); - } - - @Override - /** - * Called when the entity is attacked. - */ - public boolean attackEntityFrom(DamageSource par1DamageSource, float par2) - { -// if (this.isEntityInvulnerable()) -// { -// return false; -// } else - { - Entity entity = par1DamageSource.getEntity(); - this.aiSit.setSitting(false); - - if (entity != null && !(entity instanceof EntityPlayer) && !(entity instanceof EntityArrow)) - { - par2 = (par2 + 1.0F) / 2.0F; - } - - return super.attackEntityFrom(par1DamageSource, par2); - } - } - - @Override - public boolean attackEntityAsMob(Entity par1Entity) - { - this.attackTimer = 10; - this.worldObj.setEntityState(this, (byte) 4); - boolean flag = par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) (7 + this.rand.nextInt(15))); - - if (flag) - { - par1Entity.motionY += 0.4000000059604645D; - } - - this.playSound("mob.irongolem.throw", 1.0F, 1.0F); - return flag; - } - - @Override - public void setTamed(boolean par1) - { - super.setTamed(par1); - - if (par1) - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxTamedHealth); - } else - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxUntamedHealth); - } - } - - /** - * Called when a player interacts with a mob. e.g. gets milk from a cow, gets into the saddle on a pig. - */ - @Override - public boolean interact(EntityPlayer par1EntityPlayer) - { - ItemStack itemstack = par1EntityPlayer.inventory.getCurrentItem(); - - if (this.isTamed()) - { - if (itemstack != null) - { - if (itemstack.getItem() instanceof ItemFood) - { - ItemFood itemfood = (ItemFood) itemstack.getItem(); - - if (itemfood.isWolfsFavoriteMeat() && this.dataWatcher.getWatchableObjectFloat(18) < maxTamedHealth) - { - if (!par1EntityPlayer.capabilities.isCreativeMode) - { - --itemstack.stackSize; - } - - this.heal((float) itemfood.getHealAmount(itemstack)); - - if (itemstack.stackSize <= 0) - { - par1EntityPlayer.inventory.setInventorySlotContents(par1EntityPlayer.inventory.currentItem, null); - } - - return true; - } - } - } - - if (this.getOwner() instanceof EntityPlayer && SpellHelper.getUsername(par1EntityPlayer).equalsIgnoreCase(SpellHelper.getUsername((EntityPlayer) this.getOwner())) && !this.isBreedingItem(itemstack)) - { - if (!this.worldObj.isRemote) - { - this.aiSit.setSitting(!this.isSitting()); - this.isJumping = false; -// this.setPathToEntity(null); -// this.setTarget(null); - this.setAttackTarget(null); - } - - this.sendSittingMessageToPlayer(par1EntityPlayer, !this.isSitting()); - } - } else if (itemstack != null && itemstack.getItem().equals(ModItems.weakBloodOrb) && !this.isAngry()) - { - if (!par1EntityPlayer.capabilities.isCreativeMode) - { - --itemstack.stackSize; - } - - if (itemstack.stackSize <= 0) - { - par1EntityPlayer.inventory.setInventorySlotContents(par1EntityPlayer.inventory.currentItem, null); - } - - if (!this.worldObj.isRemote) - { - if (this.rand.nextInt(1) == 0) - { - this.setTamed(true); -// this.setPathToEntity(null); - this.setAttackTarget(null); - this.aiSit.setSitting(true); - this.setHealth(maxTamedHealth); - this.func_152115_b(par1EntityPlayer.getUniqueID().toString()); - this.playTameEffect(true); - this.worldObj.setEntityState(this, (byte) 7); - } else - { - this.playTameEffect(false); - this.worldObj.setEntityState(this, (byte) 6); - } - } - - return true; - } - - return super.interact(par1EntityPlayer); - } - - /** - * 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 par1ItemStack) - { - return false; - } - - /** - * Determines whether this wolf is angry or not. - */ - public boolean isAngry() - { - return (this.dataWatcher.getWatchableObjectByte(16) & 2) != 0; - } - - /** - * Sets whether this wolf is angry or not. - */ - public void setAngry(boolean par1) - { - byte b0 = this.dataWatcher.getWatchableObjectByte(16); - - if (par1) - { - this.dataWatcher.updateObject(16, b0 | 2); - } else - { - this.dataWatcher.updateObject(16, b0 & -3); - } - } - - @Override - /** - * Returns true if the mob is currently able to mate with the specified mob. - */ - public boolean canMateWith(EntityAnimal par1EntityAnimal) - { - return false; - } - - public boolean func_70922_bv() - { - return this.dataWatcher.getWatchableObjectByte(19) == 1; - } - - @Override - /** - * Determines if an entity can be despawned, used on idle far away entities - */ - protected boolean canDespawn() - { - return false; - } - - @Override - public boolean func_142018_a(EntityLivingBase par1EntityLivingBase, EntityLivingBase par2EntityLivingBase) - { - if (!(par1EntityLivingBase instanceof EntityCreeper) && !(par1EntityLivingBase instanceof EntityGhast)) - { - if (par1EntityLivingBase instanceof EntityBileDemon) - { - EntityBileDemon entitywolf = (EntityBileDemon) par1EntityLivingBase; - - if (entitywolf.isTamed() && entitywolf.getOwner() == par2EntityLivingBase) - { - return false; - } - } - - return par1EntityLivingBase instanceof EntityPlayer && par2EntityLivingBase instanceof EntityPlayer && !((EntityPlayer) par2EntityLivingBase).canAttackPlayer((EntityPlayer) par1EntityLivingBase) ? false : !(par1EntityLivingBase instanceof EntityHorse) || !((EntityHorse) par1EntityLivingBase).isTame(); - } else - { - return false; - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityEarthElemental.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityEarthElemental.java deleted file mode 100644 index e6915fb6..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityEarthElemental.java +++ /dev/null @@ -1,28 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.mob; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.monster.IMob; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; - -public class EntityEarthElemental extends EntityElemental implements IMob -{ - public EntityEarthElemental(World world) - { - super(world, AlchemicalWizardry.entityEarthElementalID); - } - - public void inflictEffectOnEntity(Entity target) - { - if (target instanceof EntityLivingBase) - { - target.attackEntityFrom(DamageSource.causeMobDamage(this), 10); - ((EntityLivingBase) target).addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 100, 4)); - ((EntityLivingBase) target).addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionInhibit.id, 150, 0)); - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityElemental.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityElemental.java deleted file mode 100644 index b37b4695..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityElemental.java +++ /dev/null @@ -1,565 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.mob; - -import java.util.List; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAIAttackOnCollide; -import net.minecraft.entity.monster.EntityCreeper; -import net.minecraft.entity.monster.EntityGhast; -import net.minecraft.entity.passive.EntityAnimal; -import net.minecraft.entity.passive.EntityHorse; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.projectile.EntityArrow; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.util.DamageSource; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.ModItems; - -public class EntityElemental extends EntityDemon -{ - private EntityAIAttackOnCollide aiAttackOnCollide = new EntityAIAttackOnCollide(this, EntityPlayer.class, 1.2D, false); - - private static float maxTamedHealth = 100.0F; - private static float maxUntamedHealth = 100.0F; - - public EntityElemental(World par1World, String entityAirElementalID) - { - super(par1World, entityAirElementalID); - this.setSize(0.5F, 1.0F); - this.setAggro(false); - this.setTamed(false); - - if (par1World != null && !par1World.isRemote) - { - this.setCombatTask(); - } - } - -// public int courseChangeCooldown; - public double waypointX; - public double waypointY; - public double waypointZ; -/* private Entity targetedEntity; - - /** - * Cooldown time between target loss and new target aquirement. - - private int aggroCooldown; - public int prevAttackCounter; - public int attackCounter; -*/ - @Override - /** - * The explosion radius of spawned fireballs. - */ - protected void dropFewItems(boolean par1, int par2) - { - if (worldObj.rand.nextFloat() < (1 - Math.pow(0.6f, par2 + 1))) - { - this.entityDropItem(new ItemStack(ModItems.demonBloodShard, 1, 0), 0.0f); - } - } - - @Override - /** - * Moves the entity based on the specified heading. Args: strafe, forward - */ - public void moveEntityWithHeading(float p_70612_1_, float p_70612_2_) - { - if (this.isInWater()) - { - this.moveFlying(p_70612_1_, p_70612_2_, 0.02F); - this.moveEntity(this.motionX, this.motionY, this.motionZ); - this.motionX *= 0.800000011920929D; - this.motionY *= 0.800000011920929D; - this.motionZ *= 0.800000011920929D; - } - else if (this.isInLava()) - { - this.moveFlying(p_70612_1_, p_70612_2_, 0.02F); - this.moveEntity(this.motionX, this.motionY, this.motionZ); - this.motionX *= 0.5D; - this.motionY *= 0.5D; - this.motionZ *= 0.5D; - } - else - { - float f2 = 0.91F; - - if (this.onGround) - { - f2 = this.worldObj.getBlockState(new BlockPos(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.getEntityBoundingBox().minY) - 1, MathHelper.floor_double(this.posZ))).getBlock().slipperiness * 0.91F; - } - - float f3 = 0.16277136F / (f2 * f2 * f2); - this.moveFlying(p_70612_1_, p_70612_2_, this.onGround ? 0.1F * f3 : 0.02F); - f2 = 0.91F; - - if (this.onGround) - { - f2 = this.worldObj.getBlockState(new BlockPos(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.getEntityBoundingBox().minY) - 1, MathHelper.floor_double(this.posZ))).getBlock().slipperiness * 0.91F; - } - - this.moveEntity(this.motionX, this.motionY, this.motionZ); - this.motionX *= (double)f2; - this.motionY *= (double)f2; - this.motionZ *= (double)f2; - } - - this.prevLimbSwingAmount = this.limbSwingAmount; - double d1 = this.posX - this.prevPosX; - double d0 = this.posZ - this.prevPosZ; - float f4 = MathHelper.sqrt_double(d1 * d1 + d0 * d0) * 4.0F; - - if (f4 > 1.0F) - { - f4 = 1.0F; - } - - this.limbSwingAmount += (f4 - this.limbSwingAmount) * 0.4F; - this.limbSwing += this.limbSwingAmount; - } - - @Override - /** - * returns true if this entity is by a ladder, false otherwise - */ - public boolean isOnLadder() - { - return false; - } - - @SideOnly(Side.CLIENT) - public boolean func_110182_bF() - { - return this.dataWatcher.getWatchableObjectByte(25) != 0; - } - - /** - * True if the ghast has an unobstructed line of travel to the waypoint. - */ - private boolean isCourseTraversable(double par1, double par3, double par5, double par7) - { - double d4 = (this.waypointX - this.posX) / par7; - double d5 = (this.waypointY - this.posY) / par7; - double d6 = (this.waypointZ - this.posZ) / par7; - AxisAlignedBB axisalignedbb = this.getBoundingBox(); - - for (int i = 1; (double) i < par7; ++i) - { - axisalignedbb.offset(d4, d5, d6); - - if (!this.worldObj.getCollidingBoundingBoxes(this, axisalignedbb).isEmpty()) - { - return false; - } - } - - return true; - } - - @Override - /** - * Will return how many at most can spawn in a chunk at once. - */ - public int getMaxSpawnedInChunk() - { - return 1; - } - - @Override - /** - * (abstract) Protected helper method to write subclass entity data to NBT. - */ - public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeEntityToNBT(par1NBTTagCompound); - } - - @Override - /** - * (abstract) Protected helper method to read subclass entity data from NBT. - */ - public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readEntityFromNBT(par1NBTTagCompound); - this.setAngry(par1NBTTagCompound.getBoolean("Angry")); - - this.setCombatTask(); - } - - @Override - protected void applyEntityAttributes() - { - super.applyEntityAttributes(); - //This line affects the speed of the monster - this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.30000001192092896D); - - //My guess is that this will alter the max health - if (this.isTamed()) - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxTamedHealth); - } else - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxUntamedHealth); - } - } - - @Override - /** - * Returns true if the newer Entity AI code should be run - */ - public boolean isAIEnabled() - { - return false; - } - - @Override - /** - * Sets the active target the Task system uses for tracking - */ - public void setAttackTarget(EntityLivingBase par1EntityLivingBase) - { - super.setAttackTarget(par1EntityLivingBase); - - if (par1EntityLivingBase == null) - { - this.setAngry(false); - } else if (!this.isTamed()) - { - this.setAngry(true); - } - } - - @Override - /** - * main AI tick function, replaces updateEntityActionState - */ - protected void updateAITick() - { - this.dataWatcher.updateObject(18, this.getHealth()); - } - - @Override - protected void entityInit() - { - super.entityInit(); - this.dataWatcher.addObject(18, this.getHealth()); - this.dataWatcher.addObject(19, 0); - this.dataWatcher.addObject(25, 0); - } - - @Override - /** - * Plays step sound at given x, y, z for the entity - */ - protected void playStepSound(int par1, int par2, int par3, int par4) - { - this.playSound("mob.zombie.step", 0.15F, 1.0F); - } - - @Override - /** - * Returns the sound this mob makes while it's alive. - */ - protected String getLivingSound() - { - //TODO change sounds - return "none"; - } - - @Override - /** - * Returns the sound this mob makes when it is hurt. - */ - protected String getHurtSound() - { - return "none"; - } - - @Override - /** - * Returns the sound this mob makes on death. - */ - protected String getDeathSound() - { - return "none"; - } - - @Override - /** - * Returns the volume for the sounds this mob makes. - */ - protected float getSoundVolume() - { - return 0.4F; - } - - @Override - /** - * Returns the item ID for the item the mob drops on death. - */ - protected int getDropItemId() - { - return -1; - } - - @Override - /** - * Called to update the entity's position/logic. - */ - public void onUpdate() - { - super.onUpdate(); - - if (this.getHealth() <= this.getMaxHealth() / 2.0f && worldObj.rand.nextInt(200) == 0) - { - this.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionReciprocation.id, 100, 1)); - } - } - - @Override - public float getEyeHeight() - { - return this.height * 0.8F; - } - - @Override - /** - * The speed it takes to move the entityliving's rotationPitch through the faceEntity method. This is only currently - * use in wolves. - */ - public int getVerticalFaceSpeed() - { - return this.isSitting() ? 20 : super.getVerticalFaceSpeed(); - } - - @Override - /** - * Called when the entity is attacked. - */ - public boolean attackEntityFrom(DamageSource source, float par2) - { - if (this.func_180431_b(source)) - { - return false; - } else - { - Entity entity = source.getEntity(); - this.aiSit.setSitting(false); - - if (entity != null && !(entity instanceof EntityPlayer) && !(entity instanceof EntityArrow)) - { - par2 = (par2 + 1.0F) / 2.0F; - } - - return super.attackEntityFrom(source, par2); - } - } - - @Override - public boolean attackEntityAsMob(Entity par1Entity) - { - int i = this.isTamed() ? 6 : 7; - return par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) i); - } - - @Override - public void setTamed(boolean par1) - { - super.setTamed(par1); - - if (par1) - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxTamedHealth); - } else - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxUntamedHealth); - } - } - - @Override - /** - * 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 par1ItemStack) - { - return false; - } - - @Override - /** - * Determines whether this wolf is angry or not. - */ - public boolean isAngry() - { - return (this.dataWatcher.getWatchableObjectByte(16) & 2) != 0; - } - - @Override - /** - * Sets whether this wolf is angry or not. - */ - public void setAngry(boolean par1) - { - byte b0 = this.dataWatcher.getWatchableObjectByte(16); - - if (par1) - { - this.dataWatcher.updateObject(16, b0 | 2); - } else - { - this.dataWatcher.updateObject(16, b0 & -3); - } - } - - public void func_70918_i(boolean par1) - { - if (par1) - { - this.dataWatcher.updateObject(19, 1); - } else - { - this.dataWatcher.updateObject(19, 0); - } - } - - @Override - /** - * Returns true if the mob is currently able to mate with the specified mob. - */ - public boolean canMateWith(EntityAnimal par1EntityAnimal) - { - return false; - } - - @Override - public boolean func_70922_bv() - { - return this.dataWatcher.getWatchableObjectByte(19) == 1; - } - - @Override - /** - * Determines if an entity can be despawned, used on idle far away entities - */ - protected boolean canDespawn() - { - return false; - } - - @Override - public boolean func_142018_a(EntityLivingBase par1EntityLivingBase, EntityLivingBase par2EntityLivingBase) - { - if (!(par1EntityLivingBase instanceof EntityCreeper) && !(par1EntityLivingBase instanceof EntityGhast)) - { - if (par1EntityLivingBase instanceof EntityBoulderFist) - { - EntityBoulderFist entitywolf = (EntityBoulderFist) par1EntityLivingBase; - - if (entitywolf.isTamed() && entitywolf.getOwner() == par2EntityLivingBase) - { - return false; - } - } - - return par1EntityLivingBase instanceof EntityPlayer && par2EntityLivingBase instanceof EntityPlayer && !((EntityPlayer) par2EntityLivingBase).canAttackPlayer((EntityPlayer) par1EntityLivingBase) ? false : !(par1EntityLivingBase instanceof EntityHorse) || !((EntityHorse) par1EntityLivingBase).isTame(); - } else - { - return false; - } - } - - - /** - * sets this entity's combat AI. - */ - public void setCombatTask() - { - this.tasks.removeTask(this.aiAttackOnCollide); - this.tasks.addTask(4, this.aiAttackOnCollide); - } - - public void inflictEffectOnEntity(Entity target) - { - if (target instanceof EntityLivingBase) - { - ((EntityLivingBase) target).addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionDrowning.id, 100, 0)); - } - } - - public static Entity getClosestVulnerableMonsterToEntity(Entity par1Entity, double par2) - { - double d4 = -1.0D; - double par1 = par1Entity.posX; - double par3 = par1Entity.posY; - double par5 = par1Entity.posZ; - - EntityLivingBase entityLiving = null; - World world = par1Entity.worldObj; - - double range = Math.sqrt(par2); - double verticalRange = Math.sqrt(par2); - List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, new AxisAlignedBB(par1 - 0.5f, par3 - 0.5f, par5 - 0.5f, par1 + 0.5f, par3 + 0.5f, par5 + 0.5f).expand(range, verticalRange, range)); - if (entities == null) - { - return null; - } - - for (int i = 0; i < entities.size(); ++i) - { - EntityLivingBase entityLiving1 = entities.get(i); - - if (!(entityLiving1 instanceof EntityPlayer && ((EntityPlayer) entityLiving1).capabilities.disableDamage) && entityLiving1.isEntityAlive()) - { - double d5 = entityLiving1.getDistanceSq(par1, par3, par5); - double d6 = par2; - - if (entityLiving1.isSneaking()) - { - d6 = par2 * 0.800000011920929D; - } - - if (entityLiving1.isInvisible()) - { - float f = entityLiving1 instanceof EntityPlayer ? ((EntityPlayer) entityLiving1).getArmorVisibility() : 1.0f; - - if (f < 0.1F) - { - f = 0.1F; - } - - d6 *= (double) (0.7F * f); - } - - if ((par2 < 0.0D || d5 < d6 * d6) && (d4 == -1.0D || d5 < d4)) - { - if (par1Entity != entityLiving1) - { - d4 = d5; - entityLiving = entityLiving1; - } - } - } - } - - return entityLiving; - } - - @Override - public int getTotalArmorValue() - { - return 10; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityFallenAngel.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityFallenAngel.java deleted file mode 100644 index 8c654f08..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityFallenAngel.java +++ /dev/null @@ -1,91 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.mob; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.IRangedAttackMob; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAIArrowAttack; -import net.minecraft.entity.ai.EntityAIAttackOnCollide; -import net.minecraft.entity.ai.EntityAIFollowOwner; -import net.minecraft.entity.ai.EntityAIHurtByTarget; -import net.minecraft.entity.ai.EntityAILookIdle; -import net.minecraft.entity.ai.EntityAIOwnerHurtByTarget; -import net.minecraft.entity.ai.EntityAIOwnerHurtTarget; -import net.minecraft.entity.ai.EntityAISwimming; -import net.minecraft.entity.ai.EntityAIWander; -import net.minecraft.entity.ai.EntityAIWatchClosest; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.pathfinding.PathNavigateGround; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.EntityAITargetAggro; -import WayofTime.alchemicalWizardry.common.entity.projectile.HolyProjectile; - -public class EntityFallenAngel extends EntityDemon implements IRangedAttackMob -{ - private EntityAIArrowAttack aiArrowAttack = new EntityAIArrowAttack(this, 1.0D, 40, 40, 15.0F); - private EntityAIAttackOnCollide aiAttackOnCollide = new EntityAIAttackOnCollide(this, EntityPlayer.class, 1.2D, false); - - public EntityFallenAngel(World par1World) - { - super(par1World, AlchemicalWizardry.entityFallenAngelID); - this.setSize(0.7F, 1.8F); - ((PathNavigateGround)this.getNavigator()).func_179690_a(true); - this.tasks.addTask(1, new EntityAISwimming(this)); - this.tasks.addTask(2, this.aiSit); - this.tasks.addTask(3, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F)); - this.tasks.addTask(4, new EntityAIWander(this, 1.0D)); - this.tasks.addTask(5, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); - this.tasks.addTask(6, new EntityAILookIdle(this)); - this.targetTasks.addTask(1, new EntityAIOwnerHurtByTarget(this)); - this.targetTasks.addTask(2, new EntityAIOwnerHurtTarget(this)); - this.targetTasks.addTask(3, new EntityAIHurtByTarget(this, true)); - this.targetTasks.addTask(4, new EntityAITargetAggro(this, EntityPlayer.class, 0, false)); - this.setAggro(false); - this.setTamed(false); - - if (par1World != null && !par1World.isRemote) - { - this.setCombatTask(); - } - - //this.isImmuneToFire = true; - } - - @Override - protected void applyEntityAttributes() - { - super.applyEntityAttributes(); - //This line affects the speed of the monster - this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.30000001192092896D); - float maxTamedHealth = 50.0F; - float maxUntamedHealth = 50.0F; - - //My guess is that this will alter the max health - if (this.isTamed()) - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxTamedHealth); - } else - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxUntamedHealth); - } - } - - /** - * Attack the specified entity using a ranged attack. - */ - public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) - { - HolyProjectile hol = new HolyProjectile(worldObj, this, par1EntityLivingBase, 1.8f, 0f, 5, 600); - this.worldObj.spawnEntityInWorld(hol); - } - - /** - * sets this entity's combat AI. - */ - public void setCombatTask() - { - this.tasks.removeTask(this.aiAttackOnCollide); - this.tasks.removeTask(this.aiArrowAttack); - this.tasks.addTask(4, this.aiArrowAttack); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityFireElemental.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityFireElemental.java deleted file mode 100644 index c54d4588..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityFireElemental.java +++ /dev/null @@ -1,27 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.mob; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.monster.IMob; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -public class EntityFireElemental extends EntityElemental implements IMob -{ - public EntityFireElemental(World world) - { - super(world, AlchemicalWizardry.entityFireElementalID); - this.isImmuneToFire = true; - } - - @Override - public void inflictEffectOnEntity(Entity target) - { - if (target instanceof EntityLivingBase) - { - target.setFire(10); - ((EntityLivingBase) target).addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionInhibit.id, 150, 0)); - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityHolyElemental.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityHolyElemental.java deleted file mode 100644 index bbccf90e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityHolyElemental.java +++ /dev/null @@ -1,29 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.mob; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.monster.IMob; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; - -public class EntityHolyElemental extends EntityElemental implements IMob -{ - public EntityHolyElemental(World world) - { - super(world, AlchemicalWizardry.entityHolyElementalID); - } - - @Override - public void inflictEffectOnEntity(Entity target) - { - if (target instanceof EntityLivingBase) - { - target.attackEntityFrom(DamageSource.causeMobDamage(this), 15); - ((EntityLivingBase) target).addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionInhibit.id, 150, 0)); - ((EntityLivingBase) target).addPotionEffect(new PotionEffect(Potion.poison.id, 100, 1)); - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityIceDemon.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityIceDemon.java deleted file mode 100644 index 33f72245..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityIceDemon.java +++ /dev/null @@ -1,88 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.mob; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.IRangedAttackMob; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAIArrowAttack; -import net.minecraft.entity.ai.EntityAIAttackOnCollide; -import net.minecraft.entity.ai.EntityAIFollowOwner; -import net.minecraft.entity.ai.EntityAIHurtByTarget; -import net.minecraft.entity.ai.EntityAILookIdle; -import net.minecraft.entity.ai.EntityAIOwnerHurtByTarget; -import net.minecraft.entity.ai.EntityAIOwnerHurtTarget; -import net.minecraft.entity.ai.EntityAISwimming; -import net.minecraft.entity.ai.EntityAIWander; -import net.minecraft.entity.ai.EntityAIWatchClosest; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.EntityAITargetAggro; -import WayofTime.alchemicalWizardry.common.entity.projectile.IceProjectile; - -public class EntityIceDemon extends EntityDemon implements IRangedAttackMob -{ - private EntityAIArrowAttack aiArrowAttack = new EntityAIArrowAttack(this, 1.0D, 30, 50, 15.0F); - private EntityAIAttackOnCollide aiAttackOnCollide = new EntityAIAttackOnCollide(this, EntityPlayer.class, 1.2D, false); - - public EntityIceDemon(World par1World) - { - super(par1World, AlchemicalWizardry.entityIceDemonID); - this.setSize(0.5F, 2.0F); - this.tasks.addTask(1, new EntityAISwimming(this)); - this.tasks.addTask(2, this.aiSit); - this.tasks.addTask(3, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F)); - this.tasks.addTask(4, new EntityAIWander(this, 1.0D)); - this.tasks.addTask(5, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); - this.tasks.addTask(6, new EntityAILookIdle(this)); - this.targetTasks.addTask(1, new EntityAIOwnerHurtByTarget(this)); - this.targetTasks.addTask(2, new EntityAIOwnerHurtTarget(this)); - this.targetTasks.addTask(3, new EntityAIHurtByTarget(this, true)); - this.targetTasks.addTask(4, new EntityAITargetAggro(this, EntityPlayer.class, 0, false)); - this.setAggro(false); - this.setTamed(false); - - if (par1World != null && !par1World.isRemote) - { - this.setCombatTask(); - } - } - - @Override - protected void applyEntityAttributes() - { - super.applyEntityAttributes(); - //This line affects the speed of the monster - this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.40000001192092896D); - float maxTamedHealth = 50.0F; - float maxUntamedHealth = 30.0F; - - //My guess is that this will alter the max health - if (this.isTamed()) - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxTamedHealth); - } else - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxUntamedHealth); - } - } - - @Override - /** - * Attack the specified entity using a ranged attack. - */ - public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) - { - IceProjectile hol = new IceProjectile(worldObj, this, par1EntityLivingBase, 1.8f, 0f, 3, 600); - this.worldObj.spawnEntityInWorld(hol); - } - - /** - * sets this entity's combat AI. - */ - public void setCombatTask() - { - this.tasks.removeTask(this.aiAttackOnCollide); - this.tasks.removeTask(this.aiArrowAttack); - this.tasks.addTask(4, this.aiArrowAttack); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityLowerGuardian.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityLowerGuardian.java deleted file mode 100644 index 6429aa2c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityLowerGuardian.java +++ /dev/null @@ -1,67 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.mob; - -import net.minecraft.entity.EntityAgeable; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAIAttackOnCollide; -import net.minecraft.entity.ai.EntityAIFollowOwner; -import net.minecraft.entity.ai.EntityAIHurtByTarget; -import net.minecraft.entity.ai.EntityAILookIdle; -import net.minecraft.entity.ai.EntityAIOwnerHurtByTarget; -import net.minecraft.entity.ai.EntityAIOwnerHurtTarget; -import net.minecraft.entity.ai.EntityAISwimming; -import net.minecraft.entity.ai.EntityAIWander; -import net.minecraft.entity.ai.EntityAIWatchClosest; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.pathfinding.PathNavigateGround; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.EntityAITargetAggro; - -public class EntityLowerGuardian extends EntityDemon -{ - public EntityLowerGuardian(World par1World) - { - super(par1World, AlchemicalWizardry.entityLowerGuardianID); - this.setSize(0.7F, 1.8F); - ((PathNavigateGround)this.getNavigator()).func_179690_a(true); - this.tasks.addTask(1, new EntityAISwimming(this)); - this.tasks.addTask(2, new EntityAIAttackOnCollide(this, 1.0D, true)); - this.tasks.addTask(3, this.aiSit); - this.tasks.addTask(4, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F)); - this.tasks.addTask(5, new EntityAIWander(this, 1.0D)); - this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); - this.tasks.addTask(7, new EntityAILookIdle(this)); - this.targetTasks.addTask(1, new EntityAIOwnerHurtByTarget(this)); - this.targetTasks.addTask(2, new EntityAIOwnerHurtTarget(this)); - this.targetTasks.addTask(3, new EntityAIHurtByTarget(this, true)); - this.targetTasks.addTask(4, new EntityAITargetAggro(this, EntityPlayer.class, 0, false)); - this.setAggro(false); - this.setTamed(false); - } - - @Override - protected void applyEntityAttributes() - { - super.applyEntityAttributes(); - //This line affects the speed of the monster - this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.30000001192092896D); - float maxTamedHealth = 50.0F; - float maxUntamedHealth = 30.0F; - - //My guess is that this will alter the max health - if (this.isTamed()) - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxTamedHealth); - } else - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxUntamedHealth); - } - } - -/* public EntityAgeable createChild(EntityAgeable par1EntityAgeable) - { - return this.spawnBabyAnimal(par1EntityAgeable); - } - I don't know what this method changed to - */ -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityShade.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityShade.java deleted file mode 100644 index 4f76dc33..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityShade.java +++ /dev/null @@ -1,84 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.mob; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAIAttackOnCollide; -import net.minecraft.entity.ai.EntityAIFollowOwner; -import net.minecraft.entity.ai.EntityAIHurtByTarget; -import net.minecraft.entity.ai.EntityAILookIdle; -import net.minecraft.entity.ai.EntityAIOwnerHurtByTarget; -import net.minecraft.entity.ai.EntityAIOwnerHurtTarget; -import net.minecraft.entity.ai.EntityAISwimming; -import net.minecraft.entity.ai.EntityAIWander; -import net.minecraft.entity.ai.EntityAIWatchClosest; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.pathfinding.PathNavigateGround; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.EntityAITargetAggro; -import WayofTime.alchemicalWizardry.common.entity.projectile.HolyProjectile; - -public class EntityShade extends EntityDemon -{ - private EntityAIAttackOnCollide aiAttackOnCollide = new EntityAIAttackOnCollide(this, EntityPlayer.class, 1.2D, false); - - public EntityShade(World par1World) - { - super(par1World, AlchemicalWizardry.entityShadeID); - this.setSize(0.8F, 2.0F); - ((PathNavigateGround)this.getNavigator()).func_179690_a(true); - this.tasks.addTask(1, new EntityAISwimming(this)); - this.tasks.addTask(2, this.aiSit); - this.tasks.addTask(3, new EntityAIAttackOnCollide(this, 1.0D, true)); - this.tasks.addTask(4, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F)); - this.tasks.addTask(5, new EntityAIWander(this, 1.0D)); - this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); - this.tasks.addTask(7, new EntityAILookIdle(this)); - this.targetTasks.addTask(1, new EntityAIOwnerHurtByTarget(this)); - this.targetTasks.addTask(2, new EntityAIOwnerHurtTarget(this)); - this.targetTasks.addTask(3, new EntityAIHurtByTarget(this, true)); - this.targetTasks.addTask(4, new EntityAITargetAggro(this, EntityPlayer.class, 0, false)); - this.setAggro(false); - this.setTamed(false); - - if (par1World != null && !par1World.isRemote) - { - this.setCombatTask(); - } - } - - @Override - protected void applyEntityAttributes() - { - super.applyEntityAttributes(); - //This line affects the speed of the monster - this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.30000001192092896D); - float maxTamedHealth = 50.0F; - float maxUntamedHealth = 100.0F; - - //My guess is that this will alter the max health - if (this.isTamed()) - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxTamedHealth); - } else - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxUntamedHealth); - } - } - - public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) - { - HolyProjectile hol = new HolyProjectile(worldObj, this, par1EntityLivingBase, 1.8f, 0f, 5, 600); - this.worldObj.spawnEntityInWorld(hol); - } - - /** - * sets this entity's combat AI. - */ - public void setCombatTask() - { - this.tasks.removeTask(this.aiAttackOnCollide); - //this.tasks.removeTask(this.aiArrowAttack); - this.tasks.addTask(4, this.aiAttackOnCollide); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityShadeElemental.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityShadeElemental.java deleted file mode 100644 index 3e5ed0f3..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityShadeElemental.java +++ /dev/null @@ -1,28 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.mob; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.monster.IMob; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -public class EntityShadeElemental extends EntityElemental implements IMob -{ - public EntityShadeElemental(World world) - { - super(world, AlchemicalWizardry.entityShadeElementalID); - } - - @Override - public void inflictEffectOnEntity(Entity target) - { - if (target instanceof EntityLivingBase) - { - ((EntityLivingBase) target).addPotionEffect(new PotionEffect(Potion.blindness.id, 100, 1)); - ((EntityLivingBase) target).addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionInhibit.id, 150, 0)); - ((EntityLivingBase) target).addPotionEffect(new PotionEffect(Potion.nightVision.id, 100, 0)); - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntitySmallEarthGolem.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntitySmallEarthGolem.java deleted file mode 100644 index d8b5da90..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntitySmallEarthGolem.java +++ /dev/null @@ -1,90 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.mob; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.IRangedAttackMob; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAIArrowAttack; -import net.minecraft.entity.ai.EntityAIAttackOnCollide; -import net.minecraft.entity.ai.EntityAIFollowOwner; -import net.minecraft.entity.ai.EntityAIHurtByTarget; -import net.minecraft.entity.ai.EntityAILookIdle; -import net.minecraft.entity.ai.EntityAIOwnerHurtByTarget; -import net.minecraft.entity.ai.EntityAIOwnerHurtTarget; -import net.minecraft.entity.ai.EntityAISwimming; -import net.minecraft.entity.ai.EntityAIWander; -import net.minecraft.entity.ai.EntityAIWatchClosest; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.pathfinding.PathNavigateGround; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.EntityAITargetAggro; -import WayofTime.alchemicalWizardry.common.entity.projectile.MudProjectile; - -public class EntitySmallEarthGolem extends EntityDemon implements IRangedAttackMob -{ - private EntityAIArrowAttack aiArrowAttack = new EntityAIArrowAttack(this, 1.0D, 25, 25, 15.0F); - private EntityAIAttackOnCollide aiAttackOnCollide = new EntityAIAttackOnCollide(this, EntityPlayer.class, 1.2D, false); - - public EntitySmallEarthGolem(World par1World) - { - super(par1World, AlchemicalWizardry.entitySmallEarthGolemID); - this.setSize(0.2F, 1.0F); - ((PathNavigateGround)this.getNavigator()).func_179690_a(true); - this.tasks.addTask(1, new EntityAISwimming(this)); - this.tasks.addTask(2, this.aiSit); - this.tasks.addTask(3, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F)); - this.tasks.addTask(4, new EntityAIWander(this, 1.0D)); - this.tasks.addTask(5, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); - this.tasks.addTask(5, new EntityAILookIdle(this)); - this.targetTasks.addTask(1, new EntityAIOwnerHurtByTarget(this)); - this.targetTasks.addTask(2, new EntityAIOwnerHurtTarget(this)); - this.targetTasks.addTask(3, new EntityAIHurtByTarget(this, true)); - this.targetTasks.addTask(4, new EntityAITargetAggro(this, EntityPlayer.class, 0, false)); - this.setAggro(false); - this.setTamed(false); - - if (par1World != null && !par1World.isRemote) - { - this.setCombatTask(); - } - } - - @Override - protected void applyEntityAttributes() - { - super.applyEntityAttributes(); - //This line affects the speed of the monster - this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.40000001192092896D); - float maxTamedHealth = 20.0F; - float maxUntamedHealth = 10.0F; - - //My guess is that this will alter the max health - if (this.isTamed()) - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxTamedHealth); - } else - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxUntamedHealth); - } - } - - @Override - /** - * Attack the specified entity using a ranged attack. - */ - public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) - { - MudProjectile hol = new MudProjectile(worldObj, this, par1EntityLivingBase, 1.8f, 0f, 3, 600, false); - this.worldObj.spawnEntityInWorld(hol); - } - - /** - * sets this entity's combat AI. - */ - public void setCombatTask() - { - this.tasks.removeTask(this.aiAttackOnCollide); - this.tasks.removeTask(this.aiArrowAttack); - this.tasks.addTask(4, this.aiArrowAttack); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityWaterElemental.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityWaterElemental.java deleted file mode 100644 index 449a1ea2..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityWaterElemental.java +++ /dev/null @@ -1,26 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.mob; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.monster.IMob; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -public class EntityWaterElemental extends EntityElemental implements IMob -{ - public EntityWaterElemental(World world) - { - super(world, AlchemicalWizardry.entityWaterElementalID); - } - - @Override - public void inflictEffectOnEntity(Entity target) - { - if (target instanceof EntityLivingBase) - { - ((EntityLivingBase) target).addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionDrowning.id, 100, 2)); - ((EntityLivingBase) target).addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionInhibit.id, 150, 0)); - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityWingedFireDemon.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityWingedFireDemon.java deleted file mode 100644 index ef2de0c2..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/EntityWingedFireDemon.java +++ /dev/null @@ -1,95 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.mob; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.IRangedAttackMob; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAIArrowAttack; -import net.minecraft.entity.ai.EntityAIAttackOnCollide; -import net.minecraft.entity.ai.EntityAIFollowOwner; -import net.minecraft.entity.ai.EntityAIHurtByTarget; -import net.minecraft.entity.ai.EntityAILookIdle; -import net.minecraft.entity.ai.EntityAIOwnerHurtByTarget; -import net.minecraft.entity.ai.EntityAIOwnerHurtTarget; -import net.minecraft.entity.ai.EntityAISwimming; -import net.minecraft.entity.ai.EntityAIWander; -import net.minecraft.entity.ai.EntityAIWatchClosest; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.pathfinding.PathNavigateGround; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.EntityAITargetAggro; -import WayofTime.alchemicalWizardry.common.entity.projectile.FireProjectile; - -public class EntityWingedFireDemon extends EntityDemon implements IRangedAttackMob -{ - private EntityAIArrowAttack aiArrowAttack = new EntityAIArrowAttack(this, 1.0D, 40, 40, 15.0F); - private EntityAIAttackOnCollide aiAttackOnCollide = new EntityAIAttackOnCollide(this, EntityPlayer.class, 1.2D, false); - - public EntityWingedFireDemon(World par1World) - { - super(par1World, AlchemicalWizardry.entityWingedFireDemonID); - this.setSize(0.7F, 1.8F); - ((PathNavigateGround)this.getNavigator()).func_179690_a(true); - this.tasks.addTask(1, new EntityAISwimming(this)); - this.tasks.addTask(2, this.aiSit); - this.tasks.addTask(3, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F)); - this.tasks.addTask(4, new EntityAIWander(this, 1.0D)); - this.tasks.addTask(5, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); - this.tasks.addTask(6, new EntityAILookIdle(this)); - this.targetTasks.addTask(1, new EntityAIOwnerHurtByTarget(this)); - this.targetTasks.addTask(2, new EntityAIOwnerHurtTarget(this)); - this.targetTasks.addTask(3, new EntityAIHurtByTarget(this, true)); - this.targetTasks.addTask(4, new EntityAITargetAggro(this, EntityPlayer.class, 0, false)); - this.setAggro(false); - this.setTamed(false); - - if (par1World != null && !par1World.isRemote) - { - this.setCombatTask(); - } - - this.isImmuneToFire = true; - } - - @Override - protected void applyEntityAttributes() - { - super.applyEntityAttributes(); - //This line affects the speed of the monster - this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.30000001192092896D); - float maxTamedHealth = 100.0F; - float maxUntamedHealth = 200.0F; - - //My guess is that this will alter the max health - if (this.isTamed()) - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxTamedHealth); - } else - { - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxUntamedHealth); - } - - //this.func_110148_a(SharedMonsterAttributes.field_111267_a).func_111128_a(10.0D); - } - - @Override - /** - * Attack the specified entity using a ranged attack. - */ - public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) - { - this.worldObj.playAuxSFXAtEntity(null, 1009, this.getPosition(), 0); - FireProjectile hol = new FireProjectile(worldObj, this, par1EntityLivingBase, 1.8f, 0f, 20, 600); - this.worldObj.spawnEntityInWorld(hol); - } - - /** - * sets this entity's combat AI. - */ - public void setCombatTask() - { - this.tasks.removeTask(this.aiAttackOnCollide); - this.tasks.removeTask(this.aiArrowAttack); - this.tasks.addTask(4, this.aiArrowAttack); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/MailOrderEntityItem.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/MailOrderEntityItem.java deleted file mode 100644 index 26ddfa57..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/mob/MailOrderEntityItem.java +++ /dev/null @@ -1,73 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.mob; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.Optional; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; - -public class MailOrderEntityItem extends EntityItem -{ - public MailOrderEntityItem(World par1World, double par2, double par4, double par6) - { - super(par1World, par2, par4, par6); - this.isImmuneToFire = true; - this.lifespan = 72000; - } - - public MailOrderEntityItem(World par1World, double par2, double par4, double par6, ItemStack par8ItemStack) - { - this(par1World, par2, par4, par6); - this.setEntityItemStack(par8ItemStack); - this.isImmuneToFire = true; - this.lifespan = (par8ItemStack.getItem() == null ? 6000 : par8ItemStack.getItem().getEntityLifespan(par8ItemStack, par1World)); - } - - public MailOrderEntityItem(World world, Entity original, ItemStack stack) - { - this(world, original.posX, original.posY, original.posZ); - this.setDefaultPickupDelay(); - this.motionX = original.motionX; - this.motionY = original.motionY; - this.motionZ = original.motionZ; - this.setEntityItemStack(stack); - this.isImmuneToFire = true; - } - - public MailOrderEntityItem(World par1world) - { - super(par1world); - } - - public void onUpdate() - { - super.onUpdate(); - - if(!worldObj.isRemote && this.ticksExisted > 100 && !this.isDead) - { - worldObj.addWeatherEffect(new EntityLightningBolt(worldObj, this.posX, this.posY, this.posZ)); - - if(AlchemicalWizardry.isPneumaticCraftLoaded) - { - this.deliverItemViaDrone(this.posX, this.posY, this.posZ); - }else - { -// EntityItem entity = new BookEntityItem(worldObj, this.posX, this.posY, this.posZ, GuideRegistry.getItemStackForBook(BloodMagicGuide.bloodMagicGuide)); -// entity.lifespan = 6000; -// entity.setDefaultPickupDelay(); -// entity.motionY = 1; -// worldObj.spawnEntityInWorld(entity); - } - - this.setDead(); - } - } - - @Optional.Method(modid = "PneumaticCraft") - public void deliverItemViaDrone(double x, double y, double z) - { -// PneumaticRegistry.getInstance().deliverItemsAmazonStyle(worldObj, (int)x, (int)y, (int)z, GuideRegistry.getItemStackForBook(BloodMagicGuide.bloodMagicGuide)); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EnergyBlastProjectile.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EnergyBlastProjectile.java deleted file mode 100644 index 57cde54c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EnergyBlastProjectile.java +++ /dev/null @@ -1,478 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.projectile; - -import java.util.Iterator; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.IProjectile; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.MathHelper; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.registry.IThrowableEntity; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -//Shamelessly ripped off from x3n0ph0b3 //Shame! -public class EnergyBlastProjectile extends Entity implements IProjectile, IThrowableEntity -{ - protected int xTile = -1; - protected int yTile = -1; - protected int zTile = -1; - protected int inTile = 0; - protected int inData = 0; - protected boolean inGround = false; - /** - * The owner of this arrow. - */ - public EntityLivingBase shootingEntity; - protected int ticksInAir = 0; - protected int maxTicksInAir = 600; - protected int projectileDamage; - - public EnergyBlastProjectile(World par1World) - { - super(par1World); - this.setSize(0.5F, 0.5F); - this.maxTicksInAir = 600; - } - - public EnergyBlastProjectile(World par1World, double par2, double par4, double par6) - { - super(par1World); - this.setSize(0.5F, 0.5F); - this.setPosition(par2, par4, par6); - this.maxTicksInAir = 600; - } - - public EnergyBlastProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage) - { - super(par1World); - shootingEntity = par2EntityPlayer; - float par3 = 0.8F; - this.setSize(0.5F, 0.5F); - this.setLocationAndAngles(par2EntityPlayer.posX, par2EntityPlayer.posY + par2EntityPlayer.getEyeHeight(), par2EntityPlayer.posZ, par2EntityPlayer.rotationYaw, par2EntityPlayer.rotationPitch); - posX -= MathHelper.cos(rotationYaw / 180.0F * (float) Math.PI) * 0.16F; - posY -= 0.2D; - posZ -= MathHelper.sin(rotationYaw / 180.0F * (float) Math.PI) * 0.16F; - this.setPosition(posX, posY, posZ); - motionX = -MathHelper.sin(rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(rotationPitch / 180.0F * (float) Math.PI); - motionZ = MathHelper.cos(rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(rotationPitch / 180.0F * (float) Math.PI); - motionY = -MathHelper.sin(rotationPitch / 180.0F * (float) Math.PI); - this.setThrowableHeading(motionX, motionY, motionZ, par3 * 1.5F, 1.0F); - this.projectileDamage = damage; - this.maxTicksInAir = 600; - } - - public EnergyBlastProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage, int maxTicksInAir, double posX, double posY, double posZ, float rotationYaw, float rotationPitch) - { - super(par1World); - shootingEntity = par2EntityPlayer; - float par3 = 0.8F; - this.setSize(0.5F, 0.5F); - this.setLocationAndAngles(posX, posY, posZ, rotationYaw, rotationPitch); - posX -= MathHelper.cos(rotationYaw / 180.0F * (float) Math.PI) * 0.16F; - posY -= 0.2D; - posZ -= MathHelper.sin(rotationYaw / 180.0F * (float) Math.PI) * 0.16F; - this.setPosition(posX, posY, posZ); - motionX = -MathHelper.sin(rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(rotationPitch / 180.0F * (float) Math.PI); - motionZ = MathHelper.cos(rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(rotationPitch / 180.0F * (float) Math.PI); - motionY = -MathHelper.sin(rotationPitch / 180.0F * (float) Math.PI); - this.setThrowableHeading(motionX, motionY, motionZ, par3 * 1.5F, 1.0F); - this.projectileDamage = damage; - this.maxTicksInAir = maxTicksInAir; - } - - public EnergyBlastProjectile(World par1World, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase, float par4, float par5, int damage, int maxTicksInAir) - { - super(par1World); - this.renderDistanceWeight = 10.0D; - this.shootingEntity = par2EntityLivingBase; - this.posY = par2EntityLivingBase.posY + (double) par2EntityLivingBase.getEyeHeight() - 0.10000000149011612D; - double d0 = par3EntityLivingBase.posX - par2EntityLivingBase.posX; - double d1 = par3EntityLivingBase.getBoundingBox().minY + (double) (par3EntityLivingBase.height / 1.5F) - this.posY; - double d2 = par3EntityLivingBase.posZ - par2EntityLivingBase.posZ; - double d3 = (double) MathHelper.sqrt_double(d0 * d0 + d2 * d2); - - if (d3 >= 1.0E-7D) - { - float f2 = (float) (Math.atan2(d2, d0) * 180.0D / Math.PI) - 90.0F; - float f3 = (float) (-(Math.atan2(d1, d3) * 180.0D / Math.PI)); - double d4 = d0 / d3; - double d5 = d2 / d3; - this.setLocationAndAngles(par2EntityLivingBase.posX + d4, this.posY, par2EntityLivingBase.posZ + d5, f2, f3); - this.setThrowableHeading(d0, d1, d2, par4, par5); - } - - this.projectileDamage = damage; - this.maxTicksInAir = maxTicksInAir; - } - - @Override - protected void entityInit() - { - dataWatcher.addObject(16, Byte.valueOf((byte) 0)); - } - - /** - * Similar to setArrowHeading, it's point the throwable entity to a x, y, z - * direction. - */ - @Override - public void setThrowableHeading(double var1, double var3, double var5, float var7, float var8) - { - float var9 = MathHelper.sqrt_double(var1 * var1 + var3 * var3 + var5 * var5); - var1 /= var9; - var3 /= var9; - var5 /= var9; - var1 += rand.nextGaussian() * 0.007499999832361937D * var8; - var3 += rand.nextGaussian() * 0.007499999832361937D * var8; - var5 += rand.nextGaussian() * 0.007499999832361937D * var8; - var1 *= var7; - var3 *= var7; - var5 *= var7; - motionX = var1; - motionY = var3; - motionZ = var5; - float var10 = MathHelper.sqrt_double(var1 * var1 + var5 * var5); - prevRotationYaw = rotationYaw = (float) (Math.atan2(var1, var5) * 180.0D / Math.PI); - prevRotationPitch = rotationPitch = (float) (Math.atan2(var3, var10) * 180.0D / Math.PI); - } - - @Override - @SideOnly(Side.CLIENT) - /** - * Sets the velocity to the args. Args: x, y, z - */ - public void setVelocity(double par1, double par3, double par5) - { - motionX = par1; - motionY = par3; - motionZ = par5; - - if (prevRotationPitch == 0.0F && prevRotationYaw == 0.0F) - { - float var7 = MathHelper.sqrt_double(par1 * par1 + par5 * par5); - prevRotationYaw = rotationYaw = (float) (Math.atan2(par1, par5) * 180.0D / Math.PI); - prevRotationPitch = rotationPitch = (float) (Math.atan2(par3, var7) * 180.0D / Math.PI); - prevRotationPitch = rotationPitch; - prevRotationYaw = rotationYaw; - this.setLocationAndAngles(posX, posY, posZ, rotationYaw, rotationPitch); - } - } - - /** - * Called to update the entity's position/logic. - */ - @Override - public void onUpdate() - { - super.onUpdate(); - - if (ticksInAir > maxTicksInAir) - { - this.setDead(); - } - - if (shootingEntity == null) - { - List players = worldObj.getEntitiesWithinAABB(EntityPlayer.class, new AxisAlignedBB(posX - 1, posY - 1, posZ - 1, posX + 1, posY + 1, posZ + 1)); - Iterator i = players.iterator(); - double closestDistance = Double.MAX_VALUE; - EntityPlayer closestPlayer = null; - - while (i.hasNext()) - { - EntityPlayer e = (EntityPlayer) i.next(); - double distance = e.getDistanceToEntity(this); - - if (distance < closestDistance) - { - closestPlayer = e; - } - } - - if (closestPlayer != null) - { - shootingEntity = closestPlayer; - } - } - - if (prevRotationPitch == 0.0F && prevRotationYaw == 0.0F) - { - float var1 = MathHelper.sqrt_double(motionX * motionX + motionZ * motionZ); - prevRotationYaw = rotationYaw = (float) (Math.atan2(motionX, motionZ) * 180.0D / Math.PI); - prevRotationPitch = rotationPitch = (float) (Math.atan2(motionY, var1) * 180.0D / Math.PI); - } - - IBlockState state = worldObj.getBlockState(new BlockPos(xTile, yTile, zTile)); - Block var16 = state.getBlock(); - - if (var16 != null) - { - var16.setBlockBoundsBasedOnState(worldObj, new BlockPos(xTile, yTile, zTile)); - AxisAlignedBB var2 = var16.getCollisionBoundingBox(worldObj, new BlockPos(xTile, yTile, zTile), state); - - if (var2 != null && var2.isVecInside(new Vec3(posX, posY, posZ))) - { - inGround = true; - } - } - - if (!inGround) - { - ++ticksInAir; - - if (ticksInAir > 1 && ticksInAir < 3) - { - for (int particles = 0; particles < 3; particles++) - { - this.doFiringParticles(); - } - } - - Vec3 var17 = new Vec3(posX, posY, posZ); - Vec3 var3 = new Vec3(posX + motionX, posY + motionY, posZ + motionZ); - MovingObjectPosition var4 = worldObj.rayTraceBlocks(var17, var3, true, false, false); - var17 = new Vec3(posX, posY, posZ); - var3 = new Vec3(posX + motionX, posY + motionY, posZ + motionZ); - - if (var4 != null) - { - var3 = new Vec3(var4.hitVec.xCoord, var4.hitVec.yCoord, var4.hitVec.zCoord); - } - - Entity var5 = null; - List var6 = worldObj.getEntitiesWithinAABBExcludingEntity(this, getBoundingBox().addCoord(motionX, motionY, motionZ).expand(1.0D, 1.0D, 1.0D)); - double var7 = 0.0D; - Iterator var9 = var6.iterator(); - float var11; - boolean scheduledForDeath = false; - - while (var9.hasNext()) - { - Entity var10 = (Entity) var9.next(); - - if (var10.canBeCollidedWith() && (var10 != shootingEntity || ticksInAir >= 5)) - { - var11 = 0.3F; - AxisAlignedBB var12 = var10.getBoundingBox().expand(var11, var11, var11); - MovingObjectPosition var13 = var12.calculateIntercept(var17, var3); - - if (var13 != null) - { - double var14 = var17.distanceTo(var13.hitVec); - - if (var14 < var7 || var7 == 0.0D) - { - var5 = var10; - var7 = var14; - } - } - } - } - - if (var5 != null) - { - var4 = new MovingObjectPosition(var5); - } - - if (var4 != null) - { - this.onImpact(var4); - - if (scheduledForDeath) - { - this.setDead(); - } - } - - posX += motionX; - posY += motionY; - posZ += motionZ; - MathHelper.sqrt_double(motionX * motionX + motionZ * motionZ); - this.setPosition(posX, posY, posZ); - } - } - - public void doFiringParticles() - { - worldObj.spawnParticle(EnumParticleTypes.SPELL_MOB_AMBIENT, posX + smallGauss(0.1D), posY + smallGauss(0.1D), posZ + smallGauss(0.1D), 0.5D, 0.5D, 0.5D); - worldObj.spawnParticle(EnumParticleTypes.FLAME, posX, posY, posZ, gaussian(motionX), gaussian(motionY), gaussian(motionZ)); - } - - /** - * (abstract) Protected helper method to write subclass entity data to NBT. - */ - @Override - public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) - { - par1NBTTagCompound.setShort("xTile", (short) xTile); - par1NBTTagCompound.setShort("yTile", (short) yTile); - par1NBTTagCompound.setShort("zTile", (short) zTile); - par1NBTTagCompound.setByte("inTile", (byte) inTile); - par1NBTTagCompound.setByte("inData", (byte) inData); - par1NBTTagCompound.setByte("inGround", (byte) (inGround ? 1 : 0)); - par1NBTTagCompound.setInteger("ticksInAir", ticksInAir); - par1NBTTagCompound.setInteger("maxTicksInAir", maxTicksInAir); - par1NBTTagCompound.setInteger("projectileDamage", this.projectileDamage); - } - - /** - * (abstract) Protected helper method to read subclass entity data from NBT. - */ - @Override - public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) - { - xTile = par1NBTTagCompound.getShort("xTile"); - yTile = par1NBTTagCompound.getShort("yTile"); - zTile = par1NBTTagCompound.getShort("zTile"); - inTile = par1NBTTagCompound.getByte("inTile") & 255; - inData = par1NBTTagCompound.getByte("inData") & 255; - inGround = par1NBTTagCompound.getByte("inGround") == 1; - ticksInAir = par1NBTTagCompound.getInteger("ticksInAir"); - maxTicksInAir = par1NBTTagCompound.getInteger("maxTicksInAir"); - projectileDamage = par1NBTTagCompound.getInteger("projectileDamage"); - } - - /** - * returns if this entity triggers Block.onEntityWalking on the blocks they - * walk on. used for spiders and wolves to prevent them from trampling crops - */ - @Override - protected boolean canTriggerWalking() - { - return false; - } - - /** - * If returns false, the item will not inflict any damage against entities. - */ - @Override - public boolean canAttackWithItem() - { - return false; - } - - /** - * Whether the arrow has a stream of critical hit particles flying behind - * it. - */ - public void setIsCritical(boolean par1) - { - byte var2 = dataWatcher.getWatchableObjectByte(16); - - if (par1) - { - dataWatcher.updateObject(16, Byte.valueOf((byte) (var2 | 1))); - } else - { - dataWatcher.updateObject(16, Byte.valueOf((byte) (var2 & -2))); - } - } - - /** - * Whether the arrow has a stream of critical hit particles flying behind - * it. - */ - public boolean getIsCritical() - { - byte var1 = dataWatcher.getWatchableObjectByte(16); - return (var1 & 1) != 0; - } - - public void onImpact(MovingObjectPosition mop) - { - if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY && mop.entityHit != null) - { - if (mop.entityHit == shootingEntity) - { - return; - } - - this.onImpact(mop.entityHit); - } else if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - worldObj.createExplosion(shootingEntity, this.posX, this.posY, this.posZ, (float) (0.1), true); - this.setDead(); - } - } - - public void onImpact(Entity mop) - { - if (mop == shootingEntity && ticksInAir > 3) - { - shootingEntity.attackEntityFrom(DamageSource.causeMobDamage(shootingEntity), 1); - this.setDead(); - } else - { - if (mop instanceof EntityLivingBase) - { - ((EntityLivingBase) mop).addPotionEffect(new PotionEffect(Potion.weakness.id, 60, 2)); - } - doDamage(projectileDamage, mop); - worldObj.createExplosion(shootingEntity, this.posX, this.posY, this.posZ, (float) (0.1), true); - } - - spawnHitParticles(EnumParticleTypes.CRIT_MAGIC, 8); - this.setDead(); - } - - protected void spawnHitParticles(EnumParticleTypes type, int i) - { - for (int particles = 0; particles < i; particles++) - { - worldObj.spawnParticle(type, posX, posY - (type == EnumParticleTypes.PORTAL ? 1 : 0), posZ, gaussian(motionX), gaussian(motionY), gaussian(motionZ)); - } - } - - protected void doDamage(int i, Entity mop) - { - mop.attackEntityFrom(this.getDamageSource(), i); - } - - public DamageSource getDamageSource() - { - return DamageSource.causeMobDamage(shootingEntity); - } - - public double smallGauss(double d) - { - return (worldObj.rand.nextFloat() - 0.5D) * d; - } - - public double gaussian(double d) - { - return d + d * ((rand.nextFloat() - 0.5D) / 4); - } - - private int getRicochetMax() - { - return 0; - } - - @Override - public Entity getThrower() - { - // TODO Auto-generated method stub - return this.shootingEntity; - } - - @Override - public void setThrower(Entity entity) - { - if (entity instanceof EntityLivingBase) - this.shootingEntity = (EntityLivingBase) entity; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityBloodLightProjectile.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityBloodLightProjectile.java deleted file mode 100644 index 4b1665fb..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityBloodLightProjectile.java +++ /dev/null @@ -1,97 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.projectile; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.ModBlocks; - -public class EntityBloodLightProjectile extends EnergyBlastProjectile -{ - public EntityBloodLightProjectile(World par1World) - { - super(par1World); - } - - public EntityBloodLightProjectile(World par1World, double par2, double par4, double par6) - { - super(par1World, par2, par4, par6); - } - - public EntityBloodLightProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage) - { - super(par1World, par2EntityPlayer, damage); - } - - public EntityBloodLightProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage, int maxTicksInAir, double posX, double posY, double posZ, float rotationYaw, float rotationPitch) - { - super(par1World, par2EntityPlayer, damage, maxTicksInAir, posX, posY, posZ, rotationYaw, rotationPitch); - } - - public EntityBloodLightProjectile(World par1World, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase, float par4, float par5, int damage, int maxTicksInAir) - { - super(par1World, par2EntityLivingBase, par3EntityLivingBase, par4, par5, damage, maxTicksInAir); - } - - @Override - public DamageSource getDamageSource() - { - return DamageSource.causeMobDamage(shootingEntity); - } - - @Override - public void onImpact(MovingObjectPosition mop) - { - if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY && mop.entityHit != null) - { - if (mop.entityHit == shootingEntity) - { - return; - } - - this.onImpact(mop.entityHit); - } else if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - EnumFacing facing = mop.field_178784_b; - BlockPos position = mop.func_178782_a().offset(facing); - - if(this.worldObj.isAirBlock(position)) - { - this.worldObj.setBlockState(position, ModBlocks.blockBloodLight.getDefaultState()); - } - } - - this.setDead(); - } - - @Override - public void onImpact(Entity mop) - { - if (mop == shootingEntity && ticksInAir > 3) - { - shootingEntity.attackEntityFrom(DamageSource.causeMobDamage(shootingEntity), 1); - this.setDead(); - } else - { - if (mop instanceof EntityLivingBase) - { - ((EntityLivingBase) mop).setRevengeTarget(shootingEntity); - doDamage(1, mop); - } - } - - BlockPos pos = new BlockPos(this.posX, this.posY, this.posZ); - if (worldObj.isAirBlock(pos)) - { - worldObj.setBlockState(pos, Blocks.fire.getDefaultState()); - } - - spawnHitParticles(EnumParticleTypes.CRIT_MAGIC, 8); - this.setDead(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityEnergyBazookaMainProjectile.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityEnergyBazookaMainProjectile.java deleted file mode 100644 index 55f8b9f0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityEnergyBazookaMainProjectile.java +++ /dev/null @@ -1,100 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.projectile; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; - -public class EntityEnergyBazookaMainProjectile extends EnergyBlastProjectile -{ - public EntityEnergyBazookaMainProjectile(World par1World) - { - super(par1World); - } - - public EntityEnergyBazookaMainProjectile(World par1World, double par2, double par4, double par6) - { - super(par1World, par2, par4, par6); - } - - public EntityEnergyBazookaMainProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage) - { - super(par1World, par2EntityPlayer, damage); - } - - public EntityEnergyBazookaMainProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage, int maxTicksInAir, double posX, double posY, double posZ, float rotationYaw, float rotationPitch) - { - super(par1World, par2EntityPlayer, damage, maxTicksInAir, posX, posY, posZ, rotationYaw, rotationPitch); - } - - public EntityEnergyBazookaMainProjectile(World par1World, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase, float par4, float par5, int damage, int maxTicksInAir) - { - super(par1World, par2EntityLivingBase, par3EntityLivingBase, par4, par5, damage, maxTicksInAir); - } - - @Override - public DamageSource getDamageSource() - { - return DamageSource.causeMobDamage(shootingEntity); - } - - @Override - public void onImpact(MovingObjectPosition mop) - { - if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY && mop.entityHit != null) - { - if (mop.entityHit == shootingEntity) - { - return; - } - - this.onImpact(mop.entityHit); - } else if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - worldObj.createExplosion(this.shootingEntity, this.posX, this.posY, this.posZ, 5.0f, false); - this.spawnSecondaryProjectiles(); - } - - this.setDead(); - } - - @Override - public void onImpact(Entity mop) - { - if (mop == shootingEntity && ticksInAir > 3) - { - shootingEntity.attackEntityFrom(DamageSource.causeMobDamage(shootingEntity), 1); - this.setDead(); - } else - { - if (mop instanceof EntityLivingBase) - { - spawnSecondaryProjectiles(); - } - - worldObj.createExplosion(this.shootingEntity, this.posX, this.posY, this.posZ, 5.0f, false); - } - - spawnHitParticles(EnumParticleTypes.CRIT_MAGIC, 8); - this.setDead(); - } - - public void spawnSecondaryProjectiles() - { - for (int i = 0; i < 20; i++) - { - EntityEnergyBazookaSecondaryProjectile secProj = new EntityEnergyBazookaSecondaryProjectile(worldObj, this.posX, this.posY, this.posZ, 15); - secProj.shootingEntity = this.shootingEntity; - float xVel = rand.nextFloat() - rand.nextFloat(); - float yVel = rand.nextFloat() - rand.nextFloat(); - float zVel = rand.nextFloat() - rand.nextFloat(); - float wantedVel = 0.5f; - secProj.motionX = xVel * wantedVel; - secProj.motionY = yVel * wantedVel; - secProj.motionZ = zVel * wantedVel; - worldObj.spawnEntityInWorld(secProj); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityEnergyBazookaSecondaryProjectile.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityEnergyBazookaSecondaryProjectile.java deleted file mode 100644 index ad105632..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityEnergyBazookaSecondaryProjectile.java +++ /dev/null @@ -1,481 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.projectile; - -import java.util.Iterator; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.IProjectile; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.MathHelper; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -public class EntityEnergyBazookaSecondaryProjectile extends EnergyBlastProjectile implements IProjectile -{ - private int xTile = -1; - private int yTile = -1; - private int zTile = -1; - private int inTile = 0; - private int inData = 0; - private boolean inGround = false; - /** - * The owner of this arrow. - */ - public EntityLivingBase shootingEntity; - private int ticksInAir = 0; - private int ricochetCounter = 0; - private boolean scheduledForDeath = false; - public int damage; - - public EntityEnergyBazookaSecondaryProjectile(World par1World) - { - super(par1World); - this.setSize(0.5F, 0.5F); - damage = 5; - } - - public EntityEnergyBazookaSecondaryProjectile(World par1World, double par2, double par4, double par6, int damage) - { - super(par1World); - this.setSize(0.5F, 0.5F); - this.setPosition(par2, par4, par6); - this.damage = damage; - } - - public EntityEnergyBazookaSecondaryProjectile(World par1World, EntityPlayer par2EntityPlayer, int damage) - { - super(par1World); - shootingEntity = par2EntityPlayer; - float par3 = 0.8F; - this.setSize(0.1F, 0.1F); - this.setLocationAndAngles(par2EntityPlayer.posX, par2EntityPlayer.posY + par2EntityPlayer.getEyeHeight(), par2EntityPlayer.posZ, par2EntityPlayer.rotationYaw, par2EntityPlayer.rotationPitch); - posX -= MathHelper.cos(rotationYaw / 180.0F * (float) Math.PI) * 0.16F; - posY -= 0.2D; - posZ -= MathHelper.sin(rotationYaw / 180.0F * (float) Math.PI) * 0.16F; - this.setPosition(posX, posY, posZ); - motionX = -MathHelper.sin(rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(rotationPitch / 180.0F * (float) Math.PI); - motionZ = MathHelper.cos(rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(rotationPitch / 180.0F * (float) Math.PI); - motionY = -MathHelper.sin(rotationPitch / 180.0F * (float) Math.PI); - this.setThrowableHeading(motionX, motionY, motionZ, par3 * 1.5F, 1.0F); - this.damage = damage; - } - - @Override - protected void entityInit() - { - dataWatcher.addObject(16, Byte.valueOf((byte) 0)); - } - - /** - * Similar to setArrowHeading, it's point the throwable entity to a x, y, z - * direction. - */ - @Override - public void setThrowableHeading(double var1, double var3, double var5, float var7, float var8) - { - float var9 = MathHelper.sqrt_double(var1 * var1 + var3 * var3 + var5 * var5); - var1 /= var9; - var3 /= var9; - var5 /= var9; - var1 += rand.nextGaussian() * 0.007499999832361937D * var8; - var3 += rand.nextGaussian() * 0.007499999832361937D * var8; - var5 += rand.nextGaussian() * 0.007499999832361937D * var8; - var1 *= var7; - var3 *= var7; - var5 *= var7; - motionX = var1; - motionY = var3; - motionZ = var5; - float var10 = MathHelper.sqrt_double(var1 * var1 + var5 * var5); - prevRotationYaw = rotationYaw = (float) (Math.atan2(var1, var5) * 180.0D / Math.PI); - prevRotationPitch = rotationPitch = (float) (Math.atan2(var3, var10) * 180.0D / Math.PI); - } - - @Override - @SideOnly(Side.CLIENT) - /** - * Sets the velocity to the args. Args: x, y, z - */ - public void setVelocity(double par1, double par3, double par5) - { - motionX = par1; - motionY = par3; - motionZ = par5; - - if (prevRotationPitch == 0.0F && prevRotationYaw == 0.0F) - { - float var7 = MathHelper.sqrt_double(par1 * par1 + par5 * par5); - prevRotationYaw = rotationYaw = (float) (Math.atan2(par1, par5) * 180.0D / Math.PI); - prevRotationPitch = rotationPitch = (float) (Math.atan2(par3, var7) * 180.0D / Math.PI); - prevRotationPitch = rotationPitch; - prevRotationYaw = rotationYaw; - this.setLocationAndAngles(posX, posY, posZ, rotationYaw, rotationPitch); - } - } - - /** - * Called to update the entity's position/logic. - */ - @Override - public void onUpdate() - { - super.onUpdate(); - - if (ticksInAir > maxTicksInAir) - { - this.setDead(); - } - - if (shootingEntity == null) - { - List players = worldObj.getEntitiesWithinAABB(EntityPlayer.class, new AxisAlignedBB(posX - 1, posY - 1, posZ - 1, posX + 1, posY + 1, posZ + 1)); - Iterator i = players.iterator(); - double closestDistance = Double.MAX_VALUE; - EntityPlayer closestPlayer = null; - - while (i.hasNext()) - { - EntityPlayer e = (EntityPlayer) i.next(); - double distance = e.getDistanceToEntity(this); - - if (distance < closestDistance) - { - closestPlayer = e; - } - } - - if (closestPlayer != null) - { - shootingEntity = closestPlayer; - } - } - - if (prevRotationPitch == 0.0F && prevRotationYaw == 0.0F) - { - float var1 = MathHelper.sqrt_double(motionX * motionX + motionZ * motionZ); - prevRotationYaw = rotationYaw = (float) (Math.atan2(motionX, motionZ) * 180.0D / Math.PI); - prevRotationPitch = rotationPitch = (float) (Math.atan2(motionY, var1) * 180.0D / Math.PI); - } - - IBlockState state = worldObj.getBlockState(new BlockPos(xTile, yTile, zTile)); - Block var16 = state.getBlock(); - - if (var16 != null) - { - var16.setBlockBoundsBasedOnState(worldObj, new BlockPos(xTile, yTile, zTile)); - AxisAlignedBB var2 = var16.getCollisionBoundingBox(worldObj, new BlockPos(xTile, yTile, zTile), state); - - if (var2 != null && var2.isVecInside(new Vec3(posX, posY, posZ))) - { - inGround = true; - } - } - - if (!inGround) - { - ++ticksInAir; - - if (ticksInAir > 1 && ticksInAir < 3) - { - for (int particles = 0; particles < 3; particles++) - { - this.doFiringParticles(); - } - } - - Vec3 var17 = new Vec3(posX, posY, posZ); - Vec3 var3 = new Vec3(posX + motionX, posY + motionY, posZ + motionZ); - MovingObjectPosition var4 = worldObj.rayTraceBlocks(var17, var3, true, false, false); - var17 = new Vec3(posX, posY, posZ); - var3 = new Vec3(posX + motionX, posY + motionY, posZ + motionZ); - - if (var4 != null) - { - var3 = new Vec3(var4.hitVec.xCoord, var4.hitVec.yCoord, var4.hitVec.zCoord); - } - - Entity var5 = null; - List var6 = worldObj.getEntitiesWithinAABBExcludingEntity(this, getBoundingBox().addCoord(motionX, motionY, motionZ).expand(1.0D, 1.0D, 1.0D)); - double var7 = 0.0D; - Iterator var9 = var6.iterator(); - float var11; - - while (var9.hasNext()) - { - Entity var10 = (Entity) var9.next(); - - if (var10.canBeCollidedWith() && (var10 != shootingEntity || ticksInAir >= 5)) - { - var11 = 0.3F; - AxisAlignedBB var12 = var10.getBoundingBox().expand(var11, var11, var11); - MovingObjectPosition var13 = var12.calculateIntercept(var17, var3); - - if (var13 != null) - { - double var14 = var17.distanceTo(var13.hitVec); - - if (var14 < var7 || var7 == 0.0D) - { - var5 = var10; - var7 = var14; - } - } - } - } - - if (var5 != null) - { - var4 = new MovingObjectPosition(var5); - } - - if (var4 != null) - { - this.onImpact(var4); - - if (scheduledForDeath) - { - this.setDead(); - } - } - - posX += motionX; - posY += motionY; - posZ += motionZ; - MathHelper.sqrt_double(motionX * motionX + motionZ * motionZ); - this.setPosition(posX, posY, posZ); - } - } - - public void doFiringParticles() - { - worldObj.spawnParticle(EnumParticleTypes.SPELL_MOB_AMBIENT, posX + smallGauss(0.1D), posY + smallGauss(0.1D), posZ + smallGauss(0.1D), 0.5D, 0.5D, 0.5D); - worldObj.spawnParticle(EnumParticleTypes.FLAME, posX, posY, posZ, gaussian(motionX), gaussian(motionY), gaussian(motionZ)); - } - - /** - * (abstract) Protected helper method to write subclass entity data to NBT. - */ - @Override - public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) - { - par1NBTTagCompound.setShort("xTile", (short) xTile); - par1NBTTagCompound.setShort("yTile", (short) yTile); - par1NBTTagCompound.setShort("zTile", (short) zTile); - par1NBTTagCompound.setByte("inTile", (byte) inTile); - par1NBTTagCompound.setByte("inData", (byte) inData); - par1NBTTagCompound.setByte("inGround", (byte) (inGround ? 1 : 0)); - } - - /** - * (abstract) Protected helper method to read subclass entity data from NBT. - */ - @Override - public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) - { - xTile = par1NBTTagCompound.getShort("xTile"); - yTile = par1NBTTagCompound.getShort("yTile"); - zTile = par1NBTTagCompound.getShort("zTile"); - inTile = par1NBTTagCompound.getByte("inTile") & 255; - inData = par1NBTTagCompound.getByte("inData") & 255; - inGround = par1NBTTagCompound.getByte("inGround") == 1; - } - - /** - * returns if this entity triggers Block.onEntityWalking on the blocks they - * walk on. used for spiders and wolves to prevent them from trampling crops - */ - @Override - protected boolean canTriggerWalking() - { - return false; - } - - /** - * If returns false, the item will not inflict any damage against entities. - */ - @Override - public boolean canAttackWithItem() - { - return false; - } - - @Override - /** - * Whether the arrow has a stream of critical hit particles flying behind - * it. - */ - public void setIsCritical(boolean par1) - { - byte var2 = dataWatcher.getWatchableObjectByte(16); - - if (par1) - { - dataWatcher.updateObject(16, Byte.valueOf((byte) (var2 | 1))); - } else - { - dataWatcher.updateObject(16, Byte.valueOf((byte) (var2 & -2))); - } - } - - @Override - /** - * Whether the arrow has a stream of critical hit particles flying behind - * it. - */ - public boolean getIsCritical() - { - byte var1 = dataWatcher.getWatchableObjectByte(16); - return (var1 & 1) != 0; - } - - @Override - public void onImpact(MovingObjectPosition mop) - { - if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY && mop.entityHit != null) - { - if (mop.entityHit == shootingEntity) - { - return; - } - - this.onImpact(mop.entityHit); - } else if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - this.groundImpact(mop.field_178784_b); - worldObj.createExplosion(shootingEntity, posX, posY, posZ, 2, false); - } - } - - @Override - public void onImpact(Entity mop) - { - if (mop == shootingEntity && ticksInAir > 3) - { - shootingEntity.attackEntityFrom(DamageSource.causeMobDamage(shootingEntity), 1); - this.setDead(); - } else - { - doDamage(this.damage + d6(), mop); - worldObj.createExplosion(shootingEntity, posX, posY, posZ, 2, false); - } - - spawnHitParticles(EnumParticleTypes.CRIT_MAGIC, 8); - this.setDead(); - } - - private int d6() - { - return rand.nextInt(6) + 1; - } - - @Override - protected void spawnHitParticles(EnumParticleTypes type, int i) - { - for (int particles = 0; particles < i; particles++) - { - worldObj.spawnParticle(type, posX, posY - (type == EnumParticleTypes.PORTAL ? 1 : 0), posZ, gaussian(motionX), gaussian(motionY), gaussian(motionZ)); - } - } - - @Override - public void doDamage(int i, Entity mop) - { - mop.attackEntityFrom(this.getDamageSource(), i); - } - - @Override - public DamageSource getDamageSource() - { - return DamageSource.causeMobDamage(shootingEntity); - } - - public void groundImpact(EnumFacing sideHit) - { - this.ricochet(sideHit); - } - - @Override - public double smallGauss(double d) - { - return (worldObj.rand.nextFloat() - 0.5D) * d; - } - - @Override - public double gaussian(double d) - { - return d + d * ((rand.nextFloat() - 0.5D) / 4); - } - - private void ricochet(EnumFacing sideHit) - { - if(sideHit.getFrontOffsetX() != 0) - { - motionX *= -1; - } - - if(sideHit.getFrontOffsetY() != 0) - { - motionY *= -1; - } - - if(sideHit.getFrontOffsetZ() != 0) - { - motionZ *= -1; - } - - ricochetCounter++; - - if (ricochetCounter > this.getRicochetMax()) - { - scheduledForDeath = true; - - for (int particles = 0; particles < 4; particles++) - { - worldObj.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, posX, posY, posZ, gaussian(0.1D), gaussian(0.1D), gaussian(0.1D)); -// switch (sideHit) -// { -// case 0: -// worldObj.spawnParticle("smoke", posX, posY, posZ, gaussian(0.1D), -gaussian(0.1D), gaussian(0.1D)); -// break; -// -// case 1: -// worldObj.spawnParticle("smoke", posX, posY, posZ, gaussian(0.1D), gaussian(0.1D), gaussian(0.1D)); -// break; -// -// case 2: -// worldObj.spawnParticle("smoke", posX, posY, posZ, gaussian(0.1D), gaussian(0.1D), -gaussian(0.1D)); -// break; -// -// case 3: -// worldObj.spawnParticle("smoke", posX, posY, posZ, gaussian(0.1D), gaussian(0.1D), gaussian(0.1D)); -// break; -// -// case 4: -// worldObj.spawnParticle("smoke", posX, posY, posZ, -gaussian(0.1D), gaussian(0.1D), gaussian(0.1D)); -// break; -// -// case 5: -// worldObj.spawnParticle("smoke", posX, posY, posZ, gaussian(0.1D), gaussian(0.1D), gaussian(0.1D)); -// break; -// } - } - } - } - - private int getRicochetMax() - { - return 3; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityMeteor.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityMeteor.java deleted file mode 100644 index 9b234851..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityMeteor.java +++ /dev/null @@ -1,90 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.projectile; - -import WayofTime.alchemicalWizardry.common.summoning.meteor.MeteorRegistry; -import net.minecraft.entity.Entity; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; - -public class EntityMeteor extends EnergyBlastProjectile -{ - private int meteorID; - - public boolean hasTerrae; - public boolean hasOrbisTerrae; - public boolean hasCrystallos; - public boolean hasIncendium; - public boolean hasTennebrae; - - public EntityMeteor(World par1World) - { - super(par1World); - this.meteorID = 0; - } - - public EntityMeteor(World par1World, double par2, double par4, double par6, int meteorID) - { - super(par1World, par2, par4, par6); - this.meteorID = meteorID; - } - - @Override - public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeEntityToNBT(par1NBTTagCompound); - - par1NBTTagCompound.setInteger("meteorID", meteorID); - par1NBTTagCompound.setBoolean("hasTerrae", hasTerrae); - par1NBTTagCompound.setBoolean("hasOrbisTerrae", hasOrbisTerrae); - par1NBTTagCompound.setBoolean("hasCrystallos", hasCrystallos); - par1NBTTagCompound.setBoolean("hasIncendium", hasIncendium); - par1NBTTagCompound.setBoolean("hasTennebrae", hasTennebrae); - } - - @Override - public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readEntityFromNBT(par1NBTTagCompound); - - meteorID = par1NBTTagCompound.getInteger("meteorID"); - hasTerrae = par1NBTTagCompound.getBoolean("hasTerrae"); - hasOrbisTerrae = par1NBTTagCompound.getBoolean("hasOrbisTerrae"); - hasIncendium = par1NBTTagCompound.getBoolean("hasIncendium"); - hasCrystallos = par1NBTTagCompound.getBoolean("hasCrystallos"); - hasTennebrae = par1NBTTagCompound.getBoolean("hasTennebrae"); - } - - @Override - public DamageSource getDamageSource() - { - return DamageSource.fallingBlock; - } - - @Override - public void onImpact(MovingObjectPosition mop) - { - if (worldObj.isRemote) - { - return; - } - - if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY && mop.entityHit != null) - { - this.onImpact(mop.entityHit); - } else if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - MeteorRegistry.createMeteorImpact(worldObj, mop.func_178782_a(), this.meteorID, new boolean[]{hasTerrae, hasOrbisTerrae, hasCrystallos, hasIncendium, hasTennebrae}); - } - - this.setDead(); - } - - @Override - public void onImpact(Entity mop) - { - MeteorRegistry.createMeteorImpact(worldObj, this.getPosition(), meteorID, new boolean[]{hasTerrae, hasOrbisTerrae, hasCrystallos, hasIncendium, hasTennebrae}); - - this.setDead(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityParticleBeam.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityParticleBeam.java deleted file mode 100644 index 32ac5547..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityParticleBeam.java +++ /dev/null @@ -1,316 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.projectile; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.IProjectile; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.registry.IThrowableEntity; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -//Shamelessly ripped off from x3n0ph0b3 -public class EntityParticleBeam extends Entity implements IProjectile, IThrowableEntity -{ - protected int xTile = -1; - protected int yTile = -1; - protected int zTile = -1; - protected int inTile = 0; - protected int inData = 0; - protected float colourRed = 0f; - protected float colourGreen = 0f; - protected float colourBlue = 0f; - protected int xDest = 0; - protected int yDest = 0; - protected int zDest = 0; - protected boolean inGround = false; - /** - * The owner of this arrow. - */ - public EntityLivingBase shootingEntity; - protected int ticksInAir = 0; - protected int maxTicksInAir = 600; - private boolean scheduledForDeath = false; - protected int projectileDamage; - - public EntityParticleBeam(World par1World) - { - super(par1World); - this.setSize(0.5F, 0.5F); - this.maxTicksInAir = 600; - } - - public EntityParticleBeam(World par1World, double par2, double par4, double par6) - { - super(par1World); - this.setSize(0.5F, 0.5F); - this.setPosition(par2, par4, par6); - this.maxTicksInAir = 600; - } - - public EntityParticleBeam(World par1World, EntityLivingBase par2EntityPlayer, int damage) - { - super(par1World); - shootingEntity = par2EntityPlayer; - float par3 = 0.8F; - this.setSize(0.5F, 0.5F); - this.setLocationAndAngles(par2EntityPlayer.posX, par2EntityPlayer.posY + par2EntityPlayer.getEyeHeight(), par2EntityPlayer.posZ, par2EntityPlayer.rotationYaw, par2EntityPlayer.rotationPitch); - posX -= MathHelper.cos(rotationYaw / 180.0F * (float) Math.PI) * 0.16F; - posY -= 0.2D; - posZ -= MathHelper.sin(rotationYaw / 180.0F * (float) Math.PI) * 0.16F; - this.setPosition(posX, posY, posZ); - motionX = -MathHelper.sin(rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(rotationPitch / 180.0F * (float) Math.PI); - motionZ = MathHelper.cos(rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(rotationPitch / 180.0F * (float) Math.PI); - motionY = -MathHelper.sin(rotationPitch / 180.0F * (float) Math.PI); - this.setThrowableHeading(motionX, motionY, motionZ, par3 * 1.5F, 1.0F); - this.projectileDamage = damage; - this.maxTicksInAir = 600; - } - - public EntityParticleBeam(World par1World, EntityLivingBase par2EntityPlayer, int damage, int maxTicksInAir, double posX, double posY, double posZ, float rotationYaw, float rotationPitch) - { - super(par1World); - shootingEntity = par2EntityPlayer; - float par3 = 0.8F; - this.setSize(0.5F, 0.5F); - this.setLocationAndAngles(posX, posY, posZ, rotationYaw, rotationPitch); - posX -= MathHelper.cos(rotationYaw / 180.0F * (float) Math.PI) * 0.16F; - posY -= 0.2D; - posZ -= MathHelper.sin(rotationYaw / 180.0F * (float) Math.PI) * 0.16F; - this.setPosition(posX, posY, posZ); - motionX = -MathHelper.sin(rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(rotationPitch / 180.0F * (float) Math.PI); - motionZ = MathHelper.cos(rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(rotationPitch / 180.0F * (float) Math.PI); - motionY = -MathHelper.sin(rotationPitch / 180.0F * (float) Math.PI); - this.setThrowableHeading(motionX, motionY, motionZ, par3 * 1.5F, 1.0F); - this.projectileDamage = damage; - this.maxTicksInAir = maxTicksInAir; - } - - public EntityParticleBeam(World par1World, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase, float par4, float par5, int damage, int maxTicksInAir) - { - super(par1World); - this.renderDistanceWeight = 10.0D; - this.shootingEntity = par2EntityLivingBase; - this.posY = par2EntityLivingBase.posY + (double) par2EntityLivingBase.getEyeHeight() - 0.10000000149011612D; - double d0 = par3EntityLivingBase.posX - par2EntityLivingBase.posX; - double d1 = par3EntityLivingBase.getBoundingBox().minY + (double) (par3EntityLivingBase.height / 1.5F) - this.posY; - double d2 = par3EntityLivingBase.posZ - par2EntityLivingBase.posZ; - double d3 = (double) MathHelper.sqrt_double(d0 * d0 + d2 * d2); - - if (d3 >= 1.0E-7D) - { - float f2 = (float) (Math.atan2(d2, d0) * 180.0D / Math.PI) - 90.0F; - float f3 = (float) (-(Math.atan2(d1, d3) * 180.0D / Math.PI)); - double d4 = d0 / d3; - double d5 = d2 / d3; - this.setLocationAndAngles(par2EntityLivingBase.posX + d4, this.posY, par2EntityLivingBase.posZ + d5, f2, f3); - this.setThrowableHeading(d0, d1, d2, par4, par5); - } - - this.projectileDamage = damage; - this.maxTicksInAir = maxTicksInAir; - } - - @Override - protected void entityInit() - { - dataWatcher.addObject(16, Byte.valueOf((byte) 0)); - } - - /** - * Similar to setArrowHeading, it's point the throwable entity to a x, y, z - * direction. - */ - @Override - public void setThrowableHeading(double var1, double var3, double var5, float var7, float var8) - { - float var9 = MathHelper.sqrt_double(var1 * var1 + var3 * var3 + var5 * var5); - var1 /= var9; - var3 /= var9; - var5 /= var9; - var1 += rand.nextGaussian() * 0.007499999832361937D * var8; - var3 += rand.nextGaussian() * 0.007499999832361937D * var8; - var5 += rand.nextGaussian() * 0.007499999832361937D * var8; - var1 *= var7; - var3 *= var7; - var5 *= var7; - motionX = var1; - motionY = var3; - motionZ = var5; - float var10 = MathHelper.sqrt_double(var1 * var1 + var5 * var5); - prevRotationYaw = rotationYaw = (float) (Math.atan2(var1, var5) * 180.0D / Math.PI); - prevRotationPitch = rotationPitch = (float) (Math.atan2(var3, var10) * 180.0D / Math.PI); - } - - @Override - @SideOnly(Side.CLIENT) - /** - * Sets the velocity to the args. Args: x, y, z - */ - public void setVelocity(double par1, double par3, double par5) - { - motionX = par1; - motionY = par3; - motionZ = par5; - - if (prevRotationPitch == 0.0F && prevRotationYaw == 0.0F) - { - float var7 = MathHelper.sqrt_double(par1 * par1 + par5 * par5); - prevRotationYaw = rotationYaw = (float) (Math.atan2(par1, par5) * 180.0D / Math.PI); - prevRotationPitch = rotationPitch = (float) (Math.atan2(par3, var7) * 180.0D / Math.PI); - prevRotationPitch = rotationPitch; - prevRotationYaw = rotationYaw; - this.setLocationAndAngles(posX, posY, posZ, rotationYaw, rotationPitch); - } - } - - /** - * Called to update the entity's position/logic. - */ - @Override - public void onUpdate() - { - super.onUpdate(); - - if (ticksInAir > maxTicksInAir) - { - this.setDead(); - } - - posX += motionX; - posY += motionY; - posZ += motionZ; - MathHelper.sqrt_double(motionX * motionX + motionZ * motionZ); - this.setPosition(posX, posY, posZ); - - this.doFiringParticles(); - - if (Math.pow(posX - xDest, 2) + Math.pow(posY - yDest, 2) + Math.pow(posZ - zDest, 2) <= 1) - { - this.scheduledForDeath = true; - } - - if (this.scheduledForDeath) - { - this.setDead(); - } - } - - public void doFiringParticles() - { - if (!worldObj.isRemote) - { - return; - } - - SpellHelper.sendParticleToAllAround(worldObj, posX, posY, posZ, 30, worldObj.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB_AMBIENT, posX + smallGauss(0.1D), posY + smallGauss(0.1D), posZ + smallGauss(0.1D), 0.5D, 0.5D, 0.5D); -// EntityFX particle = new EntityCloudFX(worldObj, posX, posY, posZ, 0, 0, 0); -// particle.setRBGColorF(colourRed + 0.15f * (worldObj.rand.nextFloat() - worldObj.rand.nextFloat()), colourGreen + 0.15f * (worldObj.rand.nextFloat() - worldObj.rand.nextFloat()), colourBlue + 0.15f * (worldObj.rand.nextFloat() - worldObj.rand.nextFloat())); -// FMLClientHandler.instance().getClient().effectRenderer.addEffect(particle); - } - - /** - * (abstract) Protected helper method to write subclass entity data to NBT. - */ - @Override - public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) - { - par1NBTTagCompound.setShort("xTile", (short) xTile); - par1NBTTagCompound.setShort("yTile", (short) yTile); - par1NBTTagCompound.setShort("zTile", (short) zTile); - par1NBTTagCompound.setByte("inTile", (byte) inTile); - par1NBTTagCompound.setByte("inData", (byte) inData); - par1NBTTagCompound.setByte("inGround", (byte) (inGround ? 1 : 0)); - par1NBTTagCompound.setInteger("ticksInAir", ticksInAir); - par1NBTTagCompound.setInteger("maxTicksInAir", maxTicksInAir); - par1NBTTagCompound.setInteger("projectileDamage", this.projectileDamage); - par1NBTTagCompound.setFloat("colourRed", colourRed); - par1NBTTagCompound.setFloat("colourGreen", colourGreen); - par1NBTTagCompound.setFloat("colourBlue", colourBlue); - par1NBTTagCompound.setInteger("xDest", xDest); - par1NBTTagCompound.setInteger("yDest", yDest); - par1NBTTagCompound.setInteger("zDest", zDest); - } - - /** - * (abstract) Protected helper method to read subclass entity data from NBT. - */ - @Override - public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) - { - xTile = par1NBTTagCompound.getShort("xTile"); - yTile = par1NBTTagCompound.getShort("yTile"); - zTile = par1NBTTagCompound.getShort("zTile"); - inTile = par1NBTTagCompound.getByte("inTile") & 255; - inData = par1NBTTagCompound.getByte("inData") & 255; - inGround = par1NBTTagCompound.getByte("inGround") == 1; - ticksInAir = par1NBTTagCompound.getInteger("ticksInAir"); - maxTicksInAir = par1NBTTagCompound.getInteger("maxTicksInAir"); - projectileDamage = par1NBTTagCompound.getInteger("projectileDamage"); - colourRed = par1NBTTagCompound.getFloat("colourRed"); - colourGreen = par1NBTTagCompound.getFloat("colourGreen"); - colourBlue = par1NBTTagCompound.getFloat("colourBlue"); - xDest = par1NBTTagCompound.getInteger("xDest"); - yDest = par1NBTTagCompound.getInteger("yDest"); - zDest = par1NBTTagCompound.getInteger("zDest"); - } - - @Override - protected boolean canTriggerWalking() - { - return false; - } - - public DamageSource getDamageSource() - { - return DamageSource.causeMobDamage(shootingEntity); - } - - public double smallGauss(double d) - { - return (worldObj.rand.nextFloat() - 0.5D) * d; - } - - public double gaussian(double d) - { - return d + d * ((rand.nextFloat() - 0.5D) / 4); - } - - private int getRicochetMax() - { - return 0; - } - - @Override - public Entity getThrower() - { - // TODO Auto-generated method stub - return this.shootingEntity; - } - - @Override - public void setThrower(Entity entity) - { - if (entity instanceof EntityLivingBase) - this.shootingEntity = (EntityLivingBase) entity; - - } - - public void setColour(float red, float green, float blue) - { - this.colourRed = red; - this.colourGreen = green; - this.colourBlue = blue; - } - - public void setDestination(int xDest, int yDest, int zDest) - { - this.xDest = xDest; - this.yDest = yDest; - this.zDest = zDest; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/ExplosionProjectile.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/ExplosionProjectile.java deleted file mode 100644 index 6ab68863..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/ExplosionProjectile.java +++ /dev/null @@ -1,112 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.projectile; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; - -public class ExplosionProjectile extends EnergyBlastProjectile -{ - protected boolean causesEnvDamage; - - public ExplosionProjectile(World par1World) - { - super(par1World); - } - - public ExplosionProjectile(World par1World, double par2, double par4, double par6) - { - super(par1World, par2, par4, par6); - } - - public ExplosionProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage, boolean flag) - { - super(par1World, par2EntityPlayer, damage); - causesEnvDamage = flag; - } - - public ExplosionProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage, int maxTicksInAir, double posX, double posY, double posZ, float rotationYaw, float rotationPitch, boolean flag) - { - super(par1World, par2EntityPlayer, damage, maxTicksInAir, posX, posY, posZ, rotationYaw, rotationPitch); - causesEnvDamage = flag; - } - - public ExplosionProjectile(World par1World, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase, float par4, float par5, int damage, int maxTicksInAir, boolean flag) - { - super(par1World, par2EntityLivingBase, par3EntityLivingBase, par4, par5, damage, maxTicksInAir); - causesEnvDamage = flag; - } - - @Override - public DamageSource getDamageSource() - { - return DamageSource.causeMobDamage(shootingEntity); - } - - @Override - public void onImpact(MovingObjectPosition mop) - { - if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY && mop.entityHit != null) - { - if (mop.entityHit == shootingEntity) - { - return; - } - - this.onImpact(mop.entityHit); - - worldObj.createExplosion(this, this.posX, this.posY, this.posZ, (float) (2), causesEnvDamage); - } else if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - worldObj.createExplosion(this, this.posX, this.posY, this.posZ, (float) (2), causesEnvDamage); - } - - this.setDead(); - } - - @Override - public void onImpact(Entity mop) - { - if (mop == shootingEntity && ticksInAir > 3) - { - shootingEntity.attackEntityFrom(DamageSource.causeMobDamage(shootingEntity), 1); - this.setDead(); - } else - { - if (mop instanceof EntityLivingBase) - { - doDamage(projectileDamage, mop); - } - } - - spawnHitParticles(EnumParticleTypes.CRIT_MAGIC, 8); - this.setDead(); - } - - @Override - public void doFiringParticles() - { - worldObj.spawnParticle(EnumParticleTypes.SPELL_MOB_AMBIENT, posX + smallGauss(0.1D), posY + smallGauss(0.1D), posZ + smallGauss(0.1D), 0.5D, 0.5D, 0.5D); - worldObj.spawnParticle(EnumParticleTypes.EXPLOSION_LARGE, posX, posY, posZ, gaussian(motionX), gaussian(motionY), gaussian(motionZ)); - } - - @Override - public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeEntityToNBT(par1NBTTagCompound); - par1NBTTagCompound.setBoolean("causesEnvDamage", causesEnvDamage); - } - - /** - * (abstract) Protected helper method to read subclass entity data from NBT. - */ - @Override - public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readEntityFromNBT(par1NBTTagCompound); - causesEnvDamage = par1NBTTagCompound.getBoolean("causesEnvDamage"); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/FireProjectile.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/FireProjectile.java deleted file mode 100644 index 19b1086a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/FireProjectile.java +++ /dev/null @@ -1,112 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.projectile; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.init.Blocks; -import net.minecraft.potion.Potion; -import net.minecraft.util.BlockPos; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; - -public class FireProjectile extends EnergyBlastProjectile -{ - public FireProjectile(World par1World) - { - super(par1World); - } - - public FireProjectile(World par1World, double par2, double par4, double par6) - { - super(par1World, par2, par4, par6); - } - - public FireProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage) - { - super(par1World, par2EntityPlayer, damage); - } - - public FireProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage, int maxTicksInAir, double posX, double posY, double posZ, float rotationYaw, float rotationPitch) - { - super(par1World, par2EntityPlayer, damage, maxTicksInAir, posX, posY, posZ, rotationYaw, rotationPitch); - } - - public FireProjectile(World par1World, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase, float par4, float par5, int damage, int maxTicksInAir) - { - super(par1World, par2EntityLivingBase, par3EntityLivingBase, par4, par5, damage, maxTicksInAir); - } - - @Override - public DamageSource getDamageSource() - { - return DamageSource.causeMobDamage(shootingEntity); - } - - @Override - public void onImpact(MovingObjectPosition mop) - { - if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY && mop.entityHit != null) - { - if (mop.entityHit == shootingEntity) - { - return; - } - - this.onImpact(mop.entityHit); - } else if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - for (int i = -1; i <= 1; i++) - { - for (int j = -1; j <= 1; j++) - { - for (int k = -1; k <= 1; k++) - { - BlockPos newPos = new BlockPos(this.posX + i, this.posY + j, this.posZ + k); - if (worldObj.isAirBlock(newPos)) - { - worldObj.setBlockState(newPos, Blocks.fire.getDefaultState()); - } - } - } - } - } - - this.setDead(); - } - - @Override - public void onImpact(Entity mop) - { - if (mop == shootingEntity && ticksInAir > 3) - { - shootingEntity.attackEntityFrom(DamageSource.causeMobDamage(shootingEntity), 1); - this.setDead(); - } else - { - if (mop instanceof EntityLivingBase) - { - mop.setFire(10 * this.projectileDamage); - ((EntityLivingBase) mop).setRevengeTarget(shootingEntity); - - if (((EntityLivingBase) mop).isPotionActive(Potion.fireResistance) || mop.isImmuneToFire()) - { - mop.attackEntityFrom(DamageSource.causeMobDamage(shootingEntity), 1); - } else - { - doDamage(projectileDamage, mop); - ((EntityLivingBase) mop).hurtResistantTime = 0; - } - } - } - - BlockPos newPos = new BlockPos(this.posX, this.posY, this.posZ); - if (worldObj.isAirBlock(newPos)) - { - worldObj.setBlockState(newPos, Blocks.fire.getDefaultState()); - } - - spawnHitParticles(EnumParticleTypes.CRIT_MAGIC, 8); - this.setDead(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/HolyProjectile.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/HolyProjectile.java deleted file mode 100644 index f662ab31..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/HolyProjectile.java +++ /dev/null @@ -1,93 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.projectile; - -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; - -public class HolyProjectile extends EnergyBlastProjectile -{ - public HolyProjectile(World par1World) - { - super(par1World); - } - - public HolyProjectile(World par1World, double par2, double par4, double par6) - { - super(par1World, par2, par4, par6); - } - - public HolyProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage) - { - super(par1World, par2EntityPlayer, damage); - } - - public HolyProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage, int maxTicksInAir, double posX, double posY, double posZ, float rotationYaw, float rotationPitch) - { - super(par1World, par2EntityPlayer, damage, maxTicksInAir, posX, posY, posZ, rotationYaw, rotationPitch); - } - - public HolyProjectile(World par1World, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase, float par4, float par5, int damage, int maxTicksInAir) - { - super(par1World, par2EntityLivingBase, par3EntityLivingBase, par4, par5, damage, maxTicksInAir); - } - - @Override - public DamageSource getDamageSource() - { - return DamageSource.causeMobDamage(shootingEntity); - } - - @Override - public void onImpact(MovingObjectPosition mop) - { - if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY && mop.entityHit != null) - { - if (mop.entityHit == shootingEntity) - { - return; - } - - this.onImpact(mop.entityHit); - } //else if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - } - - this.setDead(); - } - - @Override - public void onImpact(Entity mop) - { - if (mop == shootingEntity && ticksInAir > 3) - { - shootingEntity.attackEntityFrom(DamageSource.causeMobDamage(shootingEntity), 1); - this.setDead(); - } else - { - if (mop instanceof EntityLivingBase) - { - if (((EntityLivingBase) mop).isEntityUndead()) - { - doDamage(projectileDamage * 2, mop); - } else - { - doDamage(projectileDamage, mop); - } - } - } - - spawnHitParticles(EnumParticleTypes.CRIT_MAGIC, 8); - this.setDead(); - } - - @Override - public void doFiringParticles() - { - SpellHelper.sendParticleToAllAround(worldObj, posX, posY, posZ, 30, worldObj.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB_AMBIENT, posX + smallGauss(0.1D), posY + smallGauss(0.1D), posZ + smallGauss(0.1D), 0.5D, 0.5D, 0.5D); - SpellHelper.sendParticleToAllAround(worldObj, posX, posY, posZ, 30, worldObj.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB, posX, posY, posZ, 1.0F, 1.0F, 1.0F); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/IceProjectile.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/IceProjectile.java deleted file mode 100644 index 130f88f9..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/IceProjectile.java +++ /dev/null @@ -1,96 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.projectile; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class IceProjectile extends EnergyBlastProjectile -{ - public IceProjectile(World par1World) - { - super(par1World); - } - - public IceProjectile(World par1World, double par2, double par4, double par6) - { - super(par1World, par2, par4, par6); - } - - public IceProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage) - { - super(par1World, par2EntityPlayer, damage); - } - - public IceProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage, int maxTicksInAir, double posX, double posY, double posZ, float rotationYaw, float rotationPitch) - { - super(par1World, par2EntityPlayer, damage, maxTicksInAir, posX, posY, posZ, rotationYaw, rotationPitch); - } - - public IceProjectile(World par1World, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase, float par4, float par5, int damage, int maxTicksInAir) - { - super(par1World, par2EntityLivingBase, par3EntityLivingBase, par4, par5, damage, maxTicksInAir); - } - - @Override - public DamageSource getDamageSource() - { - return DamageSource.causeMobDamage(shootingEntity); - } - - @Override - public void onImpact(MovingObjectPosition mop) - { - if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY && mop.entityHit != null) - { - if (mop.entityHit == shootingEntity) - { - return; - } - - this.onImpact(mop.entityHit); - }// else if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - } - this.setDead(); - } - - @Override - public void onImpact(Entity mop) - { - if (mop == shootingEntity && ticksInAir > 3) - { - shootingEntity.attackEntityFrom(DamageSource.causeMobDamage(shootingEntity), 1); - this.setDead(); - } else - { - if (mop instanceof EntityLivingBase) - { - if (mop.isImmuneToFire()) - { - doDamage(projectileDamage * 2, mop); - ((EntityLivingBase) mop).addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 200, 2)); - } else - { - doDamage(projectileDamage, mop); - ((EntityLivingBase) mop).addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 100, 1)); - } - } - } - - spawnHitParticles(EnumParticleTypes.CRIT_MAGIC, 8); - this.setDead(); - } - - @Override - public void doFiringParticles() - { - SpellHelper.sendParticleToAllAround(worldObj, posX, posY, posZ, 30, worldObj.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB_AMBIENT, posX + smallGauss(0.1D), posY + smallGauss(0.1D), posZ + smallGauss(0.1D), 0.5D, 0.5D, 0.5D); - SpellHelper.sendParticleToAllAround(worldObj, posX, posY, posZ, 30, worldObj.provider.getDimensionId(), EnumParticleTypes.EXPLOSION_LARGE, posX, posY, posZ, gaussian(motionX), gaussian(motionY), gaussian(motionZ)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/LightningBoltProjectile.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/LightningBoltProjectile.java deleted file mode 100644 index f936106f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/LightningBoltProjectile.java +++ /dev/null @@ -1,111 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.projectile; - -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; - -public class LightningBoltProjectile extends EnergyBlastProjectile -{ - private boolean causeLightning; - - public LightningBoltProjectile(World par1World) - { - super(par1World); - } - - public LightningBoltProjectile(World par1World, double par2, double par4, double par6) - { - super(par1World, par2, par4, par6); - } - - public LightningBoltProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage, boolean flag) - { - super(par1World, par2EntityPlayer, damage); - causeLightning = flag; - } - - public LightningBoltProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage, int maxTicksInAir, double posX, double posY, double posZ, float rotationYaw, float rotationPitch, boolean flag) - { - super(par1World, par2EntityPlayer, damage, maxTicksInAir, posX, posY, posZ, rotationYaw, rotationPitch); - causeLightning = flag; - } - - @Override - public DamageSource getDamageSource() - { - return DamageSource.causeMobDamage(shootingEntity); - } - - @Override - public void onImpact(MovingObjectPosition mop) - { - if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY && mop.entityHit != null) - { - if (mop.entityHit == shootingEntity) - { - return; - } - - this.onImpact(mop.entityHit); - } else if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - if (causeLightning) - { - this.worldObj.addWeatherEffect(new EntityLightningBolt(this.worldObj, this.posX, this.posY, this.posZ)); - } - } - - this.setDead(); - } - - @Override - public void onImpact(Entity mop) - { - if (mop == shootingEntity && ticksInAir > 3) - { - this.setDead(); - } else - { - if (mop instanceof EntityLivingBase) - { - if (causeLightning) - { - this.worldObj.addWeatherEffect(new EntityLightningBolt(this.worldObj, ((EntityLivingBase) mop).posX, ((EntityLivingBase) mop).posY, ((EntityLivingBase) mop).posZ)); - } else - { - doDamage(projectileDamage, mop); - } - } - } - - spawnHitParticles(EnumParticleTypes.CRIT_MAGIC, 8); - this.setDead(); - } - - @Override - public void doFiringParticles() - { - SpellHelper.sendParticleToAllAround(worldObj, posX, posY, posZ, 30, worldObj.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB_AMBIENT, posX + smallGauss(0.1D), posY + smallGauss(0.1D), posZ + smallGauss(0.1D), 0.5D, 0.5D, 0.5D); - SpellHelper.sendParticleToAllAround(worldObj, posX, posY, posZ, 30, worldObj.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB, posX, posY, posZ, 1.0F, 1.0F, 1.0F); - } - - @Override - public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeEntityToNBT(par1NBTTagCompound); - par1NBTTagCompound.setBoolean("causeLightning", causeLightning); - } - - @Override - public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readEntityFromNBT(par1NBTTagCompound); - causeLightning = par1NBTTagCompound.getBoolean("causeLightning"); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/MudProjectile.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/MudProjectile.java deleted file mode 100644 index 6995f529..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/MudProjectile.java +++ /dev/null @@ -1,115 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.projectile; - -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; - -public class MudProjectile extends EnergyBlastProjectile -{ - private boolean doesBlindness; //True for when it applies blindness, false for slowness - - public MudProjectile(World par1World) - { - super(par1World); - } - - public MudProjectile(World par1World, double par2, double par4, double par6) - { - super(par1World, par2, par4, par6); - } - - public MudProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage, boolean flag) - { - super(par1World, par2EntityPlayer, damage); - doesBlindness = flag; - } - - public MudProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage, int maxTicksInAir, double posX, double posY, double posZ, float rotationYaw, float rotationPitch, boolean flag) - { - super(par1World, par2EntityPlayer, damage, maxTicksInAir, posX, posY, posZ, rotationYaw, rotationPitch); - doesBlindness = flag; - } - - public MudProjectile(World par1World, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase, float par4, float par5, int damage, int maxTicksInAir, boolean flag) - { - super(par1World, par2EntityLivingBase, par3EntityLivingBase, par4, par5, damage, maxTicksInAir); - doesBlindness = flag; - } - - @Override - public DamageSource getDamageSource() - { - return DamageSource.causeMobDamage(shootingEntity); - } - - @Override - public void onImpact(MovingObjectPosition mop) - { - if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY && mop.entityHit != null) - { - if (mop.entityHit == shootingEntity) - { - return; - } - - this.onImpact(mop.entityHit); - }// else if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - } - - this.setDead(); - } - - @Override - public void onImpact(Entity mop) - { - if (mop == shootingEntity && ticksInAir > 3) - { - this.setDead(); - } else - { - if (mop instanceof EntityLivingBase) - { - if (doesBlindness) - { - ((EntityLivingBase) mop).addPotionEffect(new PotionEffect(Potion.blindness.id, 100, 0)); - } else - { - ((EntityLivingBase) mop).addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 100, 2)); - } - doDamage(projectileDamage, mop); - } - } - - spawnHitParticles(EnumParticleTypes.CRIT_MAGIC, 8); - this.setDead(); - } - - @Override - public void doFiringParticles() - { - SpellHelper.sendParticleToAllAround(worldObj, posX, posY, posZ, 30, worldObj.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB_AMBIENT, posX + smallGauss(0.1D), posY + smallGauss(0.1D), posZ + smallGauss(0.1D), 0.5D, 0.5D, 0.5D); - SpellHelper.sendParticleToAllAround(worldObj, posX, posY, posZ, 30, worldObj.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB, posX, posY, posZ, 0.5F, 0.297F, 0.0664F); - } - - @Override - public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeEntityToNBT(par1NBTTagCompound); - par1NBTTagCompound.setBoolean("doesBlindness", doesBlindness); - } - - @Override - public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readEntityFromNBT(par1NBTTagCompound); - doesBlindness = par1NBTTagCompound.getBoolean("doesBlindness"); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/TeleportProjectile.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/TeleportProjectile.java deleted file mode 100644 index 8b2308b7..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/TeleportProjectile.java +++ /dev/null @@ -1,159 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.projectile; - -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import WayofTime.alchemicalWizardry.common.spell.simple.SpellTeleport; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.living.EnderTeleportEvent; - -public class TeleportProjectile extends EnergyBlastProjectile -{ - private boolean isEntityTeleport; - - public TeleportProjectile(World par1World) - { - super(par1World); - this.motionX *= 3; - this.motionY *= 3; - this.motionZ *= 3; - } - - public TeleportProjectile(World par1World, double par2, double par4, double par6) - { - super(par1World, par2, par4, par6); - this.motionX *= 3; - this.motionY *= 3; - this.motionZ *= 3; - } - - public TeleportProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage, boolean flag) - { - super(par1World, par2EntityPlayer, damage); - isEntityTeleport = flag; - this.motionX *= 3; - this.motionY *= 3; - this.motionZ *= 3; - } - - public TeleportProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage, int maxTicksInAir, double posX, double posY, double posZ, float rotationYaw, float rotationPitch, boolean flag) - { - super(par1World, par2EntityPlayer, damage, maxTicksInAir, posX, posY, posZ, rotationYaw, rotationPitch); - isEntityTeleport = flag; - this.motionX *= 3; - this.motionY *= 3; - this.motionZ *= 3; - } - - @Override - public DamageSource getDamageSource() - { - return DamageSource.causeMobDamage(shootingEntity); - } - - @Override - public void onImpact(MovingObjectPosition mop) - { - if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY && mop.entityHit != null) - { - if (mop.entityHit == shootingEntity) - { - return; - } - - this.onImpact(mop.entityHit); - } else if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - if (isEntityTeleport) - { - if (shootingEntity != null && shootingEntity instanceof EntityPlayerMP) - { - EntityPlayerMP entityplayermp = (EntityPlayerMP) shootingEntity; - - if (entityplayermp.worldObj == this.worldObj) - { - EnderTeleportEvent event = new EnderTeleportEvent(entityplayermp, this.posX, this.posY, this.posZ, 5.0F); - - if (!MinecraftForge.EVENT_BUS.post(event)) - { - if (shootingEntity.isRiding()) - { - shootingEntity.mountEntity(null); - } - shootingEntity.setPositionAndUpdate(event.targetX, event.targetY, event.targetZ); - } - } - } - } - } - - this.setDead(); - } - - @Override - public void onImpact(Entity mop) - { - if (mop == shootingEntity && ticksInAir > 3) - { - this.setDead(); - } else - { - if (mop instanceof EntityLivingBase) - { - if (isEntityTeleport) - { - if (shootingEntity != null && shootingEntity instanceof EntityPlayerMP) - { - EntityPlayerMP entityplayermp = (EntityPlayerMP) shootingEntity; - if (entityplayermp.worldObj == this.worldObj) - { - EnderTeleportEvent event = new EnderTeleportEvent(entityplayermp, this.posX, this.posY, this.posZ, 5.0F); - if (!MinecraftForge.EVENT_BUS.post(event)) - { - if (shootingEntity.isRiding()) - { - shootingEntity.mountEntity(null); - } - - shootingEntity.setPositionAndUpdate(event.targetX, event.targetY, event.targetZ); - } - } - } - } else - { - SpellTeleport.teleportRandomly((EntityLivingBase) mop, 64); - } - } - } - - spawnHitParticles(EnumParticleTypes.CRIT_MAGIC, 8); - this.setDead(); - } - - @Override - public void doFiringParticles() - { - SpellHelper.sendParticleToAllAround(worldObj, posX, posY, posZ, 30, worldObj.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB_AMBIENT, posX + smallGauss(0.1D), posY + smallGauss(0.1D), posZ + smallGauss(0.1D), 0.5D, 0.5D, 0.5D); - SpellHelper.sendParticleToAllAround(worldObj, posX, posY, posZ, 30, worldObj.provider.getDimensionId(), EnumParticleTypes.PORTAL, posX, posY, posZ, -motionX, -motionY, -motionZ); - } - - @Override - public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeEntityToNBT(par1NBTTagCompound); - par1NBTTagCompound.setBoolean("isEntityTeleport", isEntityTeleport); - } - - @Override - public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readEntityFromNBT(par1NBTTagCompound); - isEntityTeleport = par1NBTTagCompound.getBoolean("isEntityTeleport"); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/WaterProjectile.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/WaterProjectile.java deleted file mode 100644 index 556bddbe..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/WaterProjectile.java +++ /dev/null @@ -1,91 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.projectile; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; - -public class WaterProjectile extends EnergyBlastProjectile -{ - public WaterProjectile(World par1World) - { - super(par1World); - } - - public WaterProjectile(World par1World, double par2, double par4, double par6) - { - super(par1World, par2, par4, par6); - } - - public WaterProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage) - { - super(par1World, par2EntityPlayer, damage); - } - - public WaterProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage, int maxTicksInAir, double posX, double posY, double posZ, float rotationYaw, float rotationPitch) - { - super(par1World, par2EntityPlayer, damage, maxTicksInAir, posX, posY, posZ, rotationYaw, rotationPitch); - } - - @Override - public DamageSource getDamageSource() - { - return DamageSource.causeMobDamage(shootingEntity); - } - - @Override - public void onImpact(MovingObjectPosition mop) - { - if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY && mop.entityHit != null) - { - if (mop.entityHit == shootingEntity) - { - return; - } - - this.onImpact(mop.entityHit); - }// else if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - } - - this.setDead(); - } - - @Override - public void onImpact(Entity mop) - { - if (mop == shootingEntity && ticksInAir > 3) - { - this.setDead(); - } else - { - if (mop instanceof EntityLivingBase) - { - if (mop.isImmuneToFire()) - { - doDamage(projectileDamage * 2, mop); - ((EntityLivingBase) mop).addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionDrowning.id, 80, 1)); - } else - { - doDamage(projectileDamage, mop); - ((EntityLivingBase) mop).addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionDrowning.id, 80, 0)); - } - } - } - - spawnHitParticles(EnumParticleTypes.CRIT_MAGIC, 8); - this.setDead(); - } - - @Override - public void doFiringParticles() - { - SpellHelper.sendParticleToAllAround(worldObj, posX, posY, posZ, 30, worldObj.provider.getDimensionId(), EnumParticleTypes.PORTAL, posX, posY, posZ, -motionX, -motionY, -motionZ); - SpellHelper.sendParticleToAllAround(worldObj, posX, posY, posZ, 30, worldObj.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB_AMBIENT, posX + smallGauss(0.1D), posY + smallGauss(0.1D), posZ + smallGauss(0.1D), 0.5D, 0.5D, 0.5D); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/WindGustProjectile.java b/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/WindGustProjectile.java deleted file mode 100644 index 6af663b7..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/WindGustProjectile.java +++ /dev/null @@ -1,88 +0,0 @@ -package WayofTime.alchemicalWizardry.common.entity.projectile; - -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; - -public class WindGustProjectile extends EnergyBlastProjectile -{ - public WindGustProjectile(World par1World) - { - super(par1World); - } - - public WindGustProjectile(World par1World, double par2, double par4, double par6) - { - super(par1World, par2, par4, par6); - } - - public WindGustProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage) - { - super(par1World, par2EntityPlayer, damage); - } - - public WindGustProjectile(World par1World, EntityLivingBase par2EntityPlayer, int damage, int maxTicksInAir, double posX, double posY, double posZ, float rotationYaw, float rotationPitch) - { - super(par1World, par2EntityPlayer, damage, maxTicksInAir, posX, posY, posZ, rotationYaw, rotationPitch); - } - - public WindGustProjectile(World par1World, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase, float par4, float par5, int damage, int maxTicksInAir) - { - super(par1World, par2EntityLivingBase, par3EntityLivingBase, par4, par5, damage, maxTicksInAir); - } - - @Override - public DamageSource getDamageSource() - { - return DamageSource.causeMobDamage(shootingEntity); - } - - @Override - public void onImpact(MovingObjectPosition mop) - { - if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY && mop.entityHit != null) - { - if (mop.entityHit == shootingEntity) - { - return; - } - - this.onImpact(mop.entityHit); - }// else if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - } - - this.setDead(); - } - - @Override - public void onImpact(Entity mop) - { - if (mop == shootingEntity && ticksInAir > 3) - { - this.setDead(); - } else - { - if (mop instanceof EntityLivingBase) - { - ((EntityLivingBase) mop).motionX = this.motionX * 0.25*this.projectileDamage; - ((EntityLivingBase) mop).motionY = 1.5; - ((EntityLivingBase) mop).motionZ = this.motionZ * 0.25*this.projectileDamage; - } - } - - spawnHitParticles(EnumParticleTypes.CRIT_MAGIC, 8); - this.setDead(); - } - - @Override - public void doFiringParticles() - { - SpellHelper.sendParticleToAllAround(worldObj, posX, posY, posZ, 30, worldObj.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB_AMBIENT, posX + smallGauss(0.1D), posY + smallGauss(0.1D), posZ + smallGauss(0.1D), 0.5D, 0.5D, 0.5D); - SpellHelper.sendParticleToAllAround(worldObj, posX, posY, posZ, 30, worldObj.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB, posX, posY, posZ, 1.0F, 1.0F, 1.0F); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/guide/RecipeHolder.java b/src/main/java/WayofTime/alchemicalWizardry/common/guide/RecipeHolder.java deleted file mode 100644 index 10003173..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/guide/RecipeHolder.java +++ /dev/null @@ -1,227 +0,0 @@ -package WayofTime.alchemicalWizardry.common.guide; - -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.CraftingManager; -import net.minecraft.item.crafting.IRecipe; -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.ModItems; -import WayofTime.alchemicalWizardry.api.altarRecipeRegistry.AltarRecipe; -import WayofTime.alchemicalWizardry.api.altarRecipeRegistry.AltarRecipeRegistry; - -public class RecipeHolder -{ - private static List recipeList; - - public static IRecipe bloodAltarRecipe; - public static IRecipe knifeRecipe; - public static IRecipe divinationSigilRecipe; - public static IRecipe waterSigilRecipe; - public static IRecipe lavaCrystalRecipe; - public static IRecipe lavaSigilRecipe; - public static IRecipe blankRuneRecipe; - public static IRecipe speedRuneRecipe; - public static IRecipe voidSigilRecipe; - public static IRecipe airSigilRecipe; - public static IRecipe sightSigilRecipe; - public static IRecipe fastMinerRecipe; - public static IRecipe greenGroveRecipe; - public static IRecipe sacrificeRuneRecipe; - public static IRecipe selfSacrificeRuneRecipe; - public static IRecipe bloodPackRecipe; - public static IRecipe capacityRuneRecipe; - public static IRecipe dislocationRuneRecipe; - public static IRecipe magnetismSigilRecipe; - public static IRecipe phantomBridgeRecipe; - public static IRecipe holdingSigilRecipe; - public static IRecipe affinitySigilRecipe; - public static IRecipe weakRitualStoneRecipe; - public static IRecipe ritualStoneRecipe; - public static IRecipe masterStoneRecipe; - public static IRecipe bloodLampRecipe; - public static IRecipe emptySocketRecipe; - public static IRecipe soulForgeRecipe; - public static IRecipe inhibitorRecipe; - public static IRecipe ritualDiviner1Recipe; - public static IRecipe ritualDiviner2Recipe; - public static IRecipe ritualDiviner3Recipe; - public static IRecipe bloodStoneRecipe; - public static IRecipe whirlwindSigilRecipe; - public static IRecipe compressionSigilRecipe; - public static IRecipe enderSeveranceSigilRecipe; - public static IRecipe teleposerRecipe; - public static IRecipe suppressionSigilRecipe; - public static IRecipe superiorCapacityRecipe; - public static IRecipe orbRuneRecipe; - public static IRecipe keyOfBindingRecipe; - public static IRecipe energyBazookaRecipe; - public static IRecipe accelerationRuneRecipe; - public static IRecipe harvestSigilRecipe; - public static IRecipe crystalCluserRecipe; - public static IRecipe arcanePlinthRecipe; - public static IRecipe arcanePedestalRecipe; - public static IRecipe spellTableRecipe; - public static IRecipe alchemySetRecipe; - public static IRecipe crucibleRecipe; - - public static IRecipe woodAshRecipe; - public static IRecipe byrrusRecipe; - public static IRecipe livensRecipe; - public static IRecipe virRecipe; - public static IRecipe purpuraRecipe; - - public static IRecipe routerRecipe; - public static IRecipe segmenterRecipe; - public static IRecipe cleanserRecipe; - public static IRecipe calcinatorRecipe; - public static IRecipe belljarRecipe; - public static IRecipe relayRecipe; - - public static AltarRecipe weakBloodOrbRecipe; - public static AltarRecipe apprenticeBloodOrbRecipe; - public static AltarRecipe magicianBloodOrbRecipe; - public static AltarRecipe masterBloodOrbRecipe; - public static AltarRecipe archmageBloodOrbRecipe; - public static AltarRecipe transcendentBloodOrbRecipe; - - public static AltarRecipe blankSlateRecipe; - public static AltarRecipe reinforcedSlateRecipe; - public static AltarRecipe imbuedSlateRecipe; - public static AltarRecipe demonicSlateRecipe; - public static AltarRecipe etherealSlateRecipe; - public static AltarRecipe daggerRecipe; - public static AltarRecipe weakActivationRecipe; - public static AltarRecipe filledSocketRecipe; - public static AltarRecipe teleposerFocusRecipe1; - public static AltarRecipe blankSpellRecipe; - public static AltarRecipe waterScribeTool; - public static AltarRecipe fireScribeTool; - public static AltarRecipe earthScribeTool; - public static AltarRecipe airScribeTool; - public static AltarRecipe duskRecipe; - public static AltarRecipe dawnRecipe; - public static AltarRecipe flaskRecipe; - - public static void init() - { - recipeList = CraftingManager.getInstance().getRecipeList(); - bloodAltarRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.blockAltar)); - knifeRecipe = getRecipeForItemStack(new ItemStack(ModItems.sacrificialDagger)); - divinationSigilRecipe = getRecipeForItemStack(new ItemStack(ModItems.divinationSigil)); - waterSigilRecipe = getRecipeForItemStack(new ItemStack(ModItems.waterSigil)); - lavaCrystalRecipe = getRecipeForItemStack(new ItemStack(ModItems.lavaCrystal)); - lavaSigilRecipe = getRecipeForItemStack(new ItemStack(ModItems.lavaSigil)); - blankRuneRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.bloodRune)); - speedRuneRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.speedRune)); - - voidSigilRecipe = getRecipeForItemStack(new ItemStack(ModItems.voidSigil)); - airSigilRecipe = getRecipeForItemStack(new ItemStack(ModItems.airSigil)); - sightSigilRecipe = getRecipeForItemStack(new ItemStack(ModItems.itemSeerSigil)); - fastMinerRecipe = getRecipeForItemStack(new ItemStack(ModItems.sigilOfTheFastMiner)); - greenGroveRecipe = getRecipeForItemStack(new ItemStack(ModItems.growthSigil)); - sacrificeRuneRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.runeOfSacrifice)); - selfSacrificeRuneRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.runeOfSelfSacrifice)); - bloodPackRecipe = getRecipeForItemStack(new ItemStack(ModItems.itemBloodPack)); - capacityRuneRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.bloodRune, 1, 1)); - dislocationRuneRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.bloodRune, 1, 2)); - magnetismSigilRecipe = getRecipeForItemStack(new ItemStack(ModItems.sigilOfMagnetism)); - phantomBridgeRecipe = getRecipeForItemStack(new ItemStack(ModItems.sigilOfTheBridge)); - holdingSigilRecipe = getRecipeForItemStack(new ItemStack(ModItems.sigilOfHolding)); - affinitySigilRecipe = getRecipeForItemStack(new ItemStack(ModItems.sigilOfElementalAffinity)); - ritualStoneRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.ritualStone)); - masterStoneRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.blockMasterStone)); - bloodLampRecipe = getRecipeForItemStack(new ItemStack(ModItems.itemBloodLightSigil)); - emptySocketRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.emptySocket)); - soulForgeRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.armourForge)); - inhibitorRecipe = getRecipeForItemStack(new ItemStack(ModItems.armourInhibitor)); - ritualDiviner1Recipe = getRecipeForItemStack(new ItemStack(ModItems.itemRitualDiviner)); - ritualDiviner2Recipe = getRecipeForItemStack(new ItemStack(ModItems.itemRitualDiviner, 1, 1)); - ritualDiviner3Recipe = getRecipeForItemStack(new ItemStack(ModItems.itemRitualDiviner, 1, 2)); - bloodStoneRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.largeBloodStoneBrick)); - whirlwindSigilRecipe = getRecipeForItemStack(new ItemStack(ModItems.sigilOfWind)); - compressionSigilRecipe = getRecipeForItemStack(new ItemStack(ModItems.itemCompressionSigil)); - enderSeveranceSigilRecipe = getRecipeForItemStack(new ItemStack(ModItems.itemSigilOfEnderSeverance)); - teleposerRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.blockTeleposer)); - suppressionSigilRecipe = getRecipeForItemStack(new ItemStack(ModItems.itemSigilOfSupression)); - superiorCapacityRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.bloodRune, 1, 4)); - orbRuneRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.bloodRune, 1, 3)); - keyOfBindingRecipe = getRecipeForItemStack(new ItemStack(ModItems.itemKeyOfDiablo)); - energyBazookaRecipe = getRecipeForItemStack(new ItemStack(ModItems.energyBazooka)); - accelerationRuneRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.bloodRune, 1, 5)); - harvestSigilRecipe = getRecipeForItemStack(new ItemStack(ModItems.itemHarvestSigil)); - crystalCluserRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.blockCrystal)); - weakRitualStoneRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.imperfectRitualStone)); - - arcanePlinthRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.blockPlinth)); - arcanePedestalRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.blockPedestal)); - spellTableRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.blockSpellTable)); - - alchemySetRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.blockWritingTable)); - crucibleRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.blockCrucible)); - woodAshRecipe = getRecipeForItemStack(new ItemStack(ModItems.itemIncense, 1, 0)); - byrrusRecipe = getRecipeForItemStack(new ItemStack(ModItems.itemIncense, 1, 1)); - livensRecipe = getRecipeForItemStack(new ItemStack(ModItems.itemIncense, 1, 2)); - virRecipe = getRecipeForItemStack(new ItemStack(ModItems.itemIncense, 1, 3)); - purpuraRecipe = getRecipeForItemStack(new ItemStack(ModItems.itemIncense, 1, 4)); - - routerRecipe = getRecipeForItemStack(new ItemStack(ModItems.itemAttunedCrystal)); - segmenterRecipe = getRecipeForItemStack(new ItemStack(ModItems.itemTankSegmenter)); - cleanserRecipe = getRecipeForItemStack(new ItemStack(ModItems.itemDestinationClearer)); - calcinatorRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.blockAlchemicalCalcinator)); - belljarRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.blockCrystalBelljar)); - relayRecipe = getRecipeForItemStack(new ItemStack(ModBlocks.blockReagentConduit)); - - weakBloodOrbRecipe = getAltarRecipeForItemStack(new ItemStack(ModItems.weakBloodOrb)); - apprenticeBloodOrbRecipe = getAltarRecipeForItemStack(new ItemStack(ModItems.apprenticeBloodOrb)); - magicianBloodOrbRecipe = getAltarRecipeForItemStack(new ItemStack(ModItems.magicianBloodOrb)); - masterBloodOrbRecipe = getAltarRecipeForItemStack(new ItemStack(ModItems.masterBloodOrb)); - archmageBloodOrbRecipe = getAltarRecipeForItemStack(new ItemStack(ModItems.archmageBloodOrb)); - transcendentBloodOrbRecipe = getAltarRecipeForItemStack(new ItemStack(ModItems.transcendentBloodOrb)); - - blankSlateRecipe = getAltarRecipeForItemStack(new ItemStack(ModItems.blankSlate)); - reinforcedSlateRecipe = getAltarRecipeForItemStack(new ItemStack(ModItems.reinforcedSlate)); - imbuedSlateRecipe = getAltarRecipeForItemStack(new ItemStack(ModItems.imbuedSlate)); - demonicSlateRecipe = getAltarRecipeForItemStack(new ItemStack(ModItems.demonicSlate)); - etherealSlateRecipe = getAltarRecipeForItemStack(new ItemStack(ModItems.baseItems, 1, 27)); - daggerRecipe = getAltarRecipeForItemStack(new ItemStack(ModItems.daggerOfSacrifice)); - weakActivationRecipe = getAltarRecipeForItemStack(new ItemStack(ModItems.activationCrystal, 1, 0)); - filledSocketRecipe = getAltarRecipeForItemStack(new ItemStack(ModBlocks.bloodSocket)); - teleposerFocusRecipe1 = getAltarRecipeForItemStack(new ItemStack(ModItems.telepositionFocus)); - blankSpellRecipe = getAltarRecipeForItemStack(new ItemStack(ModItems.blankSpell)); - waterScribeTool = getAltarRecipeForItemStack(new ItemStack(ModItems.waterScribeTool)); - fireScribeTool = getAltarRecipeForItemStack(new ItemStack(ModItems.fireScribeTool)); - earthScribeTool = getAltarRecipeForItemStack(new ItemStack(ModItems.earthScribeTool)); - airScribeTool = getAltarRecipeForItemStack(new ItemStack(ModItems.airScribeTool)); - duskRecipe = getAltarRecipeForItemStack(new ItemStack(ModItems.duskScribeTool)); - dawnRecipe = getAltarRecipeForItemStack(new ItemStack(ModItems.dawnScribeTool)); - flaskRecipe = getAltarRecipeForItemStack(new ItemStack(ModItems.alchemyFlask)); - } - - private static IRecipe getRecipeForItemStack(ItemStack stack) - { - for(Object obj : recipeList) - { - IRecipe recipe = (IRecipe)obj; - if(recipe.getRecipeOutput() != null && stack.isItemEqual(recipe.getRecipeOutput())) - { - return recipe; - } - } - - return null; - } - - private static AltarRecipe getAltarRecipeForItemStack(ItemStack stack) - { - for(AltarRecipe recipe : AltarRecipeRegistry.altarRecipes) - { - if(recipe.getResult() != null && stack.isItemEqual(recipe.getResult())) - { - return recipe; - } - } - - return null; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/harvest/BloodMagicHarvestHandler.java b/src/main/java/WayofTime/alchemicalWizardry/common/harvest/BloodMagicHarvestHandler.java deleted file mode 100644 index 4703ebaa..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/harvest/BloodMagicHarvestHandler.java +++ /dev/null @@ -1,130 +0,0 @@ -package WayofTime.alchemicalWizardry.common.harvest; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.IPlantable; -import WayofTime.alchemicalWizardry.api.harvest.IHarvestHandler; - -public class BloodMagicHarvestHandler implements IHarvestHandler -{ - public boolean canHandleBlock(Block block) - { - return block == Blocks.wheat || block == Blocks.carrots || block == Blocks.potatoes || block == Blocks.nether_wart; - } - - public int getHarvestMeta(Block block) - { - if (block == Blocks.wheat) - { - return 7; - } - if (block == Blocks.carrots) - { - return 7; - } - if (block == Blocks.potatoes) - { - return 7; - } - if (block == Blocks.nether_wart) - { - return 3; - } - return 7; - } - - @Override - public boolean harvestAndPlant(World world, BlockPos pos, Block block, IBlockState state) - { - if (!this.canHandleBlock(block) || block.getMetaFromState(state) != this.getHarvestMeta(block)) - { - return false; - } - - IPlantable seed = this.getSeedItem(block); - - if (seed == null) - { - return false; - } - - int fortune = 0; - - List list = block.getDrops(world, pos, state, fortune); - boolean foundAndRemovedSeed = false; - - for (ItemStack stack : list) - { - if (stack == null) - { - continue; - } - - Item item = stack.getItem(); - if (item == seed) - { - int itemSize = stack.stackSize; - if (itemSize > 1) - { - stack.stackSize--; - foundAndRemovedSeed = true; - break; - } else if (itemSize == 1) - { - list.remove(stack); - foundAndRemovedSeed = true; - break; - } - } - } - - if (foundAndRemovedSeed) - { - IBlockState plantState = seed.getPlant(world, pos); - - world.destroyBlock(pos, false); - - world.setBlockState(pos, plantState, 3); - - for (ItemStack stack : list) - { - EntityItem itemEnt = new EntityItem(world, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, stack); - - world.spawnEntityInWorld(itemEnt); - } - } - - return false; - } - - public IPlantable getSeedItem(Block block) - { - if (block == Blocks.wheat) - { - return (IPlantable) Items.wheat_seeds; - } - if (block == Blocks.carrots) - { - return (IPlantable) Items.carrot; - } - if (block == Blocks.potatoes) - { - return (IPlantable) Items.potato; - } - if (block == Blocks.nether_wart) - { - return (IPlantable) Items.nether_wart; - } - - return null; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/harvest/CactusReedHarvestHandler.java b/src/main/java/WayofTime/alchemicalWizardry/common/harvest/CactusReedHarvestHandler.java deleted file mode 100644 index f8c2d7ee..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/harvest/CactusReedHarvestHandler.java +++ /dev/null @@ -1,34 +0,0 @@ -package WayofTime.alchemicalWizardry.common.harvest; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.harvest.IHarvestHandler; - -public class CactusReedHarvestHandler implements IHarvestHandler -{ - public boolean canHandleBlock(Block block) - { - return block == Blocks.reeds || block == Blocks.cactus; - } - - @Override - public boolean harvestAndPlant(World world, BlockPos pos, Block block, IBlockState state) - { - if (!this.canHandleBlock(block)) - { - return false; - } - - if (world.getBlockState(pos.offsetDown(1)).getBlock() != block || world.getBlockState(pos.offsetDown(2)).getBlock() != block) - { - return false; - } - - world.destroyBlock(pos, true); - - return true; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/harvest/GenericItemStackHarvestHandler.java b/src/main/java/WayofTime/alchemicalWizardry/common/harvest/GenericItemStackHarvestHandler.java deleted file mode 100644 index 77837d15..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/harvest/GenericItemStackHarvestHandler.java +++ /dev/null @@ -1,111 +0,0 @@ -package WayofTime.alchemicalWizardry.common.harvest; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.IPlantable; -import WayofTime.alchemicalWizardry.api.harvest.IHarvestHandler; - -public class GenericItemStackHarvestHandler implements IHarvestHandler -{ - public Block harvestBlock; - public int harvestMeta; - public ItemStack harvestItem; - public IPlantable harvestSeed; - - public GenericItemStackHarvestHandler(Block block, int meta, ItemStack seed) - { - harvestBlock = block; - harvestMeta = meta; - harvestItem = seed; - if (seed.getItem() instanceof IPlantable) harvestSeed = (IPlantable) seed.getItem(); - } - - public boolean canHandleBlock(Block block) - { - return block == harvestBlock; - } - - public int getHarvestMeta() - { - return harvestMeta; - } - - @Override - public boolean harvestAndPlant(World world, BlockPos pos, Block block, IBlockState state) - { - if (!this.canHandleBlock(block) || block.getMetaFromState(state) != this.getHarvestMeta()) - { - return false; - } - - IPlantable seed = this.getSeedItem(block); - - if (seed == null) - { - world.destroyBlock(pos, true); - - return true; - } else - { - int fortune = 0; - - List list = block.getDrops(world, pos, state, fortune); - boolean foundAndRemovedSeed = false; - - for (ItemStack stack : list) - { - if (stack == null) - { - continue; - } - if (harvestItem.isItemEqual(stack)) - { - int itemSize = stack.stackSize; - if (itemSize<1) - { - continue; - } - else if (itemSize==1) - { - list.remove(stack); - } - else - { - stack.stackSize--; - } - foundAndRemovedSeed = true; - break; - } - } - - if (foundAndRemovedSeed) - { - IBlockState plantState = seed.getPlant(world, pos); - - world.destroyBlock(pos, false); - - world.setBlockState(pos, plantState, 3); - - for (ItemStack stack : list) - { - EntityItem itemEnt = new EntityItem(world, pos.getX(), pos.getY(), pos.getZ(), stack); - - world.spawnEntityInWorld(itemEnt); - } - } - - return false; - } - } - - public IPlantable getSeedItem(Block block) - { - return harvestSeed; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/harvest/GenericPamSeedlessFruitHarvestHandler.java b/src/main/java/WayofTime/alchemicalWizardry/common/harvest/GenericPamSeedlessFruitHarvestHandler.java deleted file mode 100644 index 581c6ada..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/harvest/GenericPamSeedlessFruitHarvestHandler.java +++ /dev/null @@ -1,69 +0,0 @@ -//package WayofTime.alchemicalWizardry.common.harvest; -// -//import net.minecraft.block.Block; -//import net.minecraft.block.state.IBlockState; -//import net.minecraft.item.Item; -//import net.minecraft.util.BlockPos; -//import net.minecraft.world.World; -//import WayofTime.alchemicalWizardry.api.harvest.IHarvestHandler; -//import cpw.mods.fml.common.registry.GameRegistry; -// -//public class GenericPamSeedlessFruitHarvestHandler implements IHarvestHandler -//{ -// public Block harvestBlock; -// public int harvestMeta; -// public int resetMeta; -// -// public GenericPamSeedlessFruitHarvestHandler(String block, int harvestMeta, int resetMeta) -// { -// this.harvestBlock = getBlockForString(block); -// this.harvestMeta = harvestMeta; -// this.resetMeta = resetMeta; -// } -// -// public boolean isHarvesterValid() -// { -// return harvestBlock != null; -// } -// -// public static Block getBlockForString(String str) -// { -// String[] parts = str.split(":"); -// String modId = parts[0]; -// String name = parts[1]; -// return GameRegistry.findBlock(modId, name); -// } -// -// public static Item getItemForString(String str) -// { -// String[] parts = str.split(":"); -// String modId = parts[0]; -// String name = parts[1]; -// return GameRegistry.findItem(modId, name); -// } -// -// public boolean canHandleBlock(Block block) -// { -// return block == harvestBlock; -// } -// -// public int getHarvestMeta() -// { -// return harvestMeta; -// } -// -// @Override -// public boolean harvestAndPlant(World world, BlockPos pos, Block block, IBlockState state) -// { -// if (!this.canHandleBlock(block) || block.getMetaFromState(state) != this.getHarvestMeta()) -// { -// return false; -// } -// -// world.destroyBlock(pos, true); -// -// world.setBlockState(pos, harvestBlock.getStateFromMeta(resetMeta), 3); -// -// return true; -// } -//} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/harvest/GenericSeededHarvestHandler.java b/src/main/java/WayofTime/alchemicalWizardry/common/harvest/GenericSeededHarvestHandler.java deleted file mode 100644 index ff07bdf0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/harvest/GenericSeededHarvestHandler.java +++ /dev/null @@ -1,138 +0,0 @@ -//package WayofTime.alchemicalWizardry.common.harvest; -// -//import java.util.List; -// -//import net.minecraft.block.Block; -//import net.minecraft.block.state.IBlockState; -//import net.minecraft.entity.item.EntityItem; -//import net.minecraft.item.Item; -//import net.minecraft.item.ItemStack; -//import net.minecraft.util.BlockPos; -//import net.minecraft.world.World; -//import net.minecraftforge.common.IPlantable; -//import WayofTime.alchemicalWizardry.api.harvest.IHarvestHandler; -//import cpw.mods.fml.common.registry.GameRegistry; -// -//public class GenericSeededHarvestHandler implements IHarvestHandler -//{ -// public Block harvestBlock; -// public int harvestMeta; -// public IPlantable harvestSeed; -// -// public GenericSeededHarvestHandler(String block, int meta, String seed) -// { -// harvestBlock = getBlockForString(block); -// harvestMeta = meta; -// Item testSeed = getItemForString(seed); -// if (testSeed instanceof IPlantable) -// { -// harvestSeed = (IPlantable) testSeed; -// } else -// { -// harvestSeed = null; -// } -// } -// -// public boolean isHarvesterValid() -// { -// return harvestBlock != null && harvestSeed != null; -// } -// -// public static Block getBlockForString(String str) -// { -// String[] parts = str.split(":"); -// String modId = parts[0]; -// String name = parts[1]; -// return GameRegistry.findBlock(modId, name); -// } -// -// public static Item getItemForString(String str) -// { -// String[] parts = str.split(":"); -// String modId = parts[0]; -// String name = parts[1]; -// return GameRegistry.findItem(modId, name); -// } -// -// public boolean canHandleBlock(Block block) -// { -// return block == harvestBlock; -// } -// -// public int getHarvestMeta() -// { -// return harvestMeta; -// } -// -// @Override -// public boolean harvestAndPlant(World world, BlockPos pos, Block block, IBlockState state) -// { -// if (!this.canHandleBlock(block) || block.getMetaFromState(state) != this.getHarvestMeta()) -// { -// return false; -// } -// -// IPlantable seed = this.getSeedItem(block); -// -// if (seed == null) -// { -// world.destroyBlock(pos, true); -// -// return true; -// } else -// { -// int fortune = 0; -// -// List list = block.getDrops(world, pos, state, fortune); -// boolean foundAndRemovedSeed = false; -// -// for (ItemStack stack : list) -// { -// if (stack == null) -// { -// continue; -// } -// -// Item item = stack.getItem(); -// if (item == seed) -// { -// int itemSize = stack.stackSize; -// if (itemSize > 1) -// { -// stack.stackSize--; -// foundAndRemovedSeed = true; -// break; -// } else if (itemSize == 1) -// { -// list.remove(stack); -// foundAndRemovedSeed = true; -// break; -// } -// } -// } -// -// if (foundAndRemovedSeed) -// { -// IBlockState plantState = seed.getPlant(world, pos); -// -// world.destroyBlock(pos, false); -// -// world.setBlockState(pos, plantState, 3); -// -// for (ItemStack stack : list) -// { -// EntityItem itemEnt = new EntityItem(world, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, stack); -// -// world.spawnEntityInWorld(itemEnt); -// } -// } -// -// return false; -// } -// } -// -// public IPlantable getSeedItem(Block block) -// { -// return harvestSeed; -// } -//} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/harvest/GourdHarvestHandler.java b/src/main/java/WayofTime/alchemicalWizardry/common/harvest/GourdHarvestHandler.java deleted file mode 100644 index 911968d0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/harvest/GourdHarvestHandler.java +++ /dev/null @@ -1,27 +0,0 @@ -package WayofTime.alchemicalWizardry.common.harvest; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.harvest.IHarvestHandler; - -public class GourdHarvestHandler implements IHarvestHandler -{ - public boolean canHandleBlock(Block block) - { - return block == Blocks.melon_block || block == Blocks.pumpkin; - } - - @Override - public boolean harvestAndPlant(World world, BlockPos pos, Block block, IBlockState state) - { - if (!this.canHandleBlock(block)) - { - return false; - } - world.destroyBlock(pos, true); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/harvest/PamHarvestCompatRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/common/harvest/PamHarvestCompatRegistry.java deleted file mode 100644 index d9b9244f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/harvest/PamHarvestCompatRegistry.java +++ /dev/null @@ -1,125 +0,0 @@ -//package WayofTime.alchemicalWizardry.common.harvest; -// -//import WayofTime.alchemicalWizardry.api.harvest.HarvestRegistry; -// -//public class PamHarvestCompatRegistry -//{ -// public static void registerPamHandlers() -// { -// registerSeededHandler("blackberry", 7); -// registerSeededHandler("blueberry", 7); -// registerSeededHandler("candleberry", 7); -// registerSeededHandler("raspberry", 7); -// registerSeededHandler("strawberry", 7); -// registerSeededHandler("cactusfruit", 7); -// registerSeededHandler("asparagus", 7); -// registerSeededHandler("barley", 7); -// registerSeededHandler("oats", 7); -// registerSeededHandler("rye", 7); -// registerSeededHandler("corn", 7); -// registerSeededHandler("bambooshoot", 7); -// registerSeededHandler("cantaloupe", 7); -// registerSeededHandler("cucumber", 7); -// registerSeededHandler("windersquash", 7); -// registerSeededHandler("zucchini", 7); -// registerSeededHandler("beat", 7); -// registerSeededHandler("onion", 7); -// registerSeededHandler("parsnip", 7); -// registerSeededHandler("peanut", 7); -// registerSeededHandler("radish", 7); -// registerSeededHandler("rutabaga", 7); -// registerSeededHandler("sweetpotato", 7); -// registerSeededHandler("turnip", 7); -// registerSeededHandler("rhubarb", 7); -// registerSeededHandler("celery", 7); -// registerSeededHandler("garlic", 7); -// registerSeededHandler("ginger", 7); -// registerSeededHandler("spiceleaf", 7); -// registerSeededHandler("tealeaf", 7); -// registerSeededHandler("coffeebean", 7); -// registerSeededHandler("mustardseeds", 7); -// registerSeededHandler("brocolli", 7); -// registerSeededHandler("cauliflower", 7); -// registerSeededHandler("leek", 7); -// registerSeededHandler("lettuce", 7); -// registerSeededHandler("scallion", 7); -// registerSeededHandler("artichoke", 7); -// registerSeededHandler("brusselsprout", 7); -// registerSeededHandler("cabbage", 7); -// registerSeededHandler("whitemushroom", 7); -// registerSeededHandler("bean", 7); -// registerSeededHandler("soybean", 7); -// registerSeededHandler("bellpepper", 7); -// registerSeededHandler("chili", 7); -// registerSeededHandler("eggplant", 7); -// registerSeededHandler("pamokra", 7); -// registerSeededHandler("peas", 7); -// registerSeededHandler("tomato", 7); -// registerSeededHandler("cotton", 7); -// registerSeededHandler("pineapple", 7); -// registerSeededHandler("grape", 7); -// registerSeededHandler("kiwi", 7); -// registerSeededHandler("cranberry", 7); -// registerSeededHandler("rice", 7); -// registerSeededHandler("seaweed", 7); -// -// registerFruitHandler("apple", 7, 0); -// registerFruitHandler("Almond", 7, 0); -// registerFruitHandler("Apricot", 7, 0); -// registerFruitHandler("Avocado", 7, 0); -// registerFruitHandler("Banana", 7, 0); -// registerFruitHandler("Cashew", 7, 0); -// registerFruitHandler("Cherry", 7, 0); -// registerFruitHandler("Chestnut", 7, 0); -// registerFruitHandler("Cinnamon", 7, 0); -// registerFruitHandler("Coconut", 7, 0); -// registerFruitHandler("Date", 7, 0); -// registerFruitHandler("Dragonfruit", 7, 0); -// registerFruitHandler("Durian", 7, 0); -// registerFruitHandler("Fig", 7, 0); -// registerFruitHandler("Grapefruit", 7, 0); -// registerFruitHandler("Lemon", 7, 0); -// registerFruitHandler("Lime", 7, 0); -// registerFruitHandler("Maple", 7, 0); -// registerFruitHandler("Mango", 7, 0); -// registerFruitHandler("Nutmeg", 7, 0); -// registerFruitHandler("Olive", 7, 0); -// registerFruitHandler("Orange", 7, 0); -// registerFruitHandler("Papaya", 7, 0); -// registerFruitHandler("Paperbark", 7, 0); -// registerFruitHandler("Peach", 7, 0); -// registerFruitHandler("Pear", 7, 0); -// registerFruitHandler("Pecan", 7, 0); -// registerFruitHandler("Peppercorn", 7, 0); -// registerFruitHandler("Persimmon", 7, 0); -// registerFruitHandler("Pistachio", 7, 0); -// registerFruitHandler("Plum", 7, 0); -// registerFruitHandler("Pomegranate", 7, 0); -// registerFruitHandler("Starfruit", 7, 0); -// registerFruitHandler("Vanillabean", 7, 0); -// registerFruitHandler("Walnut", 7, 0); -// } -// -// public static void registerSeededHandler(String name, int meta) -// { -// String block = "harvestcraft:pam" + name + "Crop"; -// String seed = "harvestcraft:" + name + "Item"; -// -// GenericSeededHarvestHandler handler = new GenericSeededHarvestHandler(block, meta, seed); -// if (handler.isHarvesterValid()) -// { -// HarvestRegistry.registerHarvestHandler(handler); -// } -// } -// -// public static void registerFruitHandler(String name, int harvestMeta, int resetMeta) -// { -// String block = "harvestcraft:pam" + name; -// -// GenericPamSeedlessFruitHarvestHandler handler = new GenericPamSeedlessFruitHarvestHandler(block, harvestMeta, resetMeta); -// if (handler.isHarvesterValid()) -// { -// HarvestRegistry.registerHarvestHandler(handler); -// } -// } -//} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ActivationCrystal.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ActivationCrystal.java deleted file mode 100644 index f38bce26..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ActivationCrystal.java +++ /dev/null @@ -1,114 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.MathHelper; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import org.lwjgl.input.Keyboard; - -import WayofTime.alchemicalWizardry.api.alchemy.AlchemyRecipeRegistry; - -public class ActivationCrystal extends BindableItems -{ - private final String[] ACTIVATION_CRYSTAL_NAMES = new String[]{"weak", "awakened", "creative"}; - - public ActivationCrystal() - { - super(); - this.maxStackSize = 1; - setEnergyUsed(100); - this.hasSubtypes = true; - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - switch (par1ItemStack.getItemDamage()) - { - case 0: - { - par3List.add(StatCollector.translateToLocal("tooltip.activationcrystal.lowlevelrituals")); - break; - } - - case 1: - { - par3List.add(StatCollector.translateToLocal("tooltip.activationcrystal.powerfulrituals")); - - if (Keyboard.isKeyDown(Keyboard.KEY_RSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) - { - ItemStack[] recipe = AlchemyRecipeRegistry.getRecipeForItemStack(par1ItemStack); - - if (recipe != null) - { - par3List.add(EnumChatFormatting.BLUE + StatCollector.translateToLocal("tooltip.alchemy.recipe")); - - for (ItemStack item : recipe) - { - if (item != null) - { - par3List.add("" + item.getDisplayName()); - } - } - } - } else - { - par3List.add("-" + StatCollector.translateToLocal("tooltip.alchemy.press") + " " + EnumChatFormatting.BLUE + StatCollector.translateToLocal("tooltip.alchemy.shift") + EnumChatFormatting.GRAY + " " + StatCollector.translateToLocal("tooltip.alchemy.forrecipe") + "-"); - } - - break; - } - - case 2: - { - par3List.add(StatCollector.translateToLocal("tooltip.activationcrystal.creativeonly")); - - break; - } - } - - if (!(par1ItemStack.getTagCompound() == null)) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer); - return par1ItemStack; - } - - public int getCrystalLevel(ItemStack itemStack) - { - return itemStack.getItemDamage() > 1 ? Integer.MAX_VALUE : itemStack.getItemDamage() + 1; - } - - @Override - public String getUnlocalizedName(ItemStack itemStack) - { - //This is what will do all the localisation things on the alchemy components so you dont have to set it :D - int meta = MathHelper.clamp_int(itemStack.getItemDamage(), 0, ACTIVATION_CRYSTAL_NAMES.length - 1); - return (getUnlocalizedName() + "_" + ACTIVATION_CRYSTAL_NAMES[meta]); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item id, CreativeTabs creativeTab, List list) - { - for (int meta = 0; meta < ACTIVATION_CRYSTAL_NAMES.length; ++meta) - { - list.add(new ItemStack(id, 1, meta)); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/AirScribeTool.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/AirScribeTool.java deleted file mode 100644 index 6934b94d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/AirScribeTool.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -public class AirScribeTool extends ScribeTool -{ - public AirScribeTool() - { - super(4); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ApprenticeBloodOrb.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ApprenticeBloodOrb.java deleted file mode 100644 index bef0d188..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ApprenticeBloodOrb.java +++ /dev/null @@ -1,10 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -public class ApprenticeBloodOrb extends Orb -{ - public ApprenticeBloodOrb(int damage) - { - super(damage); - orbLevel = 2; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ArchmageBloodOrb.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ArchmageBloodOrb.java deleted file mode 100644 index 01a53cd3..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ArchmageBloodOrb.java +++ /dev/null @@ -1,10 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -public class ArchmageBloodOrb extends Orb -{ - public ArchmageBloodOrb(int damage) - { - super(damage); - orbLevel = 5; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ArmourInhibitor.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ArmourInhibitor.java deleted file mode 100644 index 5c9ffbd4..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ArmourInhibitor.java +++ /dev/null @@ -1,98 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; - -public class ArmourInhibitor extends BindableItems -{ - public ArmourInhibitor() - { - super(); - this.maxStackSize = 1; - setEnergyUsed(0); - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean par4) - { - list.add(StatCollector.translateToLocal("tooltip.armorinhibitor.desc1")); - list.add(StatCollector.translateToLocal("tooltip.armorinhibitor.desc2")); - - if (!(stack.getTagCompound() == null)) - { - if (stack.getTagCompound().getBoolean("isActive")) - { - list.add(StatCollector.translateToLocal("tooltip.sigil.state.activated")); - } else - { - list.add(StatCollector.translateToLocal("tooltip.sigil.state.deactivated")); - } - - list.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + stack.getTagCompound().getString("ownerName")); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) - { - int tickDelay = 200; - - if (!BindableItems.checkAndSetItemOwner(stack, player) || player.isSneaking()) - { - return stack; - } - - if (stack.getTagCompound() == null) - { - stack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = stack.getTagCompound(); - tag.setBoolean("isActive", !(tag.getBoolean("isActive"))); - - if (tag.getBoolean("isActive")) - { - stack.setItemDamage(1); - tag.setInteger("worldTimeDelay", (int) (world.getWorldTime() - 1) % tickDelay); - } else - { - stack.setItemDamage(stack.getMaxDamage()); - } - - return stack; - } - - @Override - public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5) - { - if (!(entity instanceof EntityPlayer)) - { - return; - } - - EntityPlayer player = (EntityPlayer) entity; - - if (stack.getTagCompound() == null) - { - stack.setTagCompound(new NBTTagCompound()); - } - - if (stack.getTagCompound().getBoolean("isActive")) - { -// if (world.getWorldTime() % tickDelay == stack.getTagCompound().getInteger("worldTimeDelay")) - { - } - - //TODO Do stuff - player.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionInhibit.id, 2, 0, true, false)); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/BaseItems.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/BaseItems.java deleted file mode 100644 index 943734d1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/BaseItems.java +++ /dev/null @@ -1,23 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.StatCollector; - -public class BaseItems extends Item -{ - public BaseItems() - { - super(); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.infusedstone.desc1")); - par3List.add(StatCollector.translateToLocal("tooltip.infusedstone.desc2")); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/BindableItems.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/BindableItems.java deleted file mode 100644 index c0d1bcb8..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/BindableItems.java +++ /dev/null @@ -1,293 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; -import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.world.World; - -public class BindableItems extends Item implements IBindable -{ - private int energyUsed; - - public BindableItems() - { - super(); - setMaxStackSize(1); - } - - protected void setEnergyUsed(int par1int) - { - this.energyUsed = par1int; - } - - protected int getEnergyUsed() - { - return this.energyUsed; - } - - protected void damagePlayer(World world, EntityPlayer player, int damage) - { - if (world != null) - { - double posX = player.posX; - double posY = player.posY; - double posZ = player.posZ; - world.playSoundEffect((double) ((float) posX + 0.5F), (double) ((float) posY + 0.5F), (double) ((float) posZ + 0.5F), "random.fizz", 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); - float f = 1.0F; - float f1 = f * 0.6F + 0.4F; - float f2 = f * f * 0.7F - 0.5F; - float f3 = f * f * 0.6F - 0.7F; - for (int l = 0; l < 8; ++l) - { - world.spawnParticle(EnumParticleTypes.REDSTONE, posX + Math.random() - Math.random(), posY + Math.random() - Math.random(), posZ + Math.random() - Math.random(), f1, f2, f3); - } - } - for (int i = 0; i < damage; i++) - { - player.setHealth((player.getHealth() - 1)); - - if (player.getHealth() <= 0.0005) - { - player.inventory.dropAllItems(); - break; - } - } - } - - public static boolean syphonBatteries(ItemStack ist, EntityPlayer player, int damageToBeDone) - { - if (!player.worldObj.isRemote) - { - return SoulNetworkHandler.syphonAndDamageFromNetwork(ist, player, damageToBeDone); - } else - { - World world = player.worldObj; - if (world != null) - { - double posX = player.posX; - double posY = player.posY; - double posZ = player.posZ; - - SpellHelper.sendIndexedParticleToAllAround(world, posX, posY, posZ, 20, world.provider.getDimensionId(), 4, posX, posY, posZ); - world.playSoundEffect((double) ((float) player.posX + 0.5F), (double) ((float) player.posY + 0.5F), (double) ((float) player.posZ + 0.5F), "random.fizz", 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); - } - } - return true; - } - - @Deprecated - public static boolean syphonWhileInContainer(ItemStack ist, int damageToBeDone) - { - if (ist.getTagCompound() != null && !(ist.getTagCompound().getString("ownerName").equals(""))) - { - String ownerName = ist.getTagCompound().getString("ownerName"); - - if (MinecraftServer.getServer() == null) - { - return false; - } - - World world = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) world.loadItemData(LifeEssenceNetwork.class, ownerName); - - if (data == null) - { - data = new LifeEssenceNetwork(ownerName); - world.setItemData(ownerName, data); - } - - if (data.currentEssence >= damageToBeDone) - { - data.currentEssence -= damageToBeDone; - data.markDirty(); - return true; - } - } - - return false; - } - - @Deprecated - public static boolean canSyphonInContainer(ItemStack ist, int damageToBeDone) - { - if (ist.getTagCompound() != null && !(ist.getTagCompound().getString("ownerName").equals(""))) - { - String ownerName = ist.getTagCompound().getString("ownerName"); - - if (MinecraftServer.getServer() == null) - { - return false; - } - - World world = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) world.loadItemData(LifeEssenceNetwork.class, ownerName); - - if (data == null) - { - data = new LifeEssenceNetwork(ownerName); - world.setItemData(ownerName, data); - } - - return data.currentEssence >= damageToBeDone; - } - - return false; - } - - public static void hurtPlayer(EntityPlayer user, int energySyphoned) - { - if (energySyphoned < 100 && energySyphoned > 0) - { - if (!user.capabilities.isCreativeMode) - { - user.setHealth((user.getHealth() - 1)); - - if (user.getHealth() <= 0.0005f) - { - user.onDeath(DamageSource.generic); - - } - } - } else if (energySyphoned >= 100) - { - if (!user.capabilities.isCreativeMode) - { - for (int i = 0; i < ((energySyphoned + 99) / 100); i++) - { - user.setHealth((user.getHealth() - 1)); - - if (user.getHealth() <= 0.0005f) - { - user.onDeath(DamageSource.generic); - break; - } - } - } - } - } - - @Deprecated - public static boolean syphonAndDamageWhileInContainer(ItemStack ist, EntityPlayer player, int damageToBeDone) - { - if (!syphonWhileInContainer(ist, damageToBeDone)) - { - hurtPlayer(player, damageToBeDone); - } - - return true; - } - - //Global static methods - public static boolean checkAndSetItemOwner(ItemStack item, EntityPlayer player) - { - return !SpellHelper.isFakePlayer(player) && SoulNetworkHandler.checkAndSetItemPlayer(item, player); - } - - public static void setItemOwner(ItemStack item, String ownerName) - { - if (item.getTagCompound() == null) - { - item.setTagCompound(new NBTTagCompound()); - } - - item.getTagCompound().setString("ownerName", ownerName); - } - - public static void checkAndSetItemOwner(ItemStack item, String ownerName) - { - if (item.getTagCompound() == null) - { - item.setTagCompound(new NBTTagCompound()); - } - - if (item.getTagCompound().getString("ownerName").equals("")) - { - item.getTagCompound().setString("ownerName", ownerName); - } - } - - public static String getOwnerName(ItemStack item) - { - if (item.getTagCompound() == null) - { - item.setTagCompound(new NBTTagCompound()); - } - - return item.getTagCompound().getString("ownerName"); - } - - @Deprecated - public static int getCurrentEssence(String ownerName) - { - if (MinecraftServer.getServer() == null) - { - return 0; - } - - World world = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) world.loadItemData(LifeEssenceNetwork.class, ownerName); - - if (data == null) - { - data = new LifeEssenceNetwork(ownerName); - world.setItemData(ownerName, data); - } - - return data.currentEssence; - } - - @Deprecated - public static void setCurrentEssence(String ownerName, int amount) - { - if (MinecraftServer.getServer() == null) - { - return; - } - - World world = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) world.loadItemData(LifeEssenceNetwork.class, ownerName); - - if (data == null) - { - data = new LifeEssenceNetwork(ownerName); - world.setItemData(ownerName, data); - } - - data.currentEssence = amount; - data.markDirty(); - } - - @Deprecated - public static void addEssenceToMaximum(String ownerName, int amount, int maximum) - { - if (MinecraftServer.getServer() == null) - { - return; - } - - World world = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) world.loadItemData(LifeEssenceNetwork.class, ownerName); - - if (data == null) - { - data = new LifeEssenceNetwork(ownerName); - world.setItemData(ownerName, data); - } - - if (data.currentEssence >= maximum) - { - return; - } - - data.currentEssence = Math.min(maximum, data.currentEssence + amount); - data.markDirty(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/BlankSpell.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/BlankSpell.java deleted file mode 100644 index c0cbf1e6..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/BlankSpell.java +++ /dev/null @@ -1,98 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import WayofTime.alchemicalWizardry.common.tileEntity.TESpellTable; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; - -public class BlankSpell extends BindableItems -{ - public BlankSpell() - { - super(); - this.setMaxStackSize(1); - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean par4) - { - list.add(StatCollector.translateToLocal("tooltip.blankspell.desc")); - - if (!(stack.getTagCompound() == null)) - { - NBTTagCompound itemTag = stack.getTagCompound(); - - if (!stack.getTagCompound().getString("ownerName").equals("")) - { - list.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + stack.getTagCompound().getString("ownerName")); - } - - list.add(StatCollector.translateToLocal("tooltip.alchemy.coords") + " " + itemTag.getInteger("xCoord") + ", " + itemTag.getInteger("yCoord") + ", " + itemTag.getInteger("zCoord")); - list.add(StatCollector.translateToLocal("tooltip.alchemy.dimension") + " " + getDimensionID(stack)); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) - { - if (!BindableItems.checkAndSetItemOwner(stack, player) || player.isSneaking()) - { - return stack; - } - - if (!world.isRemote) - { - World newWorld = DimensionManager.getWorld(getDimensionID(stack)); - - if (newWorld != null) - { - NBTTagCompound itemTag = stack.getTagCompound(); - TileEntity tileEntity = newWorld.getTileEntity(new BlockPos(itemTag.getInteger("xCoord"), itemTag.getInteger("yCoord"), itemTag.getInteger("zCoord"))); - - if (tileEntity instanceof TESpellTable) - { - TESpellTable homHeart = (TESpellTable) tileEntity; - - if (homHeart.canCastSpell()) - { - if(BindableItems.syphonBatteries(stack, player, homHeart.getCostForSpell())) - { - BindableItems.syphonBatteries(stack, player, homHeart.castSpell(stack, world, player)); - } - } else - { - return stack; - } - } else - { - return stack; - } - } else - { - return stack; - } - } else - { - return stack; - } - world.playSoundAtEntity(player, "random.fizz", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); - return stack; - } - - public int getDimensionID(ItemStack itemStack) - { - if (itemStack.getTagCompound() == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - return itemStack.getTagCompound().getInteger("dimensionId"); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/BloodShard.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/BloodShard.java deleted file mode 100644 index 1c1adf9e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/BloodShard.java +++ /dev/null @@ -1,44 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.ModItems; -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; - -public class BloodShard extends Item implements ArmourUpgrade -{ - public BloodShard() - { - super(); - } - - public int getBloodShardLevel() - { - if (this.equals(ModItems.weakBloodShard)) - { - return 1; - } else if (this.equals(ModItems.demonBloodShard)) - { - return 2; - } - - return 0; - } - - @Override - public void onArmourUpdate(World world, EntityPlayer player, ItemStack thisItemStack) {} - - @Override - public boolean isUpgrade() - { - return false; - } - - @Override - public int getEnergyForTenSeconds() - { - return 0; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundAxe.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundAxe.java deleted file mode 100644 index cbeefaef..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundAxe.java +++ /dev/null @@ -1,274 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockLeavesBase; -import net.minecraft.block.state.IBlockState; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemAxe; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; -import WayofTime.alchemicalWizardry.common.ItemType; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -import com.google.common.collect.HashMultiset; - -public class BoundAxe extends ItemAxe implements IBindable -{ - public float efficiencyOnProperMaterial = 12.0F; - public float damageVsEntity; - private int energyUsed; - - public BoundAxe() - { - super(AlchemicalWizardry.bloodBoundToolMaterial); - setMaxStackSize(1); - this.efficiencyOnProperMaterial = 12.0F; - this.damageVsEntity = 5; - setEnergyUsed(5); - } - - public void setEnergyUsed(int i) - { - energyUsed = i; - } - - public int getEnergyUsed() - { - return this.energyUsed; - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.boundaxe.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - if (par1ItemStack.getTagCompound().getBoolean("isActive")) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.activated")); - } else - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.deactivated")); - } - - if (!par1ItemStack.getTagCompound().getString("ownerName").equals("")) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World world, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - this.setActivated(par1ItemStack, !getActivated(par1ItemStack)); - par1ItemStack.getTagCompound().setInteger("worldTimeDelay", (int) (world.getWorldTime() - 1) % 200); - return par1ItemStack; - } - - if (world.isRemote) - { - return par1ItemStack; - } - - if (!getActivated(par1ItemStack) || SpellHelper.isFakePlayer(world, par3EntityPlayer)) - { - return par1ItemStack; - } - - if (par3EntityPlayer.isPotionActive(AlchemicalWizardry.customPotionInhibit)) - { - return par1ItemStack; - } - - if(!BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, 10000)) - { - return par1ItemStack; - } - - BlockPos pos = par3EntityPlayer.getPosition(); - boolean silkTouch = EnchantmentHelper.getSilkTouchModifier(par3EntityPlayer); - int fortuneLvl = EnchantmentHelper.getFortuneModifier(par3EntityPlayer); - - HashMultiset dropMultiset = HashMultiset.create(); - - for (int i = -5; i <= 5; i++) - { - for (int j = 0; j <= 10; j++) - { - for (int k = -5; k <= 5; k++) - { - BlockPos newPos = pos.add(i, j, k); - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - - if (block != null) - { - float str = getStrVsBlock(par1ItemStack, block); - - if (str > 1.1f || block instanceof BlockLeavesBase && world.canMineBlockBody(par3EntityPlayer, newPos)) - { - if (silkTouch && block.canSilkHarvest(world, newPos, state, par3EntityPlayer)) - { - dropMultiset.add(new ItemType(block, block.getMetaFromState(state))); - } else - { - List itemDropList = block.getDrops(world, newPos, state, fortuneLvl); - - if (itemDropList != null) - { - for (ItemStack stack : itemDropList) - dropMultiset.add(ItemType.fromStack(stack), stack.stackSize); - } - } - - world.setBlockToAir(newPos); - } - } - } - } - } - - BoundPickaxe.dropMultisetStacks(dropMultiset, world, pos.getX(), pos.getY() + par3EntityPlayer.getEyeHeight(), pos.getZ()); - - return par1ItemStack; - } - - @Override - public void onUpdate(ItemStack par1ItemStack, World world, Entity par3Entity, int par4, boolean par5) - { - if (!(par3Entity instanceof EntityPlayer)) - { - return; - } - - EntityPlayer par3EntityPlayer = (EntityPlayer) par3Entity; - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - if (world.getWorldTime() % 200 == par1ItemStack.getTagCompound().getInteger("worldTimeDelay") && par1ItemStack.getTagCompound().getBoolean("isActive")) - { - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if(!BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, 20)) - { - this.setActivated(par1ItemStack, false); - } - } - } - - par1ItemStack.setItemDamage(0); - } - - public void setActivated(ItemStack stack, boolean newActivated) - { - stack.setItemDamage(newActivated ? 1 : 0); - } - - public boolean getActivated(ItemStack stack) - { - return stack.getItemDamage() == 1; - } - - /** - * Returns the strength of the stack against a given block. 1.0F base, (Quality+1)*2 if correct blocktype, 1.5F if - * sword - */ - @Override - public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block) - { - if (!getActivated(par1ItemStack)) - { - return 0.0F; - } - - return super.getStrVsBlock(par1ItemStack, par2Block); - } - - @Override - /** - * Current implementations of this method in child classes do not use the entry argument beside ev. They just raise - * the damage on the stack. - */ - public boolean hitEntity(ItemStack par1ItemStack, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase) - { - return getActivated(par1ItemStack); - } - - public boolean onBlockDestroyed(ItemStack par1ItemStack, World world, Block par3, int par4, int par5, int par6, EntityLivingBase par7EntityLivingBase) - { - return true; - } - - @Override - @SideOnly(Side.CLIENT) - /** - * Returns True is the item is renderer in full 3D when hold. - */ - public boolean isFull3D() - { - return true; - } - - /** - * Return the enchantability factor of the item, most of the time is based on material. - */ - @Override - public int getItemEnchantability() - { - return 30; - } - - /** - * FORGE: Overridden to allow custom tool effectiveness - */ - @Override - public float getDigSpeed(ItemStack stack, IBlockState state) - { - if (!getActivated(stack)) - { - return 0.0F; - } - - for (String type : getToolClasses(stack)) - { - if (state.getBlock().isToolEffective(type, state)) - return efficiencyOnProperMaterial; - } - return super.getDigSpeed(stack, state); - } - - @Override - public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) - { - return !getActivated(stack); - } - - @Override - public int getHarvestLevel(ItemStack stack, String toolClass) - { - if (getActivated(stack) && "axe".equals(toolClass)) - { - return 5; - } - - return 0; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundBlade.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundBlade.java deleted file mode 100644 index 90ab85e9..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundBlade.java +++ /dev/null @@ -1,187 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemSword; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.omega.OmegaParadigm; -import WayofTime.alchemicalWizardry.common.omega.OmegaRegistry; - -public class BoundBlade extends ItemSword -{ - private int energyUsed; - - public BoundBlade() - { - super(AlchemicalWizardry.bloodBoundToolMaterial); - setMaxStackSize(1); - setEnergyUsed(50); - setFull3D(); - setMaxDamage(100); - } - - public void setEnergyUsed(int i) - { - energyUsed = i; - } - - public int getEnergyUsed() - { - return this.energyUsed; - } - - private OmegaParadigm getOmegaParadigmOfWeilder(EntityPlayer player) - { - return OmegaRegistry.getOmegaParadigmOfWeilder(player); - } - - @Override - public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) - { - boolean isActive = getActivated(stack); - if(isActive && !player.worldObj.isRemote) - { - OmegaParadigm parad = this.getOmegaParadigmOfWeilder(player); - - if(parad != null && parad.isPlayerWearingFullSet(player)) - { - if(!parad.onBoundSwordLeftClickEntity(stack, player, entity)) - { - return true; - } - } - } - return !isActive; - } - - @Override - public boolean hitEntity(ItemStack par1ItemStack, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase) - { - if (par3EntityLivingBase instanceof EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, (EntityPlayer) par3EntityLivingBase) || !BindableItems.syphonBatteries(par1ItemStack, (EntityPlayer) par3EntityLivingBase, this.getEnergyUsed())) - { - return false; - } - } - - par2EntityLivingBase.addPotionEffect(new PotionEffect(Potion.weakness.id, 60, 2)); - return true; - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - this.setActivated(par1ItemStack, !getActivated(par1ItemStack)); - par1ItemStack.getTagCompound().setInteger("worldTimeDelay", (int) (par2World.getWorldTime() - 1) % 100); - return par1ItemStack; - } - - if (!getActivated(par1ItemStack)) - { - return par1ItemStack; - } - - return par1ItemStack; - } - - @Override - public int getItemEnchantability() - { - return 30; - } - - @Override - public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) - { - if (!(par3Entity instanceof EntityPlayer)) - { - return; - } - - EntityPlayer par3EntityPlayer = (EntityPlayer) par3Entity; - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - if (par2World.getWorldTime() % 100 == par1ItemStack.getTagCompound().getInteger("worldTimeDelay") && par1ItemStack.getTagCompound().getBoolean("isActive")) - { - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if(!BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, 50)) - { - this.setActivated(par1ItemStack, false); - } - } - } - - par1ItemStack.setItemDamage(0); - } - - public void setActivated(ItemStack stack, boolean newActivated) - { - stack.setItemDamage(newActivated ? 1 : 0); - } - - public boolean getActivated(ItemStack stack) - { - return stack.getItemDamage() == 1; - } - - public float func_82803_g() - { - return 4.0F; - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.caution.desc1")); - par3List.add(StatCollector.translateToLocal("tooltip.caution.desc2")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - if (par1ItemStack.getTagCompound().getBoolean("isActive")) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.activated")); - } else - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.deactivated")); - } - - if (!par1ItemStack.getTagCompound().getString("ownerName").equals("")) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - } - - @Override - public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block) - { - if (par2Block == Blocks.web) - { - return 15.0F; - } else - { - Material material = par2Block.getMaterial(); - return material != Material.plants && material != Material.vine && material != Material.coral && material != Material.leaves && material != Material.gourd ? 1.0F : 1.5F; - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundPickaxe.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundPickaxe.java deleted file mode 100644 index 70d8bc36..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundPickaxe.java +++ /dev/null @@ -1,292 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemPickaxe; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; -import WayofTime.alchemicalWizardry.common.ItemType; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -import com.google.common.collect.HashMultiset; -import com.google.common.collect.Multiset; - -public class BoundPickaxe extends ItemPickaxe implements IBindable -{ - public float efficiencyOnProperMaterial = 12.0F; - public float damageVsEntity; - - private int energyUsed; - - public BoundPickaxe() - { - super(AlchemicalWizardry.bloodBoundToolMaterial); - setMaxStackSize(1); - this.efficiencyOnProperMaterial = 12.0F; - this.damageVsEntity = 5; - this.setEnergyUsed(5); - } - - public void setEnergyUsed(int i) - { - energyUsed = i; - } - - public int getEnergyUsed() - { - return this.energyUsed; - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.boundpickaxe.desc1")); - par3List.add(StatCollector.translateToLocal("tooltip.boundpickaxe.desc2")); - - if (!(stack.getTagCompound() == null)) - { - if (stack.getTagCompound().getBoolean("isActive")) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.activated")); - } else - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.deactivated")); - } - - if (!stack.getTagCompound().getString("ownerName").equals("")) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + stack.getTagCompound().getString("ownerName")); - } - } - } - - @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(stack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - this.setActivated(stack, !getActivated(stack)); - stack.getTagCompound().setInteger("worldTimeDelay", (int) (world.getWorldTime() - 1) % 200); - return stack; - } - - if (world.isRemote) - { - return stack; - } - - if (!getActivated(stack) || SpellHelper.isFakePlayer(world, par3EntityPlayer)) - { - return stack; - } - - if (par3EntityPlayer.isPotionActive(AlchemicalWizardry.customPotionInhibit)) - { - return stack; - } - - if(!BindableItems.syphonBatteries(stack, par3EntityPlayer, 10000)) - { - return stack; - } - - BlockPos pos = par3EntityPlayer.getPosition(); - boolean silkTouch = EnchantmentHelper.getSilkTouchModifier(par3EntityPlayer); - int fortuneLvl = EnchantmentHelper.getFortuneModifier(par3EntityPlayer); - - HashMultiset dropMultiset = HashMultiset.create(); - - for (int i = -5; i <= 5; i++) - { - for (int j = 0; j <= 10; j++) - { - for (int k = -5; k <= 5; k++) - { - BlockPos newPos = pos.add(i, j, k); - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - - if (block != null) - { - float str = getStrVsBlock(stack, block); - - if (str > 1.1f && world.canMineBlockBody(par3EntityPlayer, newPos)) - { - if (silkTouch && block.canSilkHarvest(world, newPos, state, par3EntityPlayer)) - { - dropMultiset.add(new ItemType(block, block.getMetaFromState(state))); - } else - { - List itemDropList = block.getDrops(world, newPos, state, fortuneLvl); - - if (itemDropList != null) - { - for (ItemStack stacky : itemDropList) - dropMultiset.add(ItemType.fromStack(stacky), stacky.stackSize); - } - } - - world.setBlockToAir(newPos); - } - } - } - } - } - - BoundPickaxe.dropMultisetStacks(dropMultiset, world, pos.getX(), pos.getY() + par3EntityPlayer.getEyeHeight(), pos.getZ()); - - return stack; - } - - public static void dropMultisetStacks(Multiset dropMultiset, World world, double x, double y, double z) - { - for (Multiset.Entry entry : dropMultiset.entrySet()) - { - int count = entry.getCount(); - ItemType type = entry.getElement(); - int maxStackSize = type.item.getItemStackLimit(type.createStack(1)); - - //Drop in groups of maximum size - while (count >= maxStackSize) - { - world.spawnEntityInWorld(new EntityItem(world, x, y, z, type.createStack(maxStackSize))); - count -= maxStackSize; - } - //Drop remainder - if (count > 0) - world.spawnEntityInWorld(new EntityItem(world, x, y, z, type.createStack(count))); - } - } - - @Override - public void onUpdate(ItemStack stack, World world, Entity par3Entity, int par4, boolean par5) - { - if (!(par3Entity instanceof EntityPlayer)) - { - return; - } - - EntityPlayer par3EntityPlayer = (EntityPlayer) par3Entity; - - if (stack.getTagCompound() == null) - { - stack.setTagCompound(new NBTTagCompound()); - } - - if (world.getWorldTime() % 200 == stack.getTagCompound().getInteger("worldTimeDelay") && stack.getTagCompound().getBoolean("isActive")) - { - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if(!BindableItems.syphonBatteries(stack, par3EntityPlayer, 20)) - { - this.setActivated(stack, false); - } - } - } - - stack.setItemDamage(0); - } - - public void setActivated(ItemStack stack, boolean newActivated) - { - stack.setItemDamage(newActivated ? 1 : 0); - } - - public boolean getActivated(ItemStack stack) - { - return stack.getItemDamage() == 1; - } - - /** - * Returns the strength of the stack against a given block. 1.0F base, (Quality+1)*2 if correct blocktype, 1.5F if - * sword - */ - @Override - public float getStrVsBlock(ItemStack stack, Block par2Block) //getStrVsBlock - { - if (!getActivated(stack)) - { - return 0.0F; - } - - return super.getStrVsBlock(stack, par2Block); - } - - /** - * Current implementations of this method in child classes do not use the entry argument beside ev. They just raise - * the damage on the stack. - */ - public boolean hitEntity(ItemStack stack, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase) - { - return getActivated(stack); - } - - @SideOnly(Side.CLIENT) - - /** - * Returns True is the item is renderer in full 3D when hold. - */ - public boolean isFull3D() - { - return true; - } - - /** - * Return the enchantability factor of the item, most of the time is based on material. - */ - @Override - public int getItemEnchantability() - { - return 30; - } - - /** - * FORGE: Overridden to allow custom tool effectiveness - */ - @Override - public float getDigSpeed(ItemStack stack, IBlockState state) - { - if (!getActivated(stack)) - { - return 0.0F; - } - - for (String type : getToolClasses(stack)) - { - if (state.getBlock().isToolEffective(type, state)) - return efficiencyOnProperMaterial; - } - return super.getDigSpeed(stack, state); - } - - @Override - public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) - { - return !getActivated(stack); - } - - @Override - public int getHarvestLevel(ItemStack stack, String toolClass) - { - if (getActivated(stack) && "pickaxe".equals(toolClass)) - { - return 5; - } - - return 0; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundShovel.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundShovel.java deleted file mode 100644 index aaa46ea5..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundShovel.java +++ /dev/null @@ -1,272 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemSpade; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; -import WayofTime.alchemicalWizardry.common.ItemType; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -import com.google.common.collect.HashMultiset; - -public class BoundShovel extends ItemSpade implements IBindable -{ - public float efficiencyOnProperMaterial = 12.0F; - public float damageVsEntity; - - private int energyUsed; - - public BoundShovel() - { - super(AlchemicalWizardry.bloodBoundToolMaterial); - setMaxStackSize(1); - this.efficiencyOnProperMaterial = 12.0F; - this.damageVsEntity = 5; - setEnergyUsed(5); - } - - public void setEnergyUsed(int i) - { - energyUsed = i; - } - - public int getEnergyUsed() - { - return this.energyUsed; - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.boundshovel.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - if (par1ItemStack.getTagCompound().getBoolean("isActive")) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.activated")); - } else - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.deactivated")); - } - - if (!par1ItemStack.getTagCompound().getString("ownerName").equals("")) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - } - - @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(stack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - this.setActivated(stack, !getActivated(stack)); - stack.getTagCompound().setInteger("worldTimeDelay", (int) (world.getWorldTime() - 1) % 200); - return stack; - } - - if (world.isRemote) - { - return stack; - } - - if (!getActivated(stack) || SpellHelper.isFakePlayer(world, par3EntityPlayer)) - { - return stack; - } - - if (par3EntityPlayer.isPotionActive(AlchemicalWizardry.customPotionInhibit)) - { - return stack; - } - - if(!BindableItems.syphonBatteries(stack, par3EntityPlayer, 10000)) - { - return stack; - } - - BlockPos pos = par3EntityPlayer.getPosition(); - boolean silkTouch = EnchantmentHelper.getSilkTouchModifier(par3EntityPlayer); - int fortuneLvl = EnchantmentHelper.getFortuneModifier(par3EntityPlayer); - - HashMultiset dropMultiset = HashMultiset.create(); - - for (int i = -5; i <= 5; i++) - { - for (int j = 0; j <= 10; j++) - { - for (int k = -5; k <= 5; k++) - { - BlockPos newPos = pos.add(i, j, k); - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - - if (block != null) - { - float str = getStrVsBlock(stack, block); - - if (str > 1.1f && world.canMineBlockBody(par3EntityPlayer, newPos)) - { - if (silkTouch && block.canSilkHarvest(world, newPos, state, par3EntityPlayer)) - { - dropMultiset.add(new ItemType(block, block.getMetaFromState(state))); - } else - { - List itemDropList = block.getDrops(world, newPos, state, fortuneLvl); - - if (itemDropList != null) - { - for (ItemStack stacky : itemDropList) - dropMultiset.add(ItemType.fromStack(stacky), stacky.stackSize); - } - } - - world.setBlockToAir(newPos); - } - } - } - } - } - - BoundPickaxe.dropMultisetStacks(dropMultiset, world, pos.getX(), pos.getY() + par3EntityPlayer.getEyeHeight(), pos.getZ()); - - return stack; - } - - @Override - public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) - { - if (!(par3Entity instanceof EntityPlayer)) - { - return; - } - - EntityPlayer par3EntityPlayer = (EntityPlayer) par3Entity; - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - if (par2World.getWorldTime() % 200 == par1ItemStack.getTagCompound().getInteger("worldTimeDelay") && par1ItemStack.getTagCompound().getBoolean("isActive")) - { - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if(!BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, 20)) - { - this.setActivated(par1ItemStack, false); - } - } - } - - par1ItemStack.setItemDamage(0); - } - - public void setActivated(ItemStack stack, boolean newActivated) - { - stack.setItemDamage(newActivated ? 1 : 0); - } - - public boolean getActivated(ItemStack stack) - { - return stack.getItemDamage() == 1; - } - - /** - * Returns the strength of the stack against a given block. 1.0F base, (Quality+1)*2 if correct blocktype, 1.5F if - * sword - */ - @Override - public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block) - { - if (!getActivated(par1ItemStack)) - { - return 0.0F; - } - - return super.getStrVsBlock(par1ItemStack, par2Block); - } - - /** - * Current implementations of this method in child classes do not use the entry argument beside ev. They just raise - * the damage on the stack. - */ - public boolean hitEntity(ItemStack par1ItemStack, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase) - { - return getActivated(par1ItemStack); - } - - public boolean onBlockDestroyed(ItemStack par1ItemStack, World par2World, int par3, int par4, int par5, int par6, EntityLivingBase par7EntityLivingBase) - { - return true; - } - - @SideOnly(Side.CLIENT) - - /** - * Returns True is the item is renderer in full 3D when hold. - */ - public boolean isFull3D() - { - return true; - } - - /** - * Return the enchantability factor of the item, most of the time is based on material. - */ - public int getItemEnchantability() - { - return 30; - } - - /** - * FORGE: Overridden to allow custom tool effectiveness - */ - @Override - public float getDigSpeed(ItemStack stack, IBlockState state) - { - if (!getActivated(stack)) - { - return 0.0F; - } - - for (String type : getToolClasses(stack)) - { - if (state.getBlock().isToolEffective(type, state)) - return efficiencyOnProperMaterial; - } - return super.getDigSpeed(stack, state); - } - - @Override - public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) - { - return !getActivated(stack); - } - - @Override - public int getHarvestLevel(ItemStack stack, String toolClass) - { - if (getActivated(stack) && "shovel".equals(toolClass)) - { - return 5; - } - - return 0; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/CreativeDagger.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/CreativeDagger.java deleted file mode 100644 index f962d785..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/CreativeDagger.java +++ /dev/null @@ -1,153 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.util.FakePlayer; -import WayofTime.alchemicalWizardry.api.event.SacrificeKnifeUsedEvent; -import WayofTime.alchemicalWizardry.api.sacrifice.PlayerSacrificeHandler; -import WayofTime.alchemicalWizardry.api.tile.IBloodAltar; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class CreativeDagger extends Item -{ - public CreativeDagger() - { - super(); - setMaxStackSize(1); - setFull3D(); - } - - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) - { - if (this.canUseForSacrifice(stack)) - { - player.setItemInUse(stack, this.getMaxItemUseDuration(stack)); - return stack; - } - - if (!player.capabilities.isCreativeMode) - { - SacrificeKnifeUsedEvent evt = new SacrificeKnifeUsedEvent(player, true, true, 2); - if(MinecraftForge.EVENT_BUS.post(evt)) - { - return stack; - } - - if(evt.shouldDrainHealth) - { - player.setHealth(player.getHealth() - 2); - } - - if(!evt.shouldFillAltar) - { - return stack; - } - } - - if (player instanceof FakePlayer) - { - return stack; - } - - double posX = player.posX; - double posY = player.posY; - double posZ = player.posZ; - world.playSoundEffect((double) ((float) posX + 0.5F), (double) ((float) posY + 0.5F), (double) ((float) posZ + 0.5F), "random.fizz", 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); - float f = 1.0F; - float f1 = f * 0.6F + 0.4F; - float f2 = f * f * 0.7F - 0.5F; - float f3 = f * f * 0.6F - 0.7F; - - for (int l = 0; l < 8; ++l) - { - world.spawnParticle(EnumParticleTypes.REDSTONE, posX + Math.random() - Math.random(), posY + Math.random() - Math.random(), posZ + Math.random() - Math.random(), f1, f2, f3); - } - - if (!world.isRemote && SpellHelper.isFakePlayer(world, player)) - { - return stack; - } - - findAndFillAltar(world, player, Integer.MAX_VALUE); - return stack; - } - - public void findAndFillAltar(World world, EntityPlayer player, int amount) - { - BlockPos pos = player.getPosition(); - IBloodAltar altarEntity = getAltar(world, pos); - - if (altarEntity == null) - { - return; - } - - altarEntity.sacrificialDaggerCall(amount, false); - altarEntity.startCycle(); - } - - public IBloodAltar getAltar(World world, BlockPos pos) - { - TileEntity tileEntity; - - for (int i = -2; i <= 2; i++) - { - for (int j = -2; j <= 2; j++) - { - for (int k = -2; k <= 1; k++) - { - BlockPos newPos = pos.add(i, j, k); - tileEntity = world.getTileEntity(newPos); - - if(tileEntity instanceof IBloodAltar) - { - return (IBloodAltar)tileEntity; - } - } - } - } - - return null; - } - - @Override - public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5) - { - if(!world.isRemote && entity instanceof EntityPlayer) - { - this.setUseForSacrifice(stack, this.isPlayerPreparedForSacrifice(world, (EntityPlayer)entity)); - } - } - - public boolean isPlayerPreparedForSacrifice(World world, EntityPlayer player) - { - return !world.isRemote && (PlayerSacrificeHandler.getPlayerIncense(player) > 0); - } - - public boolean canUseForSacrifice(ItemStack stack) - { - NBTTagCompound tag = stack.getTagCompound(); - - return tag != null && tag.getBoolean("sacrifice"); - } - - public void setUseForSacrifice(ItemStack stack, boolean sacrifice) - { - NBTTagCompound tag = stack.getTagCompound(); - if(tag == null) - { - tag = new NBTTagCompound(); - stack.setTagCompound(tag); - } - - tag.setBoolean("sacrifice", sacrifice); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/CreativeOrb.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/CreativeOrb.java deleted file mode 100644 index 9fa2cb2c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/CreativeOrb.java +++ /dev/null @@ -1,118 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.FakePlayer; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; -import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class CreativeOrb extends Item implements IBindable -{ - public CreativeOrb() - { - super(); - setMaxStackSize(1); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.mode.creative")); - par3List.add(StatCollector.translateToLocal("tooltip.cheatyitem.desc1")); - par3List.add(StatCollector.translateToLocal("tooltip.cheatyitem.desc2")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - World world = par3EntityPlayer.worldObj; - - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer instanceof FakePlayer) - { - return par1ItemStack; - } - - if (world != null) - { - double posX = par3EntityPlayer.posX; - double posY = par3EntityPlayer.posY; - double posZ = par3EntityPlayer.posZ; - world.playSoundEffect((double) ((float) posX + 0.5F), (double) ((float) posY + 0.5F), (double) ((float) posZ + 0.5F), "random.fizz", 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); - SpellHelper.sendIndexedParticleToAllAround(world, posX, posY, posZ, 20, world.provider.getDimensionId(), 4, posX, posY, posZ); - } - - if (par3EntityPlayer.worldObj.isRemote) - { - return par1ItemStack; - } - - NBTTagCompound itemTag = par1ItemStack.getTagCompound(); - - if (itemTag == null || itemTag.getString("ownerName").equals("")) - { - return par1ItemStack; - } - - if (par3EntityPlayer.isSneaking()) - { - SoulNetworkHandler.setCurrentEssence(itemTag.getString("ownerName"), 0); - } else - { - SoulNetworkHandler.addCurrentEssenceToMaximum(itemTag.getString("ownerName"), 1000000, Integer.MAX_VALUE); - } - return par1ItemStack; - } - - @Override - public ItemStack getContainerItem(ItemStack itemStack) - { - return itemStack; - } - - @Override - public boolean hasContainerItem(ItemStack itemStack) - { - return true; - } - - public int getCurrentEssence(ItemStack par1ItemStack) - { - if (par1ItemStack == null) - { - return 0; - } - - NBTTagCompound itemTag = par1ItemStack.getTagCompound(); - - if (itemTag == null || itemTag.getString("ownerName").equals("")) - { - return 0; - } - - String owner = itemTag.getString("ownerName"); - World worldSave = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) worldSave.loadItemData(LifeEssenceNetwork.class, owner); - - if (data == null) - { - data = new LifeEssenceNetwork(owner); - worldSave.setItemData(owner, data); - } - - return data.currentEssence; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/DaggerOfSacrifice.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/DaggerOfSacrifice.java deleted file mode 100644 index 72140cd4..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/DaggerOfSacrifice.java +++ /dev/null @@ -1,189 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; -import java.util.UUID; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.boss.IBossDisplayData; -import net.minecraft.entity.monster.EntityEnderman; -import net.minecraft.entity.monster.EntitySlime; -import net.minecraft.entity.passive.EntityAnimal; -import net.minecraft.entity.passive.EntityVillager; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.DamageSource; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.tile.IBloodAltar; -import WayofTime.alchemicalWizardry.common.IDemon; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.IHoardDemon; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -import com.google.common.collect.Multimap; - -public class DaggerOfSacrifice extends BindableItems -{ - public DaggerOfSacrifice() - { - super(); - setMaxStackSize(1); - setEnergyUsed(100); - setFull3D(); - setMaxDamage(100); - } - - @Override - public boolean hitEntity(ItemStack par1ItemStack, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase) - { - if (par3EntityLivingBase == null || par2EntityLivingBase == null || par3EntityLivingBase.worldObj.isRemote || (par3EntityLivingBase instanceof EntityPlayer && SpellHelper.isFakePlayer(par3EntityLivingBase.worldObj, (EntityPlayer) par3EntityLivingBase))) - { - return false; - } - - if(par2EntityLivingBase instanceof IHoardDemon) - { - return false; - } - - if (par2EntityLivingBase.isChild() || par2EntityLivingBase instanceof EntityPlayer || par2EntityLivingBase instanceof IBossDisplayData) - { - return false; - } - - World world = par2EntityLivingBase.worldObj; - - if (par2EntityLivingBase.isDead || par2EntityLivingBase.getHealth() < 0.5f) - { - return false; - } - - if(par2EntityLivingBase instanceof IDemon) - { - ((IDemon)par2EntityLivingBase).setDropCrystal(false); - this.findAndNotifyAltarOfDemon(world, par2EntityLivingBase); - } - - int lifeEssence = 500; - if (par2EntityLivingBase instanceof EntityVillager) lifeEssence = 2000; - else if (par2EntityLivingBase instanceof EntitySlime) lifeEssence = 150; - else if (par2EntityLivingBase instanceof EntityEnderman) lifeEssence = 200; - else if (par2EntityLivingBase instanceof EntityAnimal) lifeEssence = 250; - - if (findAndFillAltar(par2EntityLivingBase.worldObj, par2EntityLivingBase, lifeEssence)) - { - double posX = par2EntityLivingBase.posX; - double posY = par2EntityLivingBase.posY; - double posZ = par2EntityLivingBase.posZ; - - for (int i = 0; i < 8; i++) - { - SpellHelper.sendIndexedParticleToAllAround(world, posX, posY, posZ, 20, world.provider.getDimensionId(), 1, posX, posY, posZ); - } - - par2EntityLivingBase.setHealth(-1); - par2EntityLivingBase.onDeath(DamageSource.generic); - } - - return false; - } - - public float func_82803_g() - { - return 4.0F; - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.caution.desc1")); - par3List.add(StatCollector.translateToLocal("tooltip.caution.desc2")); - } - - @Override - public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block) - { - if (par2Block == Blocks.web) - { - return 15.0F; - } else - { - Material material = par2Block.getMaterial(); - return material != Material.plants && material != Material.vine && material != Material.coral && material != Material.leaves && material != Material.gourd ? 1.0F : 1.5F; - } - } - - @Override - public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) - { - return false; - } - - @Override - public Multimap getAttributeModifiers(ItemStack itemStack) - { - Multimap multimap = super.getAttributeModifiers(itemStack); - multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(4186465, 46565), "Tool modifier", 1.0d, 0)); - return multimap; - } - - public boolean findAndNotifyAltarOfDemon(World world, EntityLivingBase sacrifice) - { - BlockPos pos = sacrifice.getPosition(); - IBloodAltar altarEntity = this.getAltar(world, pos); - - if (altarEntity == null) - { - return false; - } - - altarEntity.addToDemonBloodDuration(50); - - return true; - } - - public boolean findAndFillAltar(World world, EntityLivingBase sacrifice, int amount) - { - BlockPos pos = sacrifice.getPosition(); - IBloodAltar altarEntity = this.getAltar(world, pos); - - if (altarEntity == null) - { - return false; - } - - altarEntity.sacrificialDaggerCall(amount, true); - altarEntity.startCycle(); - return true; - } - - public IBloodAltar getAltar(World world, BlockPos pos) - { - TileEntity tileEntity; - - for (int i = -2; i <= 2; i++) - { - for (int j = -2; j <= 2; j++) - { - for (int k = -2; k <= 1; k++) - { - BlockPos newPos = pos.add(i, j, k); - tileEntity = world.getTileEntity(newPos); - - if ((tileEntity instanceof IBloodAltar)) - { - return (IBloodAltar) tileEntity; - } - } - } - } - - return null; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/DawnScribeTool.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/DawnScribeTool.java deleted file mode 100644 index f54f5615..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/DawnScribeTool.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -public class DawnScribeTool extends ScribeTool -{ - public DawnScribeTool() - { - super(6); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/DemonCrystal.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/DemonCrystal.java deleted file mode 100644 index 504d7527..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/DemonCrystal.java +++ /dev/null @@ -1,167 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.block.BlockFence; -import net.minecraft.block.state.IBlockState; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.MathHelper; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.summoningRegistry.SummoningRegistry; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityDemon; - -public class DemonCrystal extends Item -{ - public DemonCrystal() - { - super(); - this.setHasSubtypes(true); - this.setCreativeTab(CreativeTabs.tabMisc); - setMaxStackSize(1); - } - - /** - * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer - */ - @Override - public boolean onItemUse(ItemStack stack, EntityPlayer playerIn, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ) - { - if (world.isRemote) - { - return true; - } - else if (!playerIn.func_175151_a(pos.offset(side), side, stack)) - { - return false; - } - else - { - IBlockState iblockstate = world.getBlockState(pos); - - pos = pos.offset(side); - double d0 = 0.0D; - - if (side == EnumFacing.UP && iblockstate instanceof BlockFence) - { - d0 = 0.5D; - } - - String demonName = DemonCrystal.getDemonString(stack); - Entity entity = spawnCreature(world, demonName, (double)pos.getX() + 0.5D, (double)pos.getY() + d0, (double)pos.getZ() + 0.5D, stack); - - if (entity != null) - { - if (entity instanceof EntityLivingBase && stack.hasDisplayName()) - { - entity.setCustomNameTag(stack.getDisplayName()); - } - - if (!playerIn.capabilities.isCreativeMode) - { - --stack.stackSize; - } - } - - return true; - } - } - - /** - * Spawns the creature specified by the egg's type in the location specified by the last three parameters. - * Parameters: world, entityID, x, y, z. - */ - public static Entity spawnCreature(World par0World, String par1, double par2, double par4, double par6, ItemStack itemStack) - { - Entity entity = null; - - for (int j = 0; j < 1; ++j) - { - entity = SummoningRegistry.getEntityWithID(par0World, par1); - - if (entity != null) - { - EntityLiving entityliving = (EntityLiving) entity; - entity.setLocationAndAngles(par2, par4, par6, MathHelper.wrapAngleTo180_float(par0World.rand.nextFloat() * 360.0F), 0.0F); - entityliving.rotationYawHead = entityliving.rotationYaw; - entityliving.renderYawOffset = entityliving.rotationYaw; - if (entityliving instanceof EntityDemon) - { - ((EntityDemon) entityliving).func_152115_b(DemonCrystal.getOwnerName(itemStack)); - - if (!DemonCrystal.getOwnerName(itemStack).equals("")) - { - ((EntityDemon) entityliving).setTamed(true); - } - } - - par0World.spawnEntityInWorld(entity); - entityliving.playLivingSound(); - } - } - return entity; - } - - public static void setOwnerName(ItemStack par1ItemStack, String ownerName) - { - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - par1ItemStack.getTagCompound().setString("ownerName", ownerName); - } - - public static String getOwnerName(ItemStack par1ItemStack) - { - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - return par1ItemStack.getTagCompound().getString("ownerName"); - } - - public static void setDemonString(ItemStack itemStack, String demonName) - { - if (itemStack.getTagCompound() == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - itemStack.getTagCompound().setString("demonName", demonName); - } - - public static String getDemonString(ItemStack itemStack) - { - if (itemStack.getTagCompound() == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - return itemStack.getTagCompound().getString("demonName"); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.demonplacer.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - if (!par1ItemStack.getTagCompound().getString("ownerName").equals("")) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.demonsowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/DemonicTelepositionFocus.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/DemonicTelepositionFocus.java deleted file mode 100644 index c4508bc1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/DemonicTelepositionFocus.java +++ /dev/null @@ -1,36 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; - -public class DemonicTelepositionFocus extends TelepositionFocus -{ - public DemonicTelepositionFocus() - { - super(4); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.demonictelepfocus.desc1")); - par3List.add(StatCollector.translateToLocal("tooltip.demonictelepfocus.desc2")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - NBTTagCompound itemTag = par1ItemStack.getTagCompound(); - - if (!par1ItemStack.getTagCompound().getString("ownerName").equals("")) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.coords") + " " + itemTag.getInteger("xCoord") + ", " + itemTag.getInteger("yCoord") + ", " + itemTag.getInteger("zCoord")); - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.dimension") + " " + getDimensionID(par1ItemStack)); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/DuskScribeTool.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/DuskScribeTool.java deleted file mode 100644 index 53db87f3..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/DuskScribeTool.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -public class DuskScribeTool extends ScribeTool -{ - public DuskScribeTool() - { - super(5); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/EarthScribeTool.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/EarthScribeTool.java deleted file mode 100644 index 9a33f1e8..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/EarthScribeTool.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -public class EarthScribeTool extends ScribeTool -{ - public EarthScribeTool() - { - super(3); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/EnergyBazooka.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/EnergyBazooka.java deleted file mode 100644 index 13b03ab3..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/EnergyBazooka.java +++ /dev/null @@ -1,166 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.common.entity.projectile.EntityEnergyBazookaMainProjectile; - -public class EnergyBazooka extends BindableItems -{ - private int damage; - - public EnergyBazooka() - { - super(); - setMaxStackSize(1); - setFull3D(); - setMaxDamage(250); - this.setEnergyUsed(20000); - damage = 12; - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - final int maxDelay = 150; - - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - this.setActivated(par1ItemStack, !getActivated(par1ItemStack)); - par1ItemStack.getTagCompound().setInteger("worldTimeDelay", (int) (par2World.getWorldTime() - 1) % 100); - return par1ItemStack; - } - - if (!getActivated(par1ItemStack)) - { - return par1ItemStack; - } - - if (this.getDelay(par1ItemStack) > 0) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if(!syphonBatteries(par1ItemStack, par3EntityPlayer, this.getEnergyUsed())) - { - return par1ItemStack; - } - } - - par2World.playSoundAtEntity(par3EntityPlayer, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); - - if (!par2World.isRemote) - { - par2World.spawnEntityInWorld(new EntityEnergyBazookaMainProjectile(par2World, par3EntityPlayer, damage)); - this.setDelay(par1ItemStack, maxDelay); - } - - Vec3 vec = par3EntityPlayer.getLookVec(); - double wantedVelocity = 3.0f; - par3EntityPlayer.motionX = -vec.xCoord * wantedVelocity; - par3EntityPlayer.motionY = -vec.yCoord * wantedVelocity; - par3EntityPlayer.motionZ = -vec.zCoord * wantedVelocity; - par2World.playSoundEffect((double) ((float) par3EntityPlayer.posX + 0.5F), (double) ((float) par3EntityPlayer.posY + 0.5F), (double) ((float) par3EntityPlayer.posZ + 0.5F), "random.fizz", 0.5F, 2.6F + (par2World.rand.nextFloat() - par2World.rand.nextFloat()) * 0.8F); - par3EntityPlayer.fallDistance = 0; - return par1ItemStack; - } - - @Override - public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) - { - if (!(par3Entity instanceof EntityPlayer)) - { - return; - } - - EntityPlayer par3EntityPlayer = (EntityPlayer) par3Entity; - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - int delay = this.getDelay(par1ItemStack); - - if (!par2World.isRemote && delay > 0) - { - this.setDelay(par1ItemStack, delay - 1); - } - - if (par2World.getWorldTime() % 100 == par1ItemStack.getTagCompound().getInteger("worldTimeDelay") && par1ItemStack.getTagCompound().getBoolean("isActive")) - { - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if(!BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, 50)) - { - this.setActivated(par1ItemStack, false); - } - } - } - - par1ItemStack.setItemDamage(0); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.energybazooka.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - if (par1ItemStack.getTagCompound().getBoolean("isActive")) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.activated")); - } else - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.deactivated")); - } - - if (!par1ItemStack.getTagCompound().getString("ownerName").equals("")) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - } - - public void setActivated(ItemStack stack, boolean newActivated) - { - stack.setItemDamage(newActivated ? 1 : 0); - } - - public boolean getActivated(ItemStack stack) - { - return stack.getItemDamage() == 1; - } - - public void setDelay(ItemStack par1ItemStack, int newDelay) - { - NBTTagCompound itemTag = par1ItemStack.getTagCompound(); - - if (itemTag == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - itemTag.setInteger("delay", newDelay); - } - - public int getDelay(ItemStack par1ItemStack) - { - NBTTagCompound itemTag = par1ItemStack.getTagCompound(); - - if (itemTag == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - return itemTag.getInteger("delay"); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/EnergyBlaster.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/EnergyBlaster.java deleted file mode 100644 index 6f896545..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/EnergyBlaster.java +++ /dev/null @@ -1,159 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.common.entity.projectile.EnergyBlastProjectile; - -public class EnergyBlaster extends BindableItems -{ - private int damage; - - public EnergyBlaster() - { - super(); - setMaxStackSize(1); - setFull3D(); - setMaxDamage(250); - this.setEnergyUsed(150); - damage = 12; - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - final int maxDelay = 15; - - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - this.setActivated(par1ItemStack, !getActivated(par1ItemStack)); - par1ItemStack.getTagCompound().setInteger("worldTimeDelay", (int) (par2World.getWorldTime() - 1) % 100); - return par1ItemStack; - } - - if (!getActivated(par1ItemStack)) - { - return par1ItemStack; - } - - if (this.getDelay(par1ItemStack) > 0) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if(!syphonBatteries(par1ItemStack, par3EntityPlayer, this.getEnergyUsed())) - { - return par1ItemStack; - } - } - - par2World.playSoundAtEntity(par3EntityPlayer, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); - - if (!par2World.isRemote) - { - par2World.spawnEntityInWorld(new EnergyBlastProjectile(par2World, par3EntityPlayer, damage)); - this.setDelay(par1ItemStack, maxDelay); - } - - return par1ItemStack; - } - - @Override - public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) - { - if (!(par3Entity instanceof EntityPlayer)) - { - return; - } - EntityPlayer par3EntityPlayer = (EntityPlayer) par3Entity; - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - int delay = this.getDelay(par1ItemStack); - - if (!par2World.isRemote && delay > 0) - { - this.setDelay(par1ItemStack, delay - 1); - } - - if (par2World.getWorldTime() % 100 == par1ItemStack.getTagCompound().getInteger("worldTimeDelay") && par1ItemStack.getTagCompound().getBoolean("isActive")) - { - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if(!BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, 50)) - { - this.setActivated(par1ItemStack, false); - } - } - } - - par1ItemStack.setItemDamage(0); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.energyblast.desc1")); - par3List.add(StatCollector.translateToLocal("tooltip.energyblast.desc2")); - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.damage") + " " + damage); - - if (!(par1ItemStack.getTagCompound() == null)) - { - if (par1ItemStack.getTagCompound().getBoolean("isActive")) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.activated")); - } else - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.deactivated")); - } - - if (!par1ItemStack.getTagCompound().getString("ownerName").equals("")) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - } - - public void setActivated(ItemStack stack, boolean newActivated) - { - stack.setItemDamage(newActivated ? 1 : 0); - } - - public boolean getActivated(ItemStack stack) - { - return stack.getItemDamage() == 1; - } - - public void setDelay(ItemStack par1ItemStack, int newDelay) - { - NBTTagCompound itemTag = par1ItemStack.getTagCompound(); - - if (itemTag == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - itemTag.setInteger("delay", newDelay); - } - - public int getDelay(ItemStack par1ItemStack) - { - NBTTagCompound itemTag = par1ItemStack.getTagCompound(); - - if (itemTag == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - return itemTag.getInteger("delay"); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/EnhancedTelepositionFocus.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/EnhancedTelepositionFocus.java deleted file mode 100644 index 2b4d1a42..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/EnhancedTelepositionFocus.java +++ /dev/null @@ -1,35 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; - -public class EnhancedTelepositionFocus extends TelepositionFocus -{ - public EnhancedTelepositionFocus() - { - super(2); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.enhancedtelepfocus.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - NBTTagCompound itemTag = par1ItemStack.getTagCompound(); - - if (!par1ItemStack.getTagCompound().getString("ownerName").equals("")) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.coords") + " " + itemTag.getInteger("xCoord") + ", " + itemTag.getInteger("yCoord") + ", " + itemTag.getInteger("zCoord")); - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.dimension") + " " + getDimensionID(par1ItemStack)); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/FireScribeTool.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/FireScribeTool.java deleted file mode 100644 index 204cb63e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/FireScribeTool.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -public class FireScribeTool extends ScribeTool -{ - public FireScribeTool() - { - super(2); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemAlchemyBase.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemAlchemyBase.java deleted file mode 100644 index 92019075..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemAlchemyBase.java +++ /dev/null @@ -1,79 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.MathHelper; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import org.lwjgl.input.Keyboard; - -import WayofTime.alchemicalWizardry.api.alchemy.AlchemyRecipeRegistry; - -public class ItemAlchemyBase extends Item -{ - private final String[] ITEM_NAMES = new String[]{"offensa", "praesidium", "orbis_terrae", "strengthened_catalyst", "concentrated_catalyst", "fractured_bone", "virtus", "reductus", "potentia"}; - - public ItemAlchemyBase() - { - super(); - this.hasSubtypes = true; - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.usedinalchemy")); - - if (Keyboard.isKeyDown(Keyboard.KEY_RSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) - { - ItemStack[] recipe = AlchemyRecipeRegistry.getRecipeForItemStack(par1ItemStack); - - if (recipe != null) - { - par3List.add(EnumChatFormatting.BLUE + StatCollector.translateToLocal("tooltip.alchemy.recipe")); - - for (ItemStack item : recipe) - { - if (item != null) - { - par3List.add("" + item.getDisplayName()); - } - } - } - } else - { - par3List.add("-" + StatCollector.translateToLocal("tooltip.alchemy.press") + " " + EnumChatFormatting.BLUE + StatCollector.translateToLocal("tooltip.alchemy.shift") + EnumChatFormatting.GRAY + " " + StatCollector.translateToLocal("tooltip.alchemy.forrecipe") + "-"); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - return par1ItemStack; - } - - @Override - public String getUnlocalizedName(ItemStack itemStack) - { - int meta = MathHelper.clamp_int(itemStack.getItemDamage(), 0, ITEM_NAMES.length - 1); - return (getUnlocalizedName() + "." + ITEM_NAMES[meta]); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item id, CreativeTabs creativeTab, List list) - { - for (int meta = 0; meta < ITEM_NAMES.length; ++meta) - { - list.add(new ItemStack(id, 1, meta)); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemBlockCrystalBelljar.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemBlockCrystalBelljar.java deleted file mode 100644 index 790362e5..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemBlockCrystalBelljar.java +++ /dev/null @@ -1,96 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainer; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.Constants; - -import java.util.List; - -public class ItemBlockCrystalBelljar extends ItemBlock -{ - public ItemBlockCrystalBelljar(Block par1) - { - super(par1); - this.setHasSubtypes(true); - this.setMaxDamage(0); - this.setMaxStackSize(16); - } - - @Override - public int getMetadata(int par1) - { - return par1; - } - - public ReagentContainer[] getReagentContainers(ItemStack stack) - { - if (stack != null && stack.hasTagCompound()) - { - NBTTagCompound tag = stack.getTagCompound(); - - NBTTagList tagList = tag.getTagList("reagentTanks", Constants.NBT.TAG_COMPOUND); - - int size = tagList.tagCount(); - ReagentContainer[] tanks = new ReagentContainer[size]; - - for (int i = 0; i < size; i++) - { - NBTTagCompound savedTag = tagList.getCompoundTagAt(i); - tanks[i] = ReagentContainer.readFromNBT(savedTag); - } - - return tanks; - } - return null; - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean par4) - { - ReagentContainer[] tanks = this.getReagentContainers(stack); - - if (tanks == null) - { - list.add(StatCollector.translateToLocal("tooltip.crystalbelljar.empty")); - } else - { - list.add(StatCollector.translateToLocal("tooltip.crystalbelljar.contents")); - for (int i = 0; i < tanks.length; i++) - { - if (tanks[i] == null || tanks[i].getReagent() == null || tanks[i].getReagent().reagent == null) - { - list.add("- Empty"); - } else - { - ReagentStack reagentStack = tanks[i].getReagent(); - list.add("- " + reagentStack.reagent.name + ": " + reagentStack.amount + "/" + tanks[i].getCapacity() / 1000 + "k AR"); - } - } - } - } - - @Override - public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, IBlockState newState) - { - if (!world.setBlockState(pos, newState, 3)) return false; - - IBlockState state = world.getBlockState(pos); - if (state.getBlock() == this.block) - { - this.block.onBlockPlacedBy(world, pos, state, player, stack); - } - - return true; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemBloodLetterPack.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemBloodLetterPack.java deleted file mode 100644 index fa709bfa..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemBloodLetterPack.java +++ /dev/null @@ -1,154 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemArmor; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.items.IAltarManipulator; -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.tileEntity.TEAltar; - -public class ItemBloodLetterPack extends ItemArmor implements ArmourUpgrade, IAltarManipulator -{ - public int conversionRate = 100; //LP / half heart - public float activationPoint = 0.5f; - public int tickRate = 20; - public int maxStored = 10000; - - public ItemBloodLetterPack() - { - super(ArmorMaterial.CHAIN, 0, 1); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.bloodletterpack.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - par3List.add(StatCollector.translateToLocal("tooltip.lp.storedlp") + " " + this.getStoredLP(par1ItemStack)); - } - } - - @Override - public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) - { - return "alchemicalwizardry:models/armor/bloodPack_layer_1.png"; - } - - @Override - public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) - { - if (world.isRemote) - { - return itemStack; - } - - MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, player, false); - - if (movingobjectposition == null) - { - return super.onItemRightClick(itemStack, world, player); - } else - { - if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - BlockPos pos = movingobjectposition.func_178782_a(); - - TileEntity tile = world.getTileEntity(pos); - - if (!(tile instanceof TEAltar)) - { - return super.onItemRightClick(itemStack, world, player); - } - - TEAltar altar = (TEAltar)tile; - - if(!altar.isActive()) - { - int amount = this.getStoredLP(itemStack); - if(amount > 0) - { - int filledAmount = altar.fillMainTank(amount); - amount -= filledAmount; - this.setStoredLP(itemStack, amount); - - world.markBlockForUpdate(pos); - } - } - } - } - - return itemStack; - } - - public void setStoredLP(ItemStack itemStack, int lp) - { - if(!itemStack.hasTagCompound()) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = itemStack.getTagCompound(); - - tag.setInteger("storedLP", lp); - } - - public int getStoredLP(ItemStack itemStack) - { - if(!itemStack.hasTagCompound()) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = itemStack.getTagCompound(); - - return tag.getInteger("storedLP"); - } - - @Override - public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) - { - //This is where I need to do the updating - if(world.isRemote) - { - return; - } - - if(world.getWorldTime() % tickRate == 0) - { - boolean shouldExecute = player.getHealth() / player.getMaxHealth() > activationPoint && this.getStoredLP(itemStack) < maxStored; - - if(shouldExecute) - { - SoulNetworkHandler.hurtPlayer(player, 1.0f); - this.setStoredLP(itemStack, Math.min(this.getStoredLP(itemStack) + conversionRate, maxStored)); - } - } - } - - @Override - public void onArmourUpdate(World world, EntityPlayer player, ItemStack thisItemStack) {} - - @Override - public boolean isUpgrade() - { - return true; - } - - @Override - public int getEnergyForTenSeconds() - { - return 0; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemBloodRuneBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemBloodRuneBlock.java deleted file mode 100644 index 00f46b90..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemBloodRuneBlock.java +++ /dev/null @@ -1,59 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -public class ItemBloodRuneBlock extends ItemBlock -{ - public ItemBloodRuneBlock(Block block) - { - super(block); - setHasSubtypes(true); - } - - @Override - public String getUnlocalizedName(ItemStack itemstack) - { - String name; - - switch (itemstack.getItemDamage()) - { - case 0: - name = "blank"; - break; - - case 1: - name = "fill"; - break; - - case 2: - name = "empty"; - break; - - case 3: - name = "orb"; - break; - - case 4: - name = "betterCapacity"; - break; - - case 5: - name = "acceleration"; - break; - - default: - name = "broken"; - } - - return getUnlocalizedName() + "." + name; - } - - @Override - public int getMetadata(int par1) - - { - return par1; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemComplexSpellCrystal.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemComplexSpellCrystal.java deleted file mode 100644 index 81550c21..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemComplexSpellCrystal.java +++ /dev/null @@ -1,89 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpellParadigmBlock; - -public class ItemComplexSpellCrystal extends BindableItems -{ - public ItemComplexSpellCrystal() - { - super(); - setMaxStackSize(1); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.complexspellcrystal.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - NBTTagCompound itemTag = par1ItemStack.getTagCompound(); - - if (!par1ItemStack.getTagCompound().getString("ownerName").equals("")) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.coords") + " " + itemTag.getInteger("xCoord") + ", " + itemTag.getInteger("yCoord") + ", " + itemTag.getInteger("zCoord")); - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.dimension") + " " + getDimensionID(par1ItemStack)); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par2World.isRemote) - { - World world = DimensionManager.getWorld(getDimensionID(par1ItemStack)); - - if (world != null) - { - NBTTagCompound itemTag = par1ItemStack.getTagCompound(); - TileEntity tileEntity = world.getTileEntity(new BlockPos(itemTag.getInteger("xCoord"), itemTag.getInteger("yCoord"), itemTag.getInteger("zCoord"))); - - if (tileEntity instanceof TESpellParadigmBlock) - { - TESpellParadigmBlock tileParad = (TESpellParadigmBlock) tileEntity; - - tileParad.castSpell(par2World, par3EntityPlayer, par1ItemStack); - } else - { - return par1ItemStack; - } - } else - { - return par1ItemStack; - } - } else - { - return par1ItemStack; - } - par2World.playSoundAtEntity(par3EntityPlayer, "random.fizz", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); - return par1ItemStack; - } - - public int getDimensionID(ItemStack itemStack) - { - if (itemStack.getTagCompound() == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - return itemStack.getTagCompound().getInteger("dimensionId"); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemComponents.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemComponents.java deleted file mode 100644 index 78fd031c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemComponents.java +++ /dev/null @@ -1,47 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -public class ItemComponents extends Item -{ - private final String[] ITEM_NAMES = new String[]{"quartz_rod", "empty_core", "magicales_cable", "wood_brace", "stone_brace", "projectile_core", "self_core", "melee_core", "paradigm_back_plate", "output_cable", "flame_core", "icy_core", "gust_core", "earthen_core", "input_cable", "cracked_runic_plate", "runic_plate", "scribed_runic_plate", "default_core", "offensive_core", "defensive_core", "environmental_core", "power_core", "cost_core", "potency_core", "obsidian_brace", "tool_core", "ethereal_slate", "life_shard", "soul_shard", "soul_runic_plate", "life_brace", "ender_shard"}; - - public ItemComponents() - { - super(); - this.hasSubtypes = true; - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - return par1ItemStack; - } - - @Override - public String getUnlocalizedName(ItemStack itemStack) - { - //This is what will do all the localisation things on the alchemy components so you dont have to set it :D - int meta = MathHelper.clamp_int(itemStack.getItemDamage(), 0, ITEM_NAMES.length - 1); - return (getUnlocalizedName() + "." + ITEM_NAMES[meta]); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item id, CreativeTabs creativeTab, List list) - { - for (int meta = 0; meta < ITEM_NAMES.length; ++meta) - { - list.add(new ItemStack(id, 1, meta)); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemCrystalBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemCrystalBlock.java deleted file mode 100644 index 8b496da3..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemCrystalBlock.java +++ /dev/null @@ -1,43 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -public class ItemCrystalBlock extends ItemBlock -{ - public ItemCrystalBlock(Block par1) - { - super(par1); - setHasSubtypes(true); - } - - @Override - public String getUnlocalizedName(ItemStack itemstack) - { - String name; - - switch (itemstack.getItemDamage()) - { - case 0: - name = "fullCrystal"; - break; - - case 1: - name = "crystalBrick"; - break; - - default: - name = "broken"; - } - - return getUnlocalizedName() + "." + name; - } - - @Override - public int getMetadata(int par1) - - { - return par1; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemEnchantmentGlyphBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemEnchantmentGlyphBlock.java deleted file mode 100644 index 3b1063e1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemEnchantmentGlyphBlock.java +++ /dev/null @@ -1,42 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -public class ItemEnchantmentGlyphBlock extends ItemBlock -{ - public ItemEnchantmentGlyphBlock(Block block) - { - super(block); - setHasSubtypes(true); - } - - @Override - public String getUnlocalizedName(ItemStack itemstack) - { - String name; - - switch (itemstack.getItemDamage()) - { - case 0: - name = "enchantability"; - break; - - case 1: - name = "enchantmentLevel"; - break; - - default: - name = "broken"; - } - - return getUnlocalizedName() + "." + name; - } - - @Override - public int getMetadata(int par1) - { - return par1; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemIncense.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemIncense.java deleted file mode 100644 index 2e48ba20..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemIncense.java +++ /dev/null @@ -1,180 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.MathHelper; -import net.minecraft.util.StatCollector; -import net.minecraftforge.fml.common.registry.GameRegistry; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import net.minecraftforge.oredict.OreDictionary; -import WayofTime.alchemicalWizardry.ModItems; -import WayofTime.alchemicalWizardry.api.items.ShapelessBloodOrbRecipe; -import WayofTime.alchemicalWizardry.api.sacrifice.IIncense; - -public class ItemIncense extends Item implements IIncense -{ - private final String[] ITEM_NAMES = new String[]{"wood_ash", "byrrus", "livens", "viridis", "purpura"}; - - public ItemIncense() - { - super(); - this.hasSubtypes = true; - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean par4) - { - list.add(StatCollector.translateToLocal("tooltip.alchemy.usedinincense")); - } - - @Override - public String getUnlocalizedName(ItemStack itemStack) - { - int meta = MathHelper.clamp_int(itemStack.getItemDamage(), 0, ITEM_NAMES.length - 1); - return (getUnlocalizedName() + "." + ITEM_NAMES[meta]); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item id, CreativeTabs creativeTab, List list) - { - for (int meta = 0; meta < ITEM_NAMES.length; ++meta) - { - list.add(new ItemStack(id, 1, meta)); - } - } - - @Override - @SideOnly(Side.CLIENT) - public int getColorFromItemStack(ItemStack stack, int pass) - { - if(!this.doesIncenseHaveUniqueTexture(stack.getItemDamage())) - { - EnumIncense inc = EnumIncense.getEnumForIndex(stack.getItemDamage()); - return (int)((255*inc.redColour * 256 * 256 + 255*inc.greenColour * 256 + 255*inc.blueColour)); - } - - return 256 * (256 * 255 + 255) + 255; - } - - @Override - public int getMinLevel(ItemStack stack) - { - return EnumIncense.getEnumForIndex(stack.getItemDamage()).minValue; - } - - @Override - public int getMaxLevel(ItemStack stack) - { - return EnumIncense.getEnumForIndex(stack.getItemDamage()).maxValue; - } - - @Override - public int getIncenseDuration(ItemStack stack) - { - return EnumIncense.getEnumForIndex(stack.getItemDamage()).incenseDuration; - } - - @Override - public float getTickRate(ItemStack stack) - { - return EnumIncense.getEnumForIndex(stack.getItemDamage()).tickRate; - } - - @Override - public float getRedColour(ItemStack stack) - { - return EnumIncense.getEnumForIndex(stack.getItemDamage()).redColour; - } - - @Override - public float getGreenColour(ItemStack stack) - { - return EnumIncense.getEnumForIndex(stack.getItemDamage()).greenColour; - } - - @Override - public float getBlueColour(ItemStack stack) - { - return EnumIncense.getEnumForIndex(stack.getItemDamage()).blueColour; - } - - public boolean doesIncenseHaveUniqueTexture(int meta) - { - return false; - } - - public static void registerIncenseRecipes() - { - int WILDCARD = OreDictionary.WILDCARD_VALUE; - ItemStack woodStack = new ItemStack(Blocks.log, 1, WILDCARD); - ItemStack charcoalStack = new ItemStack(Items.coal, 1, 1); - ItemStack leavesStack = new ItemStack(Blocks.leaves, 1, WILDCARD); - ItemStack goldNuggetStack = new ItemStack(Items.gold_nugget, 1, WILDCARD); - ItemStack stringStack = new ItemStack(Items.string, 1, WILDCARD); - ItemStack glowstoneStack = new ItemStack(Items.glowstone_dust, 1, WILDCARD); - ItemStack soulSandStack = new ItemStack(Blocks.soul_sand); - ItemStack gunpowderStack = new ItemStack(Items.gunpowder); - ItemStack fermentedEyeStack = new ItemStack(Items.fermented_spider_eye); - ItemStack quartzStack = new ItemStack(Items.quartz, 1, WILDCARD); - ItemStack blazePowderStack = new ItemStack(Items.blaze_powder); - ItemStack netherwartStack = new ItemStack(Items.nether_wart); - ItemStack fracturedBoneStack = new ItemStack(ModItems.baseAlchemyItems, 1, 5); - - ItemStack woodashStack = new ItemStack(ModItems.itemIncense, 1, 0); - - GameRegistry.addRecipe(woodashStack, "WWW", "WCW", "WWW", 'W', woodStack, 'C', charcoalStack); //WOODASH - GameRegistry.addRecipe(new ShapelessBloodOrbRecipe(new ItemStack(ModItems.itemIncense, 1, 1), woodashStack, "dyeRed", "dyeRed", new ItemStack(Items.redstone), leavesStack, leavesStack, new ItemStack(ModItems.apprenticeBloodOrb))); - GameRegistry.addRecipe(new ShapelessBloodOrbRecipe(new ItemStack(ModItems.itemIncense, 1, 2), woodashStack, "dyeBlue", "dyeBlue", goldNuggetStack, goldNuggetStack, glowstoneStack, stringStack, stringStack, new ItemStack(ModItems.magicianBloodOrb))); - GameRegistry.addRecipe(new ShapelessBloodOrbRecipe(new ItemStack(ModItems.itemIncense, 1, 3), woodashStack, "dyeGreen", "dyeGreen", soulSandStack, gunpowderStack, fermentedEyeStack, new ItemStack(ModItems.masterBloodOrb))); - GameRegistry.addRecipe(new ShapelessBloodOrbRecipe(new ItemStack(ModItems.itemIncense, 1, 4), woodashStack, "dyePurple", "dyePurple", quartzStack, netherwartStack, blazePowderStack, fracturedBoneStack, goldNuggetStack, new ItemStack(ModItems.archmageBloodOrb))); - } - - public enum EnumIncense - { - WOODASH(0, 200, 1.0f, 1000, 0.937f, 0.898f, 0.820f), - RED(200, 600, 1.5f, 1000, 1.0f, 0, 0), - BLUE(600, 1200, 3.0f, 1000, 0, 0, 1.0f), - GREEN(1200, 2000, 4.0f, 1000, 0, 1.0f, 0), - PURPLE(2000, 3000, 5.0f, 1000, 1.0f, 0, 1.0f); - - public final int minValue; - public final int maxValue; - public final float tickRate; - public final int incenseDuration; - - public final float redColour; - public final float greenColour; - public final float blueColour; - - EnumIncense(int minValue, int maxValue, float tickRate, int dur, float red, float green, float blue) - { - this.minValue = minValue; - this.maxValue = maxValue; - this.tickRate = tickRate; - this.incenseDuration = dur; - - this.redColour = red; - this.greenColour = green; - this.blueColour = blue; - } - - public static EnumIncense getEnumForIndex(int index) - { - if(index > EnumIncense.values().length || index < 0) - { - return WOODASH; - }else - { - return EnumIncense.values()[index]; - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemMailOrderCatalogue.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemMailOrderCatalogue.java deleted file mode 100644 index e2916f15..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemMailOrderCatalogue.java +++ /dev/null @@ -1,28 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import net.minecraft.entity.Entity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.entity.mob.MailOrderEntityItem; - -public class ItemMailOrderCatalogue extends Item -{ - public ItemMailOrderCatalogue() - { - super(); - } - - @Override - public boolean hasCustomEntity(ItemStack stack) - { - return true; - } - - @Override - public Entity createEntity(World world, Entity location, ItemStack itemstack) - { - return new MailOrderEntityItem(world, location, itemstack); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemRitualDismantler.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemRitualDismantler.java deleted file mode 100644 index a62bb184..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemRitualDismantler.java +++ /dev/null @@ -1,93 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.Rituals; -import WayofTime.alchemicalWizardry.common.block.BlockRitualStone; -import WayofTime.alchemicalWizardry.common.tileEntity.TEMasterStone; - -public class ItemRitualDismantler extends BindableItems -{ - public ItemRitualDismantler() - { - super(); - setMaxStackSize(1); - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List par3List, boolean x) - { - par3List.add(StatCollector.translateToLocal("tooltip.dismatler.desc")); - if(stack.hasTagCompound()) - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + stack.getTagCompound().getString("ownerName")); - } - - @Override - public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ) - { - return BindableItems.checkAndSetItemOwner(stack, player) && breakRitualStoneAtMasterStone(stack, player, world, pos); - } - - public boolean breakRitualStoneAtMasterStone(ItemStack stack, EntityPlayer player, World world, BlockPos pos) - { - ItemStack[] playerInventory = player.inventory.mainInventory; - TileEntity tileEntity = world.getTileEntity(pos); - - if (tileEntity instanceof TEMasterStone) - { - TEMasterStone masterStone = (TEMasterStone) tileEntity; - int direction = masterStone.getDirection(); - int freeSpace = -1; - - List ritualList = Rituals.getRitualList(masterStone.getCurrentRitual()); - if (ritualList == null) - { - return false; - } - - for (int i = 0; i < playerInventory.length; i++) - { - if (playerInventory[i] == null) - { - freeSpace = i; - break; - } - } - - for (RitualComponent rc : ritualList) - { - BlockPos newPos = pos.add(rc.getX(direction), rc.getY(), rc.getZ(direction)); - if (!world.isAirBlock(newPos) && world.getBlockState(newPos).getBlock() instanceof BlockRitualStone) - { - if (freeSpace >= 0) - { - if (BindableItems.syphonBatteries(stack, player, getEnergyUsed()) || player.capabilities.isCreativeMode) - { - world.setBlockToAir(newPos); - player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.ritualStone)); - if (world.isRemote) - { - world.playAuxSFX(2005, pos.offsetUp(), 0); - - return true; - } - } - - return true; - } - } - } - } - - return false; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemRitualDiviner.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemRitualDiviner.java deleted file mode 100644 index f34e5283..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemRitualDiviner.java +++ /dev/null @@ -1,527 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.IChatComponent; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import org.lwjgl.input.Keyboard; - -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.api.Int3; -import WayofTime.alchemicalWizardry.api.items.interfaces.IRitualDiviner; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.IRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.Rituals; -import WayofTime.alchemicalWizardry.common.tileEntity.TEMasterStone; - -public class ItemRitualDiviner extends BindableItems implements IRitualDiviner -{ - private int maxMetaData; - - public ItemRitualDiviner() - { - super(); - setMaxStackSize(1); - setEnergyUsed(100); - setMaxDamage(4); - this.hasSubtypes = true; - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List par3List, boolean x) - { - par3List.add(StatCollector.translateToLocal("tooltip.ritualdiviner.desc")); - - if (this.getMaxRuneDisplacement(stack) == 1) - { - par3List.add(StatCollector.translateToLocal("tooltip.ritualdiviner.canplace")); - }else if (this.getMaxRuneDisplacement(stack) >= 2) - { - par3List.add(StatCollector.translateToLocal("tooltip.ritualdiviner.canplacedawn")); - - }else - { - par3List.add(StatCollector.translateToLocal("tooltip.ritualdiviner.cannotplace")); - } - - par3List.add(StatCollector.translateToLocal("tooltip.ritualdiviner.ritualtunedto") + " " + this.getNameForDirection(this.getDirection(stack))); - - boolean sneaking = Keyboard.isKeyDown(Keyboard.KEY_RSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_LSHIFT); - - if(sneaking) - { - if (!(stack.getTagCompound() == null)) - { - String ritualID = this.getCurrentRitual(stack); - //TODO - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + stack.getTagCompound().getString("ownerName")); - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.ritualid") + " " + ritualID); - List ritualList = Rituals.getRitualList(this.getCurrentRitual(stack)); - if (ritualList == null) - { - return; - } - - int blankStones = 0; - int airStones = 0; - int waterStones = 0; - int fireStones = 0; - int earthStones = 0; - int duskStones = 0; - int dawnStones = 0; - - for (RitualComponent rc : ritualList) - { - switch (rc.getStoneType()) - { - case RitualComponent.BLANK: - blankStones++; - break; - - case RitualComponent.AIR: - airStones++; - break; - - case RitualComponent.WATER: - waterStones++; - break; - - case RitualComponent.FIRE: - fireStones++; - break; - - case RitualComponent.EARTH: - earthStones++; - break; - - case RitualComponent.DUSK: - duskStones++; - break; - - case RitualComponent.DAWN: - dawnStones++; - break; - } - } - - int totalStones = blankStones + airStones + waterStones + fireStones + earthStones + duskStones + dawnStones; - - par3List.add(EnumChatFormatting.WHITE + StatCollector.translateToLocal("tooltip.ritualdiviner.blankstones") + " " + blankStones); - par3List.add(EnumChatFormatting.AQUA + StatCollector.translateToLocal("tooltip.ritualdiviner.airstones") + " " + airStones); - par3List.add(EnumChatFormatting.BLUE + StatCollector.translateToLocal("tooltip.ritualdiviner.waterstones") + " " + waterStones); - par3List.add(EnumChatFormatting.RED + StatCollector.translateToLocal("tooltip.ritualdiviner.firestones") + " " + fireStones); - par3List.add(EnumChatFormatting.DARK_GREEN + StatCollector.translateToLocal("tooltip.ritualdiviner.earthstones") + " " + earthStones); - par3List.add(EnumChatFormatting.DARK_PURPLE + StatCollector.translateToLocal("tooltip.ritualdiviner.duskstones") + " " + duskStones); - par3List.add(EnumChatFormatting.GOLD + StatCollector.translateToLocal("tooltip.ritualdiviner.dawnstones") + " " + dawnStones); - par3List.add(EnumChatFormatting.UNDERLINE + StatCollector.translateToLocal("tooltip.ritualdiviner.totalStones") + " " + totalStones); - } - }else - { - par3List.add(EnumChatFormatting.AQUA + "-" + StatCollector.translateToLocal("tooltip.ritualdiviner.moreinfo") + "-"); - } - - } - - @Override - public String getItemStackDisplayName(ItemStack stack) - { - if (!(stack.getTagCompound() == null)) - { - String ritualID = this.getCurrentRitual(stack); - if (ritualID.equals("")) - { - return super.getItemStackDisplayName(stack); - } - return "Ritual: " + Rituals.getNameOfRitual(ritualID); - } else - { - return super.getItemStackDisplayName(stack); - } - } - - @Override - public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ) - { - if (!BindableItems.checkAndSetItemOwner(stack, player)) return false; - - if(placeRitualStoneAtMasterStone(stack, player, world, pos)) - { - this.setStoredLocation(stack, new Int3(pos)); - return true; - }else if(!(world.getBlockState(pos).getBlock() instanceof IRitualStone || world.getBlockState(pos).getBlock() instanceof IMasterRitualStone) && !player.isSneaking()) - { - if(world.isRemote) - { - return false; - } - this.cycleDirection(stack); - player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip.ritualdiviner.ritualtunedto") + " " + this.getNameForDirection(this.getDirection(stack)))); - return true; - } - - return false; - } - - public boolean placeRitualStoneAtMasterStone(ItemStack stack, EntityPlayer player, World world, BlockPos pos) - { - int direction = this.getDirection(stack); - - ItemStack[] playerInventory = player.inventory.mainInventory; - TileEntity tileEntity = world.getTileEntity(pos); - - if (tileEntity instanceof TEMasterStone) - { - List ritualList = Rituals.getRitualList(this.getCurrentRitual(stack)); - if (ritualList == null) - { - return false; - } - - int playerInvRitualStoneLocation = -1; - - for (int i = 0; i < playerInventory.length; i++) - { - if (playerInventory[i] == null) - { - continue; - } - - if (new ItemStack(ModBlocks.ritualStone).isItemEqual(playerInventory[i])) - { - playerInvRitualStoneLocation = i; - break; - } - } - - for (RitualComponent rc : ritualList) - { - BlockPos newPos = pos.add(rc.getX(direction), rc.getY(), rc.getZ(direction)); - - if (world.isAirBlock(newPos)) - { - if (playerInvRitualStoneLocation >= 0 || player.capabilities.isCreativeMode) - { - if (rc.getStoneType() > this.maxMetaData + this.getMaxRuneDisplacement(stack)) - { - world.playAuxSFX(200, newPos.offsetUp(), 0); - return true; - } - - if (!player.capabilities.isCreativeMode) - { - player.inventory.decrStackSize(playerInvRitualStoneLocation, 1); - } - - if(BindableItems.syphonBatteries(stack, player, getEnergyUsed())) - { - world.setBlockState(newPos, ModBlocks.ritualStone.getStateFromMeta(rc.getStoneType()), 3); - - if (world.isRemote) - { - world.playAuxSFX(2005, newPos.offsetUp(), 0); - - return true; - } - } - - return true; - } - } else - { - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - - if (block == ModBlocks.ritualStone) - { - int metadata = block.getMetaFromState(state); - if (metadata != rc.getStoneType()) - { - if(BindableItems.syphonBatteries(stack, player, getEnergyUsed())) - { - if (rc.getStoneType() > this.maxMetaData + this.getMaxRuneDisplacement(stack)) - { - world.playAuxSFX(200, newPos.offsetUp(), 0); - return true; - } - - world.setBlockState(newPos, ModBlocks.ritualStone.getStateFromMeta(rc.getStoneType()), 3); - return true; - } - } - } else - { - world.playAuxSFX(0, newPos.offsetUp(), 0); - return true; - } - } - } - } - - return false; - } - - @Override - public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5) - { - if(entity instanceof EntityPlayer && hasStoredLocation(stack) && world.getWorldTime() % 5 == 0) - { - Int3 loc = getStoredLocation(stack); - - int x = loc.xCoord; - int y = loc.yCoord; - int z = loc.zCoord; - - if(!this.placeRitualStoneAtMasterStone(stack, (EntityPlayer)entity, world, new BlockPos(x, y, z))) - { - this.voidStoredLocation(stack); - } - } - } - - public void setStoredLocation(ItemStack stack, Int3 location) - { - NBTTagCompound tag = stack.getTagCompound(); - if(tag == null) - { - tag = new NBTTagCompound(); - stack.setTagCompound(tag); - } - - NBTTagCompound locTag = location.writeToNBT(new NBTTagCompound()); - locTag.setBoolean("isStored", true); - - tag.setTag("location", locTag); - } - - public void voidStoredLocation(ItemStack stack) - { - NBTTagCompound tag = stack.getTagCompound(); - if(tag == null || !tag.hasKey("location")) - { -// tag = new NBTTagCompound(); -// stack.setTagCompound(tag); - this.setStoredLocation(stack, new Int3(0,0,0)); - return; - } - - NBTTagCompound locTag = (NBTTagCompound)tag.getTag("location"); - if(locTag != null) - { - locTag.setBoolean("isStored", false); - } - } - - public Int3 getStoredLocation(ItemStack stack) - { - NBTTagCompound tag = stack.getTagCompound(); - if(tag == null || !tag.hasKey("location")) - { - return new Int3(0, 0, 0); - } - - NBTTagCompound locTag = (NBTTagCompound)tag.getTag("location"); - - return Int3.readFromNBT(locTag); - } - - public boolean hasStoredLocation(ItemStack stack) - { - NBTTagCompound tag = stack.getTagCompound(); - if(tag == null || !tag.hasKey("location")) - { - return false; - } - - NBTTagCompound locTag = (NBTTagCompound)tag.getTag("location"); - - return locTag.getBoolean("isStored"); - } - - @Override - public ItemStack onItemRightClick(ItemStack stack, World par2World, EntityPlayer par3EntityPlayer) - { - if (BindableItems.checkAndSetItemOwner(stack, par3EntityPlayer) && par3EntityPlayer.isSneaking()) - { - rotateRituals(par2World,par3EntityPlayer, stack, true); - } - - return stack; - } - - @Override - public boolean onEntitySwing(EntityLivingBase entityLiving, ItemStack stack) - { - if (entityLiving instanceof EntityPlayer) - { - EntityPlayer player = (EntityPlayer) entityLiving; - - if (!BindableItems.checkAndSetItemOwner(stack, player)) return true; - - if (!player.isSwingInProgress) - { - if (player.isSneaking()) - { - rotateRituals(player.worldObj, player, stack, false); - } -// else -// { -// if (!player.worldObj.isRemote) -// { -// int direction = this.getDirection(stack) - 1; -// if (direction == 0) direction = 4; -// this.setDirection(stack, direction); -// player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip.ritualdiviner.ritualtunedto") + " " + this.getNameForDirection(direction))); -// } -// } - } - } - - return false; - } - - public void rotateRituals(World world, EntityPlayer player, ItemStack stack, boolean next) - { - this.voidStoredLocation(stack); - String currentRitualID = this.getCurrentRitual(stack); - - this.setCurrentRitual(stack, next? Rituals.getNextRitualKey(currentRitualID):Rituals.getPreviousRitualKey(currentRitualID)); - - if (world.isRemote) - { - IChatComponent chatmessagecomponent = new ChatComponentText(StatCollector.translateToLocal("message.ritual.currentritual") + " " + Rituals.getNameOfRitual(this.getCurrentRitual(stack))); - player.addChatComponentMessage(chatmessagecomponent); - } - } - - @Override - public String getCurrentRitual(ItemStack stack) - { - if (stack.getTagCompound() == null) - { - stack.setTagCompound(new NBTTagCompound()); - } - - return stack.getTagCompound().getString("ritualID"); - } - - @Override - public void setCurrentRitual(ItemStack stack, String ritualID) - { - if (stack.getTagCompound() == null) - { - stack.setTagCompound(new NBTTagCompound()); - } - - stack.getTagCompound().setString("ritualID", ritualID); - } - - @Override - public int getMaxRuneDisplacement(ItemStack stack) //0 indicates the starting 4 runes, 1 indicates it can use Dusk runes - { - return stack.getItemDamage(); - } - - @Override - public void setMaxRuneDisplacement(ItemStack stack, int displacement) - { - stack.setItemDamage(displacement); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item id, CreativeTabs creativeTab, List list) - { - list.add(new ItemStack(id)); - - ItemStack duskRitualDivinerStack = new ItemStack(id); - this.setMaxRuneDisplacement(duskRitualDivinerStack, 1); - list.add(duskRitualDivinerStack); - - ItemStack dawnRitualDivinerStack = new ItemStack(id); - this.setMaxRuneDisplacement(dawnRitualDivinerStack, 2); - list.add(dawnRitualDivinerStack); - } - - @Override - public int getDirection(ItemStack itemStack) - { - if(itemStack.getTagCompound() == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - return itemStack.getTagCompound().getInteger("direction"); - } - - @Override - public void setDirection(ItemStack itemStack, int direction) - { - if(itemStack.getTagCompound() == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - itemStack.getTagCompound().setInteger("direction", direction); - } - - @Override - public int cycleDirection(ItemStack itemStack) - { - this.voidStoredLocation(itemStack); - int direction = this.getDirection(itemStack); - - if(direction < 4) - { - direction = Math.max(1, direction + 1); - }else - { - direction = 1; - } - - this.setDirection(itemStack, direction); - - return direction; - } - - @Override - public String getNameForDirection(int direction) - { - String dir = ""; - switch(direction) - { - case 0: - case 1: - dir = StatCollector.translateToLocal("message.ritual.side.north"); - break; - case 2: - dir = StatCollector.translateToLocal("message.ritual.side.east"); - break; - case 3: - dir = StatCollector.translateToLocal("message.ritual.side.south"); - break; - case 4: - dir = StatCollector.translateToLocal("message.ritual.side.west"); - } - - return dir; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemSpellEffectBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemSpellEffectBlock.java deleted file mode 100644 index 8a33e9af..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemSpellEffectBlock.java +++ /dev/null @@ -1,51 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -public class ItemSpellEffectBlock extends ItemBlock -{ - public ItemSpellEffectBlock(Block par1) - { - super(par1); - setHasSubtypes(true); - } - - @Override - public String getUnlocalizedName(ItemStack itemstack) - { - String name; - - switch (itemstack.getItemDamage()) - { - case 0: - name = "fire"; - break; - - case 1: - name = "ice"; - break; - - case 2: - name = "wind"; - break; - - case 3: - name = "earth"; - break; - - default: - name = "broken"; - } - - return getUnlocalizedName() + "." + name; - } - - @Override - public int getMetadata(int par1) - - { - return par1; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemSpellEnhancementBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemSpellEnhancementBlock.java deleted file mode 100644 index 0e121a16..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemSpellEnhancementBlock.java +++ /dev/null @@ -1,95 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -public class ItemSpellEnhancementBlock extends ItemBlock -{ - public ItemSpellEnhancementBlock(Block par1) - { - super(par1); - setHasSubtypes(true); - } - - @Override - public String getUnlocalizedName(ItemStack itemstack) - { - String name; - - switch (itemstack.getItemDamage()) - { - case 0: - name = "power1"; - break; - - case 1: - name = "power2"; - break; - - case 2: - name = "power3"; - break; - - case 3: - name = "power4"; - break; - - case 4: - name = "power5"; - break; - - case 5: - name = "cost1"; - break; - - case 6: - name = "cost2"; - break; - - case 7: - name = "cost3"; - break; - - case 8: - name = "cost4"; - break; - - case 9: - name = "cost5"; - break; - - case 10: - name = "potency1"; - break; - - case 11: - name = "potency2"; - break; - - case 12: - name = "potency3"; - break; - - case 13: - name = "potency4"; - break; - - case 14: - name = "potency5"; - break; - - default: - name = "broken"; - } - - return getUnlocalizedName() + "." + name; - } - - @Override - public int getMetadata(int par1) - - { - return par1; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemSpellModifierBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemSpellModifierBlock.java deleted file mode 100644 index 99cfebc6..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemSpellModifierBlock.java +++ /dev/null @@ -1,51 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -public class ItemSpellModifierBlock extends ItemBlock -{ - public ItemSpellModifierBlock(Block par1) - { - super(par1); - setHasSubtypes(true); - } - - @Override - public String getUnlocalizedName(ItemStack itemstack) - { - String name; - - switch (itemstack.getItemDamage()) - { - case 0: - name = "default"; - break; - - case 1: - name = "offensive"; - break; - - case 2: - name = "defensive"; - break; - - case 3: - name = "environmental"; - break; - - default: - name = "broken"; - } - - return getUnlocalizedName() + "." + name; - } - - @Override - public int getMetadata(int par1) - - { - return par1; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemSpellParadigmBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemSpellParadigmBlock.java deleted file mode 100644 index 1868c9dc..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemSpellParadigmBlock.java +++ /dev/null @@ -1,50 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -public class ItemSpellParadigmBlock extends ItemBlock -{ - public ItemSpellParadigmBlock(Block par1) - { - super(par1); - setHasSubtypes(true); - } - - @Override - public String getUnlocalizedName(ItemStack itemstack) - { - String name; - - switch (itemstack.getItemDamage()) - { - case 0: - name = "projectile"; - break; - - case 1: - name = "self"; - break; - - case 2: - name = "melee"; - break; - - case 3: - name = "tool"; - break; - - default: - name = "broken"; - } - - return getUnlocalizedName() + "." + name; - } - - @Override - public int getMetadata(int par1) - { - return par1; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemStabilityGlyphBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemStabilityGlyphBlock.java deleted file mode 100644 index 45a0b90a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemStabilityGlyphBlock.java +++ /dev/null @@ -1,38 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -public class ItemStabilityGlyphBlock extends ItemBlock -{ - public ItemStabilityGlyphBlock(Block block) - { - super(block); - setHasSubtypes(true); - } - - @Override - public String getUnlocalizedName(ItemStack itemstack) - { - String name; - - switch (itemstack.getItemDamage()) - { - case 0: - name = "stability1"; - break; - - default: - name = "broken"; - } - - return getUnlocalizedName() + "." + name; - } - - @Override - public int getMetadata(int par1) - { - return par1; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/KeyOfBinding.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/KeyOfBinding.java deleted file mode 100644 index 16c07641..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/KeyOfBinding.java +++ /dev/null @@ -1,109 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.ModItems; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class KeyOfBinding extends BindableItems -{ - public KeyOfBinding() - { - super(); - setMaxStackSize(1); - this.setEnergyUsed(1000); - this.hasSubtypes = true; - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.diablokey.desc")); - if (!(par1ItemStack.getTagCompound() == null)) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - World world = par3EntityPlayer.worldObj; - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer instanceof FakePlayer || par3EntityPlayer instanceof EntityPlayerMP) - { - return par1ItemStack; - } - - if (world != null) - { - double posX = par3EntityPlayer.posX; - double posY = par3EntityPlayer.posY; - double posZ = par3EntityPlayer.posZ; - world.playSoundEffect((double) ((float) posX + 0.5F), (double) ((float) posY + 0.5F), (double) ((float) posZ + 0.5F), "random.fizz", 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); - SpellHelper.sendIndexedParticleToAllAround(world, posX, posY, posZ, 20, world.provider.getDimensionId(), 4, posX, posY, posZ); - } - - if (!par3EntityPlayer.worldObj.isRemote && !(par3EntityPlayer.getClass().equals(EntityPlayerMP.class))) - { - return par1ItemStack; - } - - if (par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - NBTTagCompound itemTag = par1ItemStack.getTagCompound(); - - if (itemTag == null || itemTag.getString("ownerName").equals("")) - { - return par1ItemStack; - } - - String ownerName = itemTag.getString("ownerName"); - ItemStack[] inv = par3EntityPlayer.inventory.mainInventory; - - for (ItemStack itemStack : inv) - { - if (itemStack == null) - { - continue; - } - - Item item = itemStack.getItem(); - - if (item instanceof KeyOfBinding) - { - continue; - } - - if (item instanceof IBindable) - { - BindableItems.checkAndSetItemOwner(itemStack, ownerName); - } - } - - return par1ItemStack; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item id, CreativeTabs creativeTab, List list) - { - list.add(new ItemStack(ModItems.itemKeyOfDiablo)); - ItemStack boundKey = new ItemStack(ModItems.itemKeyOfDiablo); - BindableItems.checkAndSetItemOwner(boundKey, "Server-wide Soul Network"); - list.add(boundKey); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/LavaCrystal.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/LavaCrystal.java deleted file mode 100644 index 5cac4a71..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/LavaCrystal.java +++ /dev/null @@ -1,76 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; - -public class LavaCrystal extends BindableItems -{ - public LavaCrystal() - { - super(); - setMaxStackSize(1); - setEnergyUsed(25); - } - - /* - * Used to have the item contain itself. - */ - @Override - public ItemStack getContainerItem(ItemStack itemStack) - { - SoulNetworkHandler.syphonFromNetwork(itemStack, this.getEnergyUsed()); - ItemStack copiedStack = itemStack.copy(); - copiedStack.setItemDamage(copiedStack.getItemDamage()); - copiedStack.stackSize = 1; - return copiedStack; - } - - @Override - public boolean hasContainerItem(ItemStack itemStack) - { - return true; - } - - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer); - return par1ItemStack; - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.lavacrystal.desc1")); - par3List.add(StatCollector.translateToLocal("tooltip.lavacrystal.desc2")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - public boolean hasEnoughEssence(ItemStack itemStack) - { - if (itemStack.getTagCompound() != null && !(itemStack.getTagCompound().getString("ownerName").equals(""))) - { - String ownerName = itemStack.getTagCompound().getString("ownerName"); - - if (MinecraftServer.getServer() == null) - { - return false; - } - - if (SoulNetworkHandler.getCurrentEssence(ownerName) >= this.getEnergyUsed()) - { - return true; - } - } - return false; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/LifeBucket.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/LifeBucket.java deleted file mode 100644 index 7a19f8bd..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/LifeBucket.java +++ /dev/null @@ -1,12 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemBucket; - -public class LifeBucket extends ItemBucket -{ - public LifeBucket(Block block) - { - super(block); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/MagicianBloodOrb.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/MagicianBloodOrb.java deleted file mode 100644 index 26795324..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/MagicianBloodOrb.java +++ /dev/null @@ -1,10 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -public class MagicianBloodOrb extends Orb -{ - public MagicianBloodOrb(int damage) - { - super(damage); - orbLevel = 3; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/MasterBloodOrb.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/MasterBloodOrb.java deleted file mode 100644 index f7b15ab0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/MasterBloodOrb.java +++ /dev/null @@ -1,10 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -public class MasterBloodOrb extends Orb -{ - public MasterBloodOrb(int damage) - { - super(damage); - orbLevel = 4; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/Orb.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/Orb.java deleted file mode 100644 index 42a6a3b1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/Orb.java +++ /dev/null @@ -1,201 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBloodOrb; -import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class Orb extends Item implements ArmourUpgrade, IBindable, IBloodOrb -{ - private int maxEssence; - protected int orbLevel; - - public Orb(int damage) - { - super(); - setMaxStackSize(1); - maxEssence = damage; - orbLevel = 1; - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.energybattery.desc")); - if (!(par1ItemStack.getTagCompound() == null)) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer)) - { - return par1ItemStack; - } - - World world = par3EntityPlayer.worldObj; - - if (world != null) - { - double posX = par3EntityPlayer.posX; - double posY = par3EntityPlayer.posY; - double posZ = par3EntityPlayer.posZ; - world.playSoundEffect((double) ((float) posX + 0.5F), (double) ((float) posY + 0.5F), (double) ((float) posZ + 0.5F), "random.fizz", 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); - SpellHelper.sendIndexedParticleToAllAround(world, posX, posY, posZ, 20, world.provider.getDimensionId(), 4, posX, posY, posZ); - } - NBTTagCompound itemTag = par1ItemStack.getTagCompound(); - - if(SpellHelper.isFakePlayer(par2World, par3EntityPlayer)) - { - return par1ItemStack; - } - - if (itemTag == null || itemTag.getString("ownerName").equals("")) - { - return par1ItemStack; - } - - if (world.isRemote) - { - return par1ItemStack; - } - - if(itemTag.getString("ownerName").equals(SpellHelper.getUsername(par3EntityPlayer))) - { - SoulNetworkHandler.setMaxOrbToMax(itemTag.getString("ownerName"), this.orbLevel); - } - - SoulNetworkHandler.addCurrentEssenceToMaximum(itemTag.getString("ownerName"), 200, this.getMaxEssence()); - BindableItems.hurtPlayer(par3EntityPlayer, 200); - return par1ItemStack; - } - - /* - * @return the damage that was not deducted - */ - public int damageItem(ItemStack par1ItemStack, int par2int) - { - if (par2int == 0) - { - return 0; - } - - int before = this.getDamage(par1ItemStack); - this.setDamage(par1ItemStack, this.getDamage(par1ItemStack) + par2int); - return par2int - (this.getDamage(par1ItemStack) - before); - } - - protected void damagePlayer(World world, EntityPlayer player, int damage) - { - if (world != null) - { - double posX = player.posX; - double posY = player.posY; - double posZ = player.posZ; - world.playSoundEffect((double) ((float) posX + 0.5F), (double) ((float) posY + 0.5F), (double) ((float) posZ + 0.5F), "random.fizz", 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); - float f = 1.0F; - float f1 = f * 0.6F + 0.4F; - float f2 = f * f * 0.7F - 0.5F; - float f3 = f * f * 0.6F - 0.7F; - - for (int l = 0; l < 8; ++l) - { - world.spawnParticle(EnumParticleTypes.REDSTONE, posX + Math.random() - Math.random(), posY + Math.random() - Math.random(), posZ + Math.random() - Math.random(), f1, f2, f3); - } - } - - if (!player.capabilities.isCreativeMode) - { - for (int i = 0; i < damage; i++) - { - player.setHealth((player.getHealth() - 1)); - } - } - - if (player.getHealth() <= 0) - { - player.inventory.dropAllItems(); - } - } - - public int getMaxEssence() - { - return this.maxEssence; - } - - public int getOrbLevel() - { - return orbLevel; - } - - @Override - public void onArmourUpdate(World world, EntityPlayer player, ItemStack thisItemStack) {} - - @Override - public boolean isUpgrade() - { - return false; - } - - @Override - public int getEnergyForTenSeconds() - { - return 0; - } - - @Override - public ItemStack getContainerItem(ItemStack itemStack) - { - return itemStack; - } - - @Override - public boolean hasContainerItem(ItemStack itemStack) - { - return true; - } - - //@SideOnly(Side.SERVER) - @Deprecated - public int getCurrentEssence(ItemStack par1ItemStack) - { - if (par1ItemStack == null) - { - return 0; - } - - NBTTagCompound itemTag = par1ItemStack.getTagCompound(); - - if (itemTag == null || itemTag.getString("ownerName").equals("")) - { - return 0; - } - - String owner = itemTag.getString("ownerName"); - World worldSave = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) worldSave.loadItemData(LifeEssenceNetwork.class, owner); - - if (data == null) - { - data = new LifeEssenceNetwork(owner); - worldSave.setItemData(owner, data); - } - - return data.currentEssence; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ReinforcedTelepositionFocus.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ReinforcedTelepositionFocus.java deleted file mode 100644 index 90c5f01d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ReinforcedTelepositionFocus.java +++ /dev/null @@ -1,36 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; - -public class ReinforcedTelepositionFocus extends TelepositionFocus -{ - public ReinforcedTelepositionFocus() - { - super(3); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.reinforcedtelepfocus.desc1")); - par3List.add(StatCollector.translateToLocal("tooltip.reinforcedtelepfocus.desc2")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - NBTTagCompound itemTag = par1ItemStack.getTagCompound(); - - if (!par1ItemStack.getTagCompound().getString("ownerName").equals("")) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.coords") + " " + itemTag.getInteger("xCoord") + ", " + itemTag.getInteger("yCoord") + ", " + itemTag.getInteger("zCoord")); - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.dimension") + " " + getDimensionID(par1ItemStack)); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/SacrificialDagger.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/SacrificialDagger.java deleted file mode 100644 index 2ad4253e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/SacrificialDagger.java +++ /dev/null @@ -1,233 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.EnumAction; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.event.SacrificeKnifeUsedEvent; -import WayofTime.alchemicalWizardry.api.sacrifice.PlayerSacrificeHandler; -import WayofTime.alchemicalWizardry.api.tile.IBloodAltar; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class SacrificialDagger extends Item -{ - public SacrificialDagger() - { - super(); - setMaxStackSize(1); - setFull3D(); - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - if (AlchemicalWizardry.wimpySettings) - { - par3List.add(StatCollector.translateToLocal("tooltip.sacrificialdagger.desc1")); - } else - { - par3List.add(StatCollector.translateToLocal("tooltip.sacrificialdagger.desc2")); - par3List.add(StatCollector.translateToLocal("tooltip.sacrificialdagger.desc3")); - } - } - - /** - * called when the player releases the use item button. Args: itemstack, world, entityplayer, itemInUseCount - */ - @Override - public void onPlayerStoppedUsing(ItemStack stack, World world, EntityPlayer player, int itemInUseCount) - { -// if(itemInUseCount < 32) -// { -// return; -// } - - PlayerSacrificeHandler.sacrificePlayerHealth(player); - } - - @Override - public int getMaxItemUseDuration(ItemStack stack) - { - return 72000; - } - - /** - * returns the action that specifies what animation to play when the items is being used - */ - @Override - public EnumAction getItemUseAction(ItemStack stack) - { - return EnumAction.BOW; - } - - @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) - { - if (this.canUseForSacrifice(stack)) - { - player.setItemInUse(stack, this.getMaxItemUseDuration(stack)); - return stack; - } - - if (!player.capabilities.isCreativeMode) - { - SacrificeKnifeUsedEvent evt = new SacrificeKnifeUsedEvent(player, true, true, 2); - if(MinecraftForge.EVENT_BUS.post(evt)) - { - return stack; - } - - if(evt.shouldDrainHealth) - { - player.setHealth(player.getHealth() - 2); - } - - if(!evt.shouldFillAltar) - { - return stack; - } - } - - if (player instanceof FakePlayer) - { - return stack; - } - - double posX = player.posX; - double posY = player.posY; - double posZ = player.posZ; - world.playSoundEffect((double) ((float) posX + 0.5F), (double) ((float) posY + 0.5F), (double) ((float) posZ + 0.5F), "random.fizz", 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); - float f = 1.0F; - float f1 = f * 0.6F + 0.4F; - float f2 = f * f * 0.7F - 0.5F; - float f3 = f * f * 0.6F - 0.7F; - - for (int l = 0; l < 8; ++l) - { - world.spawnParticle(EnumParticleTypes.REDSTONE, posX + Math.random() - Math.random(), posY + Math.random() - Math.random(), posZ + Math.random() - Math.random(), f1, f2, f3); - } - - if (!world.isRemote && SpellHelper.isFakePlayer(world, player)) - { - return stack; - } - - if (player.isPotionActive(AlchemicalWizardry.customPotionSoulFray)) - { - findAndFillAltar(world, player, 20); - } else - { - findAndFillAltar(world, player, 200); - } - - if (player.getHealth() <= 0.001f) - { - player.onDeath(DamageSource.generic); - } - - return stack; - } - - public void findAndFillAltar(World world, EntityPlayer player, int amount) - { - BlockPos pos = player.getPosition(); - IBloodAltar altarEntity = getAltar(world, pos); - - if (altarEntity == null) - { - return; - } - - altarEntity.sacrificialDaggerCall(amount, false); - altarEntity.startCycle(); - } - - public IBloodAltar getAltar(World world, BlockPos pos) - { - TileEntity tileEntity; - - for (int i = -2; i <= 2; i++) - { - for (int j = -2; j <= 2; j++) - { - for (int k = -2; k <= 1; k++) - { - BlockPos newPos = pos.add(i, j, k); - tileEntity = world.getTileEntity(newPos); - - if(tileEntity instanceof IBloodAltar) - { - return (IBloodAltar)tileEntity; - } - } - } - } - - return null; - } - - @Override - public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5) - { - if(!world.isRemote && entity instanceof EntityPlayer) - { - this.setUseForSacrifice(stack, this.isPlayerPreparedForSacrifice(world, (EntityPlayer)entity)); - } - } - - @Override - public String getItemStackDisplayName(ItemStack stack) - { - if (AlchemicalWizardry.wimpySettings) - { - return "Sacrificial Orb"; - } - return super.getItemStackDisplayName(stack); - } - - public boolean isPlayerPreparedForSacrifice(World world, EntityPlayer player) - { - return !world.isRemote && (PlayerSacrificeHandler.getPlayerIncense(player) > 0); - } - - public boolean canUseForSacrifice(ItemStack stack) - { - NBTTagCompound tag = stack.getTagCompound(); - - return tag != null && tag.getBoolean("sacrifice"); - } - - public void setUseForSacrifice(ItemStack stack, boolean sacrifice) - { - NBTTagCompound tag = stack.getTagCompound(); - if(tag == null) - { - tag = new NBTTagCompound(); - stack.setTagCompound(tag); - } - - tag.setBoolean("sacrifice", sacrifice); - } - - @Override - @SideOnly(Side.CLIENT) - public boolean hasEffect(ItemStack stack) - { - return this.canUseForSacrifice(stack) || super.hasEffect(stack); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ScribeTool.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ScribeTool.java deleted file mode 100644 index 57fd29fc..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ScribeTool.java +++ /dev/null @@ -1,51 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; - -import java.util.List; - -public class ScribeTool extends BindableItems -{ - private int meta; - - public ScribeTool(int inkType) - { - super(); - setMaxStackSize(1); - setMaxDamage(10); - setEnergyUsed(10); - this.meta = inkType; - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.scribetool.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer)) - { - if (par1ItemStack.getItemDamage() > 0) - { - par1ItemStack.setItemDamage(par1ItemStack.getItemDamage() - 1); - } - } - return par1ItemStack; - } - - public int getType() - { - return this.meta; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/TelepositionFocus.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/TelepositionFocus.java deleted file mode 100644 index 503643e0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/TelepositionFocus.java +++ /dev/null @@ -1,115 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; - -public class TelepositionFocus extends BindableItems -{ - private int focusLevel; - - public TelepositionFocus(int focusLevel) - { - super(); - this.setMaxStackSize(1); - setCreativeTab(AlchemicalWizardry.tabBloodMagic); - this.focusLevel = focusLevel; - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.telepositionfocus.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - NBTTagCompound itemTag = par1ItemStack.getTagCompound(); - - if (!par1ItemStack.getTagCompound().getString("ownerName").equals("")) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.coords") + " " + itemTag.getInteger("xCoord") + ", " + itemTag.getInteger("yCoord") + ", " + itemTag.getInteger("zCoord")); - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.dimension") + " " + getDimensionID(par1ItemStack)); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer)) - { - if (par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - } - return par1ItemStack; - } - - public int getDimensionID(ItemStack itemStack) - { - if (itemStack.getTagCompound() == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - return itemStack.getTagCompound().getInteger("dimensionId"); - } - - public World getWorld(ItemStack itemStack) - { - return DimensionManager.getWorld(getDimensionID(itemStack)); - } - - public int xCoord(ItemStack itemStack) - { - if (!(itemStack.getTagCompound() == null)) - { - return itemStack.getTagCompound().getInteger("xCoord"); - } else - { - return 0; - } - } - - public int yCoord(ItemStack itemStack) - { - if (!(itemStack.getTagCompound() == null)) - { - return itemStack.getTagCompound().getInteger("yCoord"); - } else - { - return 0; - } - } - - public int zCoord(ItemStack itemStack) - { - if (!(itemStack.getTagCompound() == null)) - { - return itemStack.getTagCompound().getInteger("zCoord"); - } else - { - return 0; - } - } - - public BlockPos getBlockPos(ItemStack stack) - { - return new BlockPos(xCoord(stack), yCoord(stack), zCoord(stack)); - } - - public int getFocusLevel() - { - return this.focusLevel; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/TranscendentBloodOrb.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/TranscendentBloodOrb.java deleted file mode 100644 index d8535662..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/TranscendentBloodOrb.java +++ /dev/null @@ -1,10 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -public class TranscendentBloodOrb extends Orb -{ - public TranscendentBloodOrb(int damage) - { - super(damage); - orbLevel = 6; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/WaterScribeTool.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/WaterScribeTool.java deleted file mode 100644 index 06d18615..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/WaterScribeTool.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items; - -public class WaterScribeTool extends ScribeTool -{ - public WaterScribeTool() - { - super(1); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/BoundArmour.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/BoundArmour.java deleted file mode 100644 index b26cccab..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/BoundArmour.java +++ /dev/null @@ -1,828 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.armour; - -import java.util.List; - -import net.minecraft.client.model.ModelBiped; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.EnumAction; -import net.minecraft.item.ItemArmor; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.potion.Potion; -import net.minecraft.util.DamageSource; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.ISpecialArmor; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.fml.common.Optional; -import net.minecraftforge.fml.common.Optional.Interface; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.ModItems; -import WayofTime.alchemicalWizardry.api.alchemy.energy.IAlchemyGoggles; -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; -import WayofTime.alchemicalWizardry.api.items.interfaces.ILPGauge; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilDivination; -import WayofTime.alchemicalWizardry.common.renderer.model.ModelOmegaArmour; - -@Optional.InterfaceList(value = {@Interface(iface = "thaumcraft.api.nodes.IRevealer", modid = "Thaumcraft"), @Interface(iface = "thaumcraft.api.IGoggles", modid = "Thaumcraft"), @Interface(iface = "thaumcraft.api.IRunicArmor", modid = "Thaumcraft")}) -public class BoundArmour extends ItemArmor implements IAlchemyGoggles, ISpecialArmor, IBindable, ILPGauge//, IRevealer, IGoggles, IRunicArmor -{ - private static int invSize = 9; - @SideOnly(Side.CLIENT) - - public static boolean tryComplexRendering = true; - - public BoundArmour(int armorType) - { - super(ItemArmor.ArmorMaterial.GOLD, 0, armorType); - setMaxDamage(1000); - } - - ModelBiped model1 = null; - ModelBiped model2 = null; - ModelBiped model = null; - - @Override - @SideOnly(Side.CLIENT) - public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot) - { - if (tryComplexRendering) - { - int type = ((ItemArmor) itemStack.getItem()).armorType; - if (this.model1 == null) - { - this.model1 = new ModelOmegaArmour(1.0f, true, true, false, true); - } - if (this.model2 == null) - { - this.model2 = new ModelOmegaArmour(0.5f, false, false, true, false); - } - - if (type == 1 || type == 3 || type == 0) - { - this.model = model1; - } else - { - this.model = model2; - } - - if (this.model != null) - { - this.model.bipedHead.showModel = (type == 0); - this.model.bipedHeadwear.showModel = (type == 0); - this.model.bipedBody.showModel = ((type == 1) || (type == 2)); - this.model.bipedLeftArm.showModel = (type == 1); - this.model.bipedRightArm.showModel = (type == 1); - this.model.bipedLeftLeg.showModel = (type == 2 || type == 3); - this.model.bipedRightLeg.showModel = (type == 2 || type == 3); - this.model.isSneak = entityLiving.isSneaking(); - - this.model.isRiding = entityLiving.isRiding(); - this.model.isChild = entityLiving.isChild(); - - this.model.aimedBow = false; - this.model.heldItemRight = (entityLiving.getHeldItem() != null ? 1 : 0); - - if ((entityLiving instanceof EntityPlayer)) - { - if (((EntityPlayer) entityLiving).getItemInUseDuration() > 0) - { - EnumAction enumaction = ((EntityPlayer) entityLiving).getItemInUse().getItemUseAction(); - if (enumaction == EnumAction.BLOCK) - { - this.model.heldItemRight = 3; - } else if (enumaction == EnumAction.BOW) - { - this.model.aimedBow = true; - } - } - } - } - - return model; - - } else - { - return super.getArmorModel(entityLiving, itemStack, armorSlot); - } - } - - @Override - public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) - { - return false; - } - - public boolean isAffectedBySoulHarden() - { - return true; - } - - public double getBaseArmourReduction() - { - return 0.9; - } - - public double getArmourPenetrationReduction() - { - return 0.9; - } - - @Override - public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, int slot) - { - double armourReduction; - - int f = 0; - int h = 0; - - if (player.isPotionActive(AlchemicalWizardry.customPotionSoulFray)) - { - f = player.getActivePotionEffect(AlchemicalWizardry.customPotionSoulFray).getAmplifier() + 1; - } - - double damageAmount = 0.25; - - if (player.isPotionActive(AlchemicalWizardry.customPotionSoulHarden)) - { - h = player.getActivePotionEffect(AlchemicalWizardry.customPotionSoulHarden).getAmplifier() + 1; - } - - armourReduction = isAffectedBySoulHarden() ? 1 - (1 - this.getBaseArmourReduction()) * Math.pow(1.0/3.0, Math.max(0, h - f)) - 0.1 * Math.max(0, f-h) : getBaseArmourReduction(); - - damageAmount *= (armourReduction); - - int maxAbsorption = 100000; - - if (source.equals(DamageSource.drown)) - { - return new ArmorProperties(-1, 0, 0); - } - - if (source.equals(DamageSource.outOfWorld)) - { - if (isImmuneToVoid(armor)) - { - return new ArmorProperties(-1, damageAmount * 1000 , maxAbsorption); - } else - { - return new ArmorProperties(-1, 0, 0); - } - } - - ItemStack helmet = player.getEquipmentInSlot(4); - ItemStack plate = player.getEquipmentInSlot(3); - ItemStack leggings = player.getEquipmentInSlot(2); - ItemStack boots = player.getEquipmentInSlot(1); - - if (helmet == null || plate == null || leggings == null || boots == null) - { - return new ArmorProperties(-1, 0, 0); - } - - if (helmet.getItem() instanceof BoundArmour && plate.getItem() instanceof BoundArmour && leggings.getItem() instanceof BoundArmour && boots.getItem() instanceof BoundArmour) - { - if (source.isUnblockable()) - { - return new ArmorProperties(-1, damageAmount * getArmourPenetrationReduction(), maxAbsorption); - } - - return new ArmorProperties(-1, damageAmount, maxAbsorption); - } - - return new ArmorProperties(-1, 0, 0); - } - - @Override - public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) - { - if (armor.getItem() == ModItems.boundHelmet) - { - return 3; - } - - if (armor.getItem() == ModItems.boundChestplate) - { - return 8; - } - - if (armor.getItem() == ModItems.boundLeggings) - { - return 6; - } - - if (armor.getItem() == ModItems.boundBoots) - { - return 3; - } - - return 5; - } - - @Override - public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) - { - if (entity instanceof EntityPlayer) - { - BindableItems.checkAndSetItemOwner(stack, (EntityPlayer) entity); - - if (((EntityPlayer) entity).capabilities.isCreativeMode) - { - return; - } - } - - stack.setItemDamage(stack.getItemDamage() + damage); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.boundarmor.devprotect")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - if (!par1ItemStack.getTagCompound().getString("ownerName").equals("")) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - - ItemStack[] inv = getInternalInventory(par1ItemStack); - - if (inv == null) - { - return; - } - - for (int i = 0; i < invSize; i++) - { - if (inv[i] != null) - { - par3List.add(StatCollector.translateToLocal("tooltip.item.iteminslot") + " " + i + ": " + inv[i].getDisplayName()); - } - } - } - } - - @Override - public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) - { - if (tryComplexRendering) - { - return "alchemicalwizardry:models/armor/BloodArmour_WIP.png"; - } - - if (entity instanceof EntityLivingBase) - { - if (this.getIsInvisible(stack)) - { - if (this == ModItems.boundHelmet || this == ModItems.boundChestplate || this == ModItems.boundBoots) - { - return "alchemicalwizardry:models/armor/boundArmour_invisible_layer_1.png"; - } - - if (this == ModItems.boundLeggings) - { - return "alchemicalwizardry:models/armor/boundArmour_invisible_layer_2.png"; - } - } - } - - if (this == ModItems.boundHelmet || this == ModItems.boundChestplate || this == ModItems.boundBoots) - { - return "alchemicalwizardry:models/armor/boundArmour_layer_1.png"; - } - - if (this == ModItems.boundLeggings) - { - return "alchemicalwizardry:models/armor/boundArmour_layer_2.png"; - } else - { - return null; - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer); - return super.onItemRightClick(par1ItemStack, par2World, par3EntityPlayer); - } - - @Override - public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) - { - if (itemStack.getTagCompound() == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - if (!player.isPotionActive(AlchemicalWizardry.customPotionInhibit)) - { - tickInternalInventory(itemStack, world, player, 0, false); - } - - this.setIsInvisible(itemStack, player.isPotionActive(Potion.invisibility.id)); - - this.repairArmour(world, player, itemStack); - } - - public void repairArmour(World world, EntityPlayer player, ItemStack itemStack) - { - if (itemStack.getItemDamage() > 0) - { - BindableItems.checkAndSetItemOwner(itemStack, player); - - if (!player.capabilities.isCreativeMode) - { - if(BindableItems.syphonBatteries(itemStack, player, itemStack.getItemDamage() * 75)) - { - itemStack.setItemDamage(0); - } - } - } - } - - public void tickInternalInventory(ItemStack par1ItemStack, World par2World, EntityPlayer par3Entity, int par4, boolean par5) - { - ItemStack[] inv = getInternalInventory(par1ItemStack); - - if (inv == null) - { - return; - } - - int blood = getMaxBloodShardLevel(par1ItemStack); - for (int i = 0; i < invSize; i++) - { - if (inv[i] == null) - { - continue; - } - - if (inv[i].getItem() instanceof ArmourUpgrade && blood > 0) - { - if (((ArmourUpgrade) inv[i].getItem()).isUpgrade()) - { - ((ArmourUpgrade) inv[i].getItem()).onArmourUpdate(par2World, par3Entity, inv[i]); - blood--; - } - - if (par2World.getWorldTime() % 200 == 0) - { - if (getUpgradeCostMultiplier(par1ItemStack) > 0.02f) - { - BindableItems.syphonBatteries(par1ItemStack, par3Entity, (int) (((ArmourUpgrade) inv[i].getItem()).getEnergyForTenSeconds() * getUpgradeCostMultiplier(par1ItemStack))); - } - } - } - } - } - - public int getMaxBloodShardLevel(ItemStack armourStack) - { - ItemStack[] inv = getInternalInventory(armourStack); - - if (inv == null) - { - return 0; - } - - int max = 0; - - for (int i = 0; i < invSize; i++) - { - ItemStack itemStack = inv[i]; - - if (itemStack != null) - { - if (itemStack.getItem().equals(ModItems.weakBloodShard)) - { - max = Math.max(max, 1); - } - - if (itemStack.getItem().equals(ModItems.demonBloodShard)) - { - max = Math.max(max, 2); - } - } - } - - return max; - } - - public boolean hasAddedToInventory(ItemStack sigilItemStack, ItemStack addedItemStack) - { - ItemStack[] inv = getInternalInventory(sigilItemStack); - - if (inv == null) - { - return false; - } - - if (addedItemStack == null) - { - return false; - } - - int candidateSlot = -1; - - for (int i = invSize - 1; i >= 0; i--) - { - ItemStack nextItem = inv[i]; - - if (nextItem == null) - { - candidateSlot = i; - } - } - - if (candidateSlot == -1) - { - return false; - } - - if (addedItemStack.getItem() instanceof ArmourUpgrade) - { - inv[candidateSlot] = addedItemStack; - saveInternalInventory(sigilItemStack, inv); - return true; - } - - return false; - } - - public ItemStack[] getInternalInventory(ItemStack itemStack) - { - NBTTagCompound itemTag = itemStack.getTagCompound(); - - if (itemTag == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - itemTag = itemStack.getTagCompound(); - - ItemStack[] inv = new ItemStack[9]; - NBTTagList tagList = itemTag.getTagList("Inventory", Constants.NBT.TAG_COMPOUND); - - if (tagList == null) - { - return null; - } - - for (int i = 0; i < tagList.tagCount(); i++) - { - NBTTagCompound tag = tagList.getCompoundTagAt(i); - int slot = tag.getByte("Slot"); - - if (slot >= 0 && slot < invSize) - { - inv[slot] = ItemStack.loadItemStackFromNBT(tag); - } - } - - return inv; - } - - public void saveInternalInventory(ItemStack itemStack, ItemStack[] inventory) - { - NBTTagCompound itemTag = itemStack.getTagCompound(); - - if (itemTag == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - NBTTagList itemList = new NBTTagList(); - - for (int i = 0; i < invSize; i++) - { - if (inventory[i] != null) - { - NBTTagCompound tag = new NBTTagCompound(); - tag.setByte("Slot", (byte) i); - inventory[i].writeToNBT(tag); - itemList.appendTag(tag); - } - } - - itemTag.setTag("Inventory", itemList); - } - - public boolean isImmuneToVoid(ItemStack itemStack) - { - ItemStack[] inv = getInternalInventory(itemStack); - - if (inv == null) - { - return false; - } - - for (ItemStack item : inv) - { - if (item == null) - { - continue; - } - - if (item.getItem().equals(ModItems.voidSigil)) - { - return true; - } - } - - return false; - } - -// @Optional.Method(modid = "Thaumcraft") -// public boolean hasIRevealer(ItemStack itemStack) -// { -// ItemStack[] inv = getInternalInventory(itemStack); -// -// if (inv == null) -// { -// return false; -// } -// -// for (ItemStack item : inv) -// { -// if (item == null) -// { -// continue; -// } -// -// if (item.getItem() instanceof IRevealer) -// { -// return true; -// } -// } -// -// return false; -// } -// -// @Optional.Method(modid = "Thaumcraft") -// public boolean hasIGoggles(ItemStack itemStack) -// { -// ItemStack[] inv = getInternalInventory(itemStack); -// -// if (inv == null) -// { -// return false; -// } -// -// int blood = getMaxBloodShardLevel(itemStack); -// -// for (ItemStack item : inv) -// { -// if (item == null) -// { -// continue; -// } -// if (item.getItem() instanceof ArmourUpgrade && blood > 0) -// { -// if (item.getItem() instanceof IGoggles) -// { -// return true; -// } -// -// if(((ArmourUpgrade)item.getItem()).isUpgrade()) -// { -// blood--; -// } -// } -// } -// -// return false; -// } - - @Override - public boolean canSeeLPBar(ItemStack itemStack) - { - ItemStack[] inv = getInternalInventory(itemStack); - - if (inv == null) - { - return false; - } - - int blood = getMaxBloodShardLevel(itemStack); - - for (ItemStack item : inv) - { - if (item == null) - { - continue; - } - if (item.getItem() instanceof ArmourUpgrade && blood > 0) - { - if (item.getItem() instanceof SigilDivination) - { - return true; - } - - if(((ArmourUpgrade)item.getItem()).isUpgrade()) - { - blood--; - } - } - } - - return false; - } - - public float getUpgradeCostMultiplier(ItemStack itemStack) - { - ItemStack[] inv = getInternalInventory(itemStack); - - if (inv == null) - { - return 1.0f; - } - - for (ItemStack item : inv) - { - if (item == null) - { - continue; - } - - if (item.getItem().equals(ModItems.weakBloodOrb)) - { - return 0.75f; - } - - if (item.getItem().equals(ModItems.apprenticeBloodOrb)) - { - return 0.50f; - } - - if (item.getItem().equals(ModItems.magicianBloodOrb)) - { - return 0.25f; - } - - if (item.getItem().equals(ModItems.masterBloodOrb)) - { - return 0.0f; - } - - if (item.getItem().equals(ModItems.archmageBloodOrb)) - { - return 0.0f; - } - } - - return 1.0f; - } - - public int getItemEnchantability(ItemStack stack) - { - NBTTagCompound tag = stack.getTagCompound(); - if (tag != null) - { - return tag.getInteger("enchantability"); - } - - return Integer.MIN_VALUE; - } - - public void setItemEnchantability(ItemStack stack, int enchantability) - { - NBTTagCompound tag = stack.getTagCompound(); - - if (tag == null) - { - stack.setTagCompound(new NBTTagCompound()); - tag = stack.getTagCompound(); - } - - tag.setInteger("enchantability", enchantability); - } - - public boolean getIsInvisible(ItemStack armourStack) - { - NBTTagCompound tag = armourStack.getTagCompound(); - if (tag != null) - { - return tag.getBoolean("invisible"); - } - - return false; - } - - public void setIsInvisible(ItemStack armourStack, boolean invisible) - { - NBTTagCompound tag = armourStack.getTagCompound(); - - if (tag == null) - { - armourStack.setTagCompound(new NBTTagCompound()); - tag = armourStack.getTagCompound(); - } - - tag.setBoolean("invisible", invisible); - } - -// @Override -// @Optional.Method(modid = "Thaumcraft") -// public boolean showNodes(ItemStack itemstack, EntityLivingBase player) -// { -// return this.hasIRevealer(itemstack); -// } -// -// @Override -// @Optional.Method(modid = "Thaumcraft") -// public boolean showIngamePopups(ItemStack itemstack, EntityLivingBase player) -// { -// return this.hasIGoggles(itemstack); -// } -// -// @Override -// @Optional.Method(modid = "Thaumcraft") -// public int getRunicCharge(ItemStack itemstack) -// { -// ItemStack[] inv = this.getInternalInventory(itemstack); -// int shardLevel = this.getMaxBloodShardLevel(itemstack); -// int count = 0; -// int harden = 0; -// -// if (inv == null) -// { -// return 0; -// } -// -// for (ItemStack stack : inv) -// { -// if (count >= shardLevel) -// { -// break; -// } -// -// if (stack == null || !(stack.getItem() instanceof ArmourUpgrade)) -// { -// continue; -// } -// -// if (stack.getItem() instanceof ItemArmor && ((ItemArmor) stack.getItem()).armorType != this.armorType) -// { -// continue; -// } -// -// if (stack.hasTagCompound()) -// { -// NBTTagCompound tag = stack.getTagCompound(); -// -// int enchLvl = tag.getByte("RS.HARDEN"); -// -// if (stack.getItem() instanceof IRunicArmor) -// { -// enchLvl += ((IRunicArmor) stack.getItem()).getRunicCharge(stack); -// } -// -// if (enchLvl > 0) -// { -// harden += enchLvl; -// if (((ArmourUpgrade) stack.getItem()).isUpgrade()) -// { -// count += 1; -// } -// } -// } -// } -// -// return harden; -// } - - @Override - public boolean showIngameHUD(World world, ItemStack stack, EntityPlayer player) - { - ItemStack[] inv = getInternalInventory(stack); - - if (inv == null) - { - return false; - } - - for (ItemStack item : inv) - { - if (item == null) - { - continue; - } - - if (item.getItem().equals(ModItems.itemSeerSigil)) - { - return true; - } - } - - return false; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmour.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmour.java deleted file mode 100644 index 14d756b0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmour.java +++ /dev/null @@ -1,525 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.armour; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Random; - -import net.minecraft.client.model.ModelBiped; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentData; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.EnumAction; -import net.minecraft.item.ItemArmor; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import net.minecraft.world.biome.BiomeGenBase; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.api.spell.APISpellHelper; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import WayofTime.alchemicalWizardry.common.omega.OmegaParadigm; - -public abstract class OmegaArmour extends BoundArmour -{ - public OmegaParadigm paradigm; - public Reagent reagent; - protected boolean storeBiomeID = false; - protected boolean storeDimensionID = false; - protected boolean storeYLevel = false; - protected boolean storeSeesSky = false; - - protected List illegalEnchantmentList = new LinkedList(); - - public float reagentDrainPerDamage = 0.1f; - - public OmegaArmour(int armorType) - { - super(armorType); - } - - public void setParadigm(OmegaParadigm paradigm) - { - this.paradigm = paradigm; - } - - public OmegaParadigm getOmegaParadigm() - { - return this.paradigm; - } - - public void setReagent(Reagent reagent) - { - this.reagent = reagent; - } - - @Override - public boolean isAffectedBySoulHarden() - { - return false; - } - - @Override - public double getBaseArmourReduction() - { - return 0.9; - } - - @Override - public double getArmourPenetrationReduction() - { - return 0.5; - } - - @Override - public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) - { - super.onArmorTick(world, player, itemStack); - - if(world.getWorldTime() % 50 == 0) - { - if(this.storeBiomeID()) - { - BlockPos pos = player.getPosition(); - - BiomeGenBase biome = world.getBiomeGenForCoords(pos); - if(biome != null) - { - this.setBiomeIDStored(itemStack, biome.biomeID); - } - } - - if(this.storeDimensionID()) - { - this.setDimensionIDStored(itemStack, world.provider.getDimensionId()); - } - - if(this.storeYLevel()) - { - this.setYLevelStored(itemStack, (int) Math.floor(player.posY)); - } - } - - if(this.armorType == 1) - { - paradigm.onUpdate(world, player, itemStack); - int duration = this.getOmegaStallingDuration(itemStack); - if(duration > 0) - { - this.setOmegaStallingDuration(itemStack, duration - 1); - } - } - } - - @Override - public void repairArmour(World world, EntityPlayer player, ItemStack itemStack) - { - if (itemStack.getItemDamage() > 0) - { - if (!player.capabilities.isCreativeMode) - { - if(BindableItems.syphonBatteries(itemStack, player, itemStack.getItemDamage() * 75)) - { - float reagentAmount = APISpellHelper.getPlayerCurrentReagentAmount(player); - - reagentAmount -= itemStack.getItemDamage() * reagentDrainPerDamage; - APISpellHelper.setPlayerCurrentReagentAmount(player, Math.max(0, reagentAmount)); - - itemStack.setItemDamage(0); - } - } - } - } - - public void revertArmour(EntityPlayer player, ItemStack itemStack) - { - ItemStack stack = this.getContainedArmourStack(itemStack); - player.inventory.armorInventory[3-this.armorType] = stack; - } - - public ItemStack getSubstituteStack(ItemStack boundStack, int stability, int affinity, int enchantability, int enchantmentLevel, Random rand) - { - ItemStack omegaStack = new ItemStack(this); - if(boundStack != null && boundStack.hasTagCompound()) - { - NBTTagCompound tag = (NBTTagCompound) boundStack.getTagCompound().copy(); - omegaStack.setTagCompound(tag); - } - this.setContainedArmourStack(omegaStack, boundStack); - SoulNetworkHandler.checkAndSetItemOwner(omegaStack, SoulNetworkHandler.getOwnerName(boundStack)); - this.setItemEnchantability(omegaStack, Math.min(enchantability, 70)); - - EnchantmentHelper.setEnchantments(new HashMap(), omegaStack); - - List enchantList = new ArrayList(); - - int adjustedEnchantLevel = Math.min(enchantmentLevel, 30); - int additionalPasses = enchantmentLevel - adjustedEnchantLevel; - - for(int i=0; i<1+additionalPasses; i++) - { - List lst = EnchantmentHelper.buildEnchantmentList(rand, omegaStack, adjustedEnchantLevel); - if(lst != null) - { - enchantList.addAll(lst); - } - } - - Map> map = new HashMap>(); - - for(Object obj : enchantList) - { - EnchantmentData enchantmentdata = (EnchantmentData)obj; - - if(!map.containsKey(enchantmentdata.enchantmentobj)) - { - map.put(enchantmentdata.enchantmentobj, new HashMap()); - } - - Map numMap = map.get(enchantmentdata.enchantmentobj); - if(numMap.containsKey(enchantmentdata.enchantmentLevel)) - { - numMap.put(enchantmentdata.enchantmentLevel, numMap.get(enchantmentdata.enchantmentLevel)+1); - }else - { - numMap.put(enchantmentdata.enchantmentLevel, 1); - } - } - - for(Enchantment ench : this.illegalEnchantmentList) - { - if(map.containsKey(ench)) - { - map.remove(ench); - } - } - - List newEnchantList = new ArrayList(); - - for(Entry> entry : map.entrySet()) - { - Enchantment ench = entry.getKey(); - Map numMap = entry.getValue(); - - if(numMap.isEmpty()) - { - continue; - } - - int[] enchantValues = new int[1]; - - for(Entry entry1 : numMap.entrySet()) - { - int enchantLevel = entry1.getKey(); - int number = entry1.getValue(); - - if(enchantLevel >= enchantValues.length) - { - int[] newEnchantValues = new int[enchantLevel+1]; - for(int i=0; i< enchantValues.length; i++) - { - newEnchantValues[i] = enchantValues[i]; - } - - enchantValues = newEnchantValues; - } - - enchantValues[enchantLevel] += number; - } - - int size = enchantValues.length; - int i = 0; - while(i= 2 && i+1 >= size) - { - int[] newEnchantValues = new int[i+2]; - for(int z=0; z< enchantValues.length; z++) - { - newEnchantValues[z] = enchantValues[z]; - } - - enchantValues = newEnchantValues; - enchantValues[i+1] += number/2; - size = enchantValues.length; - } - i++; - } - - newEnchantList.add(new EnchantmentData(ench, enchantValues.length-1)); - } - - Iterator iterator = newEnchantList.iterator(); - - while (iterator.hasNext()) - { - EnchantmentData enchantmentdata = (EnchantmentData)iterator.next(); - - { - omegaStack.addEnchantment(enchantmentdata.enchantmentobj, enchantmentdata.enchantmentLevel); - } - } - - for(int i=0; i<1; i++) - { -// omegaStack = EnchantmentHelper.addRandomEnchantment(new Random(), omegaStack, 30); - } - return omegaStack; - } - - public void setContainedArmourStack(ItemStack omegaStack, ItemStack boundStack) - { - if(omegaStack == null || boundStack == null) - { - return; - } - - NBTTagCompound tag = new NBTTagCompound(); - boundStack.writeToNBT(tag); - - NBTTagCompound omegaTag = omegaStack.getTagCompound(); - if(omegaTag == null) - { - omegaTag = new NBTTagCompound(); - omegaStack.setTagCompound(omegaTag); - } - - omegaTag.setTag("armour", tag); - } - - public ItemStack getContainedArmourStack(ItemStack omegaStack) - { - NBTTagCompound omegaTag = omegaStack.getTagCompound(); - if(omegaTag == null) - { - return null; - } - - NBTTagCompound tag = omegaTag.getCompoundTag("armour"); - - return ItemStack.loadItemStackFromNBT(tag); - } - - @Override - public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) - { - return "alchemicalwizardry:models/armor/OmegaWater.png"; - } - - @SideOnly(Side.CLIENT) - public abstract ModelBiped getChestModel(); - @SideOnly(Side.CLIENT) - public abstract ModelBiped getLegsModel(); - @SideOnly(Side.CLIENT) - ModelBiped model1 = null; - @SideOnly(Side.CLIENT) - ModelBiped model2 = null; - @SideOnly(Side.CLIENT) - ModelBiped model = null; - - @Override - @SideOnly(Side.CLIENT) - public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot) - { - if (tryComplexRendering) - { - int type = ((ItemArmor) itemStack.getItem()).armorType; - if (this.model1 == null) - { - this.model1 = getChestModel(); - } - if (this.model2 == null) - { - this.model2 = getLegsModel(); - } - - if (type == 1 || type == 3 || type == 0) - { - this.model = model1; - } else - { - this.model = model2; - } - - if (this.model != null) - { - this.model.bipedHead.showModel = (type == 0); - this.model.bipedHeadwear.showModel = (type == 0); - this.model.bipedBody.showModel = ((type == 1) || (type == 2)); - this.model.bipedLeftArm.showModel = (type == 1); - this.model.bipedRightArm.showModel = (type == 1); - this.model.bipedLeftLeg.showModel = (type == 2 || type == 3); - this.model.bipedRightLeg.showModel = (type == 2 || type == 3); - this.model.isSneak = entityLiving.isSneaking(); - - this.model.isRiding = entityLiving.isRiding(); - this.model.isChild = entityLiving.isChild(); - - this.model.aimedBow = false; - this.model.heldItemRight = (entityLiving.getHeldItem() != null ? 1 : 0); - - if ((entityLiving instanceof EntityPlayer)) - { - if (((EntityPlayer) entityLiving).getItemInUseDuration() > 0) - { - EnumAction enumaction = ((EntityPlayer) entityLiving).getItemInUse().getItemUseAction(); - if (enumaction == EnumAction.BLOCK) - { - this.model.heldItemRight = 3; - } else if (enumaction == EnumAction.BOW) - { - this.model.aimedBow = true; - } - } - } - } - - return model; - - } else - { - return super.getArmorModel(entityLiving, itemStack, armorSlot); - } - } - - public void onOmegaKeyPressed(EntityPlayer player, ItemStack stack) - { - if(paradigm != null) - { - paradigm.onOmegaKeyPressed(player, stack); - } - } - - public void setOmegaStallingDuration(ItemStack stack, int duration) - { - NBTTagCompound tag = stack.getTagCompound(); - if(tag == null) - { - tag = new NBTTagCompound(); - stack.setTagCompound(tag); - } - - tag.setInteger("OmegaStallDuration", duration); - } - - public int getOmegaStallingDuration(ItemStack stack) - { - NBTTagCompound tag = stack.getTagCompound(); - if(tag == null) - { - tag = new NBTTagCompound(); - stack.setTagCompound(tag); - } - - return tag.getInteger("OmegaStallDuration"); - } - - public boolean hasOmegaStalling(ItemStack stack) - { - return this.getOmegaStallingDuration(stack) > 0; - } - - public boolean storeBiomeID() - { - return this.storeBiomeID; - } - - public boolean storeDimensionID() - { - return this.storeDimensionID; - } - - public boolean storeYLevel() - { - return this.storeYLevel; - } - - public boolean storeSeesSky() - { - return this.storeSeesSky; - } - - public int getBiomeIDStored(ItemStack stack) - { - NBTTagCompound tag = stack.getTagCompound(); - if(tag == null) - { - tag = new NBTTagCompound(); - stack.setTagCompound(tag); - } - - return tag.getInteger("biomeID"); - } - - public void setBiomeIDStored(ItemStack stack, int id) - { - NBTTagCompound tag = stack.getTagCompound(); - if(tag == null) - { - tag = new NBTTagCompound(); - stack.setTagCompound(tag); - } - - tag.setInteger("biomeID", id); - } - - public int getDimensionIDStored(ItemStack stack) - { - NBTTagCompound tag = stack.getTagCompound(); - if(tag == null) - { - tag = new NBTTagCompound(); - stack.setTagCompound(tag); - } - - return tag.getInteger("dimensionID"); - } - - public void setDimensionIDStored(ItemStack stack, int id) - { - NBTTagCompound tag = stack.getTagCompound(); - if(tag == null) - { - tag = new NBTTagCompound(); - stack.setTagCompound(tag); - } - - tag.setInteger("dimensionID", id); - } - - public int getYLevelStored(ItemStack stack) - { - NBTTagCompound tag = stack.getTagCompound(); - if(tag == null) - { - tag = new NBTTagCompound(); - stack.setTagCompound(tag); - } - - return tag.getInteger("yLevel"); - } - - public void setYLevelStored(ItemStack stack, int level) - { - NBTTagCompound tag = stack.getTagCompound(); - if(tag == null) - { - tag = new NBTTagCompound(); - stack.setTagCompound(tag); - } - - tag.setInteger("yLevel", level); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourEarth.java deleted file mode 100644 index 41545359..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourEarth.java +++ /dev/null @@ -1,87 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.armour; - -import java.util.UUID; - -import net.minecraft.client.model.ModelBiped; -import net.minecraft.entity.Entity; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.common.renderer.model.ModelOmegaEarth; - -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; - -public class OmegaArmourEarth extends OmegaArmour -{ - public OmegaArmourEarth(int armorType) - { - super(armorType); - this.storeYLevel = true; - } - - @Override - public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) - { - return "alchemicalwizardry:models/armor/OmegaEarth.png"; - } - - @Override - @SideOnly(Side.CLIENT) - public ModelBiped getChestModel() - { - return new ModelOmegaEarth(1.0f, true, true, false, true); - } - - @Override - @SideOnly(Side.CLIENT) - public ModelBiped getLegsModel() - { - return new ModelOmegaEarth(0.5f, false, false, true, false); - } - - @Override - public Multimap getAttributeModifiers(ItemStack stack) - { - Multimap map = HashMultimap.create(); - int yLevel = this.getYLevelStored(stack); - map.put(SharedMonsterAttributes.knockbackResistance.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(179618 /** Random number **/, armorType), "Knockback modifier" + armorType, getKnockbackResist(), 0)); - map.put(SharedMonsterAttributes.maxHealth.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(80532 /** Random number **/, armorType), "Health modifier" + armorType, getDefaultArmourBoost()*getHealthBoostModifierForLevel(yLevel), 1)); - map.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(85112 /** Random number **/, armorType), "Damage modifier" + armorType, getDefaultArmourBoost()*getDamageModifierForLevel(yLevel), 2)); - - return map; - } - - public float getKnockbackResist() - { - return 0.25f; - } - - public float getDefaultArmourBoost() - { - switch(this.armorType) - { - case 0: - return 2.5f; - case 1: - return 4; - case 2: - return 3.5f; - case 3: - return 2; - } - return 0.25f; - } - - public float getHealthBoostModifierForLevel(int yLevel) - { - return 0.05f * (yLevel <= 50 ? 1.5f : yLevel >= 100 ? -0.5f : 0.5f); - } - - public float getDamageModifierForLevel(int yLevel) - { - return 0.03f * (yLevel <= 50 ? 1.5f : yLevel >= 100 ? -0.5f : 0.5f); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourFire.java deleted file mode 100644 index eabc089b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourFire.java +++ /dev/null @@ -1,121 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.armour; - -import java.util.UUID; - -import net.minecraft.client.model.ModelBiped; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.entity.Entity; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.item.ItemStack; -import net.minecraft.world.biome.BiomeGenBase; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.common.renderer.model.ModelOmegaFire; - -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; - -public class OmegaArmourFire extends OmegaArmour -{ - public OmegaArmourFire(int armorType) - { - super(armorType); - this.storeBiomeID = true; - this.illegalEnchantmentList.add(Enchantment.fireProtection); - } - - @Override - public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) - { - return "alchemicalwizardry:models/armor/OmegaFire.png"; - } - - @Override - @SideOnly(Side.CLIENT) - public ModelBiped getChestModel() - { - return new ModelOmegaFire(1.0f, true, true, false, true); - } - - @Override - @SideOnly(Side.CLIENT) - public ModelBiped getLegsModel() - { - return new ModelOmegaFire(0.5f, false, false, true, false); - } - - @Override - public Multimap getAttributeModifiers(ItemStack stack) - { - Multimap map = HashMultimap.create(); - int biomeID = this.getBiomeIDStored(stack); - BiomeGenBase biome = BiomeGenBase.getBiome(biomeID); - if(biome != null) - { - map.put(SharedMonsterAttributes.maxHealth.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(895132 /** Random number **/, armorType), "Health modifier" + armorType, getDefaultArmourBoost()*getHealthBoostModifierForBiome(biome), 1)); - map.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(196312 /** Random number **/, armorType), "Damage modifier" + armorType, getDefaultArmourBoost()*getDamageModifierForBiome(biome), 1)); - } - return map; - } - - public float getDefaultArmourBoost() - { - switch(this.armorType) - { - case 0: - return 2.5f; - case 1: - return 4; - case 2: - return 3.5f; - case 3: - return 2; - } - return 0.25f; - } - - public float getHealthBoostModifierForBiome(BiomeGenBase biome) - { - float modifier = 0.05f; - - if(biome.isEqualTo(BiomeGenBase.hell)) - { - return modifier * 2.0f; - } - - if(biome.isEqualTo(BiomeGenBase.ocean)) - { - return modifier * -0.5f; - } - - if(biome.temperature >= 1) - { - return modifier * 1.5f; - } - - return modifier * 0.5f; - } - - public float getDamageModifierForBiome(BiomeGenBase biome) - { - float modifier = 0.03f; - - if(biome.isEqualTo(BiomeGenBase.hell)) - { - return modifier * 2.0f; - } - - if(biome.isEqualTo(BiomeGenBase.ocean)) - { - return modifier * -0.5f; - } - - if(biome.temperature >= 1) - { - return modifier * 1.5f; - } - - return modifier * 0.5f; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourWater.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourWater.java deleted file mode 100644 index 0ef14b4f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourWater.java +++ /dev/null @@ -1,118 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.armour; - -import java.util.UUID; - -import net.minecraft.client.model.ModelBiped; -import net.minecraft.entity.Entity; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.item.ItemStack; -import net.minecraft.world.biome.BiomeGenBase; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.common.renderer.model.ModelOmegaWater; - -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; - -public class OmegaArmourWater extends OmegaArmour -{ - public OmegaArmourWater(int armorType) - { - super(armorType); - this.storeBiomeID = true; - } - - @Override - public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) - { - return "alchemicalwizardry:models/armor/OmegaWater.png"; - } - - @Override - @SideOnly(Side.CLIENT) - public ModelBiped getChestModel() - { - return new ModelOmegaWater(1.0f, true, true, false, true); - } - - @Override - @SideOnly(Side.CLIENT) - public ModelBiped getLegsModel() - { - return new ModelOmegaWater(0.5f, false, false, true, false); - } - - @Override - public Multimap getAttributeModifiers(ItemStack stack) - { - Multimap map = HashMultimap.create(); - int biomeID = this.getBiomeIDStored(stack); - BiomeGenBase biome = BiomeGenBase.getBiome(biomeID); - if(biome != null) - { - map.put(SharedMonsterAttributes.maxHealth.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(85312 /** Random number **/, armorType), "Health modifier" + armorType, getDefaultArmourBoost()*getHealthBoostModifierForBiome(biome), 2)); - map.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(85432 /** Random number **/, armorType), "Damage modifier" + armorType, getDefaultArmourBoost()*getDamageModifierForBiome(biome), 2)); - } - return map; - } - - public float getDefaultArmourBoost() - { - switch(this.armorType) - { - case 0: - return 2.5f; - case 1: - return 4; - case 2: - return 3.5f; - case 3: - return 2; - } - return 0.25f; - } - - public float getHealthBoostModifierForBiome(BiomeGenBase biome) - { - float modifier = 0.05f; - if(biome.isEqualTo(BiomeGenBase.hell)) - { - return modifier * -0.5f; - } - - if(biome.isEqualTo(BiomeGenBase.ocean) || biome.isEqualTo(BiomeGenBase.river)) - { - return modifier * 2.0f; - } - - if(biome.isHighHumidity()) - { - return modifier * 1.5f; - } - - return modifier * 0.5f; - } - - public float getDamageModifierForBiome(BiomeGenBase biome) - { - float modifier = 0.03f; - - if(biome.isEqualTo(BiomeGenBase.hell)) - { - return modifier * -0.5f; - } - - if(biome.isEqualTo(BiomeGenBase.ocean) || biome.isEqualTo(BiomeGenBase.river)) - { - return modifier * 2.0f; - } - - if(biome.isHighHumidity()) - { - return modifier * 1.5f; - } - - return modifier * 0.5f; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourWind.java deleted file mode 100644 index 47408e50..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourWind.java +++ /dev/null @@ -1,81 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.armour; - -import java.util.UUID; - -import net.minecraft.client.model.ModelBiped; -import net.minecraft.entity.Entity; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.common.renderer.model.ModelOmegaWind; - -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; - -public class OmegaArmourWind extends OmegaArmour -{ - public OmegaArmourWind(int armorType) - { - super(armorType); - this.storeYLevel = true; - } - - @Override - public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) - { - return "alchemicalwizardry:models/armor/OmegaWind.png"; - } - - @Override - @SideOnly(Side.CLIENT) - public ModelBiped getChestModel() - { - return new ModelOmegaWind(1.0f, true, true, false, true); - } - - @Override - @SideOnly(Side.CLIENT) - public ModelBiped getLegsModel() - { - return new ModelOmegaWind(0.5f, false, false, true, false); - } - - @Override - public Multimap getAttributeModifiers(ItemStack stack) - { - Multimap map = HashMultimap.create(); - int yLevel = this.getYLevelStored(stack); - map.put(SharedMonsterAttributes.maxHealth.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(85212 /** Random number **/, armorType), "Health modifier" + armorType, getDefaultArmourBoost()*getHealthBoostModifierForLevel(yLevel), 1)); - map.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(86212 /** Random number **/, armorType), "Damage modifier" + armorType, getDefaultArmourBoost()*getDamageModifierForLevel(yLevel), 2)); - - return map; - } - - public float getDefaultArmourBoost() - { - switch(this.armorType) - { - case 0: - return 2.5f; - case 1: - return 4; - case 2: - return 3.5f; - case 3: - return 2; - } - return 0.25f; - } - - public float getHealthBoostModifierForLevel(int yLevel) - { - return 0.05f * ((((float)Math.min(yLevel, 255))/64f) * 1.5f - 1); - } - - public float getDamageModifierForLevel(int yLevel) - { - return 0.02f * ((((float)Math.min(yLevel, 255))/64f) * 1.5f - 1); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/energy/AlchemicalCleanser.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/energy/AlchemicalCleanser.java deleted file mode 100644 index 985a8f23..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/energy/AlchemicalCleanser.java +++ /dev/null @@ -1,68 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.energy; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.items.interfaces.IReagentManipulator; -import WayofTime.alchemicalWizardry.common.tileEntity.TEReagentConduit; - -public class AlchemicalCleanser extends Item implements IReagentManipulator -{ - public AlchemicalCleanser() - { - super(); - setMaxStackSize(1); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.destclearer.desc1")); - par3List.add(StatCollector.translateToLocal("tooltip.destclearer.desc2")); - } - - @Override - public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) - { - if (world.isRemote) - { - return itemStack; - } - - MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, player, false); - - if (movingobjectposition == null) - { - return itemStack; - } else - { - if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - BlockPos pos = movingobjectposition.func_178782_a(); - - TileEntity tile = world.getTileEntity(pos); - - if (!(tile instanceof TEReagentConduit)) - { - return itemStack; - } - - TEReagentConduit relay = (TEReagentConduit) tile; - - relay.reagentTargetList.clear(); - - player.addChatComponentMessage(new ChatComponentTranslation("message.destinationclearer.cleared")); - } - } - - return itemStack; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/energy/AlchemicalRouter.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/energy/AlchemicalRouter.java deleted file mode 100644 index eaa27a2b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/energy/AlchemicalRouter.java +++ /dev/null @@ -1,323 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.energy; - -import java.util.LinkedList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.Int3; -import WayofTime.alchemicalWizardry.api.alchemy.energy.IReagentHandler; -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainerInfo; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; -import WayofTime.alchemicalWizardry.api.items.interfaces.IReagentManipulator; -import WayofTime.alchemicalWizardry.common.tileEntity.TEReagentConduit; - -public class AlchemicalRouter extends Item implements IReagentManipulator -{ - public AlchemicalRouter() - { - super(); - this.hasSubtypes = true; - setMaxStackSize(1); - } - - @Override - public String getItemStackDisplayName(ItemStack stack) - { - Reagent reagent = this.getReagent(stack); - - String name = super.getItemStackDisplayName(stack); - - if (reagent != null) - { - name = name + " (" + reagent.name + ")"; - } - - return name; - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.attunedcrystal.desc1")); - par3List.add(StatCollector.translateToLocal("tooltip.attunedcrystal.desc2")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - Reagent reagent = this.getReagent(par1ItemStack); - if (reagent != null) - { - par3List.add(StatCollector.translateToLocal("tooltip.reagent.selectedreagent") + " " + reagent.name); - } - - if (this.getHasSavedCoordinates(par1ItemStack)) - { - par3List.add(""); - Int3 coords = this.getCoordinates(par1ItemStack); - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.coords") + " " + coords.xCoord + ", " + coords.yCoord + ", " + coords.zCoord); - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.dimension") + " " + getDimension(par1ItemStack)); - } - } - } - - @Override - public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) - { - if (world.isRemote) - { - return itemStack; - } - - MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, player, false); - - if (movingobjectposition == null) - { - if (player.isSneaking()) - { - this.setHasSavedCoordinates(itemStack, false); - player.addChatComponentMessage(new ChatComponentTranslation("message.attunedcrystal.clearing")); - } - - return itemStack; - } else - { - if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - BlockPos pos = movingobjectposition.func_178782_a(); - - TileEntity tile = world.getTileEntity(pos); - - if (!(tile instanceof IReagentHandler)) - { - return itemStack; - } - - IReagentHandler relay = (IReagentHandler) tile; - - if (player.isSneaking()) - { - ReagentContainerInfo[] infos = relay.getContainerInfo(EnumFacing.UP); - if (infos != null) - { - List reagentList = new LinkedList(); - for (ReagentContainerInfo info : infos) - { - if (info != null) - { - ReagentStack reagentStack = info.reagent; - if (reagentStack != null) - { - Reagent reagent = reagentStack.reagent; - if (reagent != null) - { - reagentList.add(reagent); - } - } - } - } - - Reagent pastReagent = this.getReagent(itemStack); - - if (reagentList.size() <= 0) - { - return itemStack; - } - - int reagentLocation; - - reagentLocation = reagentList.indexOf(pastReagent); - - if (reagentLocation == -1 || reagentLocation + 1 >= reagentList.size()) - { - this.setReagentWithNotification(itemStack, reagentList.get(0), player); - } else - { - this.setReagentWithNotification(itemStack, reagentList.get(reagentLocation + 1), player); - } - } - } else - { - if (this.getHasSavedCoordinates(itemStack)) - { - Int3 coords = this.getCoordinates(itemStack); - int dimension = this.getDimension(itemStack); - - if (coords == null) - { - return itemStack; - } - - final int maxDistance = 6; - - if (dimension != world.provider.getDimensionId() || Math.abs(coords.xCoord - pos.getX()) > maxDistance || Math.abs(coords.yCoord - pos.getY()) > maxDistance || Math.abs(coords.zCoord - pos.getZ()) > maxDistance) - { - player.addChatComponentMessage(new ChatComponentTranslation("message.attunedcrystal.error.toofar")); - return itemStack; - } - - TileEntity pastTile = world.getTileEntity(new BlockPos(coords.xCoord, coords.yCoord, coords.zCoord)); - if (!(pastTile instanceof TEReagentConduit)) - { - player.addChatComponentMessage(new ChatComponentTranslation("message.attunedcrystal.error.cannotfind")); - return itemStack; - } - - Reagent reagent = this.getReagent(itemStack); - - if (reagent == null) - { - return itemStack; - } - - TEReagentConduit pastRelay = (TEReagentConduit) pastTile; - - if (player.isSneaking()) - { - pastRelay.removeReagentDestinationViaActual(reagent, pos); - } else - { - if (pastRelay.addReagentDestinationViaActual(reagent, pos)) - { - player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("message.attunedcrystal.linked") + " " + reagent.name)); - } else - { - player.addChatComponentMessage(new ChatComponentTranslation("message.attunedcrystal.error.noconnections")); - } - } - world.markBlockForUpdate(new BlockPos(coords.xCoord, coords.yCoord, coords.zCoord)); - } else - { - int dimension = world.provider.getDimensionId(); - - this.setDimension(itemStack, dimension); - this.setCoordinates(itemStack, new Int3(pos)); - - player.addChatComponentMessage(new ChatComponentTranslation("message.attunedcrystal.linking")); - } - } - } - } - - return itemStack; - } - - public void setCoordinates(ItemStack stack, Int3 coords) - { - if (!stack.hasTagCompound()) - { - stack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = stack.getTagCompound(); - - coords.writeToNBT(tag); - - this.setHasSavedCoordinates(stack, true); - } - - public void setDimension(ItemStack stack, int dimension) - { - if (!stack.hasTagCompound()) - { - stack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setInteger("dimension", dimension); - } - - public Int3 getCoordinates(ItemStack stack) - { - if (!stack.hasTagCompound()) - { - stack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = stack.getTagCompound(); - - return Int3.readFromNBT(tag); - } - - public int getDimension(ItemStack stack) - { - if (!stack.hasTagCompound()) - { - stack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = stack.getTagCompound(); - - return tag.getInteger("dimension"); - } - - public void setHasSavedCoordinates(ItemStack stack, boolean flag) - { - if (!stack.hasTagCompound()) - { - stack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setBoolean("hasSavedCoordinates", flag); - } - - public boolean getHasSavedCoordinates(ItemStack stack) - { - if (!stack.hasTagCompound()) - { - stack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = stack.getTagCompound(); - - return tag.getBoolean("hasSavedCoordinates"); - } - - public Reagent getReagent(ItemStack stack) - { - if (!stack.hasTagCompound()) - { - stack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = stack.getTagCompound(); - - return ReagentRegistry.getReagentForKey(tag.getString("reagent")); - } - - public void setReagent(ItemStack stack, Reagent reagent) - { - if (!stack.hasTagCompound()) - { - stack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setString("reagent", ReagentRegistry.getKeyForReagent(reagent)); - } - - public void setReagentWithNotification(ItemStack stack, Reagent reagent, EntityPlayer player) - { - this.setReagent(stack, reagent); - - if (reagent != null) - { - player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("message.attunedcrystal.setto") + " " + reagent.name)); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/energy/AlchemicalSegmenter.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/energy/AlchemicalSegmenter.java deleted file mode 100644 index fe20f238..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/energy/AlchemicalSegmenter.java +++ /dev/null @@ -1,200 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.energy; - -import java.util.LinkedList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ISegmentedReagentHandler; -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainerInfo; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; -import WayofTime.alchemicalWizardry.api.items.interfaces.IReagentManipulator; - -public class AlchemicalSegmenter extends Item implements IReagentManipulator -{ - public AlchemicalSegmenter() - { - super(); - this.hasSubtypes = true; - setMaxStackSize(1); - } - - @Override - public String getItemStackDisplayName(ItemStack stack) - { - Reagent reagent = this.getReagent(stack); - String name = super.getItemStackDisplayName(stack); - if (reagent != null) - { - name = name + " (" + reagent.name + ")"; - } - return name; - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.tanksegmenter.desc1")); - par3List.add(StatCollector.translateToLocal("tooltip.tanksegmenter.desc2")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - Reagent reagent = this.getReagent(par1ItemStack); - if (reagent != null) - { - par3List.add(StatCollector.translateToLocal("tooltip.reagent.selectedreagent") + " " + reagent.name); - } - } - } - - @Override - public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) - { - if (world.isRemote) - { - return itemStack; - } - MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, player, false); - - if (movingobjectposition == null) - { - return itemStack; - } else - { - if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - BlockPos pos = movingobjectposition.func_178782_a(); - TileEntity tile = world.getTileEntity(pos); - if (!(tile instanceof ISegmentedReagentHandler)) - { - return itemStack; - } - ISegmentedReagentHandler reagentHandler = (ISegmentedReagentHandler) tile; - - if (player.isSneaking()) - { - ReagentContainerInfo[] infos = reagentHandler.getContainerInfo(EnumFacing.UP); - if (infos != null) - { - List reagentList = new LinkedList(); - for (ReagentContainerInfo info : infos) - { - if (info != null) - { - ReagentStack reagentStack = info.reagent; - if (reagentStack != null) - { - Reagent reagent = reagentStack.reagent; - if (reagent != null) - { - reagentList.add(reagent); - } - } - } - } - Reagent pastReagent = this.getReagent(itemStack); - boolean goForNext = false; - boolean hasFound = false; - for (Reagent reagent : reagentList) - { - if (goForNext) - { - goForNext = false; - break; - } - - if (reagent == pastReagent) - { - goForNext = true; - hasFound = true; - } - } - if (hasFound) - { - if (goForNext) - { - this.setReagentWithNotification(itemStack, reagentList.get(0), player); - } - } else - { - if (reagentList.size() >= 1) - { - this.setReagentWithNotification(itemStack, reagentList.get(0), player); - } - } - } - } else - { - Reagent reagent = this.getReagent(itemStack); - if (reagent == null) - { - //TODO: Send message that "All are wiped" - reagentHandler.getAttunedTankMap().clear(); - return itemStack; - } - int totalTankSize = reagentHandler.getNumberOfTanks(); - int numberAssigned = reagentHandler.getTanksTunedToReagent(reagent) + 1; - - if (numberAssigned > totalTankSize) - { - numberAssigned = 0; - } - - player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("message.tanksegmenter.nowhas") + " " + numberAssigned + " " + StatCollector.translateToLocal("message.tanksegmenter.tankssetto") + " " + reagent.name)); - - reagentHandler.setTanksTunedToReagent(reagent, numberAssigned); - } - } else if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.MISS) - { - this.setReagent(itemStack, null); - } - } - - return itemStack; - } - - public Reagent getReagent(ItemStack stack) - { - if (!stack.hasTagCompound()) - { - stack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = stack.getTagCompound(); - - return ReagentRegistry.getReagentForKey(tag.getString("reagent")); - } - - public void setReagent(ItemStack stack, Reagent reagent) - { - if (!stack.hasTagCompound()) - { - stack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setString("reagent", ReagentRegistry.getKeyForReagent(reagent)); - } - - public void setReagentWithNotification(ItemStack stack, Reagent reagent, EntityPlayer player) - { - this.setReagent(stack, reagent); - - if (reagent != null) - { - player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("message.tanksegmenter.setto") + " " + reagent.name)); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/forestry/ItemBloodFrame.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/forestry/ItemBloodFrame.java deleted file mode 100644 index 8acc4636..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/forestry/ItemBloodFrame.java +++ /dev/null @@ -1,145 +0,0 @@ -//package WayofTime.alchemicalWizardry.common.items.forestry; -// -//import java.util.List; -// -//import net.minecraft.client.renderer.texture.IIconRegister; -//import net.minecraft.entity.player.EntityPlayer; -//import net.minecraft.item.ItemStack; -//import net.minecraft.util.StatCollector; -//import net.minecraft.world.World; -//import WayofTime.alchemicalWizardry.AlchemicalWizardry; -//import WayofTime.alchemicalWizardry.common.items.EnergyItems; -//import cpw.mods.fml.relauncher.Side; -//import cpw.mods.fml.relauncher.SideOnly; -//import forestry.api.apiculture.IBee; -//import forestry.api.apiculture.IBeeGenome; -//import forestry.api.apiculture.IBeeHousing; -//import forestry.api.apiculture.IHiveFrame; -// -//public class ItemBloodFrame extends EnergyItems implements IHiveFrame -//{ -// public ItemBloodFrame() -// { -// super(); -// this.maxStackSize = 1; -// this.setMaxDamage(10); -// setEnergyUsed(1000); -// setCreativeTab(AlchemicalWizardry.tabBloodMagic); -// } -// -// @Override -// public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) -// { -// par3List.add(StatCollector.translateToLocal("tooltip.bloodframe.desc")); -// -// if (!(par1ItemStack.getTagCompound() == null)) -// { -// par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); -// } -// } -// -// @Override -// @SideOnly(Side.CLIENT) -// public void registerIcons(IIconRegister iconRegister) -// { -// this.itemIcon = iconRegister.registerIcon("AlchemicalWizardry:BloodFrame"); -// } -// -// @Override -// public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) -// { -// if (EnergyItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer)) -// { -// if (par1ItemStack.getItemDamage() > 0) -// { -// if(EnergyItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) -// { -// par1ItemStack.setItemDamage(par1ItemStack.getItemDamage() - 1); -// } -// } -// } -// return par1ItemStack; -// } -// -// @Override public float getTerritoryModifier(IBeeGenome genome, float currentModifier) -// { -// // TODO Auto-generated method stub -// return 1; -// } -// -// @Override public float getMutationModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier) -// { -// // TODO Auto-generated method stub -// return 1; -// } -// -// @Override public float getLifespanModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier) -// { -// // TODO Auto-generated method stub -// return 0.0001f; -// } -// -// @Override public float getProductionModifier(IBeeGenome genome, float currentModifier) -// { -// // TODO Auto-generated method stub -// return 0; -// } -// -// @Override public float getFloweringModifier(IBeeGenome genome, float currentModifier) -// { -// // TODO Auto-generated method stub -// return 1; -// } -// -// @Override public float getGeneticDecay(IBeeGenome genome, float currentModifier) -// { -// // TODO Auto-generated method stub -// return 1; -// } -// -// @Override public boolean isSealed() -// { -// // TODO Auto-generated method stub -// return false; -// } -// -// @Override public boolean isSelfLighted() -// { -// // TODO Auto-generated method stub -// return false; -// } -// -// @Override public boolean isSunlightSimulated() -// { -// // TODO Auto-generated method stub -// return false; -// } -// -// @Override public boolean isHellish() -// { -// // TODO Auto-generated method stub -// return false; -// } -// -// @Override public ItemStack frameUsed(IBeeHousing housing, ItemStack frame, IBee queen, int wear) -// { -// // TODO Auto-generated method stub -// if(EnergyItems.canSyphonInContainer(frame, getEnergyUsed()*wear)) -// { -// EnergyItems.syphonWhileInContainer(frame, getEnergyUsed()*wear); -// return frame; -// }else -// { -// frame.setItemDamage(frame.getItemDamage() + wear); -// if(frame.getItemDamage()>=frame.getMaxDamage()) -// { -// return null; -// } -// return frame; -// } -// -// } -// -// -// -//} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/AlchemyFlask.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/AlchemyFlask.java deleted file mode 100644 index 013a085a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/AlchemyFlask.java +++ /dev/null @@ -1,385 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.potion; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.ai.attributes.IAttribute; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.projectile.EntityPotion; -import net.minecraft.init.Items; -import net.minecraft.item.EnumAction; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.Constants; -import WayofTime.alchemicalWizardry.api.alchemy.AlchemyPotionHelper; - -import com.google.common.collect.HashMultimap; - -public class AlchemyFlask extends Item -{ - public AlchemyFlask() - { - super(); - setMaxDamage(8); - setMaxStackSize(1); - } - - public static ArrayList getEffects(ItemStack par1ItemStack) - { - if (par1ItemStack.hasTagCompound() && par1ItemStack.getTagCompound().hasKey("CustomFlaskEffects")) - { - ArrayList arraylist = new ArrayList(); - NBTTagList nbttaglist = par1ItemStack.getTagCompound().getTagList("CustomFlaskEffects", Constants.NBT.TAG_COMPOUND); - - for (int i = 0; i < nbttaglist.tagCount(); ++i) - { - NBTTagCompound nbttagcompound = nbttaglist.getCompoundTagAt(i); - arraylist.add(AlchemyPotionHelper.readEffectFromNBT(nbttagcompound)); - } - return arraylist; - } else - { - return null; - } - } - - public static ArrayList getPotionEffects(ItemStack par1ItemStack) - { - ArrayList list = AlchemyFlask.getEffects(par1ItemStack); - - if (list != null) - { - ArrayList newList = new ArrayList(); - - for (AlchemyPotionHelper aph : list) - { - newList.add(aph.getPotionEffect()); - } - - return newList; - } else - { - return null; - } - } - - public static void setEffects(ItemStack par1ItemStack, List list) - { - NBTTagCompound itemTag = par1ItemStack.getTagCompound(); - - if (itemTag == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - NBTTagList nbttaglist = new NBTTagList(); - - for (AlchemyPotionHelper aph : list) - { - nbttaglist.appendTag(AlchemyPotionHelper.setEffectToNBT(aph)); - } - - par1ItemStack.getTagCompound().setTag("CustomFlaskEffects", nbttaglist); - } - - public ItemStack onEaten(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - par1ItemStack.setItemDamage(par1ItemStack.getItemDamage() + 1); - } - - if (!par2World.isRemote) - { - ArrayList list = getEffects(par1ItemStack); - - if (list != null) - { - for (AlchemyPotionHelper aph : list) - { - PotionEffect pe = aph.getPotionEffect(); - - if (pe != null) - { - //if(pe.get) - par3EntityPlayer.addPotionEffect(pe); - } - } - } - } - - return par1ItemStack; - } - - /** - * How long it takes to use or consume an item - */ - public int getMaxItemUseDuration(ItemStack par1ItemStack) - { - return 32; - } - - /** - * returns the action that specifies what animation to play when the items is being used - */ - public EnumAction getItemUseAction(ItemStack par1ItemStack) - { - if (this.isPotionThrowable(par1ItemStack)) - { - return EnumAction.NONE; - } - - return EnumAction.DRINK; - } - - /** - * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer - */ - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (par1ItemStack.getItemDamage() < par1ItemStack.getMaxDamage()) - { - if (this.isPotionThrowable(par1ItemStack)) - { - if (!par2World.isRemote) - { - EntityPotion entityPotion = this.getEntityPotion(par1ItemStack, par2World, par3EntityPlayer); - - if (entityPotion != null) - { - float velocityChange = 2.0f; - entityPotion.motionX *= velocityChange; - entityPotion.motionY *= velocityChange; - entityPotion.motionZ *= velocityChange; - par2World.spawnEntityInWorld(entityPotion); - par1ItemStack.setItemDamage(par1ItemStack.getItemDamage() + 1); - } - } - - return par1ItemStack; - } - - par3EntityPlayer.setItemInUse(par1ItemStack, this.getMaxItemUseDuration(par1ItemStack)); - } - return par1ItemStack; - } - - public void setConcentrationOfPotion(ItemStack par1ItemStack, int potionID, int concentration) - { - ArrayList list = getEffects(par1ItemStack); - if (list != null) - { - for (AlchemyPotionHelper aph : list) - { - if (aph.getPotionID() == potionID) - { - aph.setConcentration(concentration); - break; - } - } - setEffects(par1ItemStack, list); - } - } - - public void setDurationFactorOfPotion(ItemStack par1ItemStack, int potionID, int durationFactor) - { - ArrayList list = getEffects(par1ItemStack); - if (list != null) - { - for (AlchemyPotionHelper aph : list) - { - if (aph.getPotionID() == potionID) - { - aph.setDurationFactor(durationFactor); - break; - } - } - setEffects(par1ItemStack, list); - } - } - - public boolean hasPotionEffect(ItemStack par1ItemStack, int potionID) - { - return false; - } - - public int getNumberOfPotionEffects(ItemStack par1ItemStack) - { - if (getEffects(par1ItemStack) != null) - { - return getEffects(par1ItemStack).size(); - } else - { - return 0; - } - } - - public boolean addPotionEffect(ItemStack par1ItemStack, int potionID, int tickDuration) - { - ArrayList list = getEffects(par1ItemStack); - if (list != null) - { - for (AlchemyPotionHelper aph : list) - { - if (aph.getPotionID() == potionID) - { - return false; - } - } - list.add(new AlchemyPotionHelper(potionID, tickDuration, 0, 0)); - setEffects(par1ItemStack, list); - return true; - } else - { - list = new ArrayList(); - list.add(new AlchemyPotionHelper(potionID, tickDuration, 0, 0)); - setEffects(par1ItemStack, list); - return true; - } - } - - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(EnumChatFormatting.BLUE + StatCollector.translateToLocal("tooltip.alchemyflask.swigsleft") + " " + (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage()) + "/" + par1ItemStack.getMaxDamage()); - - if (this.isPotionThrowable(par1ItemStack)) - { - par3List.add(EnumChatFormatting.BLUE + StatCollector.translateToLocal("tooltip.alchemyflask.caution")); - } - - List list1 = AlchemyFlask.getPotionEffects(par1ItemStack); - HashMultimap hashmultimap = HashMultimap.create(); - Iterator iterator; - - if (list1 != null && !list1.isEmpty()) - { - iterator = list1.iterator(); - - while (iterator.hasNext()) - { - PotionEffect potioneffect = (PotionEffect) iterator.next(); - String s = StatCollector.translateToLocal(potioneffect.getEffectName()).trim(); - Potion potion = Potion.potionTypes[potioneffect.getPotionID()]; - Map map = potion.getAttributeModifierMap(); - - if (map != null && map.size() > 0) - { - Iterator iterator1 = map.entrySet().iterator(); - - while (iterator1.hasNext()) - { - Entry entry = (Entry) iterator1.next(); - AttributeModifier attributemodifier = (AttributeModifier) entry.getValue(); - AttributeModifier attributemodifier1 = new AttributeModifier(attributemodifier.getName(), potion.getAttributeModifierAmount(potioneffect.getAmplifier(), attributemodifier), attributemodifier.getOperation()); - hashmultimap.put(((IAttribute) entry.getKey()).getAttributeUnlocalizedName(), attributemodifier1); - } - } - - if (potioneffect.getAmplifier() > 0) - { - s = s + " " + StatCollector.translateToLocal("potion.potency." + potioneffect.getAmplifier()).trim(); - } - - if (potioneffect.getDuration() > 20) - { - s = s + " (" + Potion.getDurationString(potioneffect) + ")"; - } - - if (potion.isBadEffect()) - { - par3List.add(EnumChatFormatting.RED + s); - } else - { - par3List.add(EnumChatFormatting.GRAY + s); - } - } - } else - { - String s1 = StatCollector.translateToLocal("potion.empty").trim(); - par3List.add(EnumChatFormatting.GRAY + s1); - } - - if (!hashmultimap.isEmpty()) - { - par3List.add(""); - par3List.add(EnumChatFormatting.DARK_PURPLE + StatCollector.translateToLocal("potion.effects.whenDrank")); - iterator = hashmultimap.entries().iterator(); - - while (iterator.hasNext()) - { - Entry entry1 = (Entry) iterator.next(); - AttributeModifier attributemodifier2 = (AttributeModifier) entry1.getValue(); - double d0 = attributemodifier2.getAmount(); - double d1; - - if (attributemodifier2.getOperation() != 1 && attributemodifier2.getOperation() != 2) - { - d1 = attributemodifier2.getAmount(); - } else - { - d1 = attributemodifier2.getAmount() * 100.0D; - } - - if (d0 > 0.0D) - { - par3List.add(EnumChatFormatting.BLUE + StatCollector.translateToLocalFormatted("attribute.modifier.plus." + attributemodifier2.getOperation(), new Object[]{ItemStack.DECIMALFORMAT.format(d1), StatCollector.translateToLocal("attribute.name." + (String) entry1.getKey())})); - } else if (d0 < 0.0D) - { - d1 *= -1.0D; - par3List.add(EnumChatFormatting.RED + StatCollector.translateToLocalFormatted("attribute.modifier.take." + attributemodifier2.getOperation(), new Object[]{ItemStack.DECIMALFORMAT.format(d1), StatCollector.translateToLocal("attribute.name." + (String) entry1.getKey())})); - } - } - } - } - - public boolean isPotionThrowable(ItemStack par1ItemStack) - { - return par1ItemStack.hasTagCompound() && par1ItemStack.getTagCompound().getBoolean("throwable"); - } - - public void setIsPotionThrowable(boolean flag, ItemStack par1ItemStack) - { - if (!par1ItemStack.hasTagCompound()) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - par1ItemStack.getTagCompound().setBoolean("throwable", flag); - } - - public EntityPotion getEntityPotion(ItemStack par1ItemStack, World worldObj, EntityLivingBase entityLivingBase) - { - ItemStack potionStack = new ItemStack(Items.potionitem, 1, 0); - potionStack.setTagCompound(new NBTTagCompound()); - ArrayList potionList = getPotionEffects(par1ItemStack); - - if (potionList == null) - { - return null; - } - NBTTagList nbttaglist = new NBTTagList(); - for (PotionEffect pe : potionList) - { - NBTTagCompound d = new NBTTagCompound(); - d.setByte("Id", (byte) pe.getPotionID()); - d.setByte("Amplifier", (byte) pe.getAmplifier()); - d.setInteger("Duration", pe.getDuration()); - d.setBoolean("Ambient", pe.getIsAmbient()); - nbttaglist.appendTag(d); - } - potionStack.getTagCompound().setTag("CustomPotionEffects", nbttaglist); - return new EntityPotion(worldObj, entityLivingBase, potionStack); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/AlchemyReagent.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/AlchemyReagent.java deleted file mode 100644 index fe205e3d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/AlchemyReagent.java +++ /dev/null @@ -1,49 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.potion; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; - -import org.lwjgl.input.Keyboard; - -import WayofTime.alchemicalWizardry.api.alchemy.AlchemyRecipeRegistry; - -public class AlchemyReagent extends Item -{ - public AlchemyReagent() - { - super(); - setMaxStackSize(64); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.usedinalchemy")); - - if (Keyboard.isKeyDown(Keyboard.KEY_RSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) - { - ItemStack[] recipe = AlchemyRecipeRegistry.getRecipeForItemStack(par1ItemStack); - - if (recipe != null) - { - par3List.add(EnumChatFormatting.BLUE + StatCollector.translateToLocal("tooltip.alchemy.recipe")); - - for (ItemStack item : recipe) - { - if (item != null) - { - par3List.add("" + item.getDisplayName()); - } - } - } - } else - { - par3List.add("-" + StatCollector.translateToLocal("tooltip.alchemy.press") + " " + EnumChatFormatting.BLUE + StatCollector.translateToLocal("tooltip.alchemy.shift") + EnumChatFormatting.GRAY + " " + StatCollector.translateToLocal("tooltip.alchemy.forrecipe") + "-"); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/AverageLengtheningCatalyst.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/AverageLengtheningCatalyst.java deleted file mode 100644 index 594fce54..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/AverageLengtheningCatalyst.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.potion; - -public class AverageLengtheningCatalyst extends LengtheningCatalyst -{ - public AverageLengtheningCatalyst() - { - super(2); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/AveragePowerCatalyst.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/AveragePowerCatalyst.java deleted file mode 100644 index 8f6143b4..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/AveragePowerCatalyst.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.potion; - -public class AveragePowerCatalyst extends PowerCatalyst -{ - public AveragePowerCatalyst() - { - super(2); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/CombinationalCatalyst.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/CombinationalCatalyst.java deleted file mode 100644 index d61144f7..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/CombinationalCatalyst.java +++ /dev/null @@ -1,12 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.potion; - -import net.minecraft.item.Item; -import WayofTime.alchemicalWizardry.common.alchemy.ICombinationalCatalyst; - -public class CombinationalCatalyst extends Item implements ICombinationalCatalyst -{ - public CombinationalCatalyst() - { - super(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/EnhancedFillingAgent.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/EnhancedFillingAgent.java deleted file mode 100644 index 4a870991..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/EnhancedFillingAgent.java +++ /dev/null @@ -1,38 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.potion; - -public class EnhancedFillingAgent extends WeakFillingAgent -{ - public EnhancedFillingAgent() - { - super(); - } - - @Override - public int getFilledAmountForPotionNumber(int potionEffects) - { - if (potionEffects == 0) - { - return 8; - } - { - switch (potionEffects) - { - case 1: - return 6; - - case 2: - return 4; - - case 3: - return 3; - - case 4: - return 2; - - case 5: - return 2; - } - } - return 0; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/GreaterLengtheningCatalyst.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/GreaterLengtheningCatalyst.java deleted file mode 100644 index f0e63816..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/GreaterLengtheningCatalyst.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.potion; - -public class GreaterLengtheningCatalyst extends LengtheningCatalyst -{ - public GreaterLengtheningCatalyst() - { - super(3); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/GreaterPowerCatalyst.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/GreaterPowerCatalyst.java deleted file mode 100644 index 779d4d76..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/GreaterPowerCatalyst.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.potion; - -public class GreaterPowerCatalyst extends PowerCatalyst -{ - public GreaterPowerCatalyst() - { - super(3); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/LengtheningCatalyst.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/LengtheningCatalyst.java deleted file mode 100644 index 66bf2586..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/LengtheningCatalyst.java +++ /dev/null @@ -1,61 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.potion; - -import WayofTime.alchemicalWizardry.api.alchemy.AlchemyRecipeRegistry; -import WayofTime.alchemicalWizardry.common.ICatalyst; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import org.lwjgl.input.Keyboard; - -import java.util.List; - -public class LengtheningCatalyst extends Item implements ICatalyst -{ - private int catalystStrength; - - public LengtheningCatalyst(int catalystStrength) - { - this.catalystStrength = catalystStrength; - } - - @Override - public int getCatalystLevel() - { - return catalystStrength; - } - - @Override - public boolean isConcentration() - { - return false; - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.usedinalchemy")); - - if (Keyboard.isKeyDown(Keyboard.KEY_RSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) - { - ItemStack[] recipe = AlchemyRecipeRegistry.getRecipeForItemStack(par1ItemStack); - - if (recipe != null) - { - par3List.add(EnumChatFormatting.BLUE + StatCollector.translateToLocal("tooltip.alchemy.recipe")); - - for (ItemStack item : recipe) - { - if (item != null) - { - par3List.add("" + item.getDisplayName()); - } - } - } - } else - { - par3List.add("-" + StatCollector.translateToLocal("tooltip.alchemy.press") + " " + EnumChatFormatting.BLUE + StatCollector.translateToLocal("tooltip.alchemy.shift") + EnumChatFormatting.GRAY + " " + StatCollector.translateToLocal("tooltip.alchemy.forrecipe") + "-"); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/MundaneLengtheningCatalyst.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/MundaneLengtheningCatalyst.java deleted file mode 100644 index aa78b151..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/MundaneLengtheningCatalyst.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.potion; - -public class MundaneLengtheningCatalyst extends LengtheningCatalyst -{ - public MundaneLengtheningCatalyst() - { - super(1); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/MundanePowerCatalyst.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/MundanePowerCatalyst.java deleted file mode 100644 index 958b0013..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/MundanePowerCatalyst.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.potion; - -public class MundanePowerCatalyst extends PowerCatalyst -{ - public MundanePowerCatalyst() - { - super(1); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/PowerCatalyst.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/PowerCatalyst.java deleted file mode 100644 index 967a0d34..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/PowerCatalyst.java +++ /dev/null @@ -1,63 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.potion; - -import WayofTime.alchemicalWizardry.api.alchemy.AlchemyRecipeRegistry; -import WayofTime.alchemicalWizardry.common.ICatalyst; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; - -import org.lwjgl.input.Keyboard; - -import java.util.List; - -public class PowerCatalyst extends Item implements ICatalyst -{ - private int catalystStrength; - - public PowerCatalyst(int catalystStrength) - { - super(); - this.catalystStrength = catalystStrength; - } - - @Override - public int getCatalystLevel() - { - return catalystStrength; - } - - @Override - public boolean isConcentration() - { - return true; - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.usedinalchemy")); - - if (Keyboard.isKeyDown(Keyboard.KEY_RSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) - { - ItemStack[] recipe = AlchemyRecipeRegistry.getRecipeForItemStack(par1ItemStack); - - if (recipe != null) - { - par3List.add(EnumChatFormatting.BLUE + StatCollector.translateToLocal("tooltip.alchemy.recipe")); - - for (ItemStack item : recipe) - { - if (item != null) - { - par3List.add("" + item.getDisplayName()); - } - } - } - } else - { - par3List.add("-" + StatCollector.translateToLocal("tooltip.alchemy.press") + " " + EnumChatFormatting.BLUE + StatCollector.translateToLocal("tooltip.alchemy.shift") + EnumChatFormatting.GRAY + " " + StatCollector.translateToLocal("tooltip.alchemy.forrecipe") + "-"); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/StandardBindingAgent.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/StandardBindingAgent.java deleted file mode 100644 index 8e70f9ea..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/StandardBindingAgent.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.potion; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; - -import org.lwjgl.input.Keyboard; - -import WayofTime.alchemicalWizardry.api.alchemy.AlchemyRecipeRegistry; -import WayofTime.alchemicalWizardry.common.IBindingAgent; - -public class StandardBindingAgent extends Item implements IBindingAgent -{ - public StandardBindingAgent() - { - super(); - } - - @Override - public float getSuccessRateForPotionNumber(int potions) - { - return (float) Math.pow(0.65, potions); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.usedinalchemy")); - - if (Keyboard.isKeyDown(Keyboard.KEY_RSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) - { - ItemStack[] recipe = AlchemyRecipeRegistry.getRecipeForItemStack(par1ItemStack); - - if (recipe != null) - { - par3List.add(EnumChatFormatting.BLUE + StatCollector.translateToLocal("tooltip.alchemy.recipe")); - - for (ItemStack item : recipe) - { - if (item != null) - { - par3List.add("" + item.getDisplayName()); - } - } - } - } else - { - par3List.add("-" + StatCollector.translateToLocal("tooltip.alchemy.press") + " " + EnumChatFormatting.BLUE + StatCollector.translateToLocal("tooltip.alchemy.shift") + EnumChatFormatting.GRAY + " " + StatCollector.translateToLocal("tooltip.alchemy.forrecipe") + "-"); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/StandardFillingAgent.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/StandardFillingAgent.java deleted file mode 100644 index 21854904..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/StandardFillingAgent.java +++ /dev/null @@ -1,25 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.potion; - -public class StandardFillingAgent extends WeakFillingAgent -{ - public StandardFillingAgent() - { - super(); - } - - @Override - public int getFilledAmountForPotionNumber(int potionEffects) - { - if (potionEffects == 0) - { - return 8; - } - - if (potionEffects >= 1 && potionEffects <= 3) - { - return (int) (4 * (Math.pow(0.5f, potionEffects - 1) + 0.01f)); - } - - return 0; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/WeakBindingAgent.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/WeakBindingAgent.java deleted file mode 100644 index bc755dc1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/WeakBindingAgent.java +++ /dev/null @@ -1,15 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.potion; - -public class WeakBindingAgent extends StandardBindingAgent -{ - public WeakBindingAgent() - { - super(); - } - - @Override - public float getSuccessRateForPotionNumber(int potions) - { - return (float) Math.pow(0.4, potions); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/WeakFillingAgent.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/WeakFillingAgent.java deleted file mode 100644 index 8203572a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/potion/WeakFillingAgent.java +++ /dev/null @@ -1,74 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.potion; - -import java.util.List; -import java.util.Random; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; - -import org.lwjgl.input.Keyboard; - -import WayofTime.alchemicalWizardry.api.alchemy.AlchemyRecipeRegistry; -import WayofTime.alchemicalWizardry.common.IFillingAgent; - -public class WeakFillingAgent extends Item implements IFillingAgent -{ - public WeakFillingAgent() - { - super(); - } - - @Override - public int getFilledAmountForPotionNumber(int potionEffects) - { - Random rand = new Random(); - - if (potionEffects == 0) - { - return 8; - } - - if (potionEffects == 1 || potionEffects == 2) - { - if (rand.nextFloat() > 0.5f) - { - return (4 - potionEffects); - } else - { - return 3 - potionEffects; - } - } - - return 0; - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.usedinalchemy")); - - if (Keyboard.isKeyDown(Keyboard.KEY_RSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) - { - ItemStack[] recipe = AlchemyRecipeRegistry.getRecipeForItemStack(par1ItemStack); - - if (recipe != null) - { - par3List.add(EnumChatFormatting.BLUE + StatCollector.translateToLocal("tooltip.alchemy.recipe")); - - for (ItemStack item : recipe) - { - if (item != null) - { - par3List.add("" + item.getDisplayName()); - } - } - } - } else - { - par3List.add("-" + StatCollector.translateToLocal("tooltip.alchemy.press") + " " + EnumChatFormatting.BLUE + StatCollector.translateToLocal("tooltip.alchemy.shift") + EnumChatFormatting.GRAY + " " + StatCollector.translateToLocal("tooltip.alchemy.forrecipe") + "-"); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/ILimitedRoutingFocus.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/ILimitedRoutingFocus.java deleted file mode 100644 index da996b44..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/ILimitedRoutingFocus.java +++ /dev/null @@ -1,10 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.routing; - -import net.minecraft.item.ItemStack; - -public interface ILimitedRoutingFocus -{ - int getRoutingFocusLimit(ItemStack stack); - - void setRoutingFocusLimit(ItemStack stack, int limit); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/InputRoutingFocus.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/InputRoutingFocus.java deleted file mode 100644 index 74ce08b8..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/InputRoutingFocus.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.routing; - -public class InputRoutingFocus extends RoutingFocus -{ - public InputRoutingFocus() - { - super(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/OutputRoutingFocus.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/OutputRoutingFocus.java deleted file mode 100644 index b8a5f0fc..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/OutputRoutingFocus.java +++ /dev/null @@ -1,127 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.routing; - -import java.util.List; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.api.RoutingFocusLogic; -import WayofTime.alchemicalWizardry.common.routing.RoutingFocusLogicLimitDefault; -import WayofTime.alchemicalWizardry.common.routing.RoutingFocusLogicLimitGlobal; -import WayofTime.alchemicalWizardry.common.routing.RoutingFocusLogicLimitIgnMeta; -import WayofTime.alchemicalWizardry.common.routing.RoutingFocusLogicLimitMatchNBT; -import WayofTime.alchemicalWizardry.common.routing.RoutingFocusLogicLimitModItems; - -public class OutputRoutingFocus extends RoutingFocus implements ILimitedRoutingFocus -{ - public OutputRoutingFocus() - { - super(); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - super.addInformation(par1ItemStack, par2EntityPlayer, par3List, par4); - - if (!(par1ItemStack.getTagCompound() == null)) - { - int limit = this.getRoutingFocusLimit(par1ItemStack); - if(limit > 0) - { - par3List.add(StatCollector.translateToLocal("tooltip.routingFocus.limit") + " " + limit); - } - } - } - - @Override - public String getUnlocalizedName(ItemStack itemStack) - { - String addedString = ""; - - switch (itemStack.getItemDamage()) - { - case 0: - addedString = "default"; - break; - case 1: - addedString = "modItem"; - break; - case 2: - addedString = "ignMeta"; - break; - case 3: - addedString = "matchNBT"; - break; - case 4: - addedString = "global"; - break; - } - - return super.getUnlocalizedName() + "." + addedString; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item id, CreativeTabs creativeTab, List list) - { - for (int meta = 0; meta < 5; ++meta) - { - list.add(new ItemStack(id, 1, meta)); - } - } - - @Override - public RoutingFocusLogic getLogic(ItemStack itemStack) - { - if(itemStack != null) - { - switch(itemStack.getItemDamage()) - { - case 0: - return new RoutingFocusLogicLimitDefault(itemStack); - case 1: - return new RoutingFocusLogicLimitModItems(itemStack); - case 2: - return new RoutingFocusLogicLimitIgnMeta(itemStack); - case 3: - return new RoutingFocusLogicLimitMatchNBT(itemStack); - case 4: - return new RoutingFocusLogicLimitGlobal(itemStack); - } - } - - return new RoutingFocusLogic(); - } - - public int getDefaultStackLimit(int damage) - { - return 0; - } - - public int getRoutingFocusLimit(ItemStack itemStack) - { - if (!(itemStack.getTagCompound() == null)) - { - return itemStack.getTagCompound().getInteger("stackLimit"); - } else - { - return getDefaultStackLimit(itemStack.getItemDamage()); - } - } - - public void setRoutingFocusLimit(ItemStack itemStack, int amt) - { - if ((itemStack.getTagCompound() == null)) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - itemStack.getTagCompound().setInteger("stackLimit", amt); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/RoutingFocus.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/RoutingFocus.java deleted file mode 100644 index cdcc8f61..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/RoutingFocus.java +++ /dev/null @@ -1,184 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.routing; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.Int3; -import WayofTime.alchemicalWizardry.api.RoutingFocusLogic; -import WayofTime.alchemicalWizardry.api.RoutingFocusPosAndFacing; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RoutingFocus extends Item -{ - public RoutingFocus() - { - super(); - this.maxStackSize = 1; - this.setCreativeTab(AlchemicalWizardry.tabBloodMagic); - } - - public RoutingFocusPosAndFacing getPosAndFacing(ItemStack itemStack) - { - return new RoutingFocusPosAndFacing(new Int3(this.xCoord(itemStack), this.yCoord(itemStack), this.zCoord(itemStack)), this.getSetDirection(itemStack)); - } - -// @Override -// public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) -// { -// this.cycleDirection(itemStack); -// return itemStack; -// } -// -// public void cycleDirection(ItemStack itemStack) -// { -// EnumFacing dir = this.getSetDirection(itemStack); -// int direction = dir.ordinal(); -// direction++; -// if(direction >= EnumFacing.VALID_DIRECTIONS.length) -// { -// direction = 0; -// } -// -// this.setSetDirection(itemStack, EnumFacing.getOrientation(direction)); -// } - - public EnumFacing getSetDirection(ItemStack itemStack) - { - if(!itemStack.hasTagCompound()) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = itemStack.getTagCompound(); - - return EnumFacing.getFront(tag.getInteger("direction")); - } - - public void setSetDirection(ItemStack itemStack, EnumFacing dir) - { - if(!itemStack.hasTagCompound()) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = itemStack.getTagCompound(); - - tag.setInteger("direction", dir.ordinal()); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal(this.getFocusDescription())); - - if (!(par1ItemStack.getTagCompound() == null)) - { - NBTTagCompound itemTag = par1ItemStack.getTagCompound(); - - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.coords") + " " + itemTag.getInteger("xCoord") + ", " + itemTag.getInteger("yCoord") + ", " + itemTag.getInteger("zCoord")); - par3List.add(StatCollector.translateToLocal("tooltip.alchemy.direction") + " " + this.getSetDirection(par1ItemStack)); - } - } - - public String getFocusDescription() - { - return "tooltip.routingFocus.desc"; - } - - @Override - public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ) - { - if(world.isRemote) - { - return false; - } - - TileEntity tile = world.getTileEntity(pos); - if(tile instanceof IInventory) - { - if(player.isSneaking()) - { - if(this instanceof ILimitedRoutingFocus) - { - int pastAmount = ((ILimitedRoutingFocus)this).getRoutingFocusLimit(stack); - int amount = SpellHelper.getNumberOfItemsInInventory((IInventory)tile, side); - if(amount != pastAmount) - { - ((ILimitedRoutingFocus)this).setRoutingFocusLimit(stack, amount); - player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("message.routerfocus.limit") + amount)); - } - } - } - - this.setCoordinates(stack, pos); - this.setSetDirection(stack, side); - - return true; - } - - return true; - } - - public void setCoordinates(ItemStack itemStack, BlockPos pos) - { - if(!itemStack.hasTagCompound()) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = itemStack.getTagCompound(); - - tag.setInteger("xCoord", pos.getX()); - tag.setInteger("yCoord", pos.getY()); - tag.setInteger("zCoord", pos.getZ()); - } - - public int xCoord(ItemStack itemStack) - { - if (!(itemStack.getTagCompound() == null)) - { - return itemStack.getTagCompound().getInteger("xCoord"); - } else - { - return 0; - } - } - - public int yCoord(ItemStack itemStack) - { - if (!(itemStack.getTagCompound() == null)) - { - return itemStack.getTagCompound().getInteger("yCoord"); - } else - { - return 0; - } - } - - public int zCoord(ItemStack itemStack) - { - if (!(itemStack.getTagCompound() == null)) - { - return itemStack.getTagCompound().getInteger("zCoord"); - } else - { - return 0; - } - } - - public RoutingFocusLogic getLogic(ItemStack itemStack) - { - return new RoutingFocusLogic(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilAir.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilAir.java deleted file mode 100644 index a654b677..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilAir.java +++ /dev/null @@ -1,130 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import WayofTime.alchemicalWizardry.common.items.BindableItems; - -public class SigilAir extends BindableItems implements ArmourUpgrade, ISigil -{ - public SigilAir() - { - super(); - setEnergyUsed(50); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.airsigil.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if(par2World.isRemote && this.isItemUnusable(par1ItemStack)) - { - return par1ItemStack; - } - - Vec3 vec = par3EntityPlayer.getLookVec(); - double wantedVelocity = 1.7; - - if (par3EntityPlayer.isPotionActive(AlchemicalWizardry.customPotionBoost)) - { - int i = par3EntityPlayer.getActivePotionEffect(AlchemicalWizardry.customPotionBoost).getAmplifier(); - wantedVelocity += (1 + i) * (0.35); - } - - par3EntityPlayer.motionX = vec.xCoord * wantedVelocity; - par3EntityPlayer.motionY = vec.yCoord * wantedVelocity; - par3EntityPlayer.motionZ = vec.zCoord * wantedVelocity; - par2World.playSoundEffect((double) ((float) par3EntityPlayer.posX + 0.5F), (double) ((float) par3EntityPlayer.posY + 0.5F), (double) ((float) par3EntityPlayer.posZ + 0.5F), "random.fizz", 0.5F, 2.6F + (par2World.rand.nextFloat() - par2World.rand.nextFloat()) * 0.8F); - par3EntityPlayer.fallDistance = 0; - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if (!BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) - { - if(!par2World.isRemote) - { - this.setIsItemUnusable(par1ItemStack, true); - } - }else - { - if(!par2World.isRemote) - { - this.setIsItemUnusable(par1ItemStack, false); - } - } - } else - { - return par1ItemStack; - } - - return par1ItemStack; - } - - public boolean isItemUnusable(ItemStack stack) - { - NBTTagCompound tag = stack.getTagCompound(); - if(tag == null) - { - tag = new NBTTagCompound(); - stack.setTagCompound(tag); - } - - return tag.getBoolean("unusable"); - } - - public void setIsItemUnusable(ItemStack stack, boolean bool) - { - NBTTagCompound tag = stack.getTagCompound(); - if(tag == null) - { - tag = new NBTTagCompound(); - stack.setTagCompound(tag); - } - - tag.setBoolean("unusable", bool); - } - - @Override - public void onArmourUpdate(World world, EntityPlayer player, ItemStack thisItemStack) - { - // TODO Auto-generated method stub - player.fallDistance = 0; - } - - @Override - public boolean isUpgrade() - { - // TODO Auto-generated method stub - return true; - } - - @Override - public int getEnergyForTenSeconds() - { - // TODO Auto-generated method stub - return 50; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilBloodLight.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilBloodLight.java deleted file mode 100644 index 1d3e9845..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilBloodLight.java +++ /dev/null @@ -1,132 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import java.util.List; - -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.api.items.interfaces.IHolding; -import WayofTime.alchemicalWizardry.common.entity.projectile.EntityBloodLightProjectile; -import WayofTime.alchemicalWizardry.common.items.BindableItems; - -public class SigilBloodLight extends BindableItems implements IHolding, ArmourUpgrade, ISigil -{ - public SigilBloodLight() - { - super(); - setEnergyUsed(10); - } - - @Override - public void addInformation(ItemStack itemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.bloodlightsigil.desc")); - - if (!(itemStack.getTagCompound() == null)) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + itemStack.getTagCompound().getString("ownerName")); - } - } - - @Override - public boolean onItemUse(ItemStack itemStack, EntityPlayer player, World world, BlockPos blockPos, EnumFacing side, float hitX, float hitY, float hitZ) - { - if(!BindableItems.checkAndSetItemOwner(itemStack, player) || !BindableItems.syphonBatteries(itemStack, player, getEnergyUsed())) - { - return true; - } - - if (world.isRemote) - { - return true; - } - - IBlockState light = ModBlocks.blockBloodLight.getBlockState().getBaseState(); - - if (side.getIndex() == 0 && world.isAirBlock(blockPos.add(0, -1, 0))) - { - world.setBlockState(blockPos.add(0, -1, 0), light); - } - - if (side.getIndex() == 1 && world.isAirBlock(blockPos.add(0, 1, 0))) - { - world.setBlockState(blockPos.add(0, 1, 0), light); - } - - if (side.getIndex() == 2 && world.isAirBlock(blockPos.add(0, 0, -1))) - { - world.setBlockState(blockPos.add(0, 0, -1), light); - } - - if (side.getIndex() == 3 && world.isAirBlock(blockPos.add(0, 0, 1))) - { - world.setBlockState(blockPos.add(0, 0, 1), light); - } - - if (side.getIndex() == 4 && world.isAirBlock(blockPos.add(-1, 0, 0))) - { - world.setBlockState(blockPos.add(-1, 0, 0), light); - } - - if (side.getIndex() == 5 && world.isAirBlock(blockPos.add(1, 0, 0))) - { - world.setBlockState(blockPos.add(1, 0, 0), light); - } - - return true; - } - - @Override - public ItemStack onItemRightClick(ItemStack itemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(itemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return itemStack; - } - - if (itemStack.getTagCompound() == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - if(!BindableItems.syphonBatteries(itemStack, par3EntityPlayer, getEnergyUsed() * 5)) - { - return itemStack; - } - - if (!par2World.isRemote) - { - par2World.spawnEntityInWorld(new EntityBloodLightProjectile(par2World, par3EntityPlayer, 10)); - } - - return itemStack; - } - - @Override - public void onArmourUpdate(World world, EntityPlayer player, ItemStack thisItemStack) - { - player.addPotionEffect(new PotionEffect(Potion.nightVision.id, 400, 9, true, false)); - } - - @Override - public boolean isUpgrade() - { - return true; - } - - @Override - public int getEnergyForTenSeconds() - { - return 25; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilCompress.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilCompress.java deleted file mode 100644 index 49fa6114..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilCompress.java +++ /dev/null @@ -1,143 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import java.util.List; - -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import net.minecraft.entity.Entity; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.compress.CompressionRegistry; -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.api.items.interfaces.IHolding; -import WayofTime.alchemicalWizardry.common.items.BindableItems; - -public class SigilCompress extends SigilToggleable implements IHolding, ArmourUpgrade, ISigil -{ - public SigilCompress() - { - super(); - setEnergyUsed(200); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.packratsigil.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - if (this.getActivated(par1ItemStack)) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.activated")); - } else - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.deactivated")); - } - - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = par1ItemStack.getTagCompound(); - this.setActivated(par1ItemStack, !(this.getActivated(par1ItemStack))); - - if (this.getActivated(par1ItemStack)) - { - par1ItemStack.setItemDamage(1); - tag.setInteger("worldTimeDelay", (int) (par2World.getWorldTime() - 1) % 200); - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if (!BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) - { - this.setActivated(par1ItemStack, false); - } - } - } else - { - par1ItemStack.setItemDamage(par1ItemStack.getMaxDamage()); - } - - return par1ItemStack; - } - - @Override - public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) - { - if (!(par3Entity instanceof EntityPlayer) || par2World.isRemote) - { - return; - } - - EntityPlayer par3EntityPlayer = (EntityPlayer) par3Entity; - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - if (this.getActivated(par1ItemStack)) - { - ItemStack stack = CompressionRegistry.compressInventory(par3EntityPlayer.inventory.mainInventory, par2World); - if(stack != null) - { - EntityItem entityItem = new EntityItem(par2World, par3EntityPlayer.posX, par3EntityPlayer.posY, par3EntityPlayer.posZ, stack); - par2World.spawnEntityInWorld(entityItem); - } - } - if (par2World.getWorldTime() % 200 == par1ItemStack.getTagCompound().getInteger("worldTimeDelay") && this.getActivated(par1ItemStack)) - { - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if(!BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) - { - this.setActivated(par1ItemStack, false); - } - } - } - } - - @Override - public void onArmourUpdate(World world, EntityPlayer player, ItemStack thisItemStack) - { - if(world.isRemote) - { - return; - } - ItemStack stack = CompressionRegistry.compressInventory(player.inventory.mainInventory, world); - if(stack != null) - { - EntityItem entityItem = new EntityItem(world, player.posX, player.posY, player.posZ, stack); - world.spawnEntityInWorld(entityItem); - } - } - - @Override - public boolean isUpgrade() - { - return true; - } - - @Override - public int getEnergyForTenSeconds() - { - return 200; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilDivination.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilDivination.java deleted file mode 100644 index fdda6857..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilDivination.java +++ /dev/null @@ -1,119 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import java.util.List; - -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.alchemy.energy.IReagentHandler; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainerInfo; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; -import WayofTime.alchemicalWizardry.api.items.interfaces.IReagentManipulator; -import WayofTime.alchemicalWizardry.common.items.BindableItems; - -public class SigilDivination extends BindableItems implements ArmourUpgrade, IReagentManipulator, IBindable, ISigil -{ - public SigilDivination() - { - super(); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.divinationsigil.desc1")); - par3List.add(StatCollector.translateToLocal("tooltip.divinationsigil.desc2")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer); - - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.worldObj.isRemote) - { - return par1ItemStack; - } - - if(!BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, 0)) - { - return par1ItemStack; - } - - NBTTagCompound itemTag = par1ItemStack.getTagCompound(); - - if (itemTag == null || itemTag.getString("ownerName").equals("")) - { - return par1ItemStack; - } - - String ownerName = itemTag.getString("ownerName"); - - MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(par2World, par3EntityPlayer, false); - - if (movingobjectposition == null) - { - par3EntityPlayer.addChatMessage(new ChatComponentText(StatCollector.translateToLocal("message.divinationsigil.currentessence") + " " + SoulNetworkHandler.getCurrentEssence(ownerName) + "LP")); - - return par1ItemStack; - } else - { - if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - TileEntity tile = par2World.getTileEntity(movingobjectposition.func_178782_a()); - - if (!(tile instanceof IReagentHandler)) - { - par3EntityPlayer.addChatMessage(new ChatComponentText(StatCollector.translateToLocal("message.divinationsigil.currentessence") + " " + SoulNetworkHandler.getCurrentEssence(ownerName) + "LP")); - - return par1ItemStack; - } - - IReagentHandler relay = (IReagentHandler) tile; - - ReagentContainerInfo[] infoList = relay.getContainerInfo(EnumFacing.DOWN); - if (infoList != null) - { - for (ReagentContainerInfo info : infoList) - { - if (info != null && info.reagent != null && info.reagent.reagent != null) - { - par3EntityPlayer.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("message.divinationsigil.reagent") + " " + ReagentRegistry.getKeyForReagent(info.reagent.reagent) + "," + StatCollector.translateToLocal("message.divinationsigil.amount") + " " + info.reagent.amount)); - } - } - } - } - } - - return par1ItemStack; - } - - @Override - public void onArmourUpdate(World world, EntityPlayer player, ItemStack thisItemStack) {} - @Override - public boolean isUpgrade() - { - return false; - } - - @Override - public int getEnergyForTenSeconds() - { - return 25; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilFluid.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilFluid.java deleted file mode 100644 index e15a5a4d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilFluid.java +++ /dev/null @@ -1,739 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.Int3; -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import net.minecraft.block.Block; -import net.minecraft.block.material.MaterialLiquid; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.*; -import net.minecraft.world.World; -import net.minecraftforge.fluids.*; - -import java.util.ArrayList; -import java.util.List; - -public class SigilFluid extends BindableItems implements IFluidContainerItem, ISigil -{ - private int capacity = 128 * 1000; - private static final int STATE_SYPHON = 0; - private static final int STATE_FORCE_SYPHON = 1; - private static final int STATE_PLACE = 2; - private static final int STATE_INPUT_TANK = 3; - private static final int STATE_DRAIN_TANK = 4; - private static final int STATE_BEAST_DRAIN = 5; - private static final int maxNumOfStates = 6; - - public SigilFluid() - { - super(); - this.setMaxDamage(0); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.fluidsigil.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - switch (this.getActionState(par1ItemStack)) - { - case STATE_SYPHON: - par3List.add(StatCollector.translateToLocal("tooltip.fluidsigil.syphoningmode")); - break; - case STATE_FORCE_SYPHON: - par3List.add(StatCollector.translateToLocal("tooltip.fluidsigil.forcesyphonmode")); - break; - case STATE_PLACE: - par3List.add(StatCollector.translateToLocal("tooltip.fluidsigil.fluidplacementmode")); - break; - case STATE_INPUT_TANK: - par3List.add(StatCollector.translateToLocal("tooltip.fluidsigil.filltankmode")); - break; - case STATE_DRAIN_TANK: - par3List.add(StatCollector.translateToLocal("tooltip.fluidsigil.draintankmode")); - break; - case STATE_BEAST_DRAIN: - par3List.add(StatCollector.translateToLocal("tooltip.fluidsigil.beastmode")); - break; - } - - FluidStack fluid = this.getFluid(par1ItemStack); - if (fluid != null && fluid.amount > 0) - { - String str = fluid.getFluid().getName(); - int amount = fluid.amount; - - par3List.add("" + amount + "mB of " + str); - } else - { - par3List.add("Empty"); - } - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (par3EntityPlayer.isSneaking()) - { - int curState = this.cycleActionState(par1ItemStack); - this.sendMessageViaState(curState, par3EntityPlayer); - return par1ItemStack; - } - - switch (this.getActionState(par1ItemStack)) - { - case STATE_SYPHON: - return this.fillItemFromWorld(par1ItemStack, par2World, par3EntityPlayer, false); - case STATE_FORCE_SYPHON: - return this.fillItemFromWorld(par1ItemStack, par2World, par3EntityPlayer, true); - case STATE_PLACE: - return this.emptyItemToWorld(par1ItemStack, par2World, par3EntityPlayer); - case STATE_INPUT_TANK: - return this.fillSelectedTank(par1ItemStack, par2World, par3EntityPlayer); - case STATE_DRAIN_TANK: - return this.drainSelectedTank(par1ItemStack, par2World, par3EntityPlayer); - case STATE_BEAST_DRAIN: - return this.fillItemFromBeastWorld(par1ItemStack, par2World, par3EntityPlayer, true); - } - - return par1ItemStack; - } - - public int getActionState(ItemStack item) - { - if (item.getTagCompound() == null) - { - item.setTagCompound(new NBTTagCompound()); - } - - return item.getTagCompound().getInteger("actionState"); - } - - public void setActionState(ItemStack item, int actionState) - { - if (item.getTagCompound() == null) - { - item.setTagCompound(new NBTTagCompound()); - } - - item.getTagCompound().setInteger("actionState", actionState); - } - - public int cycleActionState(ItemStack item) - { - int state = this.getActionState(item); - - state++; - - if (state >= maxNumOfStates) - { - state = 0; - } - - this.setActionState(item, state); - - return state; - } - - public void sendMessageViaState(int state, EntityPlayer player) - { - if (player.worldObj.isRemote) - { - ChatComponentText cmc = new ChatComponentText(""); - switch (state) - { - case STATE_SYPHON: - cmc.appendText("Now in Syphoning Mode"); - break; - case STATE_FORCE_SYPHON: - cmc.appendText("Now in Force-syphon Mode"); - break; - case STATE_PLACE: - cmc.appendText("Now in Fluid Placement Mode"); - break; - case STATE_INPUT_TANK: - cmc.appendText("Now in Fill Tank Mode"); - break; - case STATE_DRAIN_TANK: - cmc.appendText("Now in Drain Tank Mode"); - break; - case STATE_BEAST_DRAIN: - cmc.appendText("Now in Beast Mode"); - break; - } - player.addChatComponentMessage(cmc); - } - } - - public ItemStack fillItemFromBeastWorld(ItemStack container, World world, EntityPlayer player, boolean forceFill) - { - if (world.isRemote) - { - return container; - } - int range = 5; - - boolean flag = true; - MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, player, flag); - - if (movingobjectposition == null) - { - return container; - } else - { - if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - if (!world.canMineBlockBody(player, movingobjectposition.func_178782_a())) - { - return container; - } - - if (!player.func_175151_a(movingobjectposition.func_178782_a(), movingobjectposition.field_178784_b, container)) - { - return container; - } - - boolean[][][] boolList = new boolean[range * 2 + 1][range * 2 + 1][range * 2 + 1]; - - for (int i = 0; i < 2 * range + 1; i++) - { - for (int j = 0; j < 2 * range + 1; j++) - { - for (int k = 0; k < 2 * range + 1; k++) - { - boolList[i][j][k] = false; - } - } - } - - List positionList = new ArrayList(); - - int x = movingobjectposition.func_178782_a().getX(); - int y = movingobjectposition.func_178782_a().getY(); - int z = movingobjectposition.func_178782_a().getZ(); - - boolList[range][range][range] = true; - positionList.add(new Int3(range, range, range)); - boolean isReady = false; - - while (!isReady) - { - isReady = true; - - for (int i = 0; i < 2 * range + 1; i++) - { - for (int j = 0; j < 2 * range + 1; j++) - { - for (int k = 0; k < 2 * range + 1; k++) - { - if (boolList[i][j][k]) - { - if (i - 1 >= 0 && !boolList[i - 1][j][k]) - { - Block block = world.getBlockState(new BlockPos(x - range + i - 1, y - range + j, z - range + k)).getBlock(); - Fluid fluid = FluidRegistry.lookupFluidForBlock(block); - - if (fluid != null) - { - boolList[i - 1][j][k] = true; - positionList.add(new Int3(i - 1, j, k)); - isReady = false; - } - } - - if (j - 1 >= 0 && !boolList[i][j - 1][k]) - { - Block block = world.getBlockState(new BlockPos(x - range + i, y - range + j - 1, z - range + k)).getBlock(); - Fluid fluid = FluidRegistry.lookupFluidForBlock(block); - - if (fluid != null) - { - boolList[i][j - 1][k] = true; - positionList.add(new Int3(i, j - 1, k)); - isReady = false; - } - } - - if (k - 1 >= 0 && !boolList[i][j][k - 1]) - { - Block block = world.getBlockState(new BlockPos(x - range + i, y - range + j, z - range + k - 1)).getBlock(); - Fluid fluid = FluidRegistry.lookupFluidForBlock(block); - - if (fluid != null) - { - boolList[i][j][k - 1] = true; - positionList.add(new Int3(i, j, k - 1)); - isReady = false; - } - } - - if (i + 1 <= 2 * range && !boolList[i + 1][j][k]) - { - Block block = world.getBlockState(new BlockPos(x - range + i + 1, y - range + j, z - range + k)).getBlock(); - Fluid fluid = FluidRegistry.lookupFluidForBlock(block); - - if (fluid != null) - { - boolList[i + 1][j][k] = true; - positionList.add(new Int3(i + 1, j, k)); - isReady = false; - } - } - - if (j + 1 <= 2 * range && !boolList[i][j + 1][k]) - { - Block block = world.getBlockState(new BlockPos(x - range + i, y - range + j + 1, z - range + k)).getBlock(); - Fluid fluid = FluidRegistry.lookupFluidForBlock(block); - - if (fluid != null) - { - boolList[i][j + 1][k] = true; - positionList.add(new Int3(i, j + 1, k)); - isReady = false; - } - } - - if (k + 1 <= 2 * range && !boolList[i][j][k + 1]) - { - Block block = world.getBlockState(new BlockPos(x - range + i, y - range + j, z - range + k + 1)).getBlock(); - Fluid fluid = FluidRegistry.lookupFluidForBlock(block); - - if (fluid != null) - { - boolList[i][j][k + 1] = true; - positionList.add(new Int3(i, j, k + 1)); - isReady = false; - } - } - } - } - } - } - } - - for (Int3 pos : positionList) - { - int i = pos.xCoord; - int j = pos.yCoord; - int k = pos.zCoord; - - if (!boolList[i][j][k]) - { - continue; - } - if (world.getBlockState(new BlockPos(x + i - range, y + j - range, z + k - range)).getBlock() != null && world.getBlockState(new BlockPos(x + i - range, y + j - range, z + k - range)).getBlock().getMaterial() instanceof MaterialLiquid) - { - //world.setBlockToAir(x+i-range, y+j-range, z+k-range); - Block block = world.getBlockState(new BlockPos(x + i - range, y + j - range, z + k - range)).getBlock(); - if (block == null) - { - continue; - } - Fluid fluid = FluidRegistry.lookupFluidForBlock(block); - - AlchemicalWizardry.logger.info("x: " + (i - range) + " y: " + (j - range) + " z: " + (k - range)); - - - if (fluid == null || world.getBlockState(new BlockPos(x + i - range, y + j - range, z + k - range)).getBlock().getMetaFromState(world.getBlockState(new BlockPos(x + i - range, y + j - range, z + k - range))) != 0) - { - continue; - } - - - FluidStack fillStack = new FluidStack(fluid, 1000); - - int amount = this.fill(container, fillStack, false); - - if ((amount > 0 && forceFill) || (amount >= 1000 && !forceFill)) - { - { - world.setBlockToAir(new BlockPos(x + i - range, y + j - range, z + k - range)); - } - - this.fill(container, new FluidStack(fluid, 1000), true); - } - } - } - } - - return container; - } - } - - public ItemStack fillItemFromWorld(ItemStack container, World world, EntityPlayer player, boolean forceFill) - { - boolean flag = true; - MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, player, flag); - - if (movingobjectposition == null) - { - return container; - } else - { - if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - if (!world.canMineBlockBody(player, movingobjectposition.func_178782_a())) - { - return container; - } - - if (!player.func_175151_a(movingobjectposition.func_178782_a(), movingobjectposition.field_178784_b, container)) - { - return container; - } - - if (world.getBlockState(movingobjectposition.func_178782_a()).getBlock() != null && world.getBlockState(movingobjectposition.func_178782_a()).getBlock().getMaterial() instanceof MaterialLiquid) - { - Block block = world.getBlockState(movingobjectposition.func_178782_a()).getBlock(); - Fluid fluid = FluidRegistry.lookupFluidForBlock(block); - - if (fluid == null) - { - return container; - } - - FluidStack fillStack = new FluidStack(fluid, 1000); - - int amount = this.fill(container, fillStack, false); - - if ((amount > 0 && forceFill) || (amount >= 1000 && !forceFill)) - { - if (!player.capabilities.isCreativeMode) - { - world.setBlockToAir(movingobjectposition.func_178782_a()); - } - - this.fill(container, new FluidStack(fluid, 1000), true); - - if (!player.capabilities.isCreativeMode) - { - } else - { - return container; - } - } - } - } - - return container; - } - } - - public ItemStack emptyItemToWorld(ItemStack container, World world, EntityPlayer player) - { - FluidStack simStack = this.drain(container, 1000, false); - - if (simStack != null && simStack.amount >= 1000) - { - boolean flag = false; - MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, player, flag); - - if (movingobjectposition == null) - { - return container; - } else - { - if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - if (!world.canMineBlockBody(player, movingobjectposition.func_178782_a())) - { - return container; - } - - int i = movingobjectposition.func_178782_a().getX(); - int j = movingobjectposition.func_178782_a().getY(); - int k = movingobjectposition.func_178782_a().getZ(); - - if (movingobjectposition.field_178784_b.getIndex() == 0) - { - --j; - } - - if (movingobjectposition.field_178784_b.getIndex() == 1) - { - ++j; - } - - if (movingobjectposition.field_178784_b.getIndex() == 2) - { - --k; - } - - if (movingobjectposition.field_178784_b.getIndex() == 3) - { - ++k; - } - - if (movingobjectposition.field_178784_b.getIndex() == 4) - { - --i; - } - - if (movingobjectposition.field_178784_b.getIndex() == 5) - { - ++i; - } - - if (!player.func_175151_a(new BlockPos(i, j, k), movingobjectposition.field_178784_b, container)) - { - return container; - } - - if (this.tryPlaceContainedLiquid(world, new BlockPos(i, j, k)) && !player.capabilities.isCreativeMode) - { - this.drain(container, 1000, true); - - return container; - } - } - - return container; - } - } - - return container; - } - - public boolean tryPlaceContainedLiquid(World world, BlockPos blockPos) - { - if (!world.isAirBlock(blockPos) && world.getBlockState(blockPos).getBlock().getMaterial().isSolid()) //TODO Was func_149730_j() so check this! - { - return false; - } else if ((world.getBlockState(blockPos).getBlock().getMaterial() instanceof MaterialLiquid && world.getBlockState(blockPos).getBlock().getMetaFromState(world.getBlockState(blockPos)) == 0)) - { - return false; - } else - { - Block block = world.getBlockState(blockPos).getBlock(); - if ((block == Blocks.water || block == Blocks.flowing_water) && world.provider.func_177500_n()) - { - world.playSoundEffect(blockPos.getX() + 0.5D, blockPos.getY() + 0.5D, blockPos.getZ() + 0.5D, "random.fizz", 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); - - for (int l = 0; l < 8; ++l) - { - world.spawnParticle(EnumParticleTypes.SMOKE_LARGE, (double) blockPos.getX() + Math.random(), (double) blockPos.getY() + Math.random(), (double) blockPos.getZ() + Math.random(), 0.0D, 0.0D, 0.0D); - } - } else - { - world.setBlockState(blockPos, block.getBlockState().getBaseState()); - } - - return true; - } - } - - public ItemStack fillSelectedTank(ItemStack container, World world, EntityPlayer player) - { - FluidStack fluid = this.getFluid(container); - - if (fluid == null) - { - return container; - } - - float f = 1.0F; - boolean flag = false; - MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, player, flag); - - if (movingobjectposition == null) - { - return container; - } else - { - if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - TileEntity tile = world.getTileEntity(movingobjectposition.func_178782_a()); - - if (tile instanceof IFluidHandler) - { - int amount = ((IFluidHandler) tile).fill(movingobjectposition.field_178784_b, fluid, true); - - this.drain(container, amount, true); - } - } - } - - return container; - } - - public ItemStack drainSelectedTank(ItemStack container, World world, EntityPlayer player) - { - float f = 1.0F; - boolean flag = false; - MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, player, flag); - - if (movingobjectposition == null) - { - return container; - } else - { - if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) - { - TileEntity tile = world.getTileEntity(movingobjectposition.func_178782_a()); - - if (tile instanceof IFluidHandler) - { - FluidStack fluidAmount = ((IFluidHandler) tile).drain(movingobjectposition.field_178784_b, this.getCapacity(container), false); - - int amount = this.fill(container, fluidAmount, false); - - if (amount > 0) - { - ((IFluidHandler) tile).drain(movingobjectposition.field_178784_b, this.getCapacity(container), true); - - this.fill(container, fluidAmount, true); - } - } - } - } - - return container; - } - - /* IFluidContainerItem */ - @Override - public FluidStack getFluid(ItemStack container) - { - if (container.getTagCompound() == null || !container.getTagCompound().hasKey("Fluid")) - { - return null; - } - return FluidStack.loadFluidStackFromNBT(container.getTagCompound().getCompoundTag("Fluid")); - } - - @Override - public int getCapacity(ItemStack container) - { - return capacity; - } - - @Override - public int fill(ItemStack container, FluidStack resource, boolean doFill) - { - if (resource == null) - { - return 0; - } - - if (!doFill) - { - if (container.getTagCompound() == null || !container.getTagCompound().hasKey("Fluid")) - { - return Math.min(capacity, resource.amount); - } - - FluidStack stack = FluidStack.loadFluidStackFromNBT(container.getTagCompound().getCompoundTag("Fluid")); - - if (stack == null || stack.amount <= 0) - { - return Math.min(capacity, resource.amount); - } - - if (!stack.isFluidEqual(resource)) - { - return 0; - } - - return Math.min(capacity - stack.amount, resource.amount); - } - - if (container.getTagCompound() == null) - { - container.setTagCompound(new NBTTagCompound()); - } - - if (!container.getTagCompound().hasKey("Fluid")) - { - NBTTagCompound fluidTag = resource.writeToNBT(new NBTTagCompound()); - - if (capacity < resource.amount) - { - fluidTag.setInteger("Amount", capacity); - container.getTagCompound().setTag("Fluid", fluidTag); - return capacity; - } - - container.getTagCompound().setTag("Fluid", fluidTag); - return resource.amount; - } - - NBTTagCompound fluidTag = container.getTagCompound().getCompoundTag("Fluid"); - FluidStack stack = FluidStack.loadFluidStackFromNBT(fluidTag); - - if (stack == null || stack.amount <= 0) - { - NBTTagCompound fluidTag1 = resource.writeToNBT(new NBTTagCompound()); - - if (capacity < resource.amount) - { - fluidTag1.setInteger("Amount", capacity); - container.getTagCompound().setTag("Fluid", fluidTag1); - return capacity; - } - - container.getTagCompound().setTag("Fluid", fluidTag1); - return resource.amount; - } - - if (!stack.isFluidEqual(resource)) - { - return 0; - } - - int filled = capacity - stack.amount; - if (resource.amount < filled) - { - stack.amount += resource.amount; - filled = resource.amount; - } else - { - stack.amount = capacity; - } - - container.getTagCompound().setTag("Fluid", stack.writeToNBT(fluidTag)); - return filled; - } - - @Override - public FluidStack drain(ItemStack container, int maxDrain, boolean doDrain) - { - if (container.getTagCompound() == null || !container.getTagCompound().hasKey("Fluid")) - { - return null; - } - - FluidStack stack = FluidStack.loadFluidStackFromNBT(container.getTagCompound().getCompoundTag("Fluid")); - if (stack == null) - { - return null; - } - - stack.amount = Math.min(stack.amount, maxDrain); - if (doDrain) - { - if (maxDrain >= capacity) - { - container.getTagCompound().removeTag("Fluid"); - - if (container.getTagCompound().hasNoTags()) - { - container.setTagCompound(null); - } - return stack; - } - - NBTTagCompound fluidTag = container.getTagCompound().getCompoundTag("Fluid"); - fluidTag.setInteger("Amount", fluidTag.getInteger("Amount") - maxDrain); - container.getTagCompound().setTag("Fluid", fluidTag); - } - return stack; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilHarvest.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilHarvest.java deleted file mode 100644 index 3699f4c0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilHarvest.java +++ /dev/null @@ -1,164 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import java.util.List; - -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.harvest.HarvestRegistry; -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.api.items.interfaces.IHolding; -import WayofTime.alchemicalWizardry.common.items.BindableItems; - -public class SigilHarvest extends SigilToggleable implements IHolding, ArmourUpgrade, ISigil -{ - public SigilHarvest() - { - super(); - setEnergyUsed(500); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.harvestsigil.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - if (this.getActivated(par1ItemStack)) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.activated")); - } else - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.deactivated")); - } - - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = par1ItemStack.getTagCompound(); - this.setActivated(par1ItemStack, !(this.getActivated(par1ItemStack))); - - if (this.getActivated(par1ItemStack)) - { - par1ItemStack.setItemDamage(1); - tag.setInteger("worldTimeDelay", (int) (par2World.getWorldTime() - 1) % 200); - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if (!BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) - { - this.setActivated(par1ItemStack, false); - } - } - } else - { - par1ItemStack.setItemDamage(par1ItemStack.getMaxDamage()); - } - - return par1ItemStack; - } - - @Override - public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) - { - if ((!(par3Entity instanceof EntityPlayer)) || par2World.isRemote) - { - return; - } - - EntityPlayer par3EntityPlayer = (EntityPlayer) par3Entity; - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - if (this.getActivated(par1ItemStack)) - { - int range = 3; - int verticalRange = 1; - int posX = (int) Math.round(par3Entity.posX - 0.5f); - int posY = (int) par3Entity.posY; - int posZ = (int) Math.round(par3Entity.posZ - 0.5f); - - for (int ix = posX - range; ix <= posX + range; ix++) - { - for (int iz = posZ - range; iz <= posZ + range; iz++) - { - for (int iy = posY - verticalRange; iy <= posY + verticalRange; iy++) - { - HarvestRegistry.harvestBlock(par2World, new BlockPos(ix, iy, iz)); - } - } - } - } - if (par2World.getWorldTime() % 200 == par1ItemStack.getTagCompound().getInteger("worldTimeDelay") && this.getActivated(par1ItemStack)) - { - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if(!BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) - { - this.setActivated(par1ItemStack, false); - } - } - } - } - - @Override - public void onArmourUpdate(World world, EntityPlayer player, ItemStack thisItemStack) - { - if(world.isRemote) - { - return; - } - int range = 3; - int verticalRange = 1; - int posX = (int) Math.round(player.posX - 0.5f); - int posY = (int) player.posY; - int posZ = (int) Math.round(player.posZ - 0.5f); - - for (int ix = posX - range; ix <= posX + range; ix++) - { - for (int iz = posZ - range; iz <= posZ + range; iz++) - { - for (int iy = posY - verticalRange; iy <= posY + verticalRange; iy++) - { - HarvestRegistry.harvestBlock(world, new BlockPos(ix, iy, iz)); - } - } - } - } - - @Override - public boolean isUpgrade() { - // TODO Auto-generated method stub - return true; - } - - @Override - public int getEnergyForTenSeconds() - { - // TODO Auto-generated method stub - return 500; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilLava.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilLava.java deleted file mode 100644 index 58638712..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilLava.java +++ /dev/null @@ -1,243 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import java.util.List; - -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import WayofTime.alchemicalWizardry.common.tileEntity.TESocket; -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemBucket; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidHandler; -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.common.items.Orb; -import WayofTime.alchemicalWizardry.common.items.BindableItems; - -public class SigilLava extends ItemBucket implements ArmourUpgrade, ISigil -{ - /** - * field for checking if the bucket has been filled. - */ - private Block isFull = Blocks.lava; - private int energyUsed; - - public SigilLava() - { - super(Blocks.lava); - setEnergyUsed(1000); - } - - @Override - public ItemStack getContainerItem(ItemStack itemStack) - { - ItemStack copiedStack = itemStack.copy(); - copiedStack.setItemDamage(copiedStack.getItemDamage() + getEnergyUsed()); - copiedStack.stackSize = 1; - return copiedStack; - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.lavasigil.desc1")); - par3List.add(StatCollector.translateToLocal("tooltip.lavasigil.desc2")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - /** - * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer - */ - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) - { - return stack; - } - - @Override - public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, BlockPos blockPos, EnumFacing side, float hitX, float hitY, float hitZ) - { - if (world.isRemote || !BindableItems.checkAndSetItemOwner(stack, player) || player.isSneaking()) - { - return false; - } - - if (!world.canMineBlockBody(player, blockPos)) - { - return false; - } - - TileEntity tile = world.getTileEntity(blockPos); - if (tile instanceof IFluidHandler) - { - FluidStack fluid = new FluidStack(FluidRegistry.LAVA, 1000); - int amount = ((IFluidHandler) tile).fill(side, fluid, false); - - if (amount > 0 && BindableItems.syphonBatteries(stack, player, getEnergyUsed())) - { - ((IFluidHandler) tile).fill(side, fluid, true); - } - - return false; - } - else if (tile instanceof TESocket) - { - return false; - } - - { - int x = blockPos.getX(); - int y = blockPos.getY(); - int z = blockPos.getZ(); - - if (side.getIndex() == 0) - { - --y; - } - - if (side.getIndex() == 1) - { - ++y; - } - - if (side.getIndex() == 2) - { - --z; - } - - if (side.getIndex() == 3) - { - ++z; - } - - if (side.getIndex() == 4) - { - --x; - } - - if (side.getIndex() == 5) - { - ++x; - } - - if (!player.func_175151_a(new BlockPos(x, y, z), side, stack)) - { - return false; - } - - if(this.canPlaceContainedLiquid(world, new BlockPos(x, y, z)) && BindableItems.syphonBatteries(stack, player, getEnergyUsed())) - { - return this.func_180616_a(world, new BlockPos(x, y, z)); - } - } - - return false; - } - - @Override - /** - * Attempts to place the liquid contained inside the bucket. - */ - public boolean func_180616_a(World par1World, BlockPos blockPos) - { - if (!par1World.isAirBlock(blockPos) && par1World.getBlockState(blockPos).getBlock().getMaterial().isSolid()) - { - return false; - } else if ((par1World.getBlockState(blockPos).getBlock() == Blocks.lava || par1World.getBlockState(blockPos).getBlock() == Blocks.flowing_lava) && par1World.getBlockState(blockPos).getBlock().getMetaFromState(par1World.getBlockState(blockPos)) == 0) - { - return false; - } else - { - par1World.setBlockState(blockPos, this.isFull.getBlockState().getBaseState()); - return true; - } - } - - public boolean canPlaceContainedLiquid(World par1World, BlockPos blockPos) - { - if (!par1World.isAirBlock(blockPos) && par1World.getBlockState(blockPos).getBlock().getMaterial().isSolid()) - { - return false; - } else if ((par1World.getBlockState(blockPos).getBlock() == Blocks.lava || par1World.getBlockState(blockPos).getBlock() == Blocks.flowing_lava) && par1World.getBlockState(blockPos).getBlock().getMetaFromState(par1World.getBlockState(blockPos)) == 0) - { - return false; - } else - { - return true; - } - } - - protected void setEnergyUsed(int par1int) - { - this.energyUsed = par1int; - } - - protected int getEnergyUsed() - { - return this.energyUsed; - } - - protected boolean syphonBatteries(ItemStack ist, EntityPlayer player, int damageToBeDone) - { - if (!player.capabilities.isCreativeMode) - { - boolean usedBattery = false; - IInventory inventory = player.inventory; - - for (int slot = 0; slot < inventory.getSizeInventory(); slot++) - { - ItemStack stack = inventory.getStackInSlot(slot); - - if (stack == null) - { - continue; - } - if (stack.getItem() instanceof Orb && !usedBattery) - { - if (stack.getItemDamage() <= stack.getMaxDamage() - damageToBeDone) - { - stack.setItemDamage(stack.getItemDamage() + damageToBeDone); - usedBattery = true; - } - } - } - - return usedBattery; - } else - { - return true; - } - } - - @Override - public void onArmourUpdate(World world, EntityPlayer player, ItemStack thisItemStack) - { - player.addPotionEffect(new PotionEffect(Potion.fireResistance.id, 2, 9, true, false)); - player.extinguish(); - } - - @Override - public boolean isUpgrade() - { - return true; - } - - @Override - public int getEnergyForTenSeconds() - { - return 100; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfElementalAffinity.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfElementalAffinity.java deleted file mode 100644 index 9882d773..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfElementalAffinity.java +++ /dev/null @@ -1,107 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; - -import java.util.List; - -public class SigilOfElementalAffinity extends SigilToggleable implements ISigil -{ - public SigilOfElementalAffinity() - { - super(); - setEnergyUsed(200); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigilofelementalaffinity.desc1")); - par3List.add(StatCollector.translateToLocal("tooltip.sigilofelementalaffinity.desc2")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - if (this.getActivated(par1ItemStack)) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.activated")); - } else - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.deactivated")); - } - - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = par1ItemStack.getTagCompound(); - this.setActivated(par1ItemStack, !(this.getActivated(par1ItemStack))); - - if (this.getActivated(par1ItemStack) && BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) - { - par1ItemStack.setItemDamage(1); - tag.setInteger("worldTimeDelay", (int) (par2World.getWorldTime() - 1) % 200); - par3EntityPlayer.addPotionEffect(new PotionEffect(Potion.waterBreathing.id, 2, 0, true, false)); - par3EntityPlayer.addPotionEffect(new PotionEffect(Potion.fireResistance.id, 2, 0, true, false)); - } else - { - par1ItemStack.setItemDamage(par1ItemStack.getMaxDamage()); - } - - return par1ItemStack; - } - - @Override - public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) - { - if (!(par3Entity instanceof EntityPlayer)) - { - return; - } - - EntityPlayer par3EntityPlayer = (EntityPlayer) par3Entity; - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - if (this.getActivated(par1ItemStack)) - { - par3EntityPlayer.fallDistance = 0; - par3EntityPlayer.addPotionEffect(new PotionEffect(Potion.waterBreathing.id, 2, 0, true, false)); - par3EntityPlayer.addPotionEffect(new PotionEffect(Potion.fireResistance.id, 2, 0, true, false)); - } - - if (par2World.getWorldTime() % 200 == par1ItemStack.getTagCompound().getInteger("worldTimeDelay") && this.getActivated(par1ItemStack)) - { - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if (!BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) - { - this.setActivated(par1ItemStack, false); - } - } - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfEnderSeverance.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfEnderSeverance.java deleted file mode 100644 index ffd3e7a5..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfEnderSeverance.java +++ /dev/null @@ -1,119 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.items.interfaces.IHolding; -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; - -import java.util.List; - -public class SigilOfEnderSeverance extends SigilToggleable implements IHolding, ISigil -{ - public SigilOfEnderSeverance() - { - super(); - setEnergyUsed(200); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigilofenderseverance.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - if (this.getActivated(par1ItemStack)) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.activated")); - } else - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.deactivated")); - } - - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = par1ItemStack.getTagCompound(); - this.setActivated(par1ItemStack, !(this.getActivated(par1ItemStack))); - - if (this.getActivated(par1ItemStack)) - { - par1ItemStack.setItemDamage(1); - tag.setInteger("worldTimeDelay", (int) (par2World.getWorldTime() - 1) % 200); - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if (!BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) - { - this.setActivated(par1ItemStack, false); - } - } - } else - { - par1ItemStack.setItemDamage(par1ItemStack.getMaxDamage()); - } - - return par1ItemStack; - } - - @Override - public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) - { - if (!(par3Entity instanceof EntityPlayer)) - { - return; - } - - EntityPlayer par3EntityPlayer = (EntityPlayer) par3Entity; - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - if (this.getActivated(par1ItemStack)) - { - List list = SpellHelper.getEntitiesInRange(par2World, par3Entity.posX, par3Entity.posY, par3Entity.posZ, 4.5, 4.5); - for (Entity entity : list) - { - if (!entity.equals(par3Entity) && entity instanceof EntityLiving) - { - ((EntityLiving) entity).addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionPlanarBinding.id, 5, 0)); - } - } - } - if (par2World.getWorldTime() % 200 == par1ItemStack.getTagCompound().getInteger("worldTimeDelay") && this.getActivated(par1ItemStack)) - { - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if(!BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) - { - this.setActivated(par1ItemStack, false); - } - } - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfGrowth.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfGrowth.java deleted file mode 100644 index aefe2d9c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfGrowth.java +++ /dev/null @@ -1,237 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import net.minecraft.block.IGrowable; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.IPlantable; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.player.BonemealEvent; -import net.minecraftforge.fml.common.eventhandler.Event; - -import java.util.List; - -public class SigilOfGrowth extends SigilToggleable implements ArmourUpgrade, ISigil -{ - private int tickDelay = 100; - - public SigilOfGrowth() - { - super(); - setEnergyUsed(150); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigilofgrowth.desc1")); - par3List.add(StatCollector.translateToLocal("tooltip.sigilofgrowth.desc2")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - if (this.getActivated(par1ItemStack)) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.activated")); - } else - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.deactivated")); - } - - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - @Override - public boolean onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ) - { - if (BindableItems.checkAndSetItemOwner(stack, playerIn)) - { - if (applyBonemeal(stack, worldIn, pos, playerIn)) - { - BindableItems.syphonBatteries(stack, playerIn, getEnergyUsed()); - - if (worldIn.isRemote) - { - worldIn.playAuxSFX(2005, pos, 0); - return true; - } - - return true; - } - } - return false; - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (par2World.isRemote) - { - return par1ItemStack; - } - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = par1ItemStack.getTagCompound(); - tag.setBoolean("isActive", !(tag.getBoolean("isActive"))); - - if (tag.getBoolean("isActive") && BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) - { - par1ItemStack.setItemDamage(1); - tag.setInteger("worldTimeDelay", (int) (par2World.getWorldTime() - 1) % tickDelay); - } else - { - par1ItemStack.setItemDamage(par1ItemStack.getMaxDamage()); - } - - return par1ItemStack; - } - - @Override - public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) - { - if (!(par3Entity instanceof EntityPlayer) || par2World.isRemote) - { - return; - } - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - if (this.getActivated(par1ItemStack)) - { - if (par2World.getWorldTime() % tickDelay == par1ItemStack.getTagCompound().getInteger("worldTimeDelay")) - { - if(!BindableItems.syphonBatteries(par1ItemStack, (EntityPlayer) par3Entity, getEnergyUsed())) - { - this.setActivated(par1ItemStack, false); - } - } - int range = 3; - int verticalRange = 2; - int posX = (int) Math.round(par3Entity.posX - 0.5f); - int posY = (int) par3Entity.posY; - int posZ = (int) Math.round(par3Entity.posZ - 0.5f); - - for (int ix = posX - range; ix <= posX + range; ix++) - { - for (int iz = posZ - range; iz <= posZ + range; iz++) - { - for (int iy = posY - verticalRange; iy <= posY + verticalRange; iy++) - { - IBlockState block = par2World.getBlockState(new BlockPos(ix, iy, iz)); - - if (block instanceof IPlantable || block instanceof IGrowable) - { - if (par2World.rand.nextInt(50) == 0) - { - block.getBlock().updateTick(par2World, new BlockPos(ix, iy, iz), block, par2World.rand); - } - } - } - } - } - } - } - - public static boolean applyBonemeal(ItemStack p_179234_0_, World world, BlockPos blockPos, EntityPlayer player) - { - IBlockState block = world.getBlockState(blockPos); - - BonemealEvent event = new BonemealEvent(player, world, blockPos, block); - if (MinecraftForge.EVENT_BUS.post(event)) - { - return false; - } - - if (event.getResult() == Event.Result.ALLOW) - { - return true; - } - - if (block instanceof IGrowable) - { - IGrowable igrowable = (IGrowable) block; - - if (igrowable.isStillGrowing(world, blockPos, block, world.isRemote)) - { - if (!world.isRemote) - { - if (igrowable.canUseBonemeal(world, world.rand, blockPos, block)) - { - igrowable.grow(world, world.rand, blockPos, block); - } - } - - return true; - } - } - - return false; - } - - @Override - public void onArmourUpdate(World world, EntityPlayer player, ItemStack thisItemStack) - { - if (world.isRemote) - { - return; - } - - int range = 5; - int verticalRange = 2; - int posX = (int) Math.round(player.posX - 0.5f); - int posY = (int) player.posY; - int posZ = (int) Math.round(player.posZ - 0.5f); - - for (int ix = posX - range; ix <= posX + range; ix++) - { - for (int iz = posZ - range; iz <= posZ + range; iz++) - { - for (int iy = posY - verticalRange; iy <= posY + verticalRange; iy++) - { - IBlockState block = world.getBlockState(new BlockPos(ix, iy, iz)); - - if (block instanceof IPlantable) - { - if (world.rand.nextInt(100) == 0) - { - block.getBlock().updateTick(world, new BlockPos(ix, iy, iz), block, world.rand); - } - } - } - } - } - } - - @Override - public boolean isUpgrade() - { - return true; - } - - @Override - public int getEnergyForTenSeconds() - { - return 50; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfHaste.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfHaste.java deleted file mode 100644 index 8ed6ece0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfHaste.java +++ /dev/null @@ -1,127 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; - -import java.util.List; - -public class SigilOfHaste extends SigilToggleable implements ArmourUpgrade, ISigil -{ - public SigilOfHaste() - { - super(); - setEnergyUsed(250); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigilofhaste.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - if (this.getActivated(par1ItemStack)) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.activated")); - } else - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.deactivated")); - } - - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = par1ItemStack.getTagCompound(); - this.setActivated(par1ItemStack, !(this.getActivated(par1ItemStack))); - - if (this.getActivated(par1ItemStack) && BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) - { - par1ItemStack.setItemDamage(1); - tag.setInteger("worldTimeDelay", (int) (par2World.getWorldTime() - 1) % 200); - par3EntityPlayer.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionBoost.id, 3, 1)); - } else - { - par1ItemStack.setItemDamage(par1ItemStack.getMaxDamage()); - } - - return par1ItemStack; - } - - @Override - public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) - { - if (!(par3Entity instanceof EntityPlayer)) - { - return; - } - - EntityPlayer par3EntityPlayer = (EntityPlayer) par3Entity; - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - if (this.getActivated(par1ItemStack)) - { - par3EntityPlayer.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionBoost.id, 3, 1, true, false)); - } - - if (par2World.getWorldTime() % 200 == par1ItemStack.getTagCompound().getInteger("worldTimeDelay") && this.getActivated(par1ItemStack)) - { - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if (!BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) - { - this.setActivated(par1ItemStack, false); - } - } - } - } - - @Override - public void onArmourUpdate(World world, EntityPlayer player, ItemStack itemStack) - { - if (itemStack.getTagCompound() == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - player.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionBoost.id, 3, 1, true, false)); - } - - @Override - public boolean isUpgrade() - { - return true; - } - - @Override - public int getEnergyForTenSeconds() - { - return 150; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfMagnetism.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfMagnetism.java deleted file mode 100644 index 737a6079..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfMagnetism.java +++ /dev/null @@ -1,166 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import java.util.List; - -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import net.minecraft.entity.Entity; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.item.EntityXPOrb; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.api.items.interfaces.IHolding; -import WayofTime.alchemicalWizardry.common.items.BindableItems; - -public class SigilOfMagnetism extends SigilToggleable implements ArmourUpgrade, IHolding, ISigil -{ - private int tickDelay = 300; - - public SigilOfMagnetism() - { - super(); - setEnergyUsed(50); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigilofmagnetism.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - if (this.getActivated(par1ItemStack)) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.activated")); - } else - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.deactivated")); - } - - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = par1ItemStack.getTagCompound(); - this.setActivated(par1ItemStack, !(this.getActivated(par1ItemStack))); - - if (this.getActivated(par1ItemStack) && BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) - { - par1ItemStack.setItemDamage(1); - tag.setInteger("worldTimeDelay", (int) (par2World.getWorldTime() - 1) % tickDelay); - } else - { - par1ItemStack.setItemDamage(par1ItemStack.getMaxDamage()); - } - - return par1ItemStack; - } - - @Override - public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) - { - if (!(par3Entity instanceof EntityPlayer)) - { - return; - } - - EntityPlayer par3EntityPlayer = (EntityPlayer) par3Entity; - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - if (this.getActivated(par1ItemStack)) - { - if (par2World.getWorldTime() % tickDelay == par1ItemStack.getTagCompound().getInteger("worldTimeDelay")) - { - if(!BindableItems.syphonBatteries(par1ItemStack, (EntityPlayer) par3Entity, getEnergyUsed())) - { - this.setActivated(par1ItemStack, false); - } - } - - int range = 5; - int verticalRange = 5; - float posX = Math.round(par3Entity.posX); - float posY = (float) (par3Entity.posY - par3Entity.getEyeHeight()); - float posZ = Math.round(par3Entity.posZ); - List entities = par3EntityPlayer.worldObj.getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(posX - 0.5f, posY - 0.5f, posZ - 0.5f, posX + 0.5f, posY + 0.5f, posZ + 0.5f).expand(range, verticalRange, range)); - List xpOrbs = par3EntityPlayer.worldObj.getEntitiesWithinAABB(EntityXPOrb.class, new AxisAlignedBB(posX - 0.5f, posY - 0.5f, posZ - 0.5f, posX + 0.5f, posY + 0.5f, posZ + 0.5f).expand(range, verticalRange, range)); - - for (EntityItem entity : entities) - { - if (entity != null && !par2World.isRemote) - { - entity.onCollideWithPlayer(par3EntityPlayer); - } - } - - for (EntityXPOrb xpOrb : xpOrbs) - { - if (xpOrb != null && !par2World.isRemote) - { - xpOrb.onCollideWithPlayer(par3EntityPlayer); - } - } - } - } - - @Override - public void onArmourUpdate(World world, EntityPlayer player, ItemStack thisItemStack) - { - int range = 5; - int verticalRange = 5; - float posX = Math.round(player.posX); - float posY = (float) (player.posY - player.getEyeHeight()); - float posZ = Math.round(player.posZ); - List entities = player.worldObj.getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(posX - 0.5f, posY - 0.5f, posZ - 0.5f, posX + 0.5f, posY + 0.5f, posZ + 0.5f).expand(range, verticalRange, range)); - List xpOrbs = player.worldObj.getEntitiesWithinAABB(EntityXPOrb.class, new AxisAlignedBB(posX - 0.5f, posY - 0.5f, posZ - 0.5f, posX + 0.5f, posY + 0.5f, posZ + 0.5f).expand(range, verticalRange, range)); - - for (EntityItem entity : entities) - { - if (entity != null && !world.isRemote) - { - entity.onCollideWithPlayer(player); - } - } - - for (EntityXPOrb xpOrb : xpOrbs) - { - if (xpOrb != null && !world.isRemote) - { - xpOrb.onCollideWithPlayer(player); - } - } - } - - @Override - public boolean isUpgrade() - { - return true; - } - - @Override - public int getEnergyForTenSeconds() - { - return 25; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfSupression.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfSupression.java deleted file mode 100644 index 24865997..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfSupression.java +++ /dev/null @@ -1,220 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpectralContainer; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.StatCollector; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; - -import java.util.List; - -public class SigilOfSupression extends SigilToggleable implements ArmourUpgrade, ISigil -{ - private int radius = 5; - private int refresh = 100; - - public SigilOfSupression() - { - super(); - setEnergyUsed(400); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigilofsupression.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - if (this.getActivated(par1ItemStack)) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.activated")); - } else - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.deactivated")); - } - - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - int tickDelay = 200; - - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || SpellHelper.isFakePlayer(par2World, par3EntityPlayer)) - { - return par1ItemStack; - } - - if (par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = par1ItemStack.getTagCompound(); - this.setActivated(par1ItemStack, !(this.getActivated(par1ItemStack))); - - if (this.getActivated(par1ItemStack)) - { - par1ItemStack.setItemDamage(1); - tag.setInteger("worldTimeDelay", (int) (par2World.getWorldTime() - 1) % tickDelay); - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if(!BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) - { - this.setActivated(par1ItemStack, false); - } - } - } else - { - par1ItemStack.setItemDamage(par1ItemStack.getMaxDamage()); - } - - return par1ItemStack; - } - - @Override - public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) - { - if (!(par3Entity instanceof EntityPlayer)) - { - return; - } - - if (SpellHelper.isFakePlayer(par2World, (EntityPlayer) par3Entity)) - { - return; - } - - EntityPlayer par3EntityPlayer = (EntityPlayer) par3Entity; - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - if (this.getActivated(par1ItemStack) && (!par2World.isRemote)) - { - Vec3 blockVec = new Vec3((int) Math.round(par3EntityPlayer.posX - 0.5F), par3EntityPlayer.posY, (int) Math.round(par3EntityPlayer.posZ - 0.5F)); - int x = (int) blockVec.xCoord; - int y = (int) blockVec.yCoord; - int z = (int) blockVec.zCoord; - - for (int i = -radius; i <= radius; i++) - { - for (int j = -radius; j <= radius; j++) - { - for (int k = -radius; k <= radius; k++) - { - if (i * i + j * j + k * k >= (radius + 0.50f) * (radius + 0.50f)) - { - continue; - } - - BlockPos blockPos = new BlockPos(x + i, y + j, z + k); - IBlockState block = par2World.getBlockState(blockPos); - - if (SpellHelper.isBlockFluid(block.getBlock())) - { - if (par2World.getTileEntity(blockPos) != null) - { - par2World.setBlockToAir(blockPos); - } - TESpectralContainer.createSpectralBlockAtLocation(par2World, blockPos, refresh); - } else - { - TileEntity tile = par2World.getTileEntity(blockPos); - if (tile instanceof TESpectralContainer) - { - ((TESpectralContainer) tile).resetDuration(refresh); - } - } - } - } - } - } - - if (par2World.getWorldTime() % 200 == par1ItemStack.getTagCompound().getInteger("worldTimeDelay") && this.getActivated(par1ItemStack)) - { - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if(!BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) - { - this.setActivated(par1ItemStack, false); - } - } - } - } - - @Override - public void onArmourUpdate(World world, EntityPlayer player, ItemStack thisItemStack) - { - Vec3 blockVec = new Vec3((int) Math.round(player.posX - 0.5F), player.posY, (int) Math.round(player.posZ - 0.5F)); - int x = (int) blockVec.xCoord; - int y = (int) blockVec.yCoord; - int z = (int) blockVec.zCoord; - - for (int i = -radius; i <= radius; i++) - { - for (int j = -radius; j <= radius; j++) - { - for (int k = -radius; k <= radius; k++) - { - if (i * i + j * j + k * k >= (radius + 0.50f) * (radius + 0.50f)) - { - continue; - } - - BlockPos blockPos = new BlockPos(x + i, y + j, z + k); - IBlockState block = world.getBlockState(blockPos); - - if (SpellHelper.isBlockFluid(block.getBlock())) - { - if (world.getTileEntity(blockPos) != null) - { - world.setBlockToAir(blockPos); - } - TESpectralContainer.createSpectralBlockAtLocation(world, blockPos, refresh); - } else - { - TileEntity tile = world.getTileEntity(blockPos); - if (tile instanceof TESpectralContainer) - { - ((TESpectralContainer) tile).resetDuration(refresh); - } - } - } - } - } - } - - @Override - public boolean isUpgrade() - { - return true; - } - - @Override - public int getEnergyForTenSeconds() - { - return 200; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfTheAssassin.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfTheAssassin.java deleted file mode 100644 index 7397efec..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfTheAssassin.java +++ /dev/null @@ -1,269 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import java.util.List; - -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.*; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.living.EnderTeleportEvent; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import WayofTime.alchemicalWizardry.common.spell.simple.SpellTeleport; - -public class SigilOfTheAssassin extends BindableItems implements ArmourUpgrade, ISigil -{ - public SigilOfTheAssassin() - { - super(); - setEnergyUsed(100); - } - - @Override - public void onCreated(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - } - - @Override - public ItemStack getContainerItem(ItemStack itemStack) - { - ItemStack copiedStack = itemStack.copy(); - copiedStack.setItemDamage(copiedStack.getItemDamage() + 1); - copiedStack.stackSize = 1; - return copiedStack; - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigiloftheassassin.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - @Override - /** - * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer - */ - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - float f = 10.0F; - - MovingObjectPosition movingobjectposition = SpellHelper.raytraceFromEntity(par2World, par3EntityPlayer, false, f); - - if (movingobjectposition == null) - { - AlchemicalWizardry.logger.info("I saw nothing."); - return par1ItemStack; - } else - { - AlchemicalWizardry.logger.info("Got something! Type of hit: " + movingobjectposition.typeOfHit); - - if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY) - { - Entity hitEntity = movingobjectposition.entityHit; - double x = hitEntity.posX; - double y = hitEntity.posY; - double z = hitEntity.posZ; - - if(hitEntity instanceof EntityLivingBase) - { - AlchemicalWizardry.logger.info("It's a living entity!"); - - teleportTo(par3EntityPlayer, x, y, z, par3EntityPlayer.posX, par3EntityPlayer.posY, par3EntityPlayer.posZ); - } - } - - return par1ItemStack; - } - } - - protected static boolean teleportTo(EntityLivingBase entityLiving, double par1, double par3, double par5, double lastX, double lastY, double lastZ) - { - EnderTeleportEvent event = new EnderTeleportEvent(entityLiving, par1, par3, par5, 0); - - if (MinecraftForge.EVENT_BUS.post(event)) - { - return false; - } - - double d3 = lastX; - double d4 = lastY; - double d5 = lastZ; - SpellTeleport.moveEntityViaTeleport(entityLiving, event.targetX, event.targetY, event.targetZ); - boolean flag = false; - int i = MathHelper.floor_double(entityLiving.posX); - int j = MathHelper.floor_double(entityLiving.posY); - int k = MathHelper.floor_double(entityLiving.posZ); - BlockPos blockPos = new BlockPos(i, j, k); - IBlockState l; - - if (!entityLiving.worldObj.isAirBlock(blockPos)) - { - boolean flag1 = false; - - while (!flag1 && j > 0) - { - l = entityLiving.worldObj.getBlockState(blockPos); - - if (l != null && l.getBlock().getMaterial().blocksMovement()) - { - flag1 = true; - } else - { - --entityLiving.posY; - --j; - } - } - - if (flag1) - { - SpellTeleport.moveEntityViaTeleport(entityLiving, entityLiving.posX, entityLiving.posY, entityLiving.posZ); - - if (entityLiving.worldObj.getCollidingBoundingBoxes(entityLiving, entityLiving.getBoundingBox()).isEmpty() && !entityLiving.worldObj.isAnyLiquid(entityLiving.getBoundingBox())) - { - flag = true; - } - } - } - - if (!flag) - { - SpellTeleport.moveEntityViaTeleport(entityLiving, d3, d4, d5); - return false; - } else - { - short short1 = 128; - - for (j = 0; j < short1; ++j) - { - double d6 = (double) j / ((double) short1 - 1.0D); - float f = (entityLiving.worldObj.rand.nextFloat() - 0.5F) * 0.2F; - float f1 = (entityLiving.worldObj.rand.nextFloat() - 0.5F) * 0.2F; - float f2 = (entityLiving.worldObj.rand.nextFloat() - 0.5F) * 0.2F; - double d7 = d3 + (entityLiving.posX - d3) * d6 + (entityLiving.worldObj.rand.nextDouble() - 0.5D) * (double) entityLiving.width * 2.0D; - double d8 = d4 + (entityLiving.posY - d4) * d6 + entityLiving.worldObj.rand.nextDouble() * (double) entityLiving.height; - double d9 = d5 + (entityLiving.posZ - d5) * d6 + (entityLiving.worldObj.rand.nextDouble() - 0.5D) * (double) entityLiving.width * 2.0D; - entityLiving.worldObj.spawnParticle(EnumParticleTypes.PORTAL, d7, d8, d9, (double) f, (double) f1, (double) f2); - } - return true; - } - } - - public MovingObjectPosition getMovingObjectPositionFromPlayer(World p_77621_1_, EntityPlayer p_77621_2_, boolean p_77621_3_, float reach) - { - float f = 1; - float f1 = p_77621_2_.prevRotationPitch + (p_77621_2_.rotationPitch - p_77621_2_.prevRotationPitch) * f; - float f2 = p_77621_2_.prevRotationYaw + (p_77621_2_.rotationYaw - p_77621_2_.prevRotationYaw) * f; - double d0 = p_77621_2_.prevPosX + (p_77621_2_.posX - p_77621_2_.prevPosX) * (double)f; - double d1 = p_77621_2_.prevPosY + (p_77621_2_.posY - p_77621_2_.prevPosY) * (double)f + (double)(p_77621_1_.isRemote ? p_77621_2_.getEyeHeight() - p_77621_2_.getDefaultEyeHeight() : p_77621_2_.getEyeHeight()); // isRemote check to revert changes to ray trace position due to adding the eye height clientside and player yOffset differences - double d2 = p_77621_2_.prevPosZ + (p_77621_2_.posZ - p_77621_2_.prevPosZ) * (double)f; - Vec3 vec3 = new Vec3(d0, d1, d2); - float f3 = MathHelper.cos(-f2 * 0.017453292F - (float)Math.PI); - float f4 = MathHelper.sin(-f2 * 0.017453292F - (float)Math.PI); - float f5 = -MathHelper.cos(-f1 * 0.017453292F); - float f6 = MathHelper.sin(-f1 * 0.017453292F); - float f7 = f4 * f5; - float f8 = f3 * f5; - double d3 = 500.0D; -// if (p_77621_2_ instanceof EntityPlayerMP) - { -// d3 = ((EntityPlayerMP)p_77621_2_).theItemInWorldManager.getBlockReachDistance(); - } - Vec3 vec31 = vec3.addVector((double)f7 * d3, (double)f6 * d3, (double)f8 * d3); - return p_77621_1_.rayTraceBlocks(vec3, vec31, p_77621_3_, !p_77621_3_, false); - } - -// public MovingObjectPosition movingObjectPositiongdsa(WOrld worldObj, int posX, int posY, int posZ) -// { -// Vec3 var17 = SpellHelper.createVec3(posX, posY, posZ); -// Vec3 var3 = SpellHelper.createVec3(posX + motionX, posY + motionY, posZ + motionZ); -// MovingObjectPosition var4 = worldObj.func_147447_a(var17, var3, true, false, false); -// var17 = SpellHelper.createVec3(posX, posY, posZ); -// var3 = SpellHelper.createVec3(posX + motionX, posY + motionY, posZ + motionZ); -// -// if (var4 != null) -// { -// var3 = SpellHelper.createVec3(var4.hitVec.xCoord, var4.hitVec.yCoord, var4.hitVec.zCoord); -// } -// -// Entity var5 = null; -// List var6 = worldObj.getEntitiesWithinAABBExcludingEntity(this, boundingBox.addCoord(motionX, motionY, motionZ).expand(1.0D, 1.0D, 1.0D)); -// double var7 = 0.0D; -// Iterator var9 = var6.iterator(); -// float var11; -// -// while (var9.hasNext()) -// { -// Entity var10 = (Entity) var9.next(); -// -// if (var10.canBeCollidedWith() && (var10 != shootingEntity || ticksInAir >= 5)) -// { -// var11 = 0.3F; -// AxisAlignedBB var12 = var10.boundingBox.expand(var11, var11, var11); -// MovingObjectPosition var13 = var12.calculateIntercept(var17, var3); -// -// if (var13 != null) -// { -// double var14 = var17.distanceTo(var13.hitVec); -// -// if (var14 < var7 || var7 == 0.0D) -// { -// var5 = var10; -// var7 = var14; -// } -// } -// } -// } -// -// if (var5 != null) -// { -// var4 = new MovingObjectPosition(var5); -// } -// -// if (var4 != null) -// { -// this.onImpact(var4); -// } -// } - - @Override - public void onArmourUpdate(World world, EntityPlayer player, ItemStack thisItemStack) - { - player.addPotionEffect(new PotionEffect(Potion.waterBreathing.id, 2, 9, true, false)); - } - - @Override - public boolean isUpgrade() - { - return true; - } - - @Override - public int getEnergyForTenSeconds() - { - return 50; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfTheBridge.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfTheBridge.java deleted file mode 100644 index 6b174bcf..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfTheBridge.java +++ /dev/null @@ -1,252 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpectralBlock; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; - -import java.util.List; - -public class SigilOfTheBridge extends SigilToggleable implements ArmourUpgrade, ISigil -{ - private int tickDelay = 200; - - public SigilOfTheBridge() - { - super(); - setEnergyUsed(100); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigilofthebridge.desc1")); - par3List.add(StatCollector.translateToLocal("tooltip.sigilofthebridge.desc2")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - if (this.getActivated(par1ItemStack)) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.activated")); - } else - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.deactivated")); - } - - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = par1ItemStack.getTagCompound(); - this.setActivated(par1ItemStack, !(this.getActivated(par1ItemStack))); - - if (this.getActivated(par1ItemStack) && BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) - { - par1ItemStack.setItemDamage(1); - tag.setInteger("worldTimeDelay", (int) (par2World.getWorldTime() - 1) % tickDelay); - } else - { - par1ItemStack.setItemDamage(par1ItemStack.getMaxDamage()); - } - - return par1ItemStack; - } - - @Override - public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) - { - if (!(par3Entity instanceof EntityPlayer)) - { - return; - } - - EntityPlayer par3EntityPlayer = (EntityPlayer) par3Entity; - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - if (this.getActivated(par1ItemStack)) - { - if (par2World.getWorldTime() % tickDelay == par1ItemStack.getTagCompound().getInteger("worldTimeDelay")) - { - if(BindableItems.syphonBatteries(par1ItemStack, (EntityPlayer) par3Entity, this.getLPUsed(par1ItemStack))) - { - this.setLPUsed(par1ItemStack, 0); - }else - { - this.setActivated(par1ItemStack, false); - } - } - if (!par3EntityPlayer.onGround && !par3EntityPlayer.isSneaking()) - { - return; - } - - int range = 2; - int verticalOffset = -1; - - if (par3EntityPlayer.isSneaking()) - { - verticalOffset--; - } - - if (par2World.isRemote) - { - verticalOffset--; - } - - int posX = (int) Math.round(par3Entity.posX - 0.5f); - int posY = (int) par3Entity.posY; - int posZ = (int) Math.round(par3Entity.posZ - 0.5f); - int incremented = 0; - - for (int ix = posX - range; ix <= posX + range; ix++) - { - for (int iz = posZ - range; iz <= posZ + range; iz++) - { - { - IBlockState block = par2World.getBlockState(new BlockPos(ix, posY + verticalOffset, iz)); - - if (par2World.isAirBlock(new BlockPos(ix, posY + verticalOffset, iz))) - { - par2World.setBlockState(new BlockPos(ix, posY + verticalOffset, iz), ModBlocks.spectralBlock.getDefaultState(), 3); - - TileEntity tile = par2World.getTileEntity(new BlockPos(ix, posY + verticalOffset, iz)); - if (tile instanceof TESpectralBlock) - { - ((TESpectralBlock) tile).setDuration(100); - } - - if (par2World.rand.nextInt(2) == 0) - { - incremented++; - } - } else if (block == ModBlocks.spectralBlock) - { - TileEntity tile = par2World.getTileEntity(new BlockPos(ix, posY + verticalOffset, iz)); - if (tile instanceof TESpectralBlock) - { - ((TESpectralBlock) tile).setDuration(100); - } - } - } - } - } - - this.incrimentLPUSed(par1ItemStack, incremented); - } - } - - public int getLPUsed(ItemStack par1ItemStack) - { - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - return par1ItemStack.getTagCompound().getInteger("LPUsed"); - } - - public void incrimentLPUSed(ItemStack par1ItemStack, int addedLP) - { - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - par1ItemStack.getTagCompound().setInteger("LPUsed", par1ItemStack.getTagCompound().getInteger("LPUsed") + addedLP); - } - - public void setLPUsed(ItemStack par1ItemStack, int newLP) - { - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - par1ItemStack.getTagCompound().setInteger("LPUsed", newLP); - } - - @Override - public void onArmourUpdate(World world, EntityPlayer player, ItemStack thisItemStack) - { - if (!player.onGround && !player.isSneaking()) - { - return; - } - - int range = 2; - int verticalOffset = -1; - - if (player.isSneaking()) - { - verticalOffset--; - } - - int posX = (int) Math.round(player.posX - 0.5f); - int posY = (int) player.posY; - int posZ = (int) Math.round(player.posZ - 0.5f); - for (int ix = posX - range; ix <= posX + range; ix++) - { - for (int iz = posZ - range; iz <= posZ + range; iz++) - { - IBlockState block = world.getBlockState(new BlockPos(ix, posY + verticalOffset, iz)); - - if (world.isAirBlock(new BlockPos(ix, posY + verticalOffset, iz))) - { - world.setBlockState(new BlockPos(ix, posY + verticalOffset, iz), ModBlocks.spectralBlock.getDefaultState(), 3); - - TileEntity tile = world.getTileEntity(new BlockPos(ix, posY + verticalOffset, iz)); - if (tile instanceof TESpectralBlock) - { - ((TESpectralBlock) tile).setDuration(100); - } - } else if (block == ModBlocks.spectralBlock) - { - TileEntity tile = world.getTileEntity(new BlockPos(ix, posY + verticalOffset, iz)); - if (tile instanceof TESpectralBlock) - { - ((TESpectralBlock) tile).setDuration(100); - } - } - } - } - } - - @Override - public boolean isUpgrade() - { - return true; - } - - @Override - public int getEnergyForTenSeconds() - { - return 100; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfTheFastMiner.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfTheFastMiner.java deleted file mode 100644 index bde22ef7..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfTheFastMiner.java +++ /dev/null @@ -1,127 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; - -import java.util.List; - -public class SigilOfTheFastMiner extends SigilToggleable implements ArmourUpgrade, ISigil -{ - public SigilOfTheFastMiner() - { - super(); - setEnergyUsed(100); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigilofthefastminer.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - if (this.getActivated(par1ItemStack)) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.activated")); - } else - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.deactivated")); - } - - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = par1ItemStack.getTagCompound(); - this.setActivated(par1ItemStack, !(this.getActivated(par1ItemStack))); - - if (this.getActivated(par1ItemStack) && BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) - { - par1ItemStack.setItemDamage(1); - tag.setInteger("worldTimeDelay", (int) (par2World.getWorldTime() - 1) % 200); - par3EntityPlayer.addPotionEffect(new PotionEffect(Potion.digSpeed.id, 2, 1)); - } else - { - par1ItemStack.setItemDamage(par1ItemStack.getMaxDamage()); - } - - return par1ItemStack; - } - - @Override - public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) - { - if (!(par3Entity instanceof EntityPlayer)) - { - return; - } - - EntityPlayer par3EntityPlayer = (EntityPlayer) par3Entity; - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - if (this.getActivated(par1ItemStack)) - { - par3EntityPlayer.addPotionEffect(new PotionEffect(Potion.digSpeed.id, 2, 1, true, false)); - } - - if (par2World.getWorldTime() % 200 == par1ItemStack.getTagCompound().getInteger("worldTimeDelay") && this.getActivated(par1ItemStack)) - { - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if (!BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) - { - this.setActivated(par1ItemStack, false); - } - } - } - } - - @Override - public void onArmourUpdate(World world, EntityPlayer player, ItemStack itemStack) - { - if (itemStack.getTagCompound() == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - player.addPotionEffect(new PotionEffect(Potion.digSpeed.id, 3, 1, true, false)); - } - - @Override - public boolean isUpgrade() - { - return true; - } - - @Override - public int getEnergyForTenSeconds() - { - return 50; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfWind.java deleted file mode 100644 index 84b21315..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfWind.java +++ /dev/null @@ -1,127 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import java.util.List; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import WayofTime.alchemicalWizardry.common.items.BindableItems; - -public class SigilOfWind extends SigilToggleable implements ArmourUpgrade, ISigil -{ - public SigilOfWind() - { - super(); - setEnergyUsed(250); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigilofwind.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - if (this.getActivated(par1ItemStack)) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.activated")); - } else - { - par3List.add(StatCollector.translateToLocal("tooltip.sigil.state.deactivated")); - } - - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = par1ItemStack.getTagCompound(); - this.setActivated(par1ItemStack, !(this.getActivated(par1ItemStack))); - - if (this.getActivated(par1ItemStack) && BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) - { - par1ItemStack.setItemDamage(1); - tag.setInteger("worldTimeDelay", (int) (par2World.getWorldTime() - 1) % 200); - par3EntityPlayer.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionProjProt.id, 2, 1, true, false)); - } else - { - par1ItemStack.setItemDamage(par1ItemStack.getMaxDamage()); - } - - return par1ItemStack; - } - - @Override - public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) - { - if (!(par3Entity instanceof EntityPlayer)) - { - return; - } - - EntityPlayer par3EntityPlayer = (EntityPlayer) par3Entity; - - if (par1ItemStack.getTagCompound() == null) - { - par1ItemStack.setTagCompound(new NBTTagCompound()); - } - - if (this.getActivated(par1ItemStack)) - { - par3EntityPlayer.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionProjProt.id, 2, 1, true, false)); - } - - if (par2World.getWorldTime() % 200 == par1ItemStack.getTagCompound().getInteger("worldTimeDelay") && par1ItemStack.getTagCompound().getBoolean("isActive")) - { - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - if (!BindableItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) - { - this.setActivated(par1ItemStack, false); - } - } - } - } - - @Override - public void onArmourUpdate(World world, EntityPlayer player, ItemStack itemStack) - { - if (itemStack.getTagCompound() == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - player.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionProjProt.id, 3, 1, true, false)); - } - - @Override - public boolean isUpgrade() - { - return true; - } - - @Override - public int getEnergyForTenSeconds() - { - return 150; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilSeer.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilSeer.java deleted file mode 100644 index 66dd0fd4..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilSeer.java +++ /dev/null @@ -1,66 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.api.items.interfaces.IHolding; -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; - -import java.util.List; - -public class SigilSeer extends Item implements IHolding, ArmourUpgrade, ISigil -{ - public SigilSeer() - { - super(); - setMaxStackSize(1); - } - - @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.seersigil.desc")); - - if (!(par1ItemStack.getTagCompound() == null)) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + par1ItemStack.getTagCompound().getString("ownerName")); - } - } - - @Override - public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.worldObj.isRemote) - { - return par1ItemStack; - } - - NBTTagCompound itemTag = par1ItemStack.getTagCompound(); - - if (itemTag == null || itemTag.getString("ownerName").equals("")) - { - return par1ItemStack; - } - - return par1ItemStack; - } - - @Override - public void onArmourUpdate(World world, EntityPlayer player, ItemStack thisItemStack) {} - @Override - public boolean isUpgrade() - { - return false; - } - - @Override - public int getEnergyForTenSeconds() - { - return 0; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilToggleable.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilToggleable.java deleted file mode 100644 index ae698659..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilToggleable.java +++ /dev/null @@ -1,17 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import net.minecraft.item.ItemStack; -import WayofTime.alchemicalWizardry.common.items.BindableItems; - -public class SigilToggleable extends BindableItems -{ - public void setActivated(ItemStack stack, boolean newActivated) - { - stack.setItemDamage(newActivated ? 1 : 0); - } - - public boolean getActivated(ItemStack stack) - { - return stack.getItemDamage() == 1; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilVoid.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilVoid.java deleted file mode 100644 index 2d9aee04..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilVoid.java +++ /dev/null @@ -1,164 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import java.util.List; - -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBucket; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidHandler; -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class SigilVoid extends ItemBucket implements ArmourUpgrade, ISigil -{ - private int energyUsed; - - public SigilVoid() - { - super(null); - setEnergyUsed(50); - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.voidsigil.desc")); - - if (!(stack.getTagCompound() == null)) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + stack.getTagCompound().getString("ownerName")); - } - } - - @Override - public ItemStack getContainerItem(ItemStack itemStack) - { - ItemStack copiedStack = itemStack.copy(); - copiedStack.setItemDamage(copiedStack.getItemDamage() + getEnergyUsed()); - copiedStack.stackSize = 1; - return copiedStack; - } - - protected void setEnergyUsed(int par1int) - { - this.energyUsed = par1int; - } - - protected int getEnergyUsed() - { - return this.energyUsed; - } - - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) - { - return stack; - } - - @Override - public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, BlockPos blockPos, EnumFacing side, float hitX, float hitY, float hitZ) - { - if (world.isRemote || !BindableItems.checkAndSetItemOwner(stack, player) || player.isSneaking()) - { - return false; - } - - if (!world.canMineBlockBody(player, blockPos)) - { - return false; - } - - TileEntity tile = world.getTileEntity(blockPos); - if (tile instanceof IFluidHandler) - { - FluidStack amount = ((IFluidHandler) tile).drain(side, 1000, false); - - if (amount != null && amount.amount > 0 && BindableItems.syphonBatteries(stack, player, getEnergyUsed())) - { - ((IFluidHandler) tile).drain(side, 1000, true); - return true; - } - - return false; - } - - int x = blockPos.getX(); - int y = blockPos.getY(); - int z = blockPos.getZ(); - - if (side.getIndex() == 0) - { - --y; - } - - if (side.getIndex() == 1) - { - ++y; - } - - if (side.getIndex() == 2) - { - --z; - } - - if (side.getIndex() == 3) - { - ++z; - } - - if (side.getIndex() == 4) - { - --x; - } - - if (side.getIndex() == 5) - { - ++x; - } - - if (!player.func_175151_a(new BlockPos(x, y, z), side, stack)) //was canPlayerEdit - { - return false; - } - - if (SpellHelper.isBlockFluid(world.getBlockState(new BlockPos(x, y, z)).getBlock()) && BindableItems.syphonBatteries(stack, player, getEnergyUsed())) - { - world.setBlockToAir(new BlockPos(x, y, z)); - return true; - } - - - return false; - } - - @Override - /** - * Attempts to place the liquid contained inside the bucket. - */ - public boolean func_180616_a(World world, BlockPos blockPos) //was tryPlaceContainedLiquid - { - return false; - } - - @Override - public void onArmourUpdate(World world, EntityPlayer player, ItemStack thisItemStack) {} - - @Override - public boolean isUpgrade() - { - return true; - } - - @Override - public int getEnergyForTenSeconds() - { - return 25; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilWater.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilWater.java deleted file mode 100644 index 4bf58364..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilWater.java +++ /dev/null @@ -1,242 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil; - -import java.util.List; - -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import WayofTime.alchemicalWizardry.common.tileEntity.TESocket; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemBucket; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidHandler; -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.common.items.BindableItems; - -public class SigilWater extends ItemBucket implements ArmourUpgrade, ISigil -{ - private Block isFull = Blocks.water; - private int energyUsed; - - public SigilWater() - { - super(Blocks.water); - setEnergyUsed(100); - } - - @Override - public void onCreated(ItemStack stack, World world, EntityPlayer player) - { - if (stack.getTagCompound() == null) - { - stack.setTagCompound(new NBTTagCompound()); - } - } - - @Override - public ItemStack getContainerItem(ItemStack itemStack) - { - return itemStack; - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.watersigil.desc")); - - if (!(stack.getTagCompound() == null)) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + stack.getTagCompound().getString("ownerName")); - } - } - - @Override - /** - * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer - */ - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) - { - return stack; - } - - @Override - public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, BlockPos blockPos, EnumFacing side, float hitX, float hitY, float hitZ) - { - if (world.isRemote || !BindableItems.checkAndSetItemOwner(stack, player) || player.isSneaking()) - { - return false; - } - - if (!world.canMineBlockBody(player, blockPos)) - { - return false; - } - - TileEntity tile = world.getTileEntity(blockPos); - if (tile instanceof IFluidHandler) - { - FluidStack fluid = new FluidStack(FluidRegistry.WATER, 1000); - int amount = ((IFluidHandler) tile).fill(side, fluid, false); - - if (amount > 0 && BindableItems.syphonBatteries(stack, player, getEnergyUsed())) - { - ((IFluidHandler) tile).fill(side, fluid, true); - } - - return false; - } - else if (tile instanceof TESocket) - { - return false; - } - - int x = blockPos.getX(); - int y = blockPos.getY(); - int z = blockPos.getZ(); - { - if (side.getIndex() == 0) - { - --y; - } - - if (side.getIndex() == 1) - { - ++y; - } - - if (side.getIndex() == 2) - { - --z; - } - - if (side.getIndex() == 3) - { - ++z; - } - - if (side.getIndex() == 4) - { - --x; - } - - if (side.getIndex() == 5) - { - ++x; - } - - if (!player.func_175151_a(new BlockPos(x, y, z), side, stack)) // was canPlayerEdit - { - return false; - } - - if(this.canPlaceContainedLiquid(world, new BlockPos(x, y, z)) && BindableItems.syphonBatteries(stack, player, getEnergyUsed())) - { - return this.func_180616_a(world, new BlockPos(x, y, z)); - } - } - - return false; - - } - - /** - * Attempts to place the liquid contained inside the bucket. - */ - public boolean func_180616_a(World world, BlockPos blockPos) //was tryPlaceContainedLiquid - { - if (this.isFull == Blocks.air) - { - return false; - } - else - { - Material material = world.getBlockState(blockPos).getBlock().getMaterial(); - boolean flag = !material.isSolid(); - - if (!world.isAirBlock(blockPos) && !flag) - { - return false; - } - else - { - if (world.provider.func_177500_n() && this.isFull == Blocks.flowing_water) - { - int i = blockPos.getX(); - int j = blockPos.getY(); - int k = blockPos.getZ(); - world.playSoundEffect((double)((float)i + 0.5F), (double)((float)j + 0.5F), (double)((float)k + 0.5F), "random.fizz", 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); - - for (int l = 0; l < 8; ++l) - { - world.spawnParticle(EnumParticleTypes.SMOKE_LARGE, (double)i + Math.random(), (double)j + Math.random(), (double)k + Math.random(), 0.0D, 0.0D, 0.0D, 0); - } - } - else - { - if (!world.isRemote && flag && !material.isLiquid()) - { - world.destroyBlock(blockPos, true); - } - - world.setBlockState(blockPos, this.isFull.getDefaultState(), 3); - } - - return true; - } - } - } - - public boolean canPlaceContainedLiquid(World world, BlockPos blockPos) - { - if (!world.isAirBlock(blockPos) && world.getBlockState(blockPos).getBlock().getMaterial().isSolid()) - { - return false; - } else if ((world.getBlockState(blockPos).getBlock() == Blocks.water || world.getBlockState(blockPos).getBlock() == Blocks.flowing_water) && world.getBlockState(blockPos).getBlock().getMetaFromState(world.getBlockState(blockPos)) == 0) - { - return false; - } else - { - return true; - } - } - - protected void setEnergyUsed(int par1int) - { - this.energyUsed = par1int; - } - - protected int getEnergyUsed() - { - return this.energyUsed; - } - - @Override - public void onArmourUpdate(World world, EntityPlayer player, ItemStack thisItemStack) - { - player.addPotionEffect(new PotionEffect(Potion.waterBreathing.id, 2, 9)); - } - - @Override - public boolean isUpgrade() - { - return true; - } - - @Override - public int getEnergyForTenSeconds() - { - return 50; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/ContainerHolding.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/ContainerHolding.java deleted file mode 100644 index e4d3afc2..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/ContainerHolding.java +++ /dev/null @@ -1,195 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil.holding; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.FMLCommonHandler; -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; - -public class ContainerHolding extends Container -{ - protected final int PLAYER_INVENTORY_ROWS = 3; - protected final int PLAYER_INVENTORY_COLUMNS = 9; - - private int inventoryColumns = 5; - - private final EntityPlayer player; - public final InventoryHolding inventoryHolding; - - public ContainerHolding(EntityPlayer player, InventoryHolding inventoryHolding) - { - this.player = player; - this.inventoryHolding = inventoryHolding; - int currentSlotHeldIn = player.inventory.currentItem; - - for (int columnIndex = 0; columnIndex < inventoryColumns; ++columnIndex) - { - this.addSlotToContainer(new SlotHolding(this, inventoryHolding, player, columnIndex, 8 + columnIndex * 36, 15)); - } - - for (int rowIndex = 0; rowIndex < PLAYER_INVENTORY_ROWS; ++rowIndex) - { - for (int columnIndex = 0; columnIndex < PLAYER_INVENTORY_COLUMNS; ++columnIndex) - { - this.addSlotToContainer(new Slot(player.inventory, columnIndex + rowIndex * 9 + 9, 8 + columnIndex * 18, 39 + rowIndex * 18)); - } - } - - for (int actionBarIndex = 0; actionBarIndex < PLAYER_INVENTORY_COLUMNS; ++actionBarIndex) - { - if (actionBarIndex == currentSlotHeldIn) - { - this.addSlotToContainer(new SlotDisabled(player.inventory, actionBarIndex, 8 + actionBarIndex * 18, 97)); - } - else - { - this.addSlotToContainer(new Slot(player.inventory, actionBarIndex, 8 + actionBarIndex * 18, 97)); - } - } - } - - @Override - public boolean canInteractWith(EntityPlayer entityPlayer) - { - return true; - } - - @Override - public void onContainerClosed(EntityPlayer entityPlayer) - { - super.onContainerClosed(entityPlayer); - - if (!entityPlayer.worldObj.isRemote) - { - saveInventory(entityPlayer); - } - } - - @Override - public void detectAndSendChanges() - { - super.detectAndSendChanges(); - - if (!player.worldObj.isRemote) - { - saveInventory(player); - } - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int slotIndex) - { - ItemStack stack = null; - Slot slotObject = (Slot) inventorySlots.get(slotIndex); - int slots = inventorySlots.size(); - - if (slotObject != null && slotObject.getHasStack()) - { - ItemStack stackInSlot = slotObject.getStack(); - stack = stackInSlot.copy(); - - if (stack.getItem() instanceof ISigil) - { - if (slotIndex < inventoryColumns) - { - if (!this.mergeItemStack(stackInSlot, inventoryColumns, slots, false)) - { - return null; - } - } - else if (!this.mergeItemStack(stackInSlot, 0, inventoryColumns, false)) - { - return null; - } - } - else if (stack.getItem() instanceof SigilOfHolding) - { - if (slotIndex < inventoryColumns + (PLAYER_INVENTORY_ROWS * PLAYER_INVENTORY_COLUMNS)) - { - if (!this.mergeItemStack(stackInSlot, inventoryColumns + (PLAYER_INVENTORY_ROWS * PLAYER_INVENTORY_COLUMNS), inventorySlots.size(), false)) - { - return null; - } - } - else if (!this.mergeItemStack(stackInSlot, inventoryColumns, inventoryColumns + (PLAYER_INVENTORY_ROWS * PLAYER_INVENTORY_COLUMNS), false)) - { - return null; - } - } - - if (stackInSlot.stackSize == 0) - { - slotObject.putStack(null); - } else - { - slotObject.onSlotChanged(); - } - - if (stackInSlot.stackSize == stack.stackSize) - { - return null; - } - - slotObject.onPickupFromSlot(player, stackInSlot); - } - - return stack; - } - - public void saveInventory(EntityPlayer entityPlayer) - { - inventoryHolding.onGuiSaved(entityPlayer); - } - - private class SlotHolding extends Slot - { - private final EntityPlayer player; - private ContainerHolding containerHolding; - - public SlotHolding(ContainerHolding containerHolding, IInventory inventory, EntityPlayer player, int slotIndex, int x, int y) - { - super(inventory, slotIndex, x, y); - this.player = player; - this.containerHolding = containerHolding; - } - - @Override - public void onSlotChanged() - { - super.onSlotChanged(); - - if (FMLCommonHandler.instance().getEffectiveSide().isServer()) - { - containerHolding.saveInventory(player); - } - } - - @Override - public boolean isItemValid(ItemStack itemStack) - { - return itemStack.getItem() instanceof ISigil; - } - } - - private class SlotDisabled extends Slot - { - public SlotDisabled(IInventory inventory, int slotIndex, int x, int y) - { - super(inventory, slotIndex, x, y); - } - - @Override - public boolean isItemValid(ItemStack itemStack) - { - return false; - } - - @Override - public boolean canTakeStack(EntityPlayer player) - { - return false; - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/GuiHolding.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/GuiHolding.java deleted file mode 100644 index f47ee663..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/GuiHolding.java +++ /dev/null @@ -1,39 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil.holding; - -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import org.lwjgl.opengl.GL11; - -@SideOnly(Side.CLIENT) -public class GuiHolding extends GuiContainer -{ - public GuiHolding(EntityPlayer player, InventoryHolding inventoryHolding) - { - super(new ContainerHolding(player, inventoryHolding)); - xSize = 176; - ySize = 121; - } - - @Override - protected void drawGuiContainerForegroundLayer(int param1, int param2) - { - //the parameters for drawString are: string, x, y, color - fontRendererObj.drawString("Sigil of Holding", 52, 4, 4210752); - } - - @Override - protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) - { - //draw your Gui here, only thing you need to change is the path - ResourceLocation test = new ResourceLocation("alchemicalwizardry", "gui/SigilOfHolding.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.getTextureManager().bindTexture(test); - int x = (width - xSize) / 2; - int y = (height - ySize) / 2; - this.drawTexturedModalRect(x, y, 0, 0, xSize, ySize); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/HoldingPacketHandler.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/HoldingPacketHandler.java deleted file mode 100644 index f6acf021..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/HoldingPacketHandler.java +++ /dev/null @@ -1,15 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil.holding; - -import net.minecraftforge.fml.common.network.NetworkRegistry; -import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper; -import net.minecraftforge.fml.relauncher.Side; - -public class HoldingPacketHandler -{ - public static final SimpleNetworkWrapper INSTANCE = NetworkRegistry.INSTANCE.newSimpleChannel("SigilOfHolding"); - - public static void init() - { - INSTANCE.registerMessage(HoldingPacketProcessor.class, HoldingPacketProcessor.class, 0, Side.SERVER); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/HoldingPacketProcessor.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/HoldingPacketProcessor.java deleted file mode 100644 index dc82e3b1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/HoldingPacketProcessor.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil.holding; - -import io.netty.buffer.ByteBuf; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; - -public class HoldingPacketProcessor implements IMessage, IMessageHandler -{ - private int slot; - private int mode; - - public HoldingPacketProcessor() - { - } - - public HoldingPacketProcessor(int slot, int mode) - { - this.slot = slot; - this.mode = mode; - } - - @Override - public void toBytes(ByteBuf buffer) - { - buffer.writeInt(slot); - buffer.writeInt(mode); - } - - @Override - public void fromBytes(ByteBuf buffer) - { - slot = buffer.readInt(); - mode = buffer.readInt(); - } - - @Override - public IMessage onMessage(HoldingPacketProcessor message, MessageContext ctx) - { - ItemStack itemStack = null; - - if (message.slot > -1 && message.slot < 9) - { - itemStack = ctx.getServerHandler().playerEntity.inventory.getStackInSlot(message.slot); - } - - if (itemStack != null) - { - SigilOfHolding.cycleSigil(itemStack, message.mode); - } - - return null; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/InventoryHolding.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/InventoryHolding.java deleted file mode 100644 index f894aad9..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/InventoryHolding.java +++ /dev/null @@ -1,292 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil.holding; - -import WayofTime.alchemicalWizardry.api.items.interfaces.ISigil; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.IChatComponent; - -import java.util.UUID; - -public class InventoryHolding implements IInventory -{ - public ItemStack parentItemStack; - protected ItemStack[] inventory; - - protected static String NBT_MOST_SIG = "MostSig"; - protected static String NBT_LEAST_SIG = "LeastSig"; - protected static String NBT_ITEMS = "Items"; - - public InventoryHolding(ItemStack itemStack) - { - parentItemStack = itemStack; - - inventory = new ItemStack[5]; - - readFromNBT(itemStack.getTagCompound()); - } - - public void onGuiSaved(EntityPlayer entityPlayer) - { - parentItemStack = findParentItemStack(entityPlayer); - - if (parentItemStack != null) - { - save(); - } - } - - public ItemStack findParentItemStack(EntityPlayer entityPlayer) - { - if (hasUUID(parentItemStack)) - { - UUID parentItemStackUUID = new UUID(parentItemStack.getTagCompound().getLong(NBT_MOST_SIG), parentItemStack.getTagCompound().getLong(NBT_LEAST_SIG)); - for (int i = 0; i < entityPlayer.inventory.getSizeInventory(); i++) - { - ItemStack itemStack = entityPlayer.inventory.getStackInSlot(i); - - if (hasUUID(itemStack)) - { - if (itemStack.getTagCompound().getLong(NBT_MOST_SIG) == parentItemStackUUID.getMostSignificantBits() && itemStack.getTagCompound().getLong(NBT_LEAST_SIG) == parentItemStackUUID.getLeastSignificantBits()) - { - return itemStack; - } - } - } - } - - return null; - } - - public void save() - { - NBTTagCompound nbtTagCompound = parentItemStack.getTagCompound(); - - if (nbtTagCompound == null) - { - nbtTagCompound = new NBTTagCompound(); - - UUID uuid = UUID.randomUUID(); - nbtTagCompound.setLong(NBT_MOST_SIG, uuid.getMostSignificantBits()); - nbtTagCompound.setLong(NBT_LEAST_SIG, uuid.getLeastSignificantBits()); - } - - writeToNBT(nbtTagCompound); - parentItemStack.setTagCompound(nbtTagCompound); - } - - @Override - public int getSizeInventory() - { - return inventory.length; - } - - @Override - public ItemStack getStackInSlot(int slotIndex) - { - return slotIndex >= 0 && slotIndex < this.inventory.length ? inventory[slotIndex] : null; - } - - @Override - public ItemStack decrStackSize(int slotIndex, int decrementAmount) - { - ItemStack itemStack = getStackInSlot(slotIndex); - if (itemStack != null) - { - if (itemStack.stackSize <= decrementAmount) - { - setInventorySlotContents(slotIndex, null); - } - else - { - itemStack = itemStack.splitStack(decrementAmount); - if (itemStack.stackSize == 0) - { - setInventorySlotContents(slotIndex, null); - } - } - } - - return itemStack; - } - - @Override - public ItemStack getStackInSlotOnClosing(int slotIndex) - { - if (inventory[slotIndex] != null) - { - ItemStack itemStack = inventory[slotIndex]; - inventory[slotIndex] = null; - return itemStack; - } - else - { - return null; - } - } - - @Override - public void setInventorySlotContents(int slotIndex, ItemStack itemStack) - { - if (slotIndex >= 0 && slotIndex < this.inventory.length) - { - this.inventory[slotIndex] = itemStack; - } - } - - @Override - public String getName() - { - return "SigilOfHolding"; - } - - @Override - public boolean hasCustomName() - { - return false; - } - - @Override - public int getInventoryStackLimit() - { - return 1; - } - - @Override - public void markDirty() - { - // NOOP - } - - @Override - public boolean isUseableByPlayer(EntityPlayer entityPlayer) - { - return true; - } - - @Override - public void openInventory(EntityPlayer player) - { - // NOOP - } - - @Override - public void closeInventory(EntityPlayer player) - { - // NOOP - } - - @Override - public boolean isItemValidForSlot(int slotIndex, ItemStack itemStack) - { - return itemStack.getItem() instanceof ISigil; - } - - public void readFromNBT(NBTTagCompound nbtTagCompound) - { - if (nbtTagCompound != null && nbtTagCompound.hasKey(NBT_ITEMS)) - { - // Read in the ItemStacks in the inventory from NBT - if (nbtTagCompound.hasKey(NBT_ITEMS)) - { - NBTTagList tagList = nbtTagCompound.getTagList(NBT_ITEMS, 10); - inventory = new ItemStack[this.getSizeInventory()]; - for (int i = 0; i < tagList.tagCount(); ++i) - { - NBTTagCompound tagCompound = tagList.getCompoundTagAt(i); - byte slotIndex = tagCompound.getByte("Slot"); - if (slotIndex >= 0 && slotIndex < inventory.length) - { - inventory[slotIndex] = ItemStack.loadItemStackFromNBT(tagCompound); - } - } - } - } - } - - public void writeToNBT(NBTTagCompound nbtTagCompound) - { - // Write the ItemStacks in the inventory to NBT - NBTTagList tagList = new NBTTagList(); - for (int currentIndex = 0; currentIndex < inventory.length; ++currentIndex) - { - if (inventory[currentIndex] != null) - { - NBTTagCompound tagCompound = new NBTTagCompound(); - tagCompound.setByte("Slot", (byte) currentIndex); - inventory[currentIndex].writeToNBT(tagCompound); - tagList.appendTag(tagCompound); - } - } - nbtTagCompound.setTag(NBT_ITEMS, tagList); - } - - public static boolean hasTag(ItemStack itemStack, String keyName) - { - return itemStack != null && itemStack.getTagCompound() != null && itemStack.getTagCompound().hasKey(keyName); - } - - public static boolean hasUUID(ItemStack itemStack) - { - return hasTag(itemStack, NBT_MOST_SIG) && hasTag(itemStack, NBT_LEAST_SIG); - } - - public static void setUUID(ItemStack itemStack) - { - initNBTTagCompound(itemStack); - - if (!hasTag(itemStack, NBT_MOST_SIG) && !hasTag(itemStack, NBT_LEAST_SIG)) - { - UUID itemUUID = UUID.randomUUID(); - setLong(itemStack, NBT_MOST_SIG, itemUUID.getMostSignificantBits()); - setLong(itemStack, NBT_LEAST_SIG, itemUUID.getLeastSignificantBits()); - } - } - - private static void initNBTTagCompound(ItemStack itemStack) - { - if (itemStack.getTagCompound() == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - } - - public static void setLong(ItemStack itemStack, String keyName, long keyValue) - { - initNBTTagCompound(itemStack); - - itemStack.getTagCompound().setLong(keyName, keyValue); - } - - @Override - public IChatComponent getDisplayName() { - // TODO Auto-generated method stub - return null; - } - - @Override - public int getField(int id) { - // TODO Auto-generated method stub - return 0; - } - - @Override - public void setField(int id, int value) { - // TODO Auto-generated method stub - - } - - @Override - public int getFieldCount() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public void clear() { - // TODO Auto-generated method stub - - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/ScrollHelper.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/ScrollHelper.java deleted file mode 100644 index bb96bf84..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/ScrollHelper.java +++ /dev/null @@ -1,45 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil.holding; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.client.event.MouseEvent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class ScrollHelper -{ - @SubscribeEvent - public void onMouseEvent(MouseEvent event) - { - EntityPlayerSP player = Minecraft.getMinecraft().thePlayer; - - if (event.dwheel != 0 && player != null && player.isSneaking()) - { - ItemStack stack = player.getCurrentEquippedItem(); - - if (stack != null) - { - Item item = stack.getItem(); - - if (item instanceof SigilOfHolding) - { - cycleSigil(stack, player, event.dwheel); - event.setCanceled(true); - } - } - } - } - - private void cycleSigil(ItemStack stack, EntityPlayer player, int dWheel) - { - int mode = SigilOfHolding.getCurrentItem(stack); - mode = dWheel < 0 ? SigilOfHolding.next(mode) : SigilOfHolding.prev(mode); - SigilOfHolding.cycleSigil(stack, mode); - HoldingPacketHandler.INSTANCE.sendToServer(new HoldingPacketProcessor(player.inventory.currentItem, mode)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/SigilOfHolding.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/SigilOfHolding.java deleted file mode 100644 index e0eeaecb..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/holding/SigilOfHolding.java +++ /dev/null @@ -1,281 +0,0 @@ -package WayofTime.alchemicalWizardry.common.items.sigil.holding; - -import java.util.List; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.MathHelper; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.items.BindableItems; - -public class SigilOfHolding extends BindableItems -{ - private static int invSize = 5; - - private static final String NBT_CURRENT_SIGIL = "CurrentSigil"; - - public SigilOfHolding() - { - super(); - setMaxStackSize(1); - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List par3List, boolean par4) - { - par3List.add(StatCollector.translateToLocal("tooltip.sigilofholding.desc")); - - if (!(stack.getTagCompound() == null)) - { - par3List.add(StatCollector.translateToLocal("tooltip.owner.currentowner") + " " + stack.getTagCompound().getString("ownerName")); - ItemStack[] inv = getInternalInventory(stack); - - if (inv == null) - { - return; - } - - int currentSlot = getCurrentItem(stack); - ItemStack item = inv[currentSlot]; - - if (item != null) - { - par3List.add(StatCollector.translateToLocal("tooltip.item.currentitem") + " " + item.getDisplayName()); - } - - for (int i = 0; i < invSize; i++) - { - if (inv[i] != null) - { - par3List.add(StatCollector.translateToLocal("tooltip.item.iteminslot") + " " + (i + 1) + ": " + inv[i].getDisplayName()); - } - } - } - } - - @Override - public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ) - { - if (checkAndSetItemOwner(stack, player)) - { - int currentSlot = getCurrentItem(stack); - ItemStack[] inv = getInternalInventory(stack); - - if (inv == null) - { - return false; - } - - ItemStack itemUsed = inv[currentSlot]; - - if (itemUsed == null) - { - return false; - } - - boolean bool = itemUsed.getItem().onItemUse(stack, player, world, pos, side, hitX, hitY, hitZ); - - saveInventory(stack, inv); - - return bool; - } - - return false; - } - - @Override - public ItemStack onItemRightClick(ItemStack stack, World par2World, EntityPlayer par3EntityPlayer) - { - if (checkAndSetItemOwner(stack, par3EntityPlayer)) - { - if (par3EntityPlayer.isSneaking()) - { - InventoryHolding.setUUID(stack); - par3EntityPlayer.openGui(AlchemicalWizardry.instance, 3, par3EntityPlayer.worldObj, (int) par3EntityPlayer.posX, (int) par3EntityPlayer.posY, (int) par3EntityPlayer.posZ); - return stack; - } - - int currentSlot = getCurrentItem(stack); - ItemStack[] inv = getInternalInventory(stack); - - if (inv == null) - { - return stack; - } - - ItemStack itemUsed = inv[currentSlot]; - - if (itemUsed == null) - { - return stack; - } - - itemUsed.getItem().onItemRightClick(itemUsed, par2World, par3EntityPlayer); - saveInventory(stack, inv); - } - return stack; - } - - public static int next(int mode) - { - int index = mode + 1; - - if (index >= invSize + 1) - { - index = 0; - } - - return index; - } - - public static int prev(int mode) - { - int index = mode - 1; - - if (index < 0) - { - index = invSize; - } - - return index; - } - - private static void initModeTag(ItemStack itemStack) - { - if (itemStack.getTagCompound() == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - itemStack.getTagCompound().setInteger(NBT_CURRENT_SIGIL, invSize); - } - } - - public static ItemStack getCurrentSigil(ItemStack itemStack) - { - if (itemStack != null && itemStack.getItem() instanceof SigilOfHolding) - { - ItemStack[] itemStacks = getInternalInventory(itemStack); - int currentSlot = getCurrentItem(itemStack); - if (itemStacks != null) - { - return itemStacks[currentSlot]; - } - } - - return null; - } - - public static int getCurrentItem(ItemStack itemStack) - { - if (itemStack != null && itemStack.getItem() instanceof SigilOfHolding) - { - initModeTag(itemStack); - int currentSigil = itemStack.getTagCompound().getInteger(NBT_CURRENT_SIGIL); - currentSigil = MathHelper.clamp_int(currentSigil, 0, invSize); - return currentSigil; - } - - return 4; - } - - public static ItemStack[] getInternalInventory(ItemStack itemStack) - { - initModeTag(itemStack); - NBTTagCompound tagCompound = itemStack.getTagCompound(); - - if (tagCompound == null) - { - return null; - } - - ItemStack[] inv = new ItemStack[9]; - NBTTagList tagList = tagCompound.getTagList(InventoryHolding.NBT_ITEMS, 10); - - if (tagList == null) - { - return null; - } - - for (int i = 0; i < tagList.tagCount(); i++) - { - NBTTagCompound tag = tagList.getCompoundTagAt(i); - int slot = tag.getByte("Slot"); - - if (slot >= 0 && slot < invSize) - { - inv[slot] = ItemStack.loadItemStackFromNBT(tag); - } - } - - return inv; - } - - public void saveInventory(ItemStack itemStack, ItemStack[] inventory) - { - NBTTagCompound itemTag = itemStack.getTagCompound(); - - if (itemTag == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - NBTTagList itemList = new NBTTagList(); - - for (int i = 0; i < invSize; i++) - { - if (inventory[i] != null) - { - NBTTagCompound tag = new NBTTagCompound(); - tag.setByte("Slot", (byte) i); - inventory[i].writeToNBT(tag); - itemList.appendTag(tag); - } - } - - itemTag.setTag(InventoryHolding.NBT_ITEMS, itemList); - } - - public static void cycleSigil(ItemStack itemStack, int mode) - { - if (itemStack != null && itemStack.getItem() instanceof SigilOfHolding) - { - initModeTag(itemStack); - itemStack.getTagCompound().setInteger(NBT_CURRENT_SIGIL, mode); - } - } - - @Override - public void onUpdate(ItemStack stack, World par2World, Entity par3Entity, int par4, boolean par5) - { - if (!(stack.getTagCompound() == null)) - { - this.tickInternalInventory(stack, par2World, par3Entity, par4, par5); - } - } - - public void tickInternalInventory(ItemStack stack, World par2World, Entity par3Entity, int par4, boolean par5) - { - ItemStack[] inv = getInternalInventory(stack); - - if (inv == null) - { - return; - } - - for (int i = 0; i < invSize; i++) - { - if (inv[i] == null) - { - continue; - } - - inv[i].getItem().onUpdate(inv[i], par2World, par3Entity, par4, par5); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/thaumcraft/ItemSanguineArmour.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/thaumcraft/ItemSanguineArmour.java deleted file mode 100644 index f044912d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/thaumcraft/ItemSanguineArmour.java +++ /dev/null @@ -1,192 +0,0 @@ -//package WayofTime.alchemicalWizardry.common.items.thaumcraft; -// -//import WayofTime.alchemicalWizardry.AlchemicalWizardry; -//import WayofTime.alchemicalWizardry.ModItems; -//import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -//import cpw.mods.fml.relauncher.Side; -//import cpw.mods.fml.relauncher.SideOnly; -//import net.minecraft.client.renderer.texture.IIconRegister; -//import net.minecraft.entity.Entity; -//import net.minecraft.entity.EntityLivingBase; -//import net.minecraft.entity.player.EntityPlayer; -//import net.minecraft.item.ItemArmor; -//import net.minecraft.item.ItemStack; -//import net.minecraft.util.IIcon; -//import net.minecraft.util.StatCollector; -//import net.minecraft.world.World; -//import thaumcraft.api.IGoggles; -//import thaumcraft.api.IRepairable; -//import thaumcraft.api.IRunicArmor; -//import thaumcraft.api.IVisDiscountGear; -//import thaumcraft.api.aspects.Aspect; -//import thaumcraft.api.nodes.IRevealer; -// -//import java.util.List; -// -//public class ItemSanguineArmour extends ItemArmor implements ArmourUpgrade, IGoggles, IVisDiscountGear, IRevealer, IRunicArmor, IRepairable -//{ -// @SideOnly(Side.CLIENT) -// private IIcon helmetIcon; -// @SideOnly(Side.CLIENT) -// private IIcon plateIcon; -// @SideOnly(Side.CLIENT) -// private IIcon leggingsIcon; -// @SideOnly(Side.CLIENT) -// private IIcon bootsIcon; -// -// public ItemSanguineArmour(int armorType) -// { -// super(AlchemicalWizardry.sanguineArmourArmourMaterial, 0, armorType); -// setMaxDamage(1000); -// setCreativeTab(AlchemicalWizardry.tabBloodMagic); -// } -// -// @Override -// @SideOnly(Side.CLIENT) -// public void registerIcons(IIconRegister iconRegister) -// { -// this.itemIcon = iconRegister.registerIcon("AlchemicalWizardry:SheathedItem"); -// this.helmetIcon = iconRegister.registerIcon("AlchemicalWizardry:SanguineHelmet"); -// this.plateIcon = iconRegister.registerIcon("AlchemicalWizardry:SanguinePlate"); -// this.leggingsIcon = iconRegister.registerIcon("AlchemicalWizardry:SanguineLeggings"); -// this.bootsIcon = iconRegister.registerIcon("AlchemicalWizardry:SanguineBoots"); -// } -// -// @SideOnly(Side.CLIENT) -// public IIcon getIconFromDamage(int par1) -// { -// if (this.equals(ModItems.sanguineHelmet)) -// { -// return this.helmetIcon; -// } -// -// if (this.equals(ModItems.sanguineRobe)) -// { -// return this.plateIcon; -// } -// -// if (this.equals(ModItems.sanguinePants)) -// { -// return this.leggingsIcon; -// } -// -// if (this.equals(ModItems.sanguineBoots)) -// { -// return this.bootsIcon; -// } -// -// return this.itemIcon; -// } -// -// @Override -// public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) -// { -// if (this == ModItems.sanguineHelmet) -// { -// return "alchemicalwizardry:models/armor/sanguineArmour_layer_1.png"; -// } -// -// if (this == ModItems.sanguineRobe || this == ModItems.sanguineBoots) -// { -// return "alchemicalwizardry:models/armor/sanguineArmour_layer_1.png"; -// } -// -// if (this == ModItems.sanguinePants) -// { -// return "alchemicalwizardry:models/armor/sanguineArmour_layer_2.png"; -// } else -// { -// return null; -// } -// } -// -// @Override -// public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) -// { -// int discount = 0; -// -// switch (this.armorType) -// { -// case 0: -// discount = 6; -// break; -// case 1: -// discount = 3; -// break; -// case 2: -// discount = 3; -// break; -// case 3: -// discount = 2; -// break; -// } -// -// switch (this.armorType) -// { -// case 0: -// par3List.add(StatCollector.translateToLocal("tooltip.sanguinearmor.desc1")); -// break; -// case 1: -// -// case 2: -// -// case 3: -// par3List.add(StatCollector.translateToLocal("tooltip.sanguinearmor.desc2")); -// } -// -// par3List.add(StatCollector.translateToLocal("tooltip.sanguinearmor.visdisc") + " " + discount + "%"); -// } -// -// @Override -// public void onArmourUpdate(World world, EntityPlayer player, ItemStack thisItemStack) -// { -// return; -// } -// -// @Override -// public boolean isUpgrade() -// { -// return true; -// } -// -// @Override -// public int getEnergyForTenSeconds() -// { -// return 0; -// } -// -// @Override -// public boolean showNodes(ItemStack itemstack, EntityLivingBase player) -// { -// return true; -// } -// -// @Override -// public int getVisDiscount(ItemStack stack, EntityPlayer player, Aspect aspect) -// { -// switch (this.armorType) -// { -// case 0: -// return 7; -// case 1: -// return 3; -// case 2: -// return 2; -// case 3: -// return 2; -// } -// return 0; -// } -// -// @Override -// public boolean showIngamePopups(ItemStack itemstack, EntityLivingBase player) -// { -// return true; -// } -// -// @Override -// public int getRunicCharge(ItemStack itemstack) -// { -// return 0; -// } -//} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/omega/IEnchantmentGlyph.java b/src/main/java/WayofTime/alchemicalWizardry/common/omega/IEnchantmentGlyph.java deleted file mode 100644 index 06c4b2fc..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/omega/IEnchantmentGlyph.java +++ /dev/null @@ -1,11 +0,0 @@ -package WayofTime.alchemicalWizardry.common.omega; - -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; - -public interface IEnchantmentGlyph extends IStabilityGlyph -{ - int getEnchantability(World world, BlockPos pos, int meta); - - int getEnchantmentLevel(World world, BlockPos pos, int meta); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/omega/IStabilityGlyph.java b/src/main/java/WayofTime/alchemicalWizardry/common/omega/IStabilityGlyph.java deleted file mode 100644 index 2b826b0f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/omega/IStabilityGlyph.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.common.omega; - -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; - -public interface IStabilityGlyph -{ - int getAdditionalStabilityForFaceCount(World world, BlockPos pos, int meta, int faceCount); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigm.java b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigm.java deleted file mode 100644 index 3c93d301..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigm.java +++ /dev/null @@ -1,167 +0,0 @@ -package WayofTime.alchemicalWizardry.common.omega; - -import java.util.Random; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.ModItems; -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.common.items.armour.OmegaArmour; - -public class OmegaParadigm -{ - public OmegaArmour helmet; - public OmegaArmour chestPiece; - public OmegaArmour leggings; - public OmegaArmour boots; - - public ReagentRegenConfiguration config; - - public OmegaParadigm(Reagent reagent, OmegaArmour helmet, OmegaArmour chestPiece, OmegaArmour leggings, OmegaArmour boots, ReagentRegenConfiguration config) - { - this.helmet = helmet; - this.chestPiece = chestPiece; - this.leggings = leggings; - this.boots = boots; - - this.helmet.setParadigm(this); - this.chestPiece.setParadigm(this); - this.leggings.setParadigm(this); - this.boots.setParadigm(this); - this.helmet.setReagent(reagent); - this.chestPiece.setReagent(reagent); - this.leggings.setReagent(reagent); - this.boots.setReagent(reagent); - - this.config = new ReagentRegenConfiguration(100, 1, 10); - } - - public boolean convertPlayerArmour(EntityPlayer player, int x, int y, int z, int stability, int affinity, int enchantability, int enchantmentLevel) - { - ItemStack[] armours = player.inventory.armorInventory; - - ItemStack helmetStack = armours[3]; - ItemStack chestStack = armours[2]; - ItemStack leggingsStack = armours[1]; - ItemStack bootsStack = armours[0]; - - if(helmetStack != null && helmetStack.getItem() == ModItems.boundHelmet && chestStack != null && chestStack.getItem() == ModItems.boundChestplate && leggingsStack != null && leggingsStack.getItem() == ModItems.boundLeggings && bootsStack != null && bootsStack.getItem() == ModItems.boundBoots) - { - long worldSeed = player.worldObj.getSeed(); - Random rand = new Random(worldSeed + stability * (affinity + 7) * 94 + 84321*x - 17423*y + 76*z - 1623451*enchantability + 2 * enchantmentLevel); - ItemStack omegaHelmetStack = helmet.getSubstituteStack(helmetStack, stability, affinity, enchantability, enchantmentLevel, rand); - ItemStack omegaChestStack = chestPiece.getSubstituteStack(chestStack, stability, affinity, enchantability, enchantmentLevel, rand); - ItemStack omegaLeggingsStack = leggings.getSubstituteStack(leggingsStack, stability, affinity, enchantability, enchantmentLevel, rand); - ItemStack omegaBootsStack = boots.getSubstituteStack(bootsStack, stability, affinity, enchantability, enchantmentLevel, rand); - - armours[3] = omegaHelmetStack; - armours[2] = omegaChestStack; - armours[1] = omegaLeggingsStack; - armours[0] = omegaBootsStack; - - return true; - } - - return false; - } - - public ReagentRegenConfiguration getRegenConfig(EntityPlayer player) - { - return this.config; - } - - public int getMaxAdditionalHealth() - { - return 20; - } - - public boolean setOmegaStalling(EntityPlayer player, int duration) - { - ItemStack[] armours = player.inventory.armorInventory; - - ItemStack chestStack = armours[2]; - - if(chestStack != null && chestStack.getItem() == this.chestPiece) - { - ((OmegaArmour)chestStack.getItem()).setOmegaStallingDuration(chestStack, duration); - return true; - } - - return false; - } - - public float getCostPerTickOfUse(EntityPlayer player) - { - return 1; - } - - public boolean doDrainReagent(EntityPlayer player) - { - ItemStack[] armours = player.inventory.armorInventory; - - ItemStack chestStack = armours[2]; - - if(chestStack != null && chestStack.getItem() == this.chestPiece) - { - return !((OmegaArmour)chestStack.getItem()).hasOmegaStalling(chestStack); - } - return true; - } - - public boolean isPlayerWearingFullSet(EntityPlayer player) - { - ItemStack[] armours = player.inventory.armorInventory; - - ItemStack helmetStack = armours[3]; - ItemStack chestStack = armours[2]; - ItemStack leggingsStack = armours[1]; - ItemStack bootsStack = armours[0]; - - return helmetStack != null && helmetStack.getItem() == helmet && chestStack != null && chestStack.getItem() == chestPiece && leggingsStack != null && leggingsStack.getItem() == leggings && bootsStack != null && bootsStack.getItem() == boots; - } - - public void onUpdate(World world, EntityPlayer player, ItemStack stack) - { - - } - - public void onOmegaKeyPressed(EntityPlayer player, ItemStack stack) - { - - } - - public boolean getBlockEffectWhileInside(Entity entity, BlockPos blockPos) - { - return false; - } - - public boolean onHPBarDepleted(EntityPlayer player, ItemStack stack) - { - return false; - } - - /** - * - * @param stack - * @param player - * @param entity - * @return False if it does not do damage - */ - public boolean onBoundSwordLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) - { - return true; - } - - public void onEmptyHandEntityInteract(EntityPlayer player, Entity entity) - { - - } - - public void onBoundSwordInteractWithEntity(EntityPlayer player, Entity entity) - { - - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmEarth.java deleted file mode 100644 index bb021201..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmEarth.java +++ /dev/null @@ -1,51 +0,0 @@ -package WayofTime.alchemicalWizardry.common.omega; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.common.items.armour.OmegaArmour; - -public class OmegaParadigmEarth extends OmegaParadigm -{ - public OmegaParadigmEarth(OmegaArmour helmet, OmegaArmour chestPiece, OmegaArmour leggings, OmegaArmour boots) - { - super(ReagentRegistry.terraeReagent, helmet, chestPiece, leggings, boots, new ReagentRegenConfiguration(50, 1, 10)); - } - - @Override - public float getCostPerTickOfUse(EntityPlayer player) - { -// if(player.isBurning()) -// { -// return 0.5f; -// } - return 1; - } - - @Override - public void onUpdate(World world, EntityPlayer player, ItemStack stack) - { - if(world.getWorldTime() % 100 == 0 && !world.isRemote) - { - if(player.posY < 50 && player.getHealth() < player.getMaxHealth()) - { - player.addPotionEffect(new PotionEffect(Potion.regeneration.id, 200, 0, true, false)); - } - } - - if(player.posY > 100) - { - player.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionHeavyHeart.id, 200, 0, true, false)); - } - } - - @Override - public void onOmegaKeyPressed(EntityPlayer player, ItemStack stack) - { - - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmFire.java deleted file mode 100644 index d4fd272a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmFire.java +++ /dev/null @@ -1,64 +0,0 @@ -package WayofTime.alchemicalWizardry.common.omega; - -import net.minecraft.block.material.Material; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.common.items.armour.OmegaArmour; - -public class OmegaParadigmFire extends OmegaParadigm -{ - public OmegaParadigmFire(OmegaArmour helmet, OmegaArmour chestPiece, OmegaArmour leggings, OmegaArmour boots) - { - super(ReagentRegistry.incendiumReagent, helmet, chestPiece, leggings, boots, new ReagentRegenConfiguration(50, 1, 10)); - } - - @Override - public float getCostPerTickOfUse(EntityPlayer player) - { - if(player.isBurning()) - { - return 0.5f; - } - return 1; - } - - @Override - public void onUpdate(World world, EntityPlayer player, ItemStack stack) - { - if(world.getWorldTime() % 100 == 0 && !world.isRemote) - { - boolean isInLava = player.isInsideOfMaterial(Material.lava); - if(player.isBurning() && player.getHealth() < player.getMaxHealth()) - { - player.addPotionEffect(new PotionEffect(Potion.regeneration.id, 200, isInLava ? 1 : 0, true, false)); - } - - if(player.isBurning()) - { - player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, isInLava ? 400 : 200, isInLava ? 1 : 0, true, false)); - } - - if(player.isInWater()) - { - player.addPotionEffect(new PotionEffect(Potion.digSlowdown.id, 200, 2, true, false)); - player.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 200, 2, true, false)); - player.addPotionEffect(new PotionEffect(Potion.weakness.id, 200, 1, true, false)); - } - } - - if(player.isBurning()) - { - player.addPotionEffect(new PotionEffect(Potion.fireResistance.id, 200, 0, true, false)); - } - } - - @Override - public void onOmegaKeyPressed(EntityPlayer player, ItemStack stack) - { - - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmWater.java b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmWater.java deleted file mode 100644 index 80fda3d3..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmWater.java +++ /dev/null @@ -1,83 +0,0 @@ -package WayofTime.alchemicalWizardry.common.omega; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.common.items.armour.OmegaArmour; -import WayofTime.alchemicalWizardry.common.tileEntity.TEMimicBlock; - -public class OmegaParadigmWater extends OmegaParadigm -{ - public OmegaParadigmWater(OmegaArmour helmet, OmegaArmour chestPiece, OmegaArmour leggings, OmegaArmour boots) - { - super(ReagentRegistry.aquasalusReagent, helmet, chestPiece, leggings, boots, new ReagentRegenConfiguration(50, 1, 10)); - } - - @Override - public float getCostPerTickOfUse(EntityPlayer player) - { - if(player.isInWater()) - { - return 0.5f; - }else - { - return 1; - } - } - - @Override - public void onUpdate(World world, EntityPlayer player, ItemStack stack) - { - player.addPotionEffect(new PotionEffect(Potion.waterBreathing.id, 3, 0, true, false)); - player.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionAmphibian.id, 3, 0, true, false)); - - if(world.getWorldTime() % 100 == 0 && !world.isRemote) - { - if(player.isInWater() && player.getHealth() < player.getMaxHealth()) - { - player.addPotionEffect(new PotionEffect(Potion.regeneration.id, 200, 0, true, false)); - } - } - } - - @Override - public boolean getBlockEffectWhileInside(Entity entity, BlockPos pos) - { - if(entity instanceof EntityLivingBase) - { - ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionDrowning.id, 100, 1, true, false)); - } - return true; - } - - @Override - public void onOmegaKeyPressed(EntityPlayer player, ItemStack stack) - { - World world = player.worldObj; - - int x = (int) Math.round(player.posX); - int y = (int) Math.round(player.posY); - int z = (int) Math.round(player.posZ); - - int range = 3; - - for(int i=-range; i<=range; i++) - { - for(int j=-range; j<=range; j++) - { - for(int k=-range; k<=range; k++) - { - TEMimicBlock.createMimicBlockAtLocation(world, new BlockPos(x+i, y+j, z+k), 300, Blocks.water.getDefaultState(), ReagentRegistry.aquasalusReagent); - } - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmWind.java deleted file mode 100644 index 67ad78c8..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmWind.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.omega; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.common.items.armour.OmegaArmour; - -public class OmegaParadigmWind extends OmegaParadigm -{ - public OmegaParadigmWind(OmegaArmour helmet, OmegaArmour chestPiece, OmegaArmour leggings, OmegaArmour boots) - { - super(ReagentRegistry.aetherReagent, helmet, chestPiece, leggings, boots, new ReagentRegenConfiguration(50, 1, 10)); - } - - @Override - public float getCostPerTickOfUse(EntityPlayer player) - { - if(player.isAirBorne) - { - return 0.5f; - }else - { - return 1; - } - } - - @Override - public void onUpdate(World world, EntityPlayer player, ItemStack stack) - { - if(world.getWorldTime() % 100 == 0 && !world.isRemote && player.posY > 128 && player.getHealth() < player.getMaxHealth()) - { - player.addPotionEffect(new PotionEffect(Potion.regeneration.id, 200, player.posY > 128 + 64 ? 1 : 0, true, false)); - } - - player.fallDistance = 0; - } - - @Override - public void onOmegaKeyPressed(EntityPlayer player, ItemStack stack) - { - - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaRegistry.java deleted file mode 100644 index 0f804337..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaRegistry.java +++ /dev/null @@ -1,42 +0,0 @@ -package WayofTime.alchemicalWizardry.common.omega; - -import java.util.HashMap; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.common.items.armour.OmegaArmour; - -public class OmegaRegistry -{ - public static HashMap omegaList = new HashMap(); - - public static void registerParadigm(Reagent reagent, OmegaParadigm parad) - { - omegaList.put(reagent, parad); - } - - public static OmegaParadigm getParadigmForReagent(Reagent reagent) - { - return omegaList.get(reagent); - } - - public static boolean hasParadigm(Reagent reagent) - { - return omegaList.containsKey(reagent); - } - - public static OmegaParadigm getOmegaParadigmOfWeilder(EntityPlayer player) - { - ItemStack[] armours = player.inventory.armorInventory; - - ItemStack chestStack = armours[2]; - - if(chestStack != null && chestStack.getItem() instanceof OmegaArmour) - { - return ((OmegaArmour)chestStack.getItem()).getOmegaParadigm(); - } - - return null; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaStructureHandler.java b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaStructureHandler.java deleted file mode 100644 index 45561cf9..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaStructureHandler.java +++ /dev/null @@ -1,161 +0,0 @@ -package WayofTime.alchemicalWizardry.common.omega; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.api.Int3; - -public class OmegaStructureHandler -{ - public static final OmegaStructureParameters emptyParam = new OmegaStructureParameters(0, 0, 0); - - public static boolean isStructureIntact(World world, int x, int y, int z) - { - return true; - } - - public static OmegaStructureParameters getStructureStabilityFactor(World world, BlockPos pos, int expLim, Int3 offset) - { - int range = expLim; - - int[][][] boolList = new int[range * 2 + 1][range * 2 + 1][range * 2 + 1]; //0 indicates unchecked, 1 indicates checked and is air, -1 indicates checked to be right next to air blocks in question but is NOT air - - for (int i = 0; i < 2 * range + 1; i++) - { - for (int j = 0; j < 2 * range + 1; j++) - { - for (int k = 0; k < 2 * range + 1; k++) - { - boolList[i][j][k] = 0; - } - } - } - - boolList[range + offset.xCoord][range + offset.yCoord][range + offset.zCoord] = 1; - boolean isReady = false; - - while (!isReady) - { - isReady = true; - - for (int i = 0; i < 2 * range + 1; i++) - { - for (int j = 0; j < 2 * range + 1; j++) - { - for (int k = 0; k < 2 * range + 1; k++) - { - if (boolList[i][j][k] == 1) - { - BlockPos position = pos.add(i - range, j - range, k - range); - - for(EnumFacing face : EnumFacing.VALUES) - { - int iP = i + face.getFrontOffsetX(); - int jP = j + face.getFrontOffsetY(); - int kP = k + face.getFrontOffsetZ(); - - if(iP >= 0 && iP <= 2 * range && jP >= 0 && jP <= 2 * range && kP >= 0 && kP <= 2 * range && !(boolList[iP][jP][kP] == 1 || boolList[iP][jP][kP] == -1)) - { - BlockPos newPos = position.add(face.getDirectionVec()); - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - if (world.isAirBlock(newPos) || block == ModBlocks.blockSpectralContainer) - { - if(iP == 0 && iP == 2 * range && jP == 0 && jP == 2 * range && kP == 0 && kP == 2 * range) - { - return emptyParam; - } - boolList[iP][jP][kP] = 1; - isReady = false; - }else - { - boolList[iP][jP][kP] = -1; - } - } - } - } - } - } - } - } - - int tally = 0; - int enchantability = 0; - int enchantmentLevel = 0; - - for (int i = 0; i < 2 * range + 1; i++) - { - for (int j = 0; j < 2 * range + 1; j++) - { - for (int k = 0; k < 2 * range + 1; k++) - { - if (boolList[i][j][k] != -1) - { - continue; - } - - int indTally = 0; - - if (i - 1 >= 0 && boolList[i - 1][j][k] == 1) - { - indTally++; - } - - if (j - 1 >= 0 && boolList[i][j - 1][k] == 1) - { - indTally++; - } - - if (k - 1 >= 0 && boolList[i][j][k - 1] == 1) - { - indTally++; - } - - if (i + 1 <= 2 * range && boolList[i + 1][j][k] == 1) - { - indTally++; - } - - if (j + 1 <= 2 * range && boolList[i][j + 1][k] == 1) - { - indTally++; - } - - if (k + 1 <= 2 * range && boolList[i][j][k + 1] == 1) - { - indTally++; - } - - BlockPos newPos = pos.add(i - range, j - range, k - range); - - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - int meta = block.getMetaFromState(state); - - if(block instanceof IEnchantmentGlyph) - { - tally += ((IEnchantmentGlyph)block).getAdditionalStabilityForFaceCount(world, newPos, meta, indTally); - enchantability += ((IEnchantmentGlyph)block).getEnchantability(world, newPos, meta); - enchantmentLevel += ((IEnchantmentGlyph)block).getEnchantmentLevel(world, newPos, meta); - }else if(block instanceof IStabilityGlyph) - { - tally += ((IStabilityGlyph)block).getAdditionalStabilityForFaceCount(world, newPos, meta, indTally); - }else - { - tally += indTally; - } - } - } - } - - return new OmegaStructureParameters(tally, enchantability, enchantmentLevel); - } - - public static OmegaStructureParameters getStructureStabilityFactor(World world, BlockPos pos, int expLim) - { - return getStructureStabilityFactor(world, pos, expLim, new Int3(0, 0, 0)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaStructureParameters.java b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaStructureParameters.java deleted file mode 100644 index 2ecd32c4..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaStructureParameters.java +++ /dev/null @@ -1,15 +0,0 @@ -package WayofTime.alchemicalWizardry.common.omega; - -public class OmegaStructureParameters -{ - public final int stability; - public final int enchantability; - public final int enchantmentLevel; - - public OmegaStructureParameters(int stability, int enchantability, int enchantmentLevel) - { - this.stability = stability; - this.enchantability = enchantability; - this.enchantmentLevel = enchantmentLevel; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/omega/ReagentRegenConfiguration.java b/src/main/java/WayofTime/alchemicalWizardry/common/omega/ReagentRegenConfiguration.java deleted file mode 100644 index 0c6d4df1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/omega/ReagentRegenConfiguration.java +++ /dev/null @@ -1,15 +0,0 @@ -package WayofTime.alchemicalWizardry.common.omega; - -public class ReagentRegenConfiguration -{ - public int tickRate; - public int healPerTick; - public float costPerPoint; - - public ReagentRegenConfiguration(int tickRate, int healPerTick, float costPerPoint) - { - this.tickRate = tickRate; - this.healPerTick = healPerTick; - this.costPerPoint = costPerPoint; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/potion/PotionBloodMagic.java b/src/main/java/WayofTime/alchemicalWizardry/common/potion/PotionBloodMagic.java deleted file mode 100644 index 4b86628d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/potion/PotionBloodMagic.java +++ /dev/null @@ -1,19 +0,0 @@ -package WayofTime.alchemicalWizardry.common.potion; - -import net.minecraft.potion.Potion; -import net.minecraft.util.ResourceLocation; - -public class PotionBloodMagic extends Potion -{ - public PotionBloodMagic(int par1, boolean par2, int par3) - { - super(par1, new ResourceLocation("speed"),par2, par3); - } - - @Override - public Potion setIconIndex(int par1, int par2) - { - super.setIconIndex(par1, par2); - return this; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/AlchemyCircleRenderer.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/AlchemyCircleRenderer.java deleted file mode 100644 index 29185083..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/AlchemyCircleRenderer.java +++ /dev/null @@ -1,88 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer; - -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.WorldRenderer; -import net.minecraft.util.ResourceLocation; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.api.renderer.MRSRenderer; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; - -public class AlchemyCircleRenderer extends MRSRenderer -{ - private ResourceLocation resourceLocation = new ResourceLocation("alchemicalwizardry:textures/models/TransCircle.png"); - private int colourRed; - private int colourGreen; - private int colourBlue; - private int colourIntensity; - private double xOffset; - private double yOffset; - private double zOffset; - private double radius; - private double initialY; - private boolean renderWithoutReagents; - - public AlchemyCircleRenderer(ResourceLocation resource, int red, int green, int blue, int intensity, double xOff, double initialY, double yOff, double zOff, double radius, boolean renderWithoutReagents) - { - this.resourceLocation = resource; - this.colourRed = red; - this.colourGreen = green; - this.colourBlue = blue; - this.colourIntensity = intensity; - this.xOffset = xOff; - this.initialY = initialY; - this.yOffset = yOff; - this.zOffset = zOff; - this.radius = radius; - this.renderWithoutReagents = renderWithoutReagents; - } - - @Override - public void renderAt(IMasterRitualStone tile, double x, double y, double z) - { - if (tile.areTanksEmpty() && !renderWithoutReagents) - { - return; - } - - GL11.glPushMatrix(); - Tessellator tessellator = Tessellator.getInstance(); - this.bindTexture(resourceLocation); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, 10497.0F); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, 10497.0F); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); -// GL11.glEnable(GL11.GL_BLEND); -// GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - -// GL11.glDepthMask(false); - - WorldRenderer wr = tessellator.getWorldRenderer(); - wr.startDrawingQuads(); - wr.func_178961_b(colourRed, colourGreen, colourBlue, colourIntensity); - - GL11.glTranslated(x + 0.5 + xOffset, y + 0.5 + (yOffset - initialY) * (tile.getRunningTime() / 100d) + initialY, z + 0.5 + zOffset); - - float rotationAngle = (float) (720.0 * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL); - - GL11.glRotatef(rotationAngle, 0F, 1F, 0F); //Rotate on planar axis -// tessellator.setBrightness(240); - - double finalRadius = (radius) * (tile.getRunningTime() / 100d); - - wr.addVertexWithUV(-finalRadius, 0, -finalRadius, 0.0d, 0.0d); - wr.addVertexWithUV(finalRadius, 0, -finalRadius, 1.0d, 0.0d); - wr.addVertexWithUV(finalRadius, 0, finalRadius, 1.0d, 1.0d); - wr.addVertexWithUV(-finalRadius, 0, finalRadius, 0.0d, 1.0d); - - tessellator.draw(); - -// GL11.glDepthMask(true); - - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_TEXTURE_2D); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - GL11.glPopMatrix(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderAlchemicalCalcinator.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderAlchemicalCalcinator.java deleted file mode 100644 index defed192..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderAlchemicalCalcinator.java +++ /dev/null @@ -1,201 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block; - -import WayofTime.alchemicalWizardry.common.tileEntity.TEAlchemicalCalcinator; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.WorldRenderer; -import net.minecraft.client.renderer.entity.RenderItem; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.client.FMLClientHandler; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainerInfo; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; -import WayofTime.alchemicalWizardry.common.renderer.model.ModelAlchemicalCalcinator; - -public class RenderAlchemicalCalcinator extends TileEntitySpecialRenderer -{ - private final RenderItem customRenderItem; - private ModelAlchemicalCalcinator modelConduit = new ModelAlchemicalCalcinator(); - - private ResourceLocation resourceLocation = new ResourceLocation("alchemicalwizardry:textures/models/Reagent.png"); - - public RenderAlchemicalCalcinator() - { - customRenderItem = Minecraft.getMinecraft().getRenderItem(); - } - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f, int i) - { - if (tileEntity instanceof TEAlchemicalCalcinator) - { - TEAlchemicalCalcinator tileAltar = (TEAlchemicalCalcinator) tileEntity; - - GL11.glPushMatrix(); - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - ResourceLocation test = new ResourceLocation("alchemicalwizardry:textures/models/AlchemicalCalcinator.png"); - FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); - GL11.glPushMatrix(); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - this.modelConduit.render(null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); - GL11.glPopMatrix(); - - GL11.glPushMatrix(); - - if (tileAltar.getStackInSlot(1) != null) - { - float scaleFactor = getGhostItemScaleFactor(tileAltar.getStackInSlot(1)); - EntityItem ghostEntityItem = new EntityItem(tileAltar.getWorld()); - ghostEntityItem.hoverStart = 0.0F; - ghostEntityItem.setEntityItemStack(tileAltar.getStackInSlot(1)); - float displacement = 0.2F; - - if (ghostEntityItem.getEntityItem().getItem() instanceof ItemBlock) - { - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + displacement + 0.7F, (float) d2 + 0.5F); - } else - { - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + displacement + 10.4f / 16.0f, (float) d2 + 0.5F - 0.0625f * 2f); - } - GL11.glScalef(scaleFactor, scaleFactor, scaleFactor); - - if (!(ghostEntityItem.getEntityItem().getItem() instanceof ItemBlock)) - { - GL11.glRotatef(90f, 1.0f, 0.0f, 0.0F); - } - - customRenderItem.func_175043_b(ghostEntityItem.getEntityItem()); //renderItemModel - } - - - GL11.glPopMatrix(); - GL11.glPushMatrix(); - - if (tileAltar.getStackInSlot(0) != null) - { - float scaleFactor = getGhostItemScaleFactor(tileAltar.getStackInSlot(0)); - EntityItem ghostEntityItem = new EntityItem(tileAltar.getWorld()); - ghostEntityItem.hoverStart = 0.0F; - ghostEntityItem.setEntityItemStack(tileAltar.getStackInSlot(0)); - float displacement = -0.5F; - - if (ghostEntityItem.getEntityItem().getItem() instanceof ItemBlock) - { - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + displacement + 0.7F, (float) d2 + 0.5F); - } else - { - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + displacement + 10.4f / 16.0f, (float) d2 + 0.5F - 0.0625f * 2f); - } - GL11.glScalef(scaleFactor, scaleFactor, scaleFactor); - - if (!(ghostEntityItem.getEntityItem().getItem() instanceof ItemBlock)) - { - GL11.glRotatef(90f, 1.0f, 0.0f, 0.0F); - } - - customRenderItem.func_175043_b(ghostEntityItem.getEntityItem()); //renderItemModel - } - - GL11.glPopMatrix(); - - - ReagentContainerInfo[] info = tileAltar.getContainerInfo(EnumFacing.UP); - if (info.length >= 1 && info[0] != null) - { - ReagentStack reagentStack = info[0].reagent; - int capacity = info[0].capacity; - if (reagentStack != null && reagentStack.reagent != null) - { - Reagent reagent = reagentStack.reagent; - this.renderTankContents(d0, d1, d2, reagent.getColourRed(), reagent.getColourGreen(), reagent.getColourBlue(), 200 * reagentStack.amount / capacity); - } - } - } - } - - private void renderTankContents(double x, double y, double z, int colourRed, int colourGreen, int colourBlue, int colourIntensity) - { - GL11.glPushMatrix(); - Tessellator tessellator = Tessellator.getInstance(); - this.bindTexture(resourceLocation); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, 10497.0F); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, 10497.0F); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - - GL11.glDepthMask(false); - - WorldRenderer wr = tessellator.getWorldRenderer(); - wr.startDrawingQuads(); - wr.func_178961_b(colourRed, colourGreen, colourBlue, colourIntensity); //setCoulourRGBA - GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); - wr.func_178963_b(240); //setBrightness - - double x1 = -7d / 16d; - double x2 = 7d / 16d; - double y1 = 1d / 16d; - double y2 = 5d / 16d; - double z1 = -7d / 16d; - double z2 = 7d / 16d; - - double resx1 = 0.0d; - double resx2 = 0.0d; - double resy1 = 1.0d; - double resy2 = 1.0d; - - wr.addVertexWithUV(x1, y1, z1, resx1, resy1); - wr.addVertexWithUV(x2, y1, z1, resx2, resy1); - wr.addVertexWithUV(x2, y2, z1, resx2, resy2); - wr.addVertexWithUV(x1, y2, z1, resx1, resy2); - wr.addVertexWithUV(x1, y1, z1, resx1, resy1); - wr.addVertexWithUV(x1, y1, z2, resx2, resy1); - wr.addVertexWithUV(x1, y2, z2, resx2, resy2); - wr.addVertexWithUV(x1, y2, z1, resx1, resy2); - wr.addVertexWithUV(x1, y1, z2, resx1, resy1); - wr.addVertexWithUV(x2, y1, z2, resx2, resy1); - wr.addVertexWithUV(x2, y2, z2, resx2, resy2); - wr.addVertexWithUV(x1, y2, z2, resx1, resy2); - wr.addVertexWithUV(x2, y1, z1, resx1, resy1); - wr.addVertexWithUV(x2, y1, z2, resx2, resy1); - wr.addVertexWithUV(x2, y2, z2, resx2, resy2); - wr.addVertexWithUV(x2, y2, z1, resx1, resy2); - tessellator.draw(); - - GL11.glDepthMask(true); - - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_TEXTURE_2D); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - GL11.glPopMatrix(); - } - - private float getGhostItemScaleFactor(ItemStack itemStack) - { - float scaleFactor = 1.5F; - - if (itemStack != null) - { - if (itemStack.getItem() instanceof ItemBlock) - { - return 0.90F * scaleFactor; - } else - { - return 0.65F * scaleFactor; - } - } - - return scaleFactor; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderAltar.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderAltar.java deleted file mode 100644 index 6f1294a2..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderAltar.java +++ /dev/null @@ -1,80 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.entity.RenderItem; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.common.renderer.model.ModelBloodAltar; -import WayofTime.alchemicalWizardry.common.tileEntity.TEAltar; - -public class RenderAltar extends TileEntitySpecialRenderer -{ - private ModelBloodAltar modelBloodAltar = new ModelBloodAltar(); - private final RenderItem customRenderItem; - - public RenderAltar() - { - customRenderItem = Minecraft.getMinecraft().getRenderItem(); - } - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f, int i) - { - modelBloodAltar.renderBloodAltar((TEAltar) tileEntity, d0, d1, d2); - modelBloodAltar.renderBloodLevel((TEAltar) tileEntity, d0, d1, d2); - - if (tileEntity instanceof TEAltar) - { - TEAltar tileAltar = (TEAltar) tileEntity; - GL11.glPushMatrix(); - - if (tileAltar.getStackInSlot(0) != null) - { - float scaleFactor = getGhostItemScaleFactor(tileAltar.getStackInSlot(0)); - float rotationAngle = Minecraft.getMinecraft().gameSettings.fancyGraphics ? (float) (720.0 * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL) : 0; - EntityItem ghostEntityItem = new EntityItem(tileAltar.getWorld()); - ghostEntityItem.hoverStart = 0.0F; - ghostEntityItem.setEntityItemStack(tileAltar.getStackInSlot(0)); - float displacement = 0.2F; - - if (ghostEntityItem.getEntityItem().getItem() instanceof ItemBlock) - { - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + displacement + 0.7F, (float) d2 + 0.5F); - } else - { - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + displacement + 0.6F, (float) d2 + 0.5F); - } - GL11.glScalef(scaleFactor, scaleFactor, scaleFactor); - GL11.glRotatef(rotationAngle, 0.0F, 1.0F, 0.0F); - customRenderItem.func_175043_b(ghostEntityItem.getEntityItem()); //renderItemModel - } - - GL11.glPopMatrix(); - } - } - - private float getGhostItemScaleFactor(ItemStack itemStack) - { - float scaleFactor = 1.0F; - - if (itemStack != null) - { - if (itemStack.getItem() instanceof ItemBlock) - { - return 0.9f; - } else - { - return 0.65f; - } - } - - return scaleFactor; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderChemistrySet.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderChemistrySet.java deleted file mode 100644 index cc3aa790..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderChemistrySet.java +++ /dev/null @@ -1,166 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block; - -import WayofTime.alchemicalWizardry.common.tileEntity.TEChemistrySet; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.entity.RenderItem; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.client.FMLClientHandler; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.common.renderer.model.ModelChemistrySet; - -public class RenderChemistrySet extends TileEntitySpecialRenderer -{ - private ModelChemistrySet modelChemistrySet = new ModelChemistrySet(); - private final RenderItem customRenderItem; - - public RenderChemistrySet() - { - customRenderItem = Minecraft.getMinecraft().getRenderItem(); - } - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f, int a) - { - if (tileEntity instanceof TEChemistrySet) - { - TEChemistrySet tileAltar = (TEChemistrySet) tileEntity; - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - ResourceLocation test = new ResourceLocation("alchemicalwizardry:textures/models/WritingTable.png"); - FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); - GL11.glPushMatrix(); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - this.modelChemistrySet.render(null, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); - GL11.glPopMatrix(); - - for (int i = 1; i <= 6; i++) - { - GL11.glPushMatrix(); - GL11.glEnable(GL11.GL_LIGHTING); - if (tileAltar.getStackInSlot(i) != null) - { - float scaleFactor = getGhostItemScaleFactor(tileAltar.getStackInSlot(i)); - float rotationAngle = Minecraft.getMinecraft().gameSettings.fancyGraphics ? (float) (720.0 * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL) : 0; - EntityItem ghostEntityItem = new EntityItem(tileAltar.getWorld()); - ghostEntityItem.hoverStart = 0.0F; - ghostEntityItem.setEntityItemStack(tileAltar.getStackInSlot(i)); - float displacementX = getXDisplacementForSlot(i); - float displacementY = getYDisplacementForSlot(i); - float displacementZ = getZDisplacementForSlot(i); - - if (ghostEntityItem.getEntityItem().getItem() instanceof ItemBlock) - { - GL11.glTranslatef((float) d0 + 0.5F + displacementX, (float) d1 + displacementY + 0.7F, (float) d2 + 0.5F + displacementZ); - } else - { - GL11.glTranslatef((float) d0 + 0.5F + displacementX, (float) d1 + displacementY + 0.6F, (float) d2 + 0.5F + displacementZ); - } - GL11.glScalef(scaleFactor, scaleFactor, scaleFactor); - GL11.glRotatef(rotationAngle, 0.0F, 1.0F, 0.0F); - customRenderItem.func_175043_b(ghostEntityItem.getEntityItem()); //renderItemModel - } - - GL11.glPopMatrix(); - } - } - } - - private float getGhostItemScaleFactor(ItemStack itemStack) - { - float scaleFactor = 0.8F; - - if (itemStack != null) - { - if (itemStack.getItem() instanceof ItemBlock) - { - return 0.9f * scaleFactor; - } else - { - return 0.65F * scaleFactor; - } - } - - return scaleFactor; - } - - private float getXDisplacementForSlot(int slot) - { - switch (slot) - { - case 0: - return 0.0f; - - case 1: - return -0.375f; - - case 2: - return -0.125f; - - case 3: - return 0.3125f; - - case 4: - return 0.3125f; - - case 5: - return -0.125f; - - default: - return 0.0f; - } - } - - private float getYDisplacementForSlot(int slot) - { - switch (slot) - { - case 0: - return 0.4f; - - case 1: - return -0.35f; - - case 6: - return 0.4f; - - default: - return -0.35f; - } - } - - private float getZDisplacementForSlot(int slot) - { - switch (slot) - { - case 0: - return 0.0f; - - case 1: - return 0.0f; - - case 2: - return 0.375f; - - case 3: - return 0.25f; - - case 4: - return -0.25f; - - case 5: - return -0.375f; - - default: - return 0.0f; - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderConduit.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderConduit.java deleted file mode 100644 index 2eb6d20a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderConduit.java +++ /dev/null @@ -1,34 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block; - -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.client.FMLClientHandler; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.common.renderer.model.ModelConduit; -import WayofTime.alchemicalWizardry.common.tileEntity.TEConduit; - -public class RenderConduit extends TileEntitySpecialRenderer -{ - private ModelConduit modelConduit = new ModelConduit(); - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f, int i) - { - if (tileEntity instanceof TEConduit) - { - TEConduit tileConduit = (TEConduit) tileEntity; - GL11.glPushMatrix(); - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - ResourceLocation test = new ResourceLocation("alchemicalwizardry:textures/models/Conduit.png"); - FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); - GL11.glPushMatrix(); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - this.modelConduit.render(null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, tileConduit.getInputDirection(), tileConduit.getOutputDirection()); - GL11.glPopMatrix(); - GL11.glPopMatrix(); - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderCrystalBelljar.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderCrystalBelljar.java deleted file mode 100644 index 2330212b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderCrystalBelljar.java +++ /dev/null @@ -1,115 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block; - -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.WorldRenderer; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.client.FMLClientHandler; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainerInfo; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; -import WayofTime.alchemicalWizardry.common.renderer.model.ModelCrystalBelljar; -import WayofTime.alchemicalWizardry.common.tileEntity.TEBelljar; - -public class RenderCrystalBelljar extends TileEntitySpecialRenderer -{ - private ModelCrystalBelljar modelConduit = new ModelCrystalBelljar(); - - private ResourceLocation resourceLocation = new ResourceLocation("alchemicalwizardry:textures/models/Reagent.png"); - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f, int i) - { - if (tileEntity instanceof TEBelljar) - { - TEBelljar tileAltar = (TEBelljar) tileEntity; - GL11.glPushMatrix(); - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - ResourceLocation test = new ResourceLocation("alchemicalwizardry:textures/models/CrystalBelljar.png"); - FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); - GL11.glPushMatrix(); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - this.modelConduit.render(null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); - GL11.glPopMatrix(); - - ReagentContainerInfo[] info = tileAltar.getContainerInfo(EnumFacing.UP); - if (info.length >= 1 && info[0] != null) - { - ReagentStack reagentStack = info[0].reagent; - int capacity = info[0].capacity; - if (reagentStack != null && reagentStack.reagent != null) - { - Reagent reagent = reagentStack.reagent; - this.renderTankContents(d0, d1, d2, reagent.getColourRed(), reagent.getColourGreen(), reagent.getColourBlue(), 200 * reagentStack.amount / capacity); - } - } - } - } - - private void renderTankContents(double x, double y, double z, int colourRed, int colourGreen, int colourBlue, int colourIntensity) - { - GL11.glPushMatrix(); - Tessellator tessellator = Tessellator.getInstance(); - this.bindTexture(resourceLocation); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, 10497.0F); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, 10497.0F); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glDepthMask(false); - WorldRenderer wr = tessellator.getWorldRenderer(); - wr.startDrawingQuads(); - wr.func_178961_b(colourRed, colourGreen, colourBlue, colourIntensity); //setColourRGBA - GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); - wr.func_178963_b(240); //setBrightness - - double x1 = -4d / 16d; - double x2 = 4d / 16d; - double y1 = -6d / 16d; - double y2 = 4d / 16d; - double z1 = -4d / 16d; - double z2 = 4d / 16d; - - double resx1 = 0.0d; - double resx2 = 0.0d; - double resy1 = 1.0d; - double resy2 = 1.0d; - - wr.addVertexWithUV(x1, y1, z1, resx1, resy1); - wr.addVertexWithUV(x2, y1, z1, resx2, resy1); - wr.addVertexWithUV(x2, y2, z1, resx2, resy2); - wr.addVertexWithUV(x1, y2, z1, resx1, resy2); - wr.addVertexWithUV(x1, y1, z1, resx1, resy1); - wr.addVertexWithUV(x1, y1, z2, resx2, resy1); - wr.addVertexWithUV(x1, y2, z2, resx2, resy2); - wr.addVertexWithUV(x1, y2, z1, resx1, resy2); - wr.addVertexWithUV(x1, y1, z2, resx1, resy1); - wr.addVertexWithUV(x2, y1, z2, resx2, resy1); - wr.addVertexWithUV(x2, y2, z2, resx2, resy2); - wr.addVertexWithUV(x1, y2, z2, resx1, resy2); - wr.addVertexWithUV(x2, y1, z1, resx1, resy1); - wr.addVertexWithUV(x2, y1, z2, resx2, resy1); - wr.addVertexWithUV(x2, y2, z2, resx2, resy2); - wr.addVertexWithUV(x2, y2, z1, resx1, resy2); - wr.addVertexWithUV(x1, y2, z1, resx1, resy1); - wr.addVertexWithUV(x2, y2, z1, resx2, resy1); - wr.addVertexWithUV(x2, y2, z2, resx2, resy2); - wr.addVertexWithUV(x1, y2, z2, resx1, resy2); - tessellator.draw(); - - GL11.glDepthMask(true); - - GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_TEXTURE_2D); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - GL11.glPopMatrix(); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderMasterStone.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderMasterStone.java deleted file mode 100644 index 8ef4f8ff..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderMasterStone.java +++ /dev/null @@ -1,25 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block; - -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.tileentity.TileEntity; -import WayofTime.alchemicalWizardry.api.renderer.MRSRenderer; -import WayofTime.alchemicalWizardry.api.rituals.Rituals; -import WayofTime.alchemicalWizardry.common.tileEntity.TEMasterStone; - -public class RenderMasterStone extends TileEntitySpecialRenderer -{ - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f, int i) - { - if (tileEntity instanceof TEMasterStone) - { - String str = ((TEMasterStone) tileEntity).getCurrentRitual(); - MRSRenderer renderer = Rituals.getRendererForKey(str); - - if (renderer != null) - { - renderer.renderAt(((TEMasterStone) tileEntity), d0, d1, d2); - } - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderPedestal.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderPedestal.java deleted file mode 100644 index 21e05777..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderPedestal.java +++ /dev/null @@ -1,97 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.entity.RenderItem; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.client.FMLClientHandler; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.common.renderer.model.ModelPedestal; -import WayofTime.alchemicalWizardry.common.tileEntity.TEPedestal; - -public class RenderPedestal extends TileEntitySpecialRenderer -{ - private ModelPedestal modelPedestal = new ModelPedestal(); - private final RenderItem customRenderItem; - - public RenderPedestal() - { - customRenderItem = Minecraft.getMinecraft().getRenderItem(); - } - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f, int i) - { - if (tileEntity instanceof TEPedestal) - { - TEPedestal tileAltar = (TEPedestal) tileEntity; - GL11.glPushMatrix(); - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - ResourceLocation test = new ResourceLocation("alchemicalwizardry:textures/models/Pedestal.png"); - FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); - GL11.glPushMatrix(); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - this.modelPedestal.render(null, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); - GL11.glPopMatrix(); - GL11.glPushMatrix(); - - if (tileAltar.getStackInSlot(0) != null) - { - float scaleFactor = getGhostItemScaleFactor(tileAltar.getStackInSlot(0)); - float rotationAngle = (float) (720.0 * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL); - EntityItem ghostEntityItem = new EntityItem(tileAltar.getWorld()); - ghostEntityItem.hoverStart = 0.0F; - ghostEntityItem.setEntityItemStack(tileAltar.getStackInSlot(0)); - float displacement = 0.2F; - - if (ghostEntityItem.getEntityItem().getItem() instanceof ItemBlock) - { - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + displacement + 0.7F, (float) d2 + 0.5F); - } else - { - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + displacement + 0.6F, (float) d2 + 0.5F); - } - GL11.glScalef(scaleFactor, scaleFactor, scaleFactor); - GL11.glRotatef(rotationAngle, 0.0F, 1.0F, 0.0F); - customRenderItem.func_175043_b(ghostEntityItem.getEntityItem()); //renderItemModel - } - - GL11.glPopMatrix(); - - - GL11.glPushMatrix(); - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - - FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); - GL11.glPushMatrix(); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - GL11.glPopMatrix(); - GL11.glPopMatrix(); - } - } - - private float getGhostItemScaleFactor(ItemStack itemStack) - { - float scaleFactor = 1.0F; - - if (itemStack != null) - { - if (itemStack.getItem() instanceof ItemBlock) - { - return 0.9f; - } else - { - return 0.65f; - } - } - - return scaleFactor; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderPlinth.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderPlinth.java deleted file mode 100644 index 759c6e97..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderPlinth.java +++ /dev/null @@ -1,91 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.entity.RenderItem; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.client.FMLClientHandler; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.common.renderer.model.ModelPlinth; -import WayofTime.alchemicalWizardry.common.tileEntity.TEPlinth; - -public class RenderPlinth extends TileEntitySpecialRenderer -{ - private ModelPlinth modelPlinth = new ModelPlinth(); - private final RenderItem customRenderItem; - - public RenderPlinth() - { - customRenderItem = Minecraft.getMinecraft().getRenderItem(); - } - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f, int i) - { - if (tileEntity instanceof TEPlinth) - { - TEPlinth tileAltar = (TEPlinth) tileEntity; - GL11.glPushMatrix(); - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - ResourceLocation test = new ResourceLocation("alchemicalwizardry:textures/models/Plinth.png"); - FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); - GL11.glPushMatrix(); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - this.modelPlinth.render(null, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); - GL11.glPopMatrix(); - GL11.glPushMatrix(); - - if (tileAltar.getStackInSlot(0) != null) - { - float scaleFactor = getGhostItemScaleFactor(tileAltar.getStackInSlot(0)); - EntityItem ghostEntityItem = new EntityItem(tileAltar.getWorld()); - ghostEntityItem.hoverStart = 0.0F; - ghostEntityItem.setEntityItemStack(tileAltar.getStackInSlot(0)); - float displacement = 0.2F; - - if (ghostEntityItem.getEntityItem().getItem() instanceof ItemBlock) - { - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + displacement + 0.7F, (float) d2 + 0.5F); - } else - { - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + displacement + 10.4f / 16.0f, (float) d2 + 0.5F - 0.1875f); - } - GL11.glScalef(scaleFactor, scaleFactor, scaleFactor); - - if (!(ghostEntityItem.getEntityItem().getItem() instanceof ItemBlock)) - { - GL11.glRotatef(90f, 1.0f, 0.0f, 0.0F); - } - - customRenderItem.func_175043_b(ghostEntityItem.getEntityItem()); //renderItemModel - } - - GL11.glPopMatrix(); - } - } - - private float getGhostItemScaleFactor(ItemStack itemStack) - { - float scaleFactor = 2.0F / 0.9F; - - if (itemStack != null) - { - if (itemStack.getItem() instanceof ItemBlock) - { - return 0.9f * scaleFactor; - } else - { - return 0.65f * scaleFactor; - } - } - - return scaleFactor; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderReagentConduit.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderReagentConduit.java deleted file mode 100644 index 6fbd6266..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderReagentConduit.java +++ /dev/null @@ -1,62 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block; - -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.WorldRenderer; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.ResourceLocation; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.api.Int3; -import WayofTime.alchemicalWizardry.common.tileEntity.TEReagentConduit; - -public class RenderReagentConduit extends TileEntitySpecialRenderer -{ - private static final ResourceLocation field_110629_a = new ResourceLocation("alchemicalwizardry:textures/models/SimpleTransCircle.png"); - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f, int i) - { - if (tileEntity instanceof TEReagentConduit) - { - int renderCount = ((TEReagentConduit) tileEntity).renderCount; - BlockPos pos = tileEntity.getPos(); - float key1 = (pos.getX() * 54f - pos.getY() * 38.72f + pos.getZ() * 10.432f); - float key2 = (pos.getX() * 21.43f - pos.getY() * 9.96f + pos.getZ() * 12.8f); - Int3 colourMap = ((TEReagentConduit) tileEntity).getColour(); - GL11.glPushMatrix(); - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer wr = tessellator.getWorldRenderer(); - this.bindTexture(field_110629_a); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, 10497.0F); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, 10497.0F); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glDepthMask(false); - wr.startDrawingQuads(); - wr.func_178961_b(colourMap.xCoord, colourMap.yCoord, colourMap.zCoord, 200); - GL11.glTranslated(d0 + 0.5, d1 + 0.5, d2 + 0.5); - GL11.glRotatef(tileEntity.getWorld().getWorldTime() / 3.0f, 0F, 1F, 0F); //Rotate on planar axis - GL11.glRotatef(renderCount + key1, 0F, 0F, 1F); //Rotate vertical axis - GL11.glRotatef(renderCount * 2f + key2, 1F, 0F, 0F); //Rotate cylindrically - wr.func_178963_b(240); - wr.addVertexWithUV(-0.5d, 0, -0.5d, 0.0d, 0.0d); - wr.addVertexWithUV(0.5d, 0, -0.5d, 1.0d, 0.0d); - wr.addVertexWithUV(0.5d, 0, 0.5d, 1.0d, 1.0d); - wr.addVertexWithUV(-0.5d, 0, 0.5d, 0.0d, 1.0d); - - tessellator.draw(); - - GL11.glDepthMask(true); - - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_TEXTURE_2D); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - GL11.glPopMatrix(); - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEffectBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEffectBlock.java deleted file mode 100644 index e1209166..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEffectBlock.java +++ /dev/null @@ -1,38 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block; - -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.client.FMLClientHandler; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.common.renderer.model.ModelSpellEffectBlock; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpellEffectBlock; - -public class RenderSpellEffectBlock extends TileEntitySpecialRenderer -{ - private ModelSpellEffectBlock modelSpellEffectBlock = new ModelSpellEffectBlock(); - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f, int i) - { - if (tileEntity instanceof TESpellEffectBlock) - { - TESpellEffectBlock tileSpellBlock = (TESpellEffectBlock) tileEntity; - GL11.glPushMatrix(); - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - ResourceLocation test; - int meta = tileEntity.getBlockMetadata(); - String resource = tileSpellBlock.getResourceLocationForMeta(meta); - test = new ResourceLocation(resource); - - FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); - GL11.glPushMatrix(); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - this.modelSpellEffectBlock.render(null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, tileSpellBlock.getInputDirection(), tileSpellBlock.getOutputDirection()); - GL11.glPopMatrix(); - GL11.glPopMatrix(); - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEnhancementBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEnhancementBlock.java deleted file mode 100644 index d07bf185..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEnhancementBlock.java +++ /dev/null @@ -1,38 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block; - -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.client.FMLClientHandler; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.common.renderer.model.ModelSpellEnhancementBlock; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpellEnhancementBlock; - -public class RenderSpellEnhancementBlock extends TileEntitySpecialRenderer -{ - private ModelSpellEnhancementBlock modelSpellEnhancementBlock = new ModelSpellEnhancementBlock(); - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f, int i) - { - if (tileEntity instanceof TESpellEnhancementBlock) - { - TESpellEnhancementBlock tileSpellBlock = (TESpellEnhancementBlock) tileEntity; - GL11.glPushMatrix(); - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - ResourceLocation test; - int meta = tileEntity.getBlockMetadata(); - String resource = tileSpellBlock.getResourceLocationForMeta(meta); - test = new ResourceLocation(resource); - - FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); - GL11.glPushMatrix(); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - this.modelSpellEnhancementBlock.render(null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, tileSpellBlock.getInputDirection(), tileSpellBlock.getOutputDirection()); - GL11.glPopMatrix(); - GL11.glPopMatrix(); - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellModifierBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellModifierBlock.java deleted file mode 100644 index 84264019..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellModifierBlock.java +++ /dev/null @@ -1,38 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block; - -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.client.FMLClientHandler; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.common.renderer.model.ModelSpellModifierBlock; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpellModifierBlock; - -public class RenderSpellModifierBlock extends TileEntitySpecialRenderer -{ - private ModelSpellModifierBlock modelSpellModifierBlock = new ModelSpellModifierBlock(); - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f, int i) - { - if (tileEntity instanceof TESpellModifierBlock) - { - TESpellModifierBlock tileSpellBlock = (TESpellModifierBlock) tileEntity; - GL11.glPushMatrix(); - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - ResourceLocation test; - int meta = tileEntity.getBlockMetadata(); - String resource = tileSpellBlock.getResourceLocationForMeta(meta); - test = new ResourceLocation(resource); - - FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); - GL11.glPushMatrix(); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - this.modelSpellModifierBlock.render(null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, tileSpellBlock.getInputDirection(), tileSpellBlock.getOutputDirection()); - GL11.glPopMatrix(); - GL11.glPopMatrix(); - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellParadigmBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellParadigmBlock.java deleted file mode 100644 index df39cd1e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellParadigmBlock.java +++ /dev/null @@ -1,38 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block; - -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.client.FMLClientHandler; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.common.renderer.model.ModelSpellParadigmBlock; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpellParadigmBlock; - -public class RenderSpellParadigmBlock extends TileEntitySpecialRenderer -{ - private ModelSpellParadigmBlock modelSpellParadigmBlock = new ModelSpellParadigmBlock(); - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f, int i) - { - if (tileEntity instanceof TESpellParadigmBlock) - { - TESpellParadigmBlock tileSpellBlock = (TESpellParadigmBlock) tileEntity; - GL11.glPushMatrix(); - GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - ResourceLocation test; - int meta = tileEntity.getBlockMetadata(); - String resource = tileSpellBlock.getResourceLocationForMeta(meta); - test = new ResourceLocation(resource); - - FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); - GL11.glPushMatrix(); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - this.modelSpellParadigmBlock.render(null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, tileSpellBlock.getInputDirection(), tileSpellBlock.getOutputDirection()); - GL11.glPopMatrix(); - GL11.glPopMatrix(); - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEAlchemicalCalcinatorItemRenderer.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEAlchemicalCalcinatorItemRenderer.java deleted file mode 100644 index 48ec3a48..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEAlchemicalCalcinatorItemRenderer.java +++ /dev/null @@ -1,78 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block.itemRender; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.IItemRenderer; -import net.minecraftforge.fml.client.FMLClientHandler; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.common.renderer.model.ModelAlchemicalCalcinator; - -public class TEAlchemicalCalcinatorItemRenderer implements IItemRenderer -{ - private ModelAlchemicalCalcinator modelConduit = new ModelAlchemicalCalcinator(); - - private void renderConduitItem(ItemStack item, float translateX, float translateY, float translateZ) - { - GL11.glPushMatrix(); - GL11.glTranslatef(translateX + 0.5F, translateY + 1.5F, translateZ + 0.5F); - ResourceLocation test = new ResourceLocation("alchemicalwizardry:textures/models/AlchemicalCalcinator.png"); - FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); - GL11.glPushMatrix(); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - this.modelConduit.render(null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); - GL11.glPopMatrix(); - } - - /** - * IItemRenderer implementation * - */ - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) - { - switch (type) - { - case ENTITY: - return true; - case EQUIPPED: - return true; - case EQUIPPED_FIRST_PERSON: - return true; - case INVENTORY: - return true; - default: - return false; - } - } - - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) - { - return true; - } - - - @Override - public void renderItem(ItemRenderType type, ItemStack item, Object... data) - { - switch (type) - { - case ENTITY: - renderConduitItem(item, -0.5f, -0.5f, -0.5f); - break; - case EQUIPPED: - renderConduitItem(item, -0.4f, 0.50f, 0.35f); - break; - case EQUIPPED_FIRST_PERSON: - renderConduitItem(item, -0.4f, 0.50f, 0.35f); - break; - case INVENTORY: - renderConduitItem(item, -0.5f, -0.5f, -0.5f); - break; - default: - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEAltarItemRenderer.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEAltarItemRenderer.java deleted file mode 100644 index dd3385fe..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEAltarItemRenderer.java +++ /dev/null @@ -1,68 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block.itemRender; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.IItemRenderer; -import net.minecraftforge.fml.client.FMLClientHandler; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.common.renderer.model.ModelBloodAltar; - -public class TEAltarItemRenderer implements IItemRenderer -{ - private ModelBloodAltar modelBloodAltar; - - public TEAltarItemRenderer() - { - modelBloodAltar = new ModelBloodAltar(); - } - - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) - { - return true; - } - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) - { - return true; - } - - @Override - public void renderItem(ItemRenderType type, ItemStack item, Object... data) - { - float scale = 0.08f; - switch (type) - { - case ENTITY: - renderBloodAltar(item, 0, 0, 0, scale); - break; - case EQUIPPED: - renderBloodAltar(item, 0, 0, 0.5f, scale); - break; - case EQUIPPED_FIRST_PERSON: - renderBloodAltar(item, +0.5f, 0.5f, +0.5f, scale); - break; - case INVENTORY: - renderBloodAltar(item, -0.5f, -0.75f, -0.5f, scale); - break; - - default: - return; - } - } - - private void renderBloodAltar(ItemStack item, float x, float y, float z, float scale) - { - GL11.glPushMatrix(); - GL11.glTranslatef(x, y, z); - GL11.glScalef(scale, scale, scale); - GL11.glRotatef(180f, 0f, 1f, 0f); - ResourceLocation test = new ResourceLocation("alchemicalwizardry:textures/models/altar.png"); - FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); - modelBloodAltar.renderBloodAltar(); - GL11.glPopMatrix(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEBellJarItemRenderer.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEBellJarItemRenderer.java deleted file mode 100644 index 4c35bb2c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEBellJarItemRenderer.java +++ /dev/null @@ -1,180 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block.itemRender; - -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.WorldRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.IItemRenderer; -import net.minecraftforge.fml.client.FMLClientHandler; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainerInfo; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; -import WayofTime.alchemicalWizardry.common.renderer.model.ModelCrystalBelljar; -import WayofTime.alchemicalWizardry.common.tileEntity.TEBelljar; - -public class TEBellJarItemRenderer implements IItemRenderer -{ - private ModelCrystalBelljar modelConduit = new ModelCrystalBelljar(); - private ResourceLocation mainResource = new ResourceLocation("alchemicalwizardry:textures/models/CrystalBelljar.png"); - private ResourceLocation resourceLocation = new ResourceLocation("alchemicalwizardry:textures/models/Reagent.png"); - - private void renderConduitItem(ItemStack item, float translateX, float translateY, float translateZ) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float) translateX + 0.5F, (float) translateY + 1.5F, (float) translateZ + 0.5F); - FMLClientHandler.instance().getClient().renderEngine.bindTexture(mainResource); - GL11.glPushMatrix(); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - this.modelConduit.renderSpecialItem((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, 0); - GL11.glPopMatrix(); - GL11.glPopMatrix(); - - ReagentContainerInfo[] info = TEBelljar.getContainerInfoFromItem(item); - if (info.length >= 1 && info[0] != null) - { - ReagentStack reagentStack = info[0].reagent; - int capacity = info[0].capacity; - if (reagentStack != null && reagentStack.reagent != null) - { - Reagent reagent = reagentStack.reagent; - this.renderTankContents(translateX, translateY, translateZ, reagent.getColourRed(), reagent.getColourGreen(), reagent.getColourBlue(), 200 * reagentStack.amount / capacity); - } - } - - GL11.glEnable(GL11.GL_BLEND); - GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - - GL11.glPushMatrix(); - GL11.glTranslatef((float) translateX + 0.5F, (float) translateY + 1.5F, (float) translateZ + 0.5F); - FMLClientHandler.instance().getClient().renderEngine.bindTexture(mainResource); - GL11.glPushMatrix(); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - this.modelConduit.renderSpecialItem((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, 1); - GL11.glPopMatrix(); - GL11.glPopMatrix(); - - GL11.glDisable(GL11.GL_CULL_FACE); - GL11.glDisable(GL11.GL_BLEND); - } - - private void renderTankContents(double x, double y, double z, int colourRed, int colourGreen, int colourBlue, int colourIntensity) - { - GL11.glPushMatrix(); - Tessellator tessellator = Tessellator.getInstance(); - FMLClientHandler.instance().getClient().renderEngine.bindTexture(resourceLocation); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, 10497.0F); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, 10497.0F); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); - GL11.glEnable(GL11.GL_TEXTURE_2D); - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - - GL11.glDepthMask(false); - - WorldRenderer wr = tessellator.getWorldRenderer(); - wr.startDrawingQuads(); - wr.func_178961_b(colourRed, colourGreen, colourBlue, colourIntensity); - - GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); - - wr.func_178963_b(240); - - double x1 = -4d / 16d; - double x2 = 4d / 16d; - double y1 = -6d / 16d; - double y2 = 4d / 16d; - double z1 = -4d / 16d; - double z2 = 4d / 16d; - - double resx1 = 0.0d; - double resx2 = 0.0d; - double resy1 = 1.0d; - double resy2 = 1.0d; - - wr.addVertexWithUV(x1, y1, z1, resx1, resy1); - wr.addVertexWithUV(x2, y1, z1, resx2, resy1); - wr.addVertexWithUV(x2, y2, z1, resx2, resy2); - wr.addVertexWithUV(x1, y2, z1, resx1, resy2); - wr.addVertexWithUV(x1, y1, z1, resx1, resy1); - wr.addVertexWithUV(x1, y1, z2, resx2, resy1); - wr.addVertexWithUV(x1, y2, z2, resx2, resy2); - wr.addVertexWithUV(x1, y2, z1, resx1, resy2); - wr.addVertexWithUV(x1, y1, z2, resx1, resy1); - wr.addVertexWithUV(x2, y1, z2, resx2, resy1); - wr.addVertexWithUV(x2, y2, z2, resx2, resy2); - wr.addVertexWithUV(x1, y2, z2, resx1, resy2); - wr.addVertexWithUV(x2, y1, z1, resx1, resy1); - wr.addVertexWithUV(x2, y1, z2, resx2, resy1); - wr.addVertexWithUV(x2, y2, z2, resx2, resy2); - wr.addVertexWithUV(x2, y2, z1, resx1, resy2); - wr.addVertexWithUV(x1, y2, z1, resx1, resy1); - wr.addVertexWithUV(x2, y2, z1, resx2, resy1); - wr.addVertexWithUV(x2, y2, z2, resx2, resy2); - wr.addVertexWithUV(x1, y2, z2, resx1, resy2); - tessellator.draw(); - - GL11.glDepthMask(true); - - GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_TEXTURE_2D); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - GL11.glPopMatrix(); - } - - /** - * IItemRenderer implementation * - */ - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) - { - switch (type) - { - case ENTITY: - return true; - case EQUIPPED: - return true; - case EQUIPPED_FIRST_PERSON: - return true; - case INVENTORY: - return true; - default: - return false; - } - } - - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) - { - return true; - } - - - @Override - public void renderItem(ItemRenderType type, ItemStack item, Object... data) - { - switch (type) - { - case ENTITY: - renderConduitItem(item, -0.5f, -0.5f, -0.5f); - break; - case EQUIPPED: - renderConduitItem(item, -0.4f, 0.50f, 0.35f); - break; - case EQUIPPED_FIRST_PERSON: - renderConduitItem(item, -0.4f, 0.50f, 0.35f); - break; - case INVENTORY: - renderConduitItem(item, -0.5f, -0.5f, -0.5f); - break; - default: - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEChemistrySetItemRenderer.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEChemistrySetItemRenderer.java deleted file mode 100644 index 2292f83b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEChemistrySetItemRenderer.java +++ /dev/null @@ -1,78 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block.itemRender; - -import net.minecraft.entity.Entity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.IItemRenderer; -import net.minecraftforge.fml.client.FMLClientHandler; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.common.renderer.model.ModelChemistrySet; - -public class TEChemistrySetItemRenderer implements IItemRenderer -{ - private ModelChemistrySet model; - - public TEChemistrySetItemRenderer() - { - model = new ModelChemistrySet(); - } - - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) - { - return true; - } - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) - { - return true; - } - - @Override - public void renderItem(ItemRenderType type, ItemStack item, Object... data) - { - float scale = 0.08f; - switch (type) - { - case ENTITY: - { - renderBloodAltar(0f, 0f, 0f, scale); - return; - } - - case EQUIPPED: - { - renderBloodAltar(0f, 0f, 0f, scale); - return; - } - - case INVENTORY: - { - renderBloodAltar(0f, -0.25f, 0f, scale); - return; - } - - default: - return; - } - } - - private void renderBloodAltar(float x, float y, float z, float scale) - { - GL11.glPushMatrix(); - // Disable Lighting Calculations - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glTranslatef(x, y, z); - GL11.glScalef(scale, scale, scale); - GL11.glRotatef(180f, 0f, 1f, 0f); - ResourceLocation test = new ResourceLocation("alchemicalwizardry:textures/models/WritingTable.png"); - FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); - model.render((Entity) null, 0, 0, 0, 0, 0, 0); - // Re-enable Lighting Calculations - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glPopMatrix(); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEConduitItemRenderer.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEConduitItemRenderer.java deleted file mode 100644 index 6044f3dd..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEConduitItemRenderer.java +++ /dev/null @@ -1,82 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block.itemRender; - -import net.minecraft.entity.Entity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.IItemRenderer; -import net.minecraftforge.fml.client.FMLClientHandler; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.common.renderer.model.ModelConduit; - -@SuppressWarnings("deprecation") -public class TEConduitItemRenderer implements IItemRenderer -{ - private ModelConduit modelConduit = new ModelConduit(); - - private void renderConduitItem(ItemStack item, float translateX, float translateY, float translateZ) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float) translateX + 0.5F, (float) translateY + 1.5F, (float) translateZ + 0.5F); - ResourceLocation test = new ResourceLocation("alchemicalwizardry:textures/models/Conduit.png"); - FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); - GL11.glPushMatrix(); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - this.modelConduit.render((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, EnumFacing.DOWN, EnumFacing.UP); - GL11.glPopMatrix(); - GL11.glPopMatrix(); - } - - - /** - * IItemRenderer implementation * - */ - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) - { - switch (type) - { - case ENTITY: - return true; - case EQUIPPED: - return true; - case EQUIPPED_FIRST_PERSON: - return true; - case INVENTORY: - return true; - default: - return false; - } - } - - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) - { - return true; - } - - - @Override - public void renderItem(ItemRenderType type, ItemStack item, Object... data) - { - switch (type) - { - case ENTITY: - renderConduitItem(item, -0.5f, -0.5f, -0.5f); - break; - case EQUIPPED: - renderConduitItem(item, -0.4f, 0.50f, 0.35f); - break; - case EQUIPPED_FIRST_PERSON: - renderConduitItem(item, -0.4f, 0.50f, 0.35f); - break; - case INVENTORY: - renderConduitItem(item, -0.5f, -0.5f, -0.5f); - break; - default: - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellEffectBlockItemRenderer.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellEffectBlockItemRenderer.java deleted file mode 100644 index a6d25c4a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellEffectBlockItemRenderer.java +++ /dev/null @@ -1,98 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block.itemRender; - -import net.minecraft.entity.Entity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.IItemRenderer; -import net.minecraftforge.fml.client.FMLClientHandler; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.common.renderer.model.ModelSpellEffectBlock; - -public class TESpellEffectBlockItemRenderer implements IItemRenderer -{ - private ModelSpellEffectBlock modelSpellBlock = new ModelSpellEffectBlock(); - - private void renderConduitItem(ItemStack item, float translateX, float translateY, float translateZ) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float) translateX + 0.5F, (float) translateY + 1.5F, (float) translateZ + 0.5F); - ResourceLocation test = new ResourceLocation(this.getResourceLocationForMeta(item.getItemDamage())); - - FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); - GL11.glPushMatrix(); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - this.modelSpellBlock.render((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, EnumFacing.DOWN, EnumFacing.UP); - GL11.glPopMatrix(); - GL11.glPopMatrix(); - } - - - /** - * IItemRenderer implementation * - */ - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) - { - switch (type) - { - case ENTITY: - return true; - case EQUIPPED: - return true; - case EQUIPPED_FIRST_PERSON: - return true; - case INVENTORY: - return true; - default: - return false; - } - } - - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) - { - return true; - } - - - @Override - public void renderItem(ItemRenderType type, ItemStack item, Object... data) - { - switch (type) - { - case ENTITY: - renderConduitItem(item, -0.5f, -0.5f, -0.5f); - break; - case EQUIPPED: - renderConduitItem(item, -0.4f, 0.50f, 0.35f); - break; - case EQUIPPED_FIRST_PERSON: - renderConduitItem(item, -0.4f, 0.50f, 0.35f); - break; - case INVENTORY: - renderConduitItem(item, -0.5f, -0.5f, -0.5f); - break; - default: - } - } - - public String getResourceLocationForMeta(int meta) - { - switch (meta) - { - case 0: - return "alchemicalwizardry:textures/models/SpellEffectFire.png"; - case 1: - return "alchemicalwizardry:textures/models/SpellEffectIce.png"; - case 2: - return "alchemicalwizardry:textures/models/SpellEffectWind.png"; - case 3: - return "alchemicalwizardry:textures/models/SpellEffectEarth.png"; - } - return ""; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellEnhancementBlockItemRenderer.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellEnhancementBlockItemRenderer.java deleted file mode 100644 index c0c48ed0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellEnhancementBlockItemRenderer.java +++ /dev/null @@ -1,115 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block.itemRender; - -import net.minecraft.entity.Entity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.IItemRenderer; -import net.minecraftforge.fml.client.FMLClientHandler; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.common.renderer.model.ModelSpellEnhancementBlock; - -public class TESpellEnhancementBlockItemRenderer implements IItemRenderer -{ - private ModelSpellEnhancementBlock modelSpellBlock = new ModelSpellEnhancementBlock(); - - private void renderConduitItem(ItemStack item, float translateX, float translateY, float translateZ) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float) translateX + 0.5F, (float) translateY + 1.5F, (float) translateZ + 0.5F); - ResourceLocation test = new ResourceLocation(this.getResourceLocationForMeta(item.getItemDamage())); - - FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); - GL11.glPushMatrix(); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - this.modelSpellBlock.render((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, EnumFacing.DOWN, EnumFacing.UP); - GL11.glPopMatrix(); - GL11.glPopMatrix(); - } - - - /** - * IItemRenderer implementation * - */ - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) - { - switch (type) - { - case ENTITY: - return true; - case EQUIPPED: - return true; - case EQUIPPED_FIRST_PERSON: - return true; - case INVENTORY: - return true; - default: - return false; - } - } - - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) - { - return true; - } - - - @Override - public void renderItem(ItemRenderType type, ItemStack item, Object... data) - { - switch (type) - { - case ENTITY: - renderConduitItem(item, -0.5f, -0.5f, -0.5f); - break; - case EQUIPPED: - renderConduitItem(item, -0.4f, 0.50f, 0.35f); - break; - case EQUIPPED_FIRST_PERSON: - renderConduitItem(item, -0.4f, 0.50f, 0.35f); - break; - case INVENTORY: - renderConduitItem(item, -0.5f, -0.5f, -0.5f); - break; - default: - } - } - - public String getResourceLocationForMeta(int meta) - { - switch (meta) - { - case 0: - return "alchemicalwizardry:textures/models/SpellEnhancementPower1.png"; - case 1: - return "alchemicalwizardry:textures/models/SpellEnhancementPower2.png"; - case 2: - return "alchemicalwizardry:textures/models/SpellEnhancementPower3.png"; - case 3: - return "alchemicalwizardry:textures/models/SpellEnhancementPower4.png"; - case 5: - return "alchemicalwizardry:textures/models/SpellEnhancementCost1.png"; - case 6: - return "alchemicalwizardry:textures/models/SpellEnhancementCost2.png"; - case 7: - return "alchemicalwizardry:textures/models/SpellEnhancementCost3.png"; - case 8: - return "alchemicalwizardry:textures/models/SpellEnhancementCost4.png"; - case 10: - return "alchemicalwizardry:textures/models/SpellEnhancementPotency1.png"; - case 11: - return "alchemicalwizardry:textures/models/SpellEnhancementPotency2.png"; - case 12: - return "alchemicalwizardry:textures/models/SpellEnhancementPotency3.png"; - case 13: - return "alchemicalwizardry:textures/models/SpellEnhancementPotency4.png"; - - } - return "alchemicalwizardry:textures/models/SpellEnhancementPower1.png"; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellModifierBlockItemRenderer.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellModifierBlockItemRenderer.java deleted file mode 100644 index 3ea9c791..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellModifierBlockItemRenderer.java +++ /dev/null @@ -1,98 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block.itemRender; - -import net.minecraft.entity.Entity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.IItemRenderer; -import net.minecraftforge.fml.client.FMLClientHandler; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.common.renderer.model.ModelSpellModifierBlock; - -public class TESpellModifierBlockItemRenderer implements IItemRenderer -{ - private ModelSpellModifierBlock modelSpellBlock = new ModelSpellModifierBlock(); - - private void renderConduitItem(ItemStack item, float translateX, float translateY, float translateZ) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float) translateX + 0.5F, (float) translateY + 1.5F, (float) translateZ + 0.5F); - ResourceLocation test = new ResourceLocation(this.getResourceLocationForMeta(item.getItemDamage())); - - FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); - GL11.glPushMatrix(); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - this.modelSpellBlock.render((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, EnumFacing.DOWN, EnumFacing.UP); - GL11.glPopMatrix(); - GL11.glPopMatrix(); - } - - - /** - * IItemRenderer implementation * - */ - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) - { - switch (type) - { - case ENTITY: - return true; - case EQUIPPED: - return true; - case EQUIPPED_FIRST_PERSON: - return true; - case INVENTORY: - return true; - default: - return false; - } - } - - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) - { - return true; - } - - - @Override - public void renderItem(ItemRenderType type, ItemStack item, Object... data) - { - switch (type) - { - case ENTITY: - renderConduitItem(item, -0.5f, -0.5f, -0.5f); - break; - case EQUIPPED: - renderConduitItem(item, -0.4f, 0.50f, 0.35f); - break; - case EQUIPPED_FIRST_PERSON: - renderConduitItem(item, -0.4f, 0.50f, 0.35f); - break; - case INVENTORY: - renderConduitItem(item, -0.5f, -0.5f, -0.5f); - break; - default: - } - } - - public String getResourceLocationForMeta(int meta) - { - switch (meta) - { - case 0: - return "alchemicalwizardry:textures/models/SpellModifierDefault.png"; - case 1: - return "alchemicalwizardry:textures/models/SpellModifierOffensive.png"; - case 2: - return "alchemicalwizardry:textures/models/SpellModifierDefensive.png"; - case 3: - return "alchemicalwizardry:textures/models/SpellModifierEnvironmental.png"; - } - return "alchemicalwizardry:textures/models/SpellModifierDefault.png"; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellParadigmBlockItemRenderer.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellParadigmBlockItemRenderer.java deleted file mode 100644 index 2dc201ba..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellParadigmBlockItemRenderer.java +++ /dev/null @@ -1,97 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.block.itemRender; - -import net.minecraft.entity.Entity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.IItemRenderer; -import net.minecraftforge.fml.client.FMLClientHandler; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.common.renderer.model.ModelSpellParadigmBlock; - -public class TESpellParadigmBlockItemRenderer implements IItemRenderer -{ - private ModelSpellParadigmBlock modelSpellBlock = new ModelSpellParadigmBlock(); - - private void renderConduitItem(ItemStack item, float translateX, float translateY, float translateZ) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float) translateX + 0.5F, (float) translateY + 1.5F, (float) translateZ + 0.5F); - ResourceLocation test = new ResourceLocation(this.getResourceLocationForMeta(item.getItemDamage())); - FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); - GL11.glPushMatrix(); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - this.modelSpellBlock.render((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, EnumFacing.DOWN, EnumFacing.UP); - GL11.glPopMatrix(); - GL11.glPopMatrix(); - } - - - /** - * IItemRenderer implementation * - */ - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) - { - switch (type) - { - case ENTITY: - return true; - case EQUIPPED: - return true; - case EQUIPPED_FIRST_PERSON: - return true; - case INVENTORY: - return true; - default: - return false; - } - } - - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) - { - return true; - } - - - @Override - public void renderItem(ItemRenderType type, ItemStack item, Object... data) - { - switch (type) - { - case ENTITY: - renderConduitItem(item, -0.5f, -0.5f, -0.5f); - break; - case EQUIPPED: - renderConduitItem(item, -0.4f, 0.50f, 0.35f); - break; - case EQUIPPED_FIRST_PERSON: - renderConduitItem(item, -0.4f, 0.50f, 0.35f); - break; - case INVENTORY: - renderConduitItem(item, -0.5f, -0.5f, -0.5f); - break; - default: - } - } - - public String getResourceLocationForMeta(int meta) - { - switch (meta) - { - case 0: - return "alchemicalwizardry:textures/models/SpellParadigmProjectile.png"; - case 1: - return "alchemicalwizardry:textures/models/SpellParadigmSelf.png"; - case 2: - return "alchemicalwizardry:textures/models/SpellParadigmMelee.png"; - case 3: - return "alchemicalwizardry:textures/models/SpellParadigmTool.png"; - } - return "alchemicalwizardry:textures/models/SpellParadigmProjectile.png"; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderBileDemon.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderBileDemon.java deleted file mode 100644 index a44fb4c3..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderBileDemon.java +++ /dev/null @@ -1,28 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.mob; - -import WayofTime.alchemicalWizardry.common.entity.mob.EntityBileDemon; -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.renderer.entity.RenderLiving; -import net.minecraft.entity.Entity; -import net.minecraft.util.ResourceLocation; - -public class RenderBileDemon extends RenderLiving -{ - private static final ResourceLocation field_110833_a = new ResourceLocation("alchemicalwizardry", "textures/models/BileDemon.png"); - - public RenderBileDemon(ModelBase par1ModelBase, float par2) - { - super(Minecraft.getMinecraft().getRenderManager(), par1ModelBase, par2); - } - - public ResourceLocation func_110832_a(EntityBileDemon par1EntityBileDemon) - { - return field_110833_a; - } - - public ResourceLocation getEntityTexture(Entity par1Entity) - { - return this.func_110832_a((EntityBileDemon) par1Entity); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderBoulderFist.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderBoulderFist.java deleted file mode 100644 index 4b3f1691..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderBoulderFist.java +++ /dev/null @@ -1,28 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.mob; - -import WayofTime.alchemicalWizardry.common.entity.mob.EntityBoulderFist; -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.renderer.entity.RenderLiving; -import net.minecraft.entity.Entity; -import net.minecraft.util.ResourceLocation; - -public class RenderBoulderFist extends RenderLiving -{ - private static final ResourceLocation field_110833_a = new ResourceLocation("alchemicalwizardry", "textures/models/BoulderFist.png"); - - public RenderBoulderFist(ModelBase par1ModelBase, float par2) - { - super(Minecraft.getMinecraft().getRenderManager(), par1ModelBase, par2); - } - - public ResourceLocation func_110832_a(EntityBoulderFist par1EntityBoulderFist) - { - return field_110833_a; - } - - public ResourceLocation getEntityTexture(Entity par1Entity) - { - return this.func_110832_a((EntityBoulderFist) par1Entity); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderElemental.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderElemental.java deleted file mode 100644 index 82ae9f1a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderElemental.java +++ /dev/null @@ -1,63 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.mob; - -import WayofTime.alchemicalWizardry.common.entity.mob.*; -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.renderer.entity.RenderLiving; -import net.minecraft.entity.Entity; -import net.minecraft.util.ResourceLocation; - -public class RenderElemental extends RenderLiving -{ - private static final ResourceLocation airBeacon = new ResourceLocation("alchemicalwizardry", "textures/models/AirFloatingBeacon.png"); - private static final ResourceLocation waterBeacon = new ResourceLocation("alchemicalwizardry", "textures/models/WaterFloatingBeacon.png"); - private static final ResourceLocation earthBeacon = new ResourceLocation("alchemicalwizardry", "textures/models/EarthFloatingBeacon.png"); - private static final ResourceLocation fireBeacon = new ResourceLocation("alchemicalwizardry", "textures/models/FireFloatingBeacon.png"); - private static final ResourceLocation shadeBeacon = new ResourceLocation("alchemicalwizardry", "textures/models/DarkFloatingBeacon.png"); - private static final ResourceLocation holyBeacon = new ResourceLocation("alchemicalwizardry", "textures/models/HolyFloatingBeacon.png"); - - public RenderElemental(ModelBase par1ModelBase, float par2) - { - super(Minecraft.getMinecraft().getRenderManager(), par1ModelBase, par2); - } - - public ResourceLocation func_110832_a(EntityElemental par1EntityElemental) - { - if (par1EntityElemental instanceof EntityAirElemental) - { - return airBeacon; - } - - if (par1EntityElemental instanceof EntityWaterElemental) - { - return waterBeacon; - } - - if (par1EntityElemental instanceof EntityEarthElemental) - { - return earthBeacon; - } - - if (par1EntityElemental instanceof EntityFireElemental) - { - return fireBeacon; - } - - if (par1EntityElemental instanceof EntityShadeElemental) - { - return shadeBeacon; - } - - if (par1EntityElemental instanceof EntityHolyElemental) - { - return holyBeacon; - } - - return airBeacon; - } - - public ResourceLocation getEntityTexture(Entity par1Entity) - { - return this.func_110832_a((EntityElemental) par1Entity); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderFallenAngel.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderFallenAngel.java deleted file mode 100644 index adc58c3d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderFallenAngel.java +++ /dev/null @@ -1,31 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.mob; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.renderer.entity.RenderLiving; -import net.minecraft.entity.Entity; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityFallenAngel; - -@SideOnly(Side.CLIENT) -public class RenderFallenAngel extends RenderLiving -{ - private static final ResourceLocation field_110833_a = new ResourceLocation("alchemicalwizardry", "textures/models/WingedAngel.png"); - - public RenderFallenAngel(ModelBase par1ModelBase, float par2) - { - super(Minecraft.getMinecraft().getRenderManager(), par1ModelBase, par2); - } - - public ResourceLocation func_110832_a(EntityFallenAngel par1EntityFallenAngel) - { - return field_110833_a; - } - - public ResourceLocation getEntityTexture(Entity par1Entity) - { - return this.func_110832_a((EntityFallenAngel) par1Entity); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderIceDemon.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderIceDemon.java deleted file mode 100644 index 92ea947a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderIceDemon.java +++ /dev/null @@ -1,28 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.mob; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.renderer.entity.RenderLiving; -import net.minecraft.entity.Entity; -import net.minecraft.util.ResourceLocation; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityIceDemon; - -public class RenderIceDemon extends RenderLiving -{ - private static final ResourceLocation field_110833_a = new ResourceLocation("alchemicalwizardry", "textures/models/IceDemon.png"); - - public RenderIceDemon(ModelBase par1ModelBase, float par2) - { - super(Minecraft.getMinecraft().getRenderManager(), par1ModelBase, par2); - } - - public ResourceLocation func_110832_a(EntityIceDemon par1EntityIceDemon) - { - return field_110833_a; - } - - public ResourceLocation getEntityTexture(Entity par1Entity) - { - return this.func_110832_a((EntityIceDemon) par1Entity); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderLowerGuardian.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderLowerGuardian.java deleted file mode 100644 index 7407e47f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderLowerGuardian.java +++ /dev/null @@ -1,28 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.mob; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.renderer.entity.RenderLiving; -import net.minecraft.entity.Entity; -import net.minecraft.util.ResourceLocation; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityLowerGuardian; - -public class RenderLowerGuardian extends RenderLiving -{ - private static final ResourceLocation field_110833_a = new ResourceLocation("alchemicalwizardry", "textures/models/LowerGuardian.png"); - - public RenderLowerGuardian(ModelBase par1ModelBase, float par2) - { - super(Minecraft.getMinecraft().getRenderManager(), par1ModelBase, par2); - } - - public ResourceLocation func_110832_a(EntityLowerGuardian par1EntityLowerGuardian) - { - return field_110833_a; - } - - public ResourceLocation getEntityTexture(Entity par1Entity) - { - return this.func_110832_a((EntityLowerGuardian) par1Entity); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderMinorDemonGrunt.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderMinorDemonGrunt.java deleted file mode 100644 index e975edee..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderMinorDemonGrunt.java +++ /dev/null @@ -1,50 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.mob; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.renderer.entity.RenderLiving; -import net.minecraft.entity.Entity; -import net.minecraft.util.ResourceLocation; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGrunt; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntEarth; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntFire; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntIce; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntWind; - -public class RenderMinorDemonGrunt extends RenderLiving -{ - private static final ResourceLocation normalTexture = new ResourceLocation("alchemicalwizardry", "textures/models/MinorDemonGrunt_normal.png"); - private static final ResourceLocation fireTexture = new ResourceLocation("alchemicalwizardry", "textures/models/MinorDemonGrunt_fire.png"); - private static final ResourceLocation iceTexture = new ResourceLocation("alchemicalwizardry", "textures/models/MinorDemonGrunt_ice.png"); - private static final ResourceLocation windTexture = new ResourceLocation("alchemicalwizardry", "textures/models/MinorDemonGrunt_wind.png"); - private static final ResourceLocation earthTexture = new ResourceLocation("alchemicalwizardry", "textures/models/MinorDemonGrunt_earth.png"); - - public RenderMinorDemonGrunt(ModelBase par1ModelBase, float par2) - { - super(Minecraft.getMinecraft().getRenderManager(), par1ModelBase, par2); - } - - public ResourceLocation func_110832_a(EntityMinorDemonGrunt entity) - { - if(entity instanceof EntityMinorDemonGruntFire) - { - return fireTexture; - }else if(entity instanceof EntityMinorDemonGruntWind) - { - return windTexture; - }else if(entity instanceof EntityMinorDemonGruntIce) - { - return iceTexture; - }else if(entity instanceof EntityMinorDemonGruntEarth) - { - return earthTexture; - } - - return normalTexture; - } - - public ResourceLocation getEntityTexture(Entity entity) - { - return this.func_110832_a((EntityMinorDemonGrunt) entity); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderMinorDemonGruntGuardian.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderMinorDemonGruntGuardian.java deleted file mode 100644 index ba52f114..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderMinorDemonGruntGuardian.java +++ /dev/null @@ -1,50 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.mob; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.renderer.entity.RenderLiving; -import net.minecraft.entity.Entity; -import net.minecraft.util.ResourceLocation; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardian; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianEarth; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianFire; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianIce; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianWind; - -public class RenderMinorDemonGruntGuardian extends RenderLiving -{ - private static final ResourceLocation normalTexture = new ResourceLocation("alchemicalwizardry", "textures/models/MinorDemonGruntGuardian_normal.png"); - private static final ResourceLocation fireTexture = new ResourceLocation("alchemicalwizardry", "textures/models/MinorDemonGruntGuardian_fire.png"); - private static final ResourceLocation iceTexture = new ResourceLocation("alchemicalwizardry", "textures/models/MinorDemonGruntGuardian_ice.png"); - private static final ResourceLocation windTexture = new ResourceLocation("alchemicalwizardry", "textures/models/MinorDemonGruntGuardian_wind.png"); - private static final ResourceLocation earthTexture = new ResourceLocation("alchemicalwizardry", "textures/models/MinorDemonGruntGuardian_earth.png"); - - public RenderMinorDemonGruntGuardian(ModelBase par1ModelBase, float par2) - { - super(Minecraft.getMinecraft().getRenderManager(), par1ModelBase, par2); - } - - public ResourceLocation func_110832_a(EntityMinorDemonGruntGuardian entity) - { - if(entity instanceof EntityMinorDemonGruntGuardianFire) - { - return fireTexture; - }else if(entity instanceof EntityMinorDemonGruntGuardianWind) - { - return windTexture; - }else if(entity instanceof EntityMinorDemonGruntGuardianIce) - { - return iceTexture; - }else if(entity instanceof EntityMinorDemonGruntGuardianEarth) - { - return earthTexture; - } - - return normalTexture; - } - - public ResourceLocation getEntityTexture(Entity entity) - { - return this.func_110832_a((EntityMinorDemonGruntGuardian) entity); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderShade.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderShade.java deleted file mode 100644 index b3d4a844..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderShade.java +++ /dev/null @@ -1,28 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.mob; - -import WayofTime.alchemicalWizardry.common.entity.mob.EntityShade; -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.renderer.entity.RenderLiving; -import net.minecraft.entity.Entity; -import net.minecraft.util.ResourceLocation; - -public class RenderShade extends RenderLiving -{ - private static final ResourceLocation field_110833_a = new ResourceLocation("alchemicalwizardry", "textures/models/ShadeMob.png"); - - public RenderShade(ModelBase par1ModelBase, float par2) - { - super(Minecraft.getMinecraft().getRenderManager(), par1ModelBase, par2); - } - - public ResourceLocation func_110832_a(EntityShade par1EntityShade) - { - return field_110833_a; - } - - public ResourceLocation getEntityTexture(Entity par1Entity) - { - return this.func_110832_a((EntityShade) par1Entity); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderSmallEarthGolem.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderSmallEarthGolem.java deleted file mode 100644 index 42b70f01..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderSmallEarthGolem.java +++ /dev/null @@ -1,28 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.mob; - -import WayofTime.alchemicalWizardry.common.entity.mob.EntitySmallEarthGolem; -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.renderer.entity.RenderLiving; -import net.minecraft.entity.Entity; -import net.minecraft.util.ResourceLocation; - -public class RenderSmallEarthGolem extends RenderLiving -{ - private static final ResourceLocation field_110833_a = new ResourceLocation("alchemicalwizardry", "textures/models/SmallEarthGolem.png"); - - public RenderSmallEarthGolem(ModelBase par1ModelBase, float par2) - { - super(Minecraft.getMinecraft().getRenderManager(), par1ModelBase, par2); - } - - public ResourceLocation func_110832_a(EntitySmallEarthGolem par1EntitySmallEarthGolem) - { - return field_110833_a; - } - - public ResourceLocation getEntityTexture(Entity par1Entity) - { - return this.func_110832_a((EntitySmallEarthGolem) par1Entity); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderWingedFireDemon.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderWingedFireDemon.java deleted file mode 100644 index af809551..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderWingedFireDemon.java +++ /dev/null @@ -1,28 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.mob; - -import WayofTime.alchemicalWizardry.common.entity.mob.EntityWingedFireDemon; -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.renderer.entity.RenderLiving; -import net.minecraft.entity.Entity; -import net.minecraft.util.ResourceLocation; - -public class RenderWingedFireDemon extends RenderLiving -{ - private static final ResourceLocation field_110833_a = new ResourceLocation("alchemicalwizardry", "textures/models/WingedFireDemon.png"); - - public RenderWingedFireDemon(ModelBase par1ModelBase, float par2) - { - super(Minecraft.getMinecraft().getRenderManager(), par1ModelBase, par2); - } - - public ResourceLocation func_110832_a(EntityWingedFireDemon par1EntityWingedFireDemon) - { - return field_110833_a; - } - - public ResourceLocation getEntityTexture(Entity par1Entity) - { - return this.func_110832_a((EntityWingedFireDemon) par1Entity); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelAlchemicalCalcinator.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelAlchemicalCalcinator.java deleted file mode 100644 index 1724a715..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelAlchemicalCalcinator.java +++ /dev/null @@ -1,140 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelAlchemicalCalcinator extends ModelBase -{ - //fields - ModelRenderer top1; - ModelRenderer top2; - ModelRenderer top3; - ModelRenderer top4; - ModelRenderer tank; - ModelRenderer centreCollumn; - ModelRenderer furnaceShape; - ModelRenderer glassWindow; - ModelRenderer Shape1; - ModelRenderer Shape2; - ModelRenderer Shape3; - ModelRenderer Shape4; - ModelRenderer Shape5; - - public ModelAlchemicalCalcinator() - { - textureWidth = 128; - textureHeight = 128; - - top1 = new ModelRenderer(this, 0, 34); - top1.addBox(4F, -8F, -8F, 4, 3, 16); - top1.setRotationPoint(0F, 16F, 0F); - top1.setTextureSize(128, 128); - top1.mirror = true; - setRotation(top1, 0F, 0F, 0F); - top2 = new ModelRenderer(this, 41, 34); - top2.addBox(-8F, -8F, -8F, 4, 3, 16); - top2.setRotationPoint(0F, 16F, 0F); - top2.setTextureSize(128, 128); - top2.mirror = true; - setRotation(top2, 0F, 0F, 0F); - top3 = new ModelRenderer(this, 25, 55); - top3.addBox(-4F, -8F, 4F, 8, 3, 4); - top3.setRotationPoint(0F, 16F, 0F); - top3.setTextureSize(128, 128); - top3.mirror = true; - setRotation(top3, 0F, 0F, 0F); - top4 = new ModelRenderer(this, 0, 55); - top4.addBox(-4F, -8F, -8F, 8, 3, 4); - top4.setRotationPoint(0F, 16F, 0F); - top4.setTextureSize(128, 128); - top4.mirror = true; - setRotation(top4, 0F, 0F, 0F); - tank = new ModelRenderer(this, 0, 0); - tank.addBox(-8F, -5F, -8F, 16, 4, 16); - tank.setRotationPoint(0F, 16F, 0F); - tank.setTextureSize(128, 128); - tank.mirror = true; - setRotation(tank, 0F, 0F, 0F); - centreCollumn = new ModelRenderer(this, 0, 21); - centreCollumn.addBox(-4F, -5F, -4F, 8, 4, 8); - centreCollumn.setRotationPoint(0F, 16F, 0F); - centreCollumn.setTextureSize(128, 128); - centreCollumn.mirror = true; - setRotation(centreCollumn, 0F, 0F, 0F); - furnaceShape = new ModelRenderer(this, 0, 63); - furnaceShape.addBox(-8F, -1F, -8F, 16, 5, 16); - furnaceShape.setRotationPoint(0F, 16F, 0F); - furnaceShape.setTextureSize(128, 128); - furnaceShape.mirror = true; - setRotation(furnaceShape, 0F, 0F, 0F); - glassWindow = new ModelRenderer(this, 0, 85); - glassWindow.addBox(-4F, -8F, -4F, 8, 0, 8); - glassWindow.setRotationPoint(0F, 16F, 0F); - glassWindow.setTextureSize(128, 128); - glassWindow.mirror = true; - setRotation(glassWindow, 0F, 0F, 0F); - Shape1 = new ModelRenderer(this, 0, 94); - Shape1.addBox(-8F, 4F, -8F, 4, 4, 4); - Shape1.setRotationPoint(0F, 16F, 0F); - Shape1.setTextureSize(128, 128); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); - Shape2 = new ModelRenderer(this, 0, 103); - Shape2.addBox(-4F, 6F, -4F, 8, 1, 8); - Shape2.setRotationPoint(0F, 16F, 0F); - Shape2.setTextureSize(128, 128); - Shape2.mirror = true; - setRotation(Shape2, 0F, 0F, 0F); - Shape3 = new ModelRenderer(this, 0, 94); - Shape3.addBox(4F, 4F, -8F, 4, 4, 4); - Shape3.setRotationPoint(0F, 16F, 0F); - Shape3.setTextureSize(128, 128); - Shape3.mirror = true; - setRotation(Shape3, 0F, 0F, 0F); - Shape4 = new ModelRenderer(this, 0, 94); - Shape4.addBox(-8F, 4F, 4F, 4, 4, 4); - Shape4.setRotationPoint(0F, 16F, 0F); - Shape4.setTextureSize(128, 128); - Shape4.mirror = true; - setRotation(Shape4, 0F, 0F, 0F); - Shape5 = new ModelRenderer(this, 0, 94); - Shape5.addBox(4F, 4F, 4F, 4, 4, 4); - Shape5.setRotationPoint(0F, 16F, 0F); - Shape5.setTextureSize(128, 128); - Shape5.mirror = true; - setRotation(Shape5, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - top1.render(f5); - top2.render(f5); - top3.render(f5); - top4.render(f5); - tank.render(f5); - centreCollumn.render(f5); - furnaceShape.render(f5); - glassWindow.render(f5); - Shape1.render(f5); - Shape2.render(f5); - Shape3.render(f5); - Shape4.render(f5); - Shape5.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelBileDemon.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelBileDemon.java deleted file mode 100644 index e09db58e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelBileDemon.java +++ /dev/null @@ -1,181 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.util.MathHelper; -import org.lwjgl.opengl.GL11; - -public class ModelBileDemon extends ModelBase -{ - //fields - ModelRenderer belly; - ModelRenderer chest; - ModelRenderer head; - ModelRenderer nose; - ModelRenderer leftHorn; - ModelRenderer leftArmSpacer; - ModelRenderer leftArm; - ModelRenderer leftChain; - ModelRenderer leftBall; - ModelRenderer rightHorn; - ModelRenderer rightChain; - ModelRenderer rightBall; - ModelRenderer rightArmSpacer; - ModelRenderer rightArm; - - public ModelBileDemon() - { - textureWidth = 128; - textureHeight = 64; - belly = new ModelRenderer(this, 0, 31); - belly.addBox(-8F, -1F, -10F, 16, 15, 18); - belly.setRotationPoint(0F, 10F, 0F); - belly.setTextureSize(128, 64); - belly.mirror = true; - setRotation(belly, 0F, 0F, 0F); - chest = new ModelRenderer(this, 70, 46); - chest.addBox(-7F, -4F, -6F, 14, 4, 14); - chest.setRotationPoint(0F, 10F, 0F); - chest.setTextureSize(128, 64); - chest.mirror = true; - setRotation(chest, -0.1115358F, 0F, 0F); - head = new ModelRenderer(this, 0, 0); - head.addBox(-4F, -8F, -4F, 8, 8, 8); - head.setRotationPoint(0F, 6F, 3F); - head.setTextureSize(128, 64); - head.mirror = true; - setRotation(head, 0F, 0F, 0F); - nose = new ModelRenderer(this, 0, 0); - nose.addBox(-1F, -4F, -5F, 2, 1, 1); - nose.setRotationPoint(0F, 6F, 3F); - nose.setTextureSize(128, 64); - nose.mirror = true; - setRotation(nose, 0F, 0F, 0F); - leftHorn = new ModelRenderer(this, 93, 1); - leftHorn.addBox(4F, -7F, 0F, 16, 1, 1); - leftHorn.setRotationPoint(0F, 6F, 3F); - leftHorn.setTextureSize(128, 64); - leftHorn.mirror = true; - setRotation(leftHorn, 0F, 0F, 0F); - leftArmSpacer = new ModelRenderer(this, 80, 1); - leftArmSpacer.addBox(0F, -2F, -2F, 1, 4, 4); - leftArmSpacer.setRotationPoint(7F, 8F, 3F); - leftArmSpacer.setTextureSize(128, 64); - leftArmSpacer.mirror = true; - setRotation(leftArmSpacer, 0F, 0F, 0F); - leftArm = new ModelRenderer(this, 62, 1); - leftArm.addBox(1F, -2F, -2F, 4, 18, 4); - leftArm.setRotationPoint(7F, 8F, 3F); - leftArm.setTextureSize(128, 64); - leftArm.mirror = true; - setRotation(leftArm, 0F, 0F, 0F); - leftChain = new ModelRenderer(this, 95, 5); - leftChain.addBox(17F, -6F, 0F, 1, 6, 1); - leftChain.setRotationPoint(0F, 6F, 3F); - leftChain.setTextureSize(128, 64); - leftChain.mirror = true; - setRotation(leftChain, 0F, 0F, 0F); - leftBall = new ModelRenderer(this, 107, 4); - leftBall.addBox(15F, 0F, -2F, 5, 5, 5); - leftBall.setRotationPoint(0F, 6F, 3F); - leftBall.setTextureSize(128, 64); - leftBall.mirror = true; - setRotation(leftBall, 0F, 0F, 0F); - rightHorn = new ModelRenderer(this, 93, 1); - rightHorn.mirror = true; - rightHorn.addBox(-20F, -7F, 0F, 16, 1, 1); - rightHorn.setRotationPoint(0F, 6F, 3F); - rightHorn.setTextureSize(128, 64); - rightHorn.mirror = true; - setRotation(rightHorn, 0F, 0F, 0F); - rightHorn.mirror = false; - rightChain = new ModelRenderer(this, 95, 5); - rightChain.mirror = true; - rightChain.addBox(-18F, -6F, 0F, 1, 6, 1); - rightChain.setRotationPoint(0F, 6F, 3F); - rightChain.setTextureSize(128, 64); - rightChain.mirror = true; - setRotation(rightChain, 0F, 0F, 0F); - rightChain.mirror = false; - rightBall = new ModelRenderer(this, 107, 4); - rightBall.mirror = true; - rightBall.addBox(-20F, 0F, -2F, 5, 5, 5); - rightBall.setRotationPoint(0F, 6F, 3F); - rightBall.setTextureSize(128, 64); - rightBall.mirror = true; - setRotation(rightBall, 0F, 0F, 0F); - rightBall.mirror = false; - rightArmSpacer = new ModelRenderer(this, 80, 1); - rightArmSpacer.mirror = true; - rightArmSpacer.addBox(-1F, -2F, -2F, 1, 4, 4); - rightArmSpacer.setRotationPoint(-7F, 8F, 3F); - rightArmSpacer.setTextureSize(128, 64); - rightArmSpacer.mirror = true; - setRotation(rightArmSpacer, 0F, 0F, 0F); - rightArmSpacer.mirror = false; - rightArm = new ModelRenderer(this, 62, 1); - rightArm.mirror = true; - rightArm.addBox(-5F, -2F, -2F, 4, 18, 4); - rightArm.setRotationPoint(-7F, 8F, 3F); - rightArm.setTextureSize(128, 64); - rightArm.mirror = true; - setRotation(rightArm, 0F, 0F, 0F); - rightArm.mirror = false; - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - float scale = 1.3f; - GL11.glScalef(scale, scale, scale); - GL11.glTranslatef(0.0f, -(6.0f / 16.0f), 0.0f); - belly.render(f5); - chest.render(f5); - head.render(f5); - nose.render(f5); - leftHorn.render(f5); - leftArmSpacer.render(f5); - leftArm.render(f5); - leftChain.render(f5); - leftBall.render(f5); - rightHorn.render(f5); - rightChain.render(f5); - rightBall.render(f5); - rightArmSpacer.render(f5); - rightArm.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - this.head.rotateAngleX = f4 / (180F / (float) Math.PI); - this.head.rotateAngleY = f3 / (180F / (float) Math.PI); - this.rightArm.rotateAngleX = MathHelper.cos(f * 0.3662F + (float) Math.PI) * 1.0F * f1; - this.leftArm.rotateAngleX = MathHelper.cos(f * 0.3662F) * 1.0F * f1; - this.rightArmSpacer.rotateAngleX = MathHelper.cos(f * 0.3662F + (float) Math.PI) * 1.0F * f1; - this.leftArmSpacer.rotateAngleX = MathHelper.cos(f * 0.3662F) * 1.0F * f1; - this.leftBall.rotateAngleX = this.head.rotateAngleX; - this.leftBall.rotateAngleY = this.head.rotateAngleY; - this.rightBall.rotateAngleX = this.head.rotateAngleX; - this.rightBall.rotateAngleY = this.head.rotateAngleY; - this.leftChain.rotateAngleX = this.head.rotateAngleX; - this.leftChain.rotateAngleY = this.head.rotateAngleY; - this.rightChain.rotateAngleX = this.head.rotateAngleX; - this.rightChain.rotateAngleY = this.head.rotateAngleY; - this.leftHorn.rotateAngleX = this.head.rotateAngleX; - this.leftHorn.rotateAngleY = this.head.rotateAngleY; - this.rightHorn.rotateAngleX = this.head.rotateAngleX; - this.rightHorn.rotateAngleY = this.head.rotateAngleY; - this.nose.rotateAngleX = this.head.rotateAngleX; - this.nose.rotateAngleY = this.head.rotateAngleY; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelBloodAltar.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelBloodAltar.java deleted file mode 100644 index 82a9d3b7..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelBloodAltar.java +++ /dev/null @@ -1,77 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.WorldRenderer; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.renderer.texture.TextureMap; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.client.FMLClientHandler; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.tileEntity.TEAltar; - -public class ModelBloodAltar extends ModelBase -{ - private static final ResourceLocation altar_texture = new ResourceLocation("alchemicalwizardry:textures/models/altar.png"); - -// private IModelCustom modelBloodAltar; - - public ModelBloodAltar() - { -// modelBloodAltar = AdvancedModelLoader.loadModel(new ResourceLocation("alchemicalwizardry:models/bloodaltar-fixeUV.obj")); - } - - public void renderBloodAltar() - { -// modelBloodAltar.renderAll(); - } - - public void renderBloodAltar(TEAltar altar, double x, double y, double z) - { - float scale = 0.1f; - // Push a blank matrix onto the stack - GL11.glPushMatrix(); - // Move the object into the correct position on the block (because the OBJ's origin is the center of the object) - GL11.glTranslatef((float) x + 0.5f, (float) y, (float) z + 0.5f); - // Scale our object to about half-size in all directions (the OBJ file is a little large) - GL11.glScalef(scale, scale, scale); - // Bind the texture, so that OpenGL properly textures our block. - FMLClientHandler.instance().getClient().renderEngine.bindTexture(altar_texture); - // Render the object, using modelTutBox.renderAll(); - this.renderBloodAltar(); - // Pop this matrix from the stack. - GL11.glPopMatrix(); - } - - public void renderBloodLevel(TEAltar altar, double x, double y, double z) - { - GL11.glPushMatrix(); - float level = altar.getFluidAmount(); - GL11.glTranslatef((float) x , (float) y + 0.6499f + 0.12f * (level / altar.getCapacity()), (float) z); - FMLClientHandler.instance().getClient().renderEngine.bindTexture(TextureMap.locationBlocksTexture); - renderBloodLevel(AlchemicalWizardry.lifeEssenceFluid.getStillIcon()); - GL11.glPopMatrix(); - } - - public void renderBloodLevel(TextureAtlasSprite icon) - { - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer wr = tessellator.getWorldRenderer(); - - double minU = (double) icon.getInterpolatedU(0); - double maxU = (double) icon.getInterpolatedU(16); - double minV = (double) icon.getInterpolatedV(0); - double maxV = (double) icon.getInterpolatedV(16); - - wr.startDrawingQuads(); - wr.func_178980_d(0, 1, 0); //setNormal - wr.addVertexWithUV(1, 0, 1, maxU, maxV); - wr.addVertexWithUV(1, 0, 0, maxU, minV); - wr.addVertexWithUV(0, 0, 0, minU, minV); - wr.addVertexWithUV(0, 0, 1, minU, maxV); - tessellator.draw(); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelBoulderFist.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelBoulderFist.java deleted file mode 100644 index a2cebd46..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelBoulderFist.java +++ /dev/null @@ -1,153 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.util.MathHelper; - -public class ModelBoulderFist extends ModelBase -{ - //fields - ModelRenderer leftFist; - ModelRenderer leftArm; - ModelRenderer body; - ModelRenderer leftLeg1; - ModelRenderer leftLeg2; - ModelRenderer leftFoot; - ModelRenderer rightFist; - ModelRenderer rightArm; - ModelRenderer rightLeg1; - ModelRenderer rightLeg2; - ModelRenderer rightFoot; - ModelRenderer head; - - public ModelBoulderFist() - { - textureWidth = 64; - textureHeight = 64; - leftFist = new ModelRenderer(this, 33, 52); - leftFist.addBox(-1F, 12F, -3F, 6, 6, 6); - leftFist.setRotationPoint(5F, 6F, -6F); - leftFist.setTextureSize(64, 64); - leftFist.mirror = true; - setRotation(leftFist, 0F, 0F, 0F); - leftArm = new ModelRenderer(this, 48, 33); - leftArm.addBox(0F, -2F, -2F, 4, 14, 4); - leftArm.setRotationPoint(5F, 6F, -6F); - leftArm.setTextureSize(64, 64); - leftArm.mirror = true; - setRotation(leftArm, 0F, 0F, 0F); - body = new ModelRenderer(this, 0, 40); - body.addBox(-5F, -2F, -3F, 10, 18, 6); - body.setRotationPoint(0F, 6F, -6F); - body.setTextureSize(64, 64); - body.mirror = true; - setRotation(body, 1.22173F, 0F, 0F); - leftLeg1 = new ModelRenderer(this, 0, 25); - leftLeg1.addBox(0F, -1F, -1F, 4, 6, 2); - leftLeg1.setRotationPoint(5F, 11F, 7F); - leftLeg1.setTextureSize(64, 64); - leftLeg1.mirror = true; - setRotation(leftLeg1, -((float) Math.PI / 4F), 0F, 0F); - leftLeg2 = new ModelRenderer(this, 1, 25); - leftLeg2.addBox(0F, 5F, -1F, 4, 2, 12); - leftLeg2.setRotationPoint(5F, 11F, 7F); - leftLeg2.setTextureSize(64, 64); - leftLeg2.mirror = true; - setRotation(leftLeg2, -((float) Math.PI / 4F), 0F, 0F); - leftFoot = new ModelRenderer(this, 22, 25); - leftFoot.addBox(0F, 11F, -1F, 4, 2, 5); - leftFoot.setRotationPoint(5F, 11F, 7F); - leftFoot.setTextureSize(64, 64); - leftFoot.mirror = true; - setRotation(leftFoot, 0F, 0F, 0F); - rightFist = new ModelRenderer(this, 33, 52); - rightFist.mirror = true; - rightFist.addBox(-5F, 12F, -3F, 6, 6, 6); - rightFist.setRotationPoint(-5F, 6F, -6F); - rightFist.setTextureSize(64, 64); - rightFist.mirror = true; - setRotation(rightFist, 0F, 0F, 0F); - rightFist.mirror = false; - rightArm = new ModelRenderer(this, 48, 33); - rightArm.mirror = true; - rightArm.addBox(-4F, -2F, -2F, 4, 14, 4); - rightArm.setRotationPoint(-5F, 6F, -6F); - rightArm.setTextureSize(64, 64); - rightArm.mirror = true; - setRotation(rightArm, 0F, 0F, 0F); - rightArm.mirror = false; - rightLeg1 = new ModelRenderer(this, 0, 25); - rightLeg1.mirror = true; - rightLeg1.addBox(-4F, -1F, -1F, 4, 6, 2); - rightLeg1.setRotationPoint(-5F, 11F, 7F); - rightLeg1.setTextureSize(64, 64); - rightLeg1.mirror = true; - setRotation(rightLeg1, -((float) Math.PI / 4F), 0F, 0F); - rightLeg1.mirror = false; - rightLeg2 = new ModelRenderer(this, 1, 25); - rightLeg2.mirror = true; - rightLeg2.addBox(-4F, 5F, -1F, 4, 2, 12); - rightLeg2.setRotationPoint(-5F, 11F, 7F); - rightLeg2.setTextureSize(64, 64); - rightLeg2.mirror = true; - setRotation(rightLeg2, -((float) Math.PI / 4F), 0F, 0F); - rightLeg2.mirror = false; - rightFoot = new ModelRenderer(this, 22, 25); - rightFoot.mirror = true; - rightFoot.addBox(-4F, 11F, -1F, 4, 2, 5); - rightFoot.setRotationPoint(-5F, 11F, 7F); - rightFoot.setTextureSize(64, 64); - rightFoot.mirror = true; - setRotation(rightFoot, 0F, 0F, 0F); - rightFoot.mirror = false; - head = new ModelRenderer(this, 0, 0); - head.addBox(-3F, -5F, -5F, 6, 6, 6); - head.setRotationPoint(0F, 5F, -7F); - head.setTextureSize(64, 64); - head.mirror = true; - setRotation(head, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - leftFist.render(f5); - leftArm.render(f5); - body.render(f5); - leftLeg1.render(f5); - leftLeg2.render(f5); - leftFoot.render(f5); - rightFist.render(f5); - rightArm.render(f5); - rightLeg1.render(f5); - rightLeg2.render(f5); - rightFoot.render(f5); - head.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - this.head.rotateAngleX = f4 / (180F / (float) Math.PI); - this.head.rotateAngleY = f3 / (180F / (float) Math.PI); - this.leftFoot.rotateAngleX = MathHelper.cos(f * 0.6662F) * 0.8F * f1; - this.rightFoot.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 0.8F * f1; - this.leftLeg1.rotateAngleX = leftFoot.rotateAngleX - ((float) Math.PI / 4F); - this.rightLeg1.rotateAngleX = rightFoot.rotateAngleX - ((float) Math.PI / 4F); - this.leftLeg2.rotateAngleX = leftFoot.rotateAngleX - ((float) Math.PI / 4F); - this.rightLeg2.rotateAngleX = rightFoot.rotateAngleX - ((float) Math.PI / 4F); - this.rightArm.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 0.9f * f1; - this.leftArm.rotateAngleX = MathHelper.cos(f * 0.6662F) * 0.9f * f1; - this.leftFist.rotateAngleX = leftArm.rotateAngleX; - this.rightFist.rotateAngleX = rightArm.rotateAngleX; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelChemistrySet.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelChemistrySet.java deleted file mode 100644 index 2dfc6c8f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelChemistrySet.java +++ /dev/null @@ -1,138 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelChemistrySet extends ModelBase -{ - //fields - ModelRenderer base; - ModelRenderer support; - ModelRenderer appendage1; - ModelRenderer appendage2; - ModelRenderer appendage3; - ModelRenderer appendage4; - ModelRenderer appendage5; - ModelRenderer outputPad; - ModelRenderer input1; - ModelRenderer input5; - ModelRenderer input4; - ModelRenderer input3; - ModelRenderer Shape1; - - public ModelChemistrySet() - { - textureWidth = 64; - textureHeight = 64; - base = new ModelRenderer(this, 0, 0); - base.addBox(0F, 0F, 0F, 16, 2, 16); - base.setRotationPoint(-8F, 22F, -8F); - base.setTextureSize(64, 32); - base.mirror = true; - setRotation(base, 0F, 0F, 0F); - support = new ModelRenderer(this, 0, 0); - support.addBox(0F, 0F, 0F, 2, 12, 2); - support.setRotationPoint(-1F, 10F, -1F); - support.setTextureSize(64, 32); - support.mirror = true; - setRotation(support, 0F, 0F, 0F); - appendage1 = new ModelRenderer(this, 48, 0); - appendage1.addBox(1F, 0F, 0F, 7, 11, 0); - appendage1.setRotationPoint(0F, 10F, 0F); - appendage1.setTextureSize(64, 32); - appendage1.mirror = true; - setRotation(appendage1, 0F, 0F, 0F); - appendage2 = new ModelRenderer(this, 48, 0); - appendage2.addBox(1F, 0F, 0F, 7, 11, 0); - appendage2.setRotationPoint(0F, 10F, 0F); - appendage2.setTextureSize(64, 32); - appendage2.mirror = true; - setRotation(appendage2, 0F, ((float) Math.PI * 2F / 5F), 0F); - appendage3 = new ModelRenderer(this, 48, 0); - appendage3.addBox(1F, 0F, 0F, 7, 11, 0); - appendage3.setRotationPoint(0F, 10F, 0F); - appendage3.setTextureSize(64, 32); - appendage3.mirror = true; - setRotation(appendage3, 0F, 2.513274F, 0F); - appendage4 = new ModelRenderer(this, 48, 0); - appendage4.addBox(1F, 0F, 0F, 7, 11, 0); - appendage4.setRotationPoint(0F, 10F, 0F); - appendage4.setTextureSize(64, 32); - appendage4.mirror = true; - setRotation(appendage4, 0F, -2.513274F, 0F); - appendage5 = new ModelRenderer(this, 48, 0); - appendage5.addBox(1F, 0F, 0F, 7, 11, 0); - appendage5.setRotationPoint(0F, 10F, 0F); - appendage5.setTextureSize(64, 32); - appendage5.mirror = true; - setRotation(appendage5, 0F, -((float) Math.PI * 2F / 5F), 0F); - outputPad = new ModelRenderer(this, 0, 20); - outputPad.addBox(0F, 0F, 0F, 4, 1, 4); - outputPad.setRotationPoint(-2F, 9F, -2F); - outputPad.setTextureSize(64, 64); - outputPad.mirror = true; - setRotation(outputPad, 0F, 0F, 0F); - input1 = new ModelRenderer(this, 0, 20); - input1.addBox(4F, 0F, -2F, 4, 1, 4); - input1.setRotationPoint(0F, 21F, 0F); - input1.setTextureSize(64, 64); - input1.mirror = true; - setRotation(input1, 0F, 0F, 0F); - input5 = new ModelRenderer(this, 0, 20); - input5.addBox(0F, 0F, 0F, 4, 1, 4); - input5.setRotationPoint(0F, 21F, -8F); - input5.setTextureSize(64, 64); - input5.mirror = true; - setRotation(input5, 0F, 0F, 0F); - input4 = new ModelRenderer(this, 0, 20); - input4.addBox(-7F, 0F, -6F, 4, 1, 4); - input4.setRotationPoint(0F, 21F, 0F); - input4.setTextureSize(64, 64); - input4.mirror = true; - setRotation(input4, 0F, 0F, 0F); - input3 = new ModelRenderer(this, 0, 20); - input3.addBox(-7F, 0F, 2F, 4, 1, 4); - input3.setRotationPoint(0F, 21F, 0F); - input3.setTextureSize(64, 64); - input3.mirror = true; - setRotation(input3, 0F, 0F, 0F); - Shape1 = new ModelRenderer(this, 0, 20); - Shape1.addBox(0F, 0F, 4F, 4, 1, 4); - Shape1.setRotationPoint(0F, 21F, 0F); - Shape1.setTextureSize(64, 64); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - base.render(f5); - support.render(f5); - appendage1.render(f5); - appendage2.render(f5); - appendage3.render(f5); - appendage4.render(f5); - appendage5.render(f5); - outputPad.render(f5); - input1.render(f5); - input5.render(f5); - input4.render(f5); - input3.render(f5); - Shape1.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelConduit.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelConduit.java deleted file mode 100644 index 83f3ddc8..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelConduit.java +++ /dev/null @@ -1,287 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -//Date: 11/26/2013 1:57:16 PM -//Template version 1.1 -//Java generated by Techne -//Keep in mind that you still need to fill in some blanks -//- ZeuX - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.util.EnumFacing; - -public class ModelConduit extends ModelBase -{ - //fields - ModelRenderer curvedInput; - ModelRenderer curvedOutput; - ModelRenderer straightBar1; - ModelRenderer curvedBar1; - ModelRenderer spacer1; - ModelRenderer straightBar2; - ModelRenderer curvedBar2; - ModelRenderer spacer2; - ModelRenderer straightBar3; - ModelRenderer curvedBar3; - ModelRenderer straightBar4; - ModelRenderer curvedBar4; - ModelRenderer spacer3; - ModelRenderer spacer4; - ModelRenderer spacer5; - ModelRenderer spacer6; - ModelRenderer spacer7; - ModelRenderer spacer8; - - public ModelConduit() - { - textureWidth = 64; - textureHeight = 32; - curvedInput = new ModelRenderer(this, 0, 0); - curvedInput.addBox(-2F, -2F, -8F, 4, 4, 10); - curvedInput.setRotationPoint(0F, 16F, 0F); - curvedInput.setTextureSize(64, 32); - curvedInput.mirror = true; - setRotation(curvedInput, 0F, 0F, 0F); - curvedOutput = new ModelRenderer(this, 18, 0); - curvedOutput.addBox(2F, -2F, -2F, 6, 4, 4); - curvedOutput.setRotationPoint(0F, 16F, 0F); - curvedOutput.setTextureSize(64, 32); - curvedOutput.mirror = true; - setRotation(curvedOutput, 0F, 0F, 0F); - straightBar1 = new ModelRenderer(this, 0, 17); - straightBar1.addBox(-5F, 3F, -8F, 2, 2, 13); - straightBar1.setRotationPoint(0F, 16F, 0F); - straightBar1.setTextureSize(64, 32); - straightBar1.mirror = true; - setRotation(straightBar1, 0F, 0F, 0F); - curvedBar1 = new ModelRenderer(this, 29, 10); - curvedBar1.addBox(-5F, 3F, 3F, 13, 2, 2); - curvedBar1.setRotationPoint(0F, 16F, 0F); - curvedBar1.setTextureSize(64, 32); - curvedBar1.mirror = true; - setRotation(curvedBar1, 0F, 0F, 0F); - spacer1 = new ModelRenderer(this, 40, 0); - spacer1.addBox(-5.5F, 2.5F, 2.5F, 3, 3, 3); - spacer1.setRotationPoint(0F, 16F, 0F); - spacer1.setTextureSize(64, 32); - spacer1.mirror = true; - setRotation(spacer1, 0F, 0F, 0F); - straightBar2 = new ModelRenderer(this, 0, 17); - straightBar2.addBox(-5F, -5F, -8F, 2, 2, 13); - straightBar2.setRotationPoint(0F, 16F, 0F); - straightBar2.setTextureSize(64, 32); - straightBar2.mirror = true; - setRotation(straightBar2, 0F, 0F, 0F); - curvedBar2 = new ModelRenderer(this, 29, 10); - curvedBar2.addBox(-5F, -5F, 3F, 13, 2, 2); - curvedBar2.setRotationPoint(0F, 16F, 0F); - curvedBar2.setTextureSize(64, 32); - curvedBar2.mirror = true; - setRotation(curvedBar2, 0F, 0F, 0F); - spacer2 = new ModelRenderer(this, 40, 0); - spacer2.addBox(-5.5F, -5.5F, 2.5F, 3, 3, 3); - spacer2.setRotationPoint(0F, 16F, 0F); - spacer2.setTextureSize(64, 32); - spacer2.mirror = true; - setRotation(spacer2, 0F, 0F, 0F); - straightBar3 = new ModelRenderer(this, 0, 17); - straightBar3.addBox(3F, 3F, -8F, 2, 2, 13); - straightBar3.setRotationPoint(0F, 16F, 0F); - straightBar3.setTextureSize(64, 32); - straightBar3.mirror = true; - setRotation(straightBar3, 0F, 0F, 0F); - curvedBar3 = new ModelRenderer(this, 29, 10); - curvedBar3.addBox(-5F, 3F, -5F, 13, 2, 2); - curvedBar3.setRotationPoint(0F, 16F, 0F); - curvedBar3.setTextureSize(64, 32); - curvedBar3.mirror = true; - setRotation(curvedBar3, 0F, 0F, 0F); - straightBar4 = new ModelRenderer(this, 0, 17); - straightBar4.addBox(3F, -5F, -8F, 2, 2, 13); - straightBar4.setRotationPoint(0F, 16F, 0F); - straightBar4.setTextureSize(64, 32); - straightBar4.mirror = true; - setRotation(straightBar4, 0F, 0F, 0F); - curvedBar4 = new ModelRenderer(this, 29, 10); - curvedBar4.addBox(-5F, -5F, -5F, 13, 2, 2); - curvedBar4.setRotationPoint(0F, 16F, 0F); - curvedBar4.setTextureSize(64, 32); - curvedBar4.mirror = true; - setRotation(curvedBar4, 0F, 0F, 0F); - spacer3 = new ModelRenderer(this, 40, 0); - spacer3.addBox(2.5F, 2.5F, 2.5F, 3, 3, 3); - spacer3.setRotationPoint(0F, 16F, 0F); - spacer3.setTextureSize(64, 32); - spacer3.mirror = true; - setRotation(spacer3, 0F, 0F, 0F); - spacer4 = new ModelRenderer(this, 40, 0); - spacer4.addBox(2.5F, 2.5F, -5.5F, 3, 3, 3); - spacer4.setRotationPoint(0F, 16F, 0F); - spacer4.setTextureSize(64, 32); - spacer4.mirror = true; - setRotation(spacer4, 0F, 0F, 0F); - spacer5 = new ModelRenderer(this, 40, 0); - spacer5.addBox(-5.5F, 2.5F, -5.484F, 3, 3, 3); - spacer5.setRotationPoint(0F, 16F, 0F); - spacer5.setTextureSize(64, 32); - spacer5.mirror = true; - setRotation(spacer5, 0F, 0F, 0F); - spacer6 = new ModelRenderer(this, 40, 0); - spacer6.addBox(2.5F, -5.5F, 2.5F, 3, 3, 3); - spacer6.setRotationPoint(0F, 16F, 0F); - spacer6.setTextureSize(64, 32); - spacer6.mirror = true; - setRotation(spacer6, 0F, 0F, 0F); - spacer7 = new ModelRenderer(this, 40, 0); - spacer7.addBox(2.5F, -5.5F, -5.5F, 3, 3, 3); - spacer7.setRotationPoint(0F, 16F, 0F); - spacer7.setTextureSize(64, 32); - spacer7.mirror = true; - setRotation(spacer7, 0F, 0F, 0F); - spacer8 = new ModelRenderer(this, 40, 0); - spacer8.addBox(-5.5F, -5.5F, -5.5F, 3, 3, 3); - spacer8.setRotationPoint(0F, 16F, 0F); - spacer8.setTextureSize(64, 32); - spacer8.mirror = true; - setRotation(spacer8, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5, EnumFacing input, EnumFacing output) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - float xInputRot = 0.0f; - float yInputRot = 0.0f; - float zInputRot = 0.0f; - float xOutputRot = 0.0f; - float yOutputRot = 0.0f; - float zOutputRot = 0.0f; - - switch (input) - { - case NORTH: - xInputRot = 0.0f; - yInputRot = 0.0f; - zInputRot = 0.0f; - break; - - case EAST: - xInputRot = 0.0f; - yInputRot = (float) (0.5f * Math.PI); - zInputRot = 0.0f; - break; - - case SOUTH: - xInputRot = 0.0f; - yInputRot = (float) (1.0f * Math.PI); - zInputRot = 0.0f; - break; - - case WEST: - xInputRot = 0.0f; - yInputRot = (float) (-0.5f * Math.PI); - zInputRot = 0.0f; - break; - - case UP: - xInputRot = (float) (-0.5f * Math.PI); - yInputRot = 0.0f; - zInputRot = 0.0f; - break; - - case DOWN: - xInputRot = (float) (0.5f * Math.PI); - yInputRot = 0.0f; - zInputRot = 0.0f; - break; - - default: - break; - } - - switch (output) - { - case NORTH: - xOutputRot = 0.0f; - yOutputRot = (float) (0.5f * Math.PI); - zOutputRot = 0.0f; - break; - - case EAST: - xOutputRot = 0.0f; - yOutputRot = (float) (1.0f * Math.PI); - zOutputRot = 0.0f; - break; - - case SOUTH: - xOutputRot = 0.0f; - yOutputRot = (float) (-0.5f * Math.PI); - zOutputRot = 0.0f; - break; - - case WEST: - xOutputRot = 0.0f; - yOutputRot = 0.0f; - zOutputRot = 0.0f; - break; - - case UP: - xOutputRot = 0.0f; - yOutputRot = 0.0f; - zOutputRot = (float) (-0.5f * Math.PI); - break; - - case DOWN: - xOutputRot = 0.0f; - yOutputRot = 0.0f; - zOutputRot = (float) (0.5f * Math.PI); - break; - - default: - break; - } - - this.setRotation(curvedInput, xInputRot, yInputRot, zInputRot); - this.setRotation(curvedOutput, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(straightBar1, xInputRot, yInputRot, zInputRot); - this.setRotation(curvedBar1, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(straightBar2, xInputRot, yInputRot, zInputRot); - this.setRotation(curvedBar2, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(straightBar3, xInputRot, yInputRot, zInputRot); - this.setRotation(curvedBar3, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(straightBar4, xInputRot, yInputRot, zInputRot); - this.setRotation(curvedBar4, xOutputRot, yOutputRot, zOutputRot); - curvedInput.render(f5); - curvedOutput.render(f5); - //setRotation(curvedOutput,0F,-(float)(Math.PI/2),0F); - straightBar1.render(f5); - curvedBar1.render(f5); - spacer1.render(f5); - straightBar2.render(f5); - curvedBar2.render(f5); - spacer2.render(f5); - straightBar3.render(f5); - curvedBar3.render(f5); - straightBar4.render(f5); - curvedBar4.render(f5); - spacer3.render(f5); - spacer4.render(f5); - spacer5.render(f5); - spacer6.render(f5); - spacer7.render(f5); - spacer8.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelCrystalBelljar.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelCrystalBelljar.java deleted file mode 100644 index 58a9b1d1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelCrystalBelljar.java +++ /dev/null @@ -1,119 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelCrystalBelljar extends ModelBase -{ - //fields - ModelRenderer handle1; - ModelRenderer handle2; - ModelRenderer jar1; - ModelRenderer woodBottom; - ModelRenderer jar2; - ModelRenderer jar3; - ModelRenderer jar4; - ModelRenderer jar5; - - public ModelCrystalBelljar() - { - textureWidth = 128; - textureHeight = 64; - - handle1 = new ModelRenderer(this, 0, 17); - handle1.addBox(-2F, -7F, -2F, 4, 1, 4); - handle1.setRotationPoint(0F, 16F, 0F); - handle1.setTextureSize(128, 64); - handle1.mirror = true; - setRotation(handle1, 0F, 0F, 0F); - handle2 = new ModelRenderer(this, 0, 23); - handle2.addBox(-1F, -6F, -1F, 2, 1, 2); - handle2.setRotationPoint(0F, 16F, 0F); - handle2.setTextureSize(128, 64); - handle2.mirror = true; - setRotation(handle2, 0F, 0F, 0F); - jar1 = new ModelRenderer(this, 0, 27); - jar1.addBox(-4F, -5F, -4F, 8, 1, 8); - jar1.setRotationPoint(0F, 16F, 0F); - jar1.setTextureSize(128, 64); - jar1.mirror = true; - setRotation(jar1, 0F, 0F, 0F); - woodBottom = new ModelRenderer(this, 0, 0); - woodBottom.addBox(-7F, 6F, -7F, 14, 2, 14); - woodBottom.setRotationPoint(0F, 16F, 0F); - woodBottom.setTextureSize(128, 64); - woodBottom.mirror = true; - setRotation(woodBottom, 0F, 0F, 0F); - jar2 = new ModelRenderer(this, 0, 38); - jar2.addBox(-5F, -4F, 4F, 10, 10, 1); - jar2.setRotationPoint(0F, 16F, 0F); - jar2.setTextureSize(128, 64); - jar2.mirror = true; - setRotation(jar2, 0F, 0F, 0F); - jar3 = new ModelRenderer(this, 46, 38); - jar3.addBox(4F, -4F, -4F, 1, 10, 8); - jar3.setRotationPoint(0F, 16F, 0F); - jar3.setTextureSize(128, 64); - jar3.mirror = true; - setRotation(jar3, 0F, 0F, 0F); - jar4 = new ModelRenderer(this, 23, 38); - jar4.addBox(-5F, -4F, -5F, 10, 10, 1); - jar4.setRotationPoint(0F, 16F, 0F); - jar4.setTextureSize(128, 64); - jar4.mirror = true; - setRotation(jar4, 0F, 0F, 0F); - jar5 = new ModelRenderer(this, 65, 38); - jar5.addBox(-5F, -4F, -4F, 1, 10, 8); - jar5.setRotationPoint(0F, 16F, 0F); - jar5.setTextureSize(128, 64); - jar5.mirror = true; - setRotation(jar5, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - handle1.render(f5); - handle2.render(f5); - jar1.render(f5); - woodBottom.render(f5); - jar2.render(f5); - jar3.render(f5); - jar4.render(f5); - jar5.render(f5); - } - - public void renderSpecialItem(Entity entity, float f, float f1, float f2, float f3, float f4, float f5, int part) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - if (part == 0) - { - woodBottom.render(f5); - } else - { - handle1.render(f5); - handle2.render(f5); - jar1.render(f5); - jar2.render(f5); - jar3.render(f5); - jar4.render(f5); - jar5.render(f5); - } - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelElemental.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelElemental.java deleted file mode 100644 index 25cb2814..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelElemental.java +++ /dev/null @@ -1,81 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.entity.monster.EntityBlaze; -import net.minecraft.world.World; - -public class ModelElemental extends ModelBase -{ - //fields - ModelRenderer body; - ModelRenderer Shape2; - ModelRenderer Shape1; - ModelRenderer Shape3; - - public ModelElemental() - { - textureWidth = 64; - textureHeight = 32; - body = new ModelRenderer(this, 33, 0); - body.addBox(-3F, -3F, -3F, 6, 6, 6); - body.setRotationPoint(0F, 14F, 0F); - body.setTextureSize(64, 32); - body.mirror = true; - setRotation(body, 0F, 0F, 0F); - Shape2 = new ModelRenderer(this, 0, 0); - Shape2.addBox(-4F, -4F, -4F, 8, 8, 8); - Shape2.setRotationPoint(0F, 14F, 0F); - Shape2.setTextureSize(64, 32); - Shape2.mirror = true; - setRotation(Shape2, ((float) Math.PI / 4F), ((float) Math.PI / 4F), 0F); - Shape1 = new ModelRenderer(this, 0, 0); - Shape1.addBox(-4F, -4F, -4F, 8, 8, 8); - Shape1.setRotationPoint(0F, 14F, 0F); - Shape1.setTextureSize(64, 32); - Shape1.mirror = true; - setRotation(Shape1, 0F, ((float) Math.PI / 4F), ((float) Math.PI / 4F)); - Shape3 = new ModelRenderer(this, 0, 0); - Shape3.addBox(-4F, -4F, -4F, 8, 8, 8); - Shape3.setRotationPoint(0F, 14F, 0F); - Shape3.setTextureSize(64, 32); - Shape3.mirror = true; - setRotation(Shape3, ((float) Math.PI / 4F), 0F, ((float) Math.PI / 4F)); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - body.render(f5); - Shape2.render(f5); - Shape1.render(f5); - Shape3.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - World world = entity.worldObj; - - if (world == null) - { - return; - } - - int ratio = 20; - float rot = (entity.worldObj.getWorldTime() % ratio) / ratio; - Shape1.rotateAngleX = f / 5; - Shape2.rotateAngleZ = f / 5; - Shape3.rotateAngleY = f / 5; - EntityBlaze d; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelEnergyBazookaMainProjectile.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelEnergyBazookaMainProjectile.java deleted file mode 100644 index de8e7e6b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelEnergyBazookaMainProjectile.java +++ /dev/null @@ -1,122 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelEnergyBazookaMainProjectile extends ModelBase -{ - //fields - ModelRenderer thirdWarHead; - ModelRenderer firstWarHead; - ModelRenderer secondWarHead; - ModelRenderer support1; - ModelRenderer mainBody; - ModelRenderer support2; - ModelRenderer support3; - ModelRenderer support4; - ModelRenderer base1; - ModelRenderer base2; - ModelRenderer base3; - - public ModelEnergyBazookaMainProjectile() - { - textureWidth = 64; - textureHeight = 32; - thirdWarHead = new ModelRenderer(this, 43, 0); - thirdWarHead.addBox(-1F, -1F, -9F, 2, 2, 1); - thirdWarHead.setRotationPoint(0F, 0F, 0F); - thirdWarHead.setTextureSize(64, 32); - thirdWarHead.mirror = true; - setRotation(thirdWarHead, 0F, 0F, 0F); - firstWarHead = new ModelRenderer(this, 52, 0); - firstWarHead.addBox(-2F, -2F, -8F, 4, 4, 2); - firstWarHead.setRotationPoint(0F, 0F, 0F); - firstWarHead.setTextureSize(64, 32); - firstWarHead.mirror = true; - setRotation(firstWarHead, 0F, 0F, 0F); - secondWarHead = new ModelRenderer(this, 48, 8); - secondWarHead.addBox(-3F, -3F, -6F, 6, 6, 2); - secondWarHead.setRotationPoint(0F, 0F, 0F); - secondWarHead.setTextureSize(64, 32); - secondWarHead.mirror = true; - setRotation(secondWarHead, 0F, 0F, 0F); - support1 = new ModelRenderer(this, 0, 0); - support1.addBox(2F, 2F, -4F, 1, 1, 9); - support1.setRotationPoint(0F, 0F, 0F); - support1.setTextureSize(64, 32); - support1.mirror = true; - setRotation(support1, 0F, 0F, 0F); - mainBody = new ModelRenderer(this, 0, 19); - mainBody.addBox(-2F, -2F, -4F, 4, 4, 9); - mainBody.setRotationPoint(0F, 0F, 0F); - mainBody.setTextureSize(64, 32); - mainBody.mirror = true; - setRotation(mainBody, 0F, 0F, 0F); - support2 = new ModelRenderer(this, 0, 0); - support2.addBox(-3F, 2F, -4F, 1, 1, 9); - support2.setRotationPoint(0F, 0F, 0F); - support2.setTextureSize(64, 32); - support2.mirror = true; - setRotation(support2, 0F, 0F, 0F); - support3 = new ModelRenderer(this, 0, 0); - support3.addBox(-3F, -3F, -4F, 1, 1, 9); - support3.setRotationPoint(0F, 0F, 0F); - support3.setTextureSize(64, 32); - support3.mirror = true; - setRotation(support3, 0F, 0F, 0F); - support4 = new ModelRenderer(this, 0, 0); - support4.addBox(2F, -3F, -4F, 1, 1, 9); - support4.setRotationPoint(0F, 0F, 0F); - support4.setTextureSize(64, 32); - support4.mirror = true; - setRotation(support4, 0F, 0F, 0F); - base1 = new ModelRenderer(this, 28, 0); - base1.addBox(-3F, -3F, 5F, 6, 6, 1); - base1.setRotationPoint(0F, 0F, 0F); - base1.setTextureSize(64, 32); - base1.mirror = true; - setRotation(base1, 0F, 0F, 0F); - base2 = new ModelRenderer(this, 28, 9); - base2.addBox(-2F, -2F, 6F, 4, 4, 1); - base2.setRotationPoint(0F, 0F, 0F); - base2.setTextureSize(64, 32); - base2.mirror = true; - setRotation(base2, 0F, 0F, 0F); - base3 = new ModelRenderer(this, 28, 15); - base3.addBox(-3F, -3F, 7F, 6, 6, 1); - base3.setRotationPoint(0F, 0F, 0F); - base3.setTextureSize(64, 32); - base3.mirror = true; - setRotation(base3, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - thirdWarHead.render(f5); - firstWarHead.render(f5); - secondWarHead.render(f5); - support1.render(f5); - mainBody.render(f5); - support2.render(f5); - support3.render(f5); - support4.render(f5); - base1.render(f5); - base2.render(f5); - base3.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelFallenAngel.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelFallenAngel.java deleted file mode 100644 index aacef80d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelFallenAngel.java +++ /dev/null @@ -1,113 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.util.MathHelper; - -public class ModelFallenAngel extends ModelBase -{ - //fields - ModelRenderer leftWing; - ModelRenderer rightWing; - ModelRenderer head; - ModelRenderer body; - ModelRenderer rightarm; - ModelRenderer leftarm; - ModelRenderer rightleg; - ModelRenderer leftleg; - - public ModelFallenAngel() - { - textureWidth = 64; - textureHeight = 32; - leftWing = new ModelRenderer(this, 33, 8); - leftWing.mirror = true; - leftWing.addBox(0F, 0F, 0F, 10, 7, 0); - leftWing.setRotationPoint(0F, 1F, 2F); - leftWing.setTextureSize(64, 32); - leftWing.mirror = true; - setRotation(leftWing, 0F, 0F, 0F); - rightWing = new ModelRenderer(this, 33, 8); - rightWing.addBox(-10F, 0F, 0F, 10, 7, 0); - rightWing.setRotationPoint(0F, 1F, 2F); - rightWing.setTextureSize(64, 32); - rightWing.mirror = true; - setRotation(rightWing, 0F, 0F, 0F); - rightWing.mirror = false; - head = new ModelRenderer(this, 0, 0); - head.addBox(-4F, -8F, -4F, 8, 8, 8); - head.setRotationPoint(0F, 0F, 0F); - head.setTextureSize(64, 32); - head.mirror = true; - setRotation(head, 0F, 0F, 0F); - body = new ModelRenderer(this, 16, 16); - body.addBox(-4F, 0F, -2F, 8, 12, 4); - body.setRotationPoint(0F, 0F, 0F); - body.setTextureSize(64, 32); - body.mirror = true; - setRotation(body, 0F, 0F, 0F); - rightarm = new ModelRenderer(this, 40, 16); - rightarm.addBox(-3F, -2F, -2F, 4, 12, 4); - rightarm.setRotationPoint(-5F, 2F, 0F); - rightarm.setTextureSize(64, 32); - rightarm.mirror = true; - setRotation(rightarm, 0F, 0F, 0F); - rightarm.mirror = false; - leftarm = new ModelRenderer(this, 40, 16); - leftarm.mirror = true; - leftarm.addBox(-1F, -2F, -2F, 4, 12, 4); - leftarm.setRotationPoint(5F, 2F, 0F); - leftarm.setTextureSize(64, 32); - leftarm.mirror = true; - setRotation(leftarm, 0F, 0F, 0F); - rightleg = new ModelRenderer(this, 0, 16); - rightleg.addBox(-2F, 0F, -2F, 4, 12, 4); - rightleg.setRotationPoint(-2F, 12F, 0F); - rightleg.setTextureSize(64, 32); - rightleg.mirror = true; - setRotation(rightleg, 0F, 0F, 0F); - rightleg.mirror = false; - leftleg = new ModelRenderer(this, 0, 16); - leftleg.mirror = true; - leftleg.addBox(-2F, 0F, -2F, 4, 12, 4); - leftleg.setRotationPoint(2F, 12F, 0F); - leftleg.setTextureSize(64, 32); - leftleg.mirror = true; - setRotation(leftleg, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - leftWing.render(f5); - rightWing.render(f5); - head.render(f5); - body.render(f5); - rightarm.render(f5); - leftarm.render(f5); - rightleg.render(f5); - leftleg.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - this.head.rotateAngleX = f4 / (180F / (float) Math.PI); - this.head.rotateAngleY = f3 / (180F / (float) Math.PI); - this.leftleg.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1; - this.rightleg.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 1.4F * f1; - this.rightarm.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 1.4F * f1; - this.leftarm.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1; - this.rightWing.rotateAngleY = MathHelper.cos(0.1662F); - this.leftWing.rotateAngleY = MathHelper.cos(0.1662F + (float) Math.PI); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelIceDemon.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelIceDemon.java deleted file mode 100644 index 9c6d3c32..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelIceDemon.java +++ /dev/null @@ -1,197 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.util.MathHelper; - -public class ModelIceDemon extends ModelBase -{ - //fields - ModelRenderer head; - ModelRenderer leftHorn; - ModelRenderer rightHorn; - ModelRenderer body; - ModelRenderer leftArm; - ModelRenderer leftWrist; - ModelRenderer leftIcicle1; - ModelRenderer leftIcicle2; - ModelRenderer leftIcicle3; - ModelRenderer leftLeg; - ModelRenderer rightArm; - ModelRenderer rightWrist; - ModelRenderer rightIcicle1; - ModelRenderer rightIcicle2; - ModelRenderer rightIcicle3; - ModelRenderer rightLeg; - ModelRenderer Shape1; - - public ModelIceDemon() - { - textureWidth = 64; - textureHeight = 64; - head = new ModelRenderer(this, 40, 0); - head.addBox(-3F, -8F, -3F, 6, 8, 6); - head.setRotationPoint(0F, -3F, 0F); - head.setTextureSize(64, 64); - head.mirror = true; - setRotation(head, 0F, 0F, 0F); - leftHorn = new ModelRenderer(this, 0, 0); - leftHorn.addBox(3F, -7F, 2F, 1, 1, 10); - leftHorn.setRotationPoint(0F, -3F, 0F); - leftHorn.setTextureSize(64, 64); - leftHorn.mirror = true; - setRotation(leftHorn, 0.4363323F, 0F, 0F); - rightHorn = new ModelRenderer(this, 0, 0); - rightHorn.mirror = true; - rightHorn.addBox(-4F, -7F, 2F, 1, 1, 10); - rightHorn.setRotationPoint(0F, -3F, 0F); - rightHorn.setTextureSize(64, 64); - rightHorn.mirror = true; - setRotation(rightHorn, 0.4363323F, 0F, 0F); - rightHorn.mirror = false; - body = new ModelRenderer(this, 40, 15); - body.addBox(-4F, 0F, -2F, 8, 13, 4); - body.setRotationPoint(0F, -3F, 0F); - body.setTextureSize(64, 64); - body.mirror = true; - setRotation(body, 0F, 0F, 0F); - leftArm = new ModelRenderer(this, 0, 48); - leftArm.addBox(0F, -2F, -2F, 4, 12, 4); - leftArm.setRotationPoint(4F, -1F, 0F); - leftArm.setTextureSize(64, 64); - leftArm.mirror = true; - setRotation(leftArm, 0F, 0F, 0F); - leftWrist = new ModelRenderer(this, 32, 57); - leftWrist.addBox(0F, 6F, -2.5F, 5, 2, 5); - leftWrist.setRotationPoint(4F, -1F, 0F); - leftWrist.setTextureSize(64, 64); - leftWrist.mirror = true; - setRotation(leftWrist, 0F, 0F, 0F); - leftIcicle1 = new ModelRenderer(this, 0, 0); - leftIcicle1.addBox(4.9F, 0F, -0.5F, 1, 6, 1); - leftIcicle1.setRotationPoint(4F, -1F, 0F); - leftIcicle1.setTextureSize(64, 64); - leftIcicle1.mirror = true; - setRotation(leftIcicle1, 0F, 0F, 0.1396263F); - leftIcicle2 = new ModelRenderer(this, 0, 0); - leftIcicle2.addBox(5F, 0F, 0F, 1, 6, 1); - leftIcicle2.setRotationPoint(4F, -1F, 0F); - leftIcicle2.setTextureSize(64, 64); - leftIcicle2.mirror = true; - setRotation(leftIcicle2, 0F, 0.5585054F, 0.1919862F); - leftIcicle3 = new ModelRenderer(this, 0, 0); - leftIcicle3.addBox(5F, 0F, -1F, 1, 6, 1); - leftIcicle3.setRotationPoint(4F, -1F, 0F); - leftIcicle3.setTextureSize(64, 64); - leftIcicle3.mirror = true; - setRotation(leftIcicle3, 0F, -0.5585054F, 0.1919862F); - leftLeg = new ModelRenderer(this, 16, 46); - leftLeg.addBox(-2F, 0F, -2F, 4, 14, 4); - leftLeg.setRotationPoint(2F, 10F, 0F); - leftLeg.setTextureSize(64, 64); - leftLeg.mirror = true; - setRotation(leftLeg, 0F, 0F, 0F); - rightArm = new ModelRenderer(this, 0, 48); - rightArm.mirror = true; - rightArm.addBox(-4F, -2F, -2F, 4, 12, 4); - rightArm.setRotationPoint(-4F, -1F, 0F); - rightArm.setTextureSize(64, 64); - rightArm.mirror = true; - setRotation(rightArm, 0F, 0F, 0F); - rightArm.mirror = false; - rightWrist = new ModelRenderer(this, 32, 57); - rightWrist.mirror = true; - rightWrist.addBox(-5F, 6F, -2.5F, 5, 2, 5); - rightWrist.setRotationPoint(-4F, -1F, 0F); - rightWrist.setTextureSize(64, 64); - rightWrist.mirror = true; - setRotation(rightWrist, 0F, 0F, 0F); - rightWrist.mirror = false; - rightIcicle1 = new ModelRenderer(this, 0, 0); - rightIcicle1.addBox(-5.9F, 0F, -0.5F, 1, 6, 1); - rightIcicle1.setRotationPoint(-4F, -1F, 0F); - rightIcicle1.setTextureSize(64, 64); - rightIcicle1.mirror = true; - setRotation(rightIcicle1, 0F, 0F, -0.1396263F); - rightIcicle2 = new ModelRenderer(this, 0, 0); - rightIcicle2.addBox(-6F, 0F, 0F, 1, 6, 1); - rightIcicle2.setRotationPoint(-4F, -1F, 0F); - rightIcicle2.setTextureSize(64, 64); - rightIcicle2.mirror = true; - setRotation(rightIcicle2, 0F, -0.5585054F, -0.1919862F); - rightIcicle3 = new ModelRenderer(this, 0, 0); - rightIcicle3.addBox(-6F, 0F, -1F, 1, 6, 1); - rightIcicle3.setRotationPoint(-4F, -1F, 0F); - rightIcicle3.setTextureSize(64, 64); - rightIcicle3.mirror = true; - setRotation(rightIcicle3, 0F, 0.5585054F, -0.1919862F); - rightLeg = new ModelRenderer(this, 16, 46); - rightLeg.mirror = true; - rightLeg.addBox(-2F, 0F, -2F, 4, 14, 4); - rightLeg.setRotationPoint(-2F, 10F, 0F); - rightLeg.setTextureSize(64, 64); - rightLeg.mirror = true; - setRotation(rightLeg, 0F, 0F, 0F); - rightLeg.mirror = false; - Shape1 = new ModelRenderer(this, 0, 12); - Shape1.addBox(-0.5F, 0F, -0.5F, 1, 10, 1); - Shape1.setRotationPoint(0F, 8F, 1.5F); - Shape1.setTextureSize(64, 64); - Shape1.mirror = true; - setRotation(Shape1, 0.5948578F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - head.render(f5); - leftHorn.render(f5); - rightHorn.render(f5); - body.render(f5); - leftArm.render(f5); - leftWrist.render(f5); - leftIcicle1.render(f5); - leftIcicle2.render(f5); - leftIcicle3.render(f5); - leftLeg.render(f5); - rightArm.render(f5); - rightWrist.render(f5); - rightIcicle1.render(f5); - rightIcicle2.render(f5); - rightIcicle3.render(f5); - rightLeg.render(f5); - Shape1.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - this.head.rotateAngleX = f4 / (180F / (float) Math.PI); - this.head.rotateAngleY = f3 / (180F / (float) Math.PI); - this.leftLeg.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1; - this.rightLeg.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 1.4F * f1; - this.rightArm.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 1.4F * f1; - this.leftArm.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1; - this.leftHorn.rotateAngleX = head.rotateAngleX + 0.4363323F; - this.leftHorn.rotateAngleY = head.rotateAngleY; - this.rightHorn.rotateAngleX = head.rotateAngleX + 0.4363323F; - this.rightHorn.rotateAngleY = head.rotateAngleY; - this.rightIcicle1.rotateAngleX = rightArm.rotateAngleX; - this.rightIcicle2.rotateAngleX = rightArm.rotateAngleX; - this.rightIcicle3.rotateAngleX = rightArm.rotateAngleX; - this.leftIcicle1.rotateAngleX = leftArm.rotateAngleX; - this.leftIcicle2.rotateAngleX = leftArm.rotateAngleX; - this.leftIcicle3.rotateAngleX = leftArm.rotateAngleX; - this.rightWrist.rotateAngleX = rightArm.rotateAngleX; - this.leftWrist.rotateAngleX = leftArm.rotateAngleX; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelLowerGuardian.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelLowerGuardian.java deleted file mode 100644 index 61d7b85d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelLowerGuardian.java +++ /dev/null @@ -1,207 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import WayofTime.alchemicalWizardry.common.entity.mob.EntityLowerGuardian; -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.util.MathHelper; - -public class ModelLowerGuardian extends ModelBase -{ - //fields - ModelRenderer Body; - ModelRenderer Torso; - ModelRenderer Head; - ModelRenderer leftArm; - ModelRenderer rightArm; - ModelRenderer leftLeg; - ModelRenderer leftFoot; - ModelRenderer rightLeg; - ModelRenderer rightFoot; - ModelRenderer leftHorn; - ModelRenderer hornAppendage1; - ModelRenderer hornAppendage2; - ModelRenderer rightHorn; - ModelRenderer hornAppendage3; - ModelRenderer hornAppendage4; - - public ModelLowerGuardian() - { - textureWidth = 64; - textureHeight = 64; - Body = new ModelRenderer(this, 0, 0); - Body.addBox(-8F, -7F, -4F, 16, 14, 8); - Body.setRotationPoint(0F, -3F, 0F); - Body.setTextureSize(64, 64); - Body.mirror = true; - setRotation(Body, 0F, 0F, 0F); - Torso = new ModelRenderer(this, 0, 25); - Torso.addBox(-4F, 0F, -3F, 8, 4, 6); - Torso.setRotationPoint(0F, 4F, 0F); - Torso.setTextureSize(64, 64); - Torso.mirror = true; - setRotation(Torso, 0F, 0F, 0F); - Head = new ModelRenderer(this, 29, 25); - Head.addBox(-4F, -8F, -4F, 8, 8, 8); - Head.setRotationPoint(0F, -10F, 0F); - Head.setTextureSize(64, 64); - Head.mirror = true; - setRotation(Head, 0F, 0F, 0F); - leftArm = new ModelRenderer(this, 17, 42); - leftArm.addBox(0F, -2F, -2F, 4, 18, 4); - leftArm.setRotationPoint(8F, -8F, 0F); - leftArm.setTextureSize(64, 64); - leftArm.mirror = true; - setRotation(leftArm, 0F, 0F, 0F); - rightArm = new ModelRenderer(this, 17, 42); - rightArm.mirror = true; - rightArm.addBox(-4F, -2F, -2F, 4, 18, 4); - rightArm.setRotationPoint(-8F, -8F, 0F); - rightArm.setTextureSize(64, 64); - rightArm.mirror = true; - setRotation(rightArm, 0F, 0F, 0F); - rightArm.mirror = false; - leftLeg = new ModelRenderer(this, 0, 42); - leftLeg.addBox(0F, -2F, -2F, 4, 17, 4); - leftLeg.setRotationPoint(4F, 6F, 0F); - leftLeg.setTextureSize(64, 64); - leftLeg.mirror = true; - setRotation(leftLeg, 0F, 0F, 0F); - leftFoot = new ModelRenderer(this, 34, 42); - leftFoot.addBox(0F, 15F, -6F, 4, 3, 8); - leftFoot.setRotationPoint(4F, 6F, 0F); - leftFoot.setTextureSize(64, 64); - leftFoot.mirror = true; - setRotation(leftFoot, 0F, 0F, 0F); - rightLeg = new ModelRenderer(this, 0, 42); - rightLeg.mirror = true; - rightLeg.addBox(-4F, -2F, -2F, 4, 17, 4); - rightLeg.setRotationPoint(-4F, 6F, 0F); - rightLeg.setTextureSize(64, 64); - rightLeg.mirror = true; - setRotation(rightLeg, 0F, 0F, 0F); - rightLeg.mirror = false; - rightFoot = new ModelRenderer(this, 34, 42); - rightFoot.mirror = true; - rightFoot.addBox(-4F, 15F, -6F, 4, 3, 8); - rightFoot.setRotationPoint(-4F, 6F, 0F); - rightFoot.setTextureSize(64, 64); - rightFoot.mirror = true; - setRotation(rightFoot, 0F, 0F, 0F); - rightFoot.mirror = false; - leftHorn = new ModelRenderer(this, 0, 0); - leftHorn.addBox(4F, -11F, 0F, 1, 6, 1); - leftHorn.setRotationPoint(0F, -10F, 0F); - leftHorn.setTextureSize(64, 64); - leftHorn.mirror = true; - setRotation(leftHorn, 0F, 0F, 0F); - hornAppendage1 = new ModelRenderer(this, 0, 0); - hornAppendage1.addBox(4F, -7F, -1F, 1, 1, 1); - hornAppendage1.setRotationPoint(0F, -10F, 0F); - hornAppendage1.setTextureSize(64, 64); - hornAppendage1.mirror = true; - setRotation(hornAppendage1, 0F, 0F, 0F); - hornAppendage2 = new ModelRenderer(this, 0, 0); - hornAppendage2.addBox(4F, -6F, 1F, 1, 1, 1); - hornAppendage2.setRotationPoint(0F, -10F, 0F); - hornAppendage2.setTextureSize(64, 64); - hornAppendage2.mirror = true; - setRotation(hornAppendage2, 0F, 0F, 0F); - rightHorn = new ModelRenderer(this, 0, 0); - rightHorn.mirror = true; - rightHorn.addBox(-5F, -11F, 0F, 1, 6, 1); - rightHorn.setRotationPoint(0F, -10F, 0F); - rightHorn.setTextureSize(64, 64); - rightHorn.mirror = true; - setRotation(rightHorn, 0F, 0F, 0F); - rightHorn.mirror = false; - hornAppendage3 = new ModelRenderer(this, 0, 0); - hornAppendage3.mirror = true; - hornAppendage3.addBox(-5F, -7F, -1F, 1, 1, 1); - hornAppendage3.setRotationPoint(0F, -10F, 0F); - hornAppendage3.setTextureSize(64, 64); - hornAppendage3.mirror = true; - setRotation(hornAppendage3, 0F, 0F, 0F); - hornAppendage3.mirror = false; - hornAppendage4 = new ModelRenderer(this, 0, 0); - hornAppendage4.mirror = true; - hornAppendage4.addBox(-5F, -6F, 1F, 1, 1, 1); - hornAppendage4.setRotationPoint(0F, -10F, 0F); - hornAppendage4.setTextureSize(64, 64); - hornAppendage4.mirror = true; - setRotation(hornAppendage4, 0F, 0F, 0F); - hornAppendage4.mirror = false; - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - Body.render(f5); - Torso.render(f5); - Head.render(f5); - leftArm.render(f5); - rightArm.render(f5); - leftLeg.render(f5); - leftFoot.render(f5); - rightLeg.render(f5); - rightFoot.render(f5); - leftHorn.render(f5); - hornAppendage1.render(f5); - hornAppendage2.render(f5); - rightHorn.render(f5); - hornAppendage3.render(f5); - hornAppendage4.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setLivingAnimations(EntityLivingBase par1EntityLivingBase, float par2, float par3, float par4) - { - EntityLowerGuardian entityLowerGuardian = (EntityLowerGuardian) par1EntityLivingBase; - int i = entityLowerGuardian.getAttackTimer(); - - if (i > 0) - { - this.rightLeg.rotateAngleX = -2.0F + 1.5F * this.func_78172_a((float) i - par4, 10.0F); - this.rightFoot.rotateAngleX = -2.0F + 1.5F * this.func_78172_a((float) i - par4, 10.0F); - //this.ironGolemLeftArm.rotateAngleX = -2.0F + 1.5F * this.func_78172_a((float)i - par4, 10.0F); - } - } - - private float func_78172_a(float par1, float par2) - { - return (Math.abs(par1 % par2 - par2 * 0.5F) - par2 * 0.25F) / (par2 * 0.25F); - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - this.Head.rotateAngleX = f4 / (180F / (float) Math.PI); - this.Head.rotateAngleY = f3 / (180F / (float) Math.PI); - this.leftLeg.rotateAngleX = MathHelper.cos(f * 0.3662F) * 1.0F * f1; - this.rightLeg.rotateAngleX = MathHelper.cos(f * 0.3662F + (float) Math.PI) * 1.0F * f1; - this.leftFoot.rotateAngleX = MathHelper.cos(f * 0.3662F) * 1.0F * f1; - this.rightFoot.rotateAngleX = MathHelper.cos(f * 0.3662F + (float) Math.PI) * 1.0F * f1; - this.rightArm.rotateAngleX = MathHelper.cos(f * 0.3662F + (float) Math.PI) * 1.0F * f1; - this.leftArm.rotateAngleX = MathHelper.cos(f * 0.3662F) * 1.0F * f1; - this.hornAppendage1.rotateAngleX = this.Head.rotateAngleX; - this.hornAppendage1.rotateAngleY = this.Head.rotateAngleY; - this.hornAppendage2.rotateAngleX = this.Head.rotateAngleX; - this.hornAppendage2.rotateAngleY = this.Head.rotateAngleY; - this.hornAppendage3.rotateAngleX = this.Head.rotateAngleX; - this.hornAppendage3.rotateAngleY = this.Head.rotateAngleY; - this.hornAppendage4.rotateAngleX = this.Head.rotateAngleX; - this.hornAppendage4.rotateAngleY = this.Head.rotateAngleY; - this.leftHorn.rotateAngleX = this.Head.rotateAngleX; - this.leftHorn.rotateAngleY = this.Head.rotateAngleY; - this.rightHorn.rotateAngleX = this.Head.rotateAngleX; - this.rightHorn.rotateAngleY = this.Head.rotateAngleY; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelMeteor.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelMeteor.java deleted file mode 100644 index 26a94989..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelMeteor.java +++ /dev/null @@ -1,90 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelMeteor extends ModelBase -{ - //fields - ModelRenderer Shape1; - ModelRenderer Shape2; - ModelRenderer Shape3; - ModelRenderer Shape4; - ModelRenderer Shape5; - ModelRenderer Shape6; - ModelRenderer Shape7; - - public ModelMeteor() - { - textureWidth = 64; - textureHeight = 64; - Shape1 = new ModelRenderer(this, 0, 0); - Shape1.addBox(-8F, -8F, -8F, 16, 16, 16); - Shape1.setRotationPoint(0F, 0F, 0F); - Shape1.setTextureSize(64, 64); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); - Shape2 = new ModelRenderer(this, 0, 32); - Shape2.addBox(3F, -10F, -1F, 12, 12, 12); - Shape2.setRotationPoint(0F, 0F, 0F); - Shape2.setTextureSize(64, 64); - Shape2.mirror = true; - setRotation(Shape2, 0F, 0F, 0F); - Shape3 = new ModelRenderer(this, 0, 32); - Shape3.addBox(0F, 0F, -10F, 12, 12, 12); - Shape3.setRotationPoint(0F, 0F, 0F); - Shape3.setTextureSize(64, 64); - Shape3.mirror = true; - setRotation(Shape3, 0F, 0F, 0F); - Shape4 = new ModelRenderer(this, 0, 32); - Shape4.addBox(1F, 2F, 2F, 12, 12, 12); - Shape4.setRotationPoint(0F, 0F, 0F); - Shape4.setTextureSize(64, 64); - Shape4.mirror = true; - setRotation(Shape4, 0F, 0F, 0F); - Shape5 = new ModelRenderer(this, 0, 32); - Shape5.addBox(-12F, -5F, 0F, 12, 12, 12); - Shape5.setRotationPoint(0F, 0F, 0F); - Shape5.setTextureSize(64, 64); - Shape5.mirror = true; - setRotation(Shape5, 0F, 0F, 0F); - Shape6 = new ModelRenderer(this, 0, 32); - Shape6.addBox(-13F, -2F, -11F, 12, 12, 12); - Shape6.setRotationPoint(0F, 0F, 0F); - Shape6.setTextureSize(64, 64); - Shape6.mirror = true; - setRotation(Shape6, 0F, 0F, 0F); - Shape7 = new ModelRenderer(this, 0, 32); - Shape7.addBox(-6F, -14F, -9F, 12, 12, 12); - Shape7.setRotationPoint(0F, 0F, 0F); - Shape7.setTextureSize(64, 64); - Shape7.mirror = true; - setRotation(Shape7, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - Shape1.render(f5); - Shape2.render(f5); - Shape3.render(f5); - Shape4.render(f5); - Shape5.render(f5); - Shape6.render(f5); - Shape7.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelMinorDemonGrunt.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelMinorDemonGrunt.java deleted file mode 100644 index 4519617d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelMinorDemonGrunt.java +++ /dev/null @@ -1,113 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.util.MathHelper; - -public class ModelMinorDemonGrunt extends ModelBase -{ - //fields - ModelRenderer head; - ModelRenderer chest; - ModelRenderer midrift; - ModelRenderer rightarm; - ModelRenderer leftarm; - ModelRenderer rightleg; - ModelRenderer leftleg; - ModelRenderer middle; - - public ModelMinorDemonGrunt() - { - textureWidth = 128; - textureHeight = 64; - - head = new ModelRenderer(this, 0, 0); - head.addBox(-4F, -8F, -4F, 8, 8, 8); - head.setRotationPoint(0F, 0F, 0F); - head.setTextureSize(128, 64); - head.mirror = true; - setRotation(head, 0F, 0F, 0F); - chest = new ModelRenderer(this, 16, 16); - chest.addBox(-5F, 0F, -3.5F, 10, 7, 7); - chest.setRotationPoint(0F, 0F, 0F); - chest.setTextureSize(128, 64); - chest.mirror = true; - setRotation(chest, 0F, 0F, 0F); - midrift = new ModelRenderer(this, 16, 33); - midrift.addBox(-4F, 7F, -2F, 8, 5, 4); - midrift.setRotationPoint(0F, 0F, 0F); - midrift.setTextureSize(128, 64); - midrift.mirror = true; - setRotation(midrift, 0F, 0F, 0F); - rightarm = new ModelRenderer(this, 50, 16); - rightarm.mirror = true; - rightarm.addBox(-3F, -2F, -2F, 4, 12, 4); - rightarm.setRotationPoint(-6F, 2F, 0F); - rightarm.setTextureSize(128, 64); - rightarm.mirror = true; - setRotation(rightarm, 0F, 0F, 0F); - rightarm.mirror = false; - leftarm = new ModelRenderer(this, 50, 16); - leftarm.addBox(-1F, -2F, -2F, 4, 12, 4); - leftarm.setRotationPoint(6F, 2F, 0F); - leftarm.setTextureSize(128, 64); - leftarm.mirror = true; - setRotation(leftarm, 0F, 0F, 0F); - rightleg = new ModelRenderer(this, 0, 16); - rightleg.mirror = true; - rightleg.addBox(-2F, 0F, -2F, 4, 12, 4); - rightleg.setRotationPoint(-2F, 12F, 0F); - rightleg.setTextureSize(128, 64); - rightleg.mirror = true; - setRotation(rightleg, 0F, 0F, 0F); - rightleg.mirror = false; - leftleg = new ModelRenderer(this, 0, 16); - leftleg.addBox(-2F, 0F, -2F, 4, 12, 4); - leftleg.setRotationPoint(2F, 12F, 0F); - leftleg.setTextureSize(128, 64); - leftleg.mirror = true; - setRotation(leftleg, 0F, 0F, 0F); - middle = new ModelRenderer(this, 16, 43); - middle.addBox(-2F, 7F, -3F, 4, 3, 1); - middle.setRotationPoint(0F, 0F, 0F); - middle.setTextureSize(128, 64); - middle.mirror = true; - setRotation(middle, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - head.render(f5); - chest.render(f5); - midrift.render(f5); - rightarm.render(f5); - leftarm.render(f5); - rightleg.render(f5); - leftleg.render(f5); - middle.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - - this.head.rotateAngleX = f4 / (180F / (float) Math.PI); - this.head.rotateAngleY = f3 / (180F / (float) Math.PI); - - this.leftleg.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1; - this.rightleg.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 1.0F * f1; - this.rightarm.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 1.0F * f1; - this.leftarm.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1; - } - -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelMinorDemonGruntGuardian.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelMinorDemonGruntGuardian.java deleted file mode 100644 index 663d5db1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelMinorDemonGruntGuardian.java +++ /dev/null @@ -1,181 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.util.MathHelper; - -public class ModelMinorDemonGruntGuardian extends ModelBase -{ - //fields - ModelRenderer head; - ModelRenderer chest; - ModelRenderer midrift; - ModelRenderer rightarm; - ModelRenderer leftarm; - ModelRenderer rightleg; - ModelRenderer leftleg; - ModelRenderer middle; - ModelRenderer helmet; - ModelRenderer leftClaw; - ModelRenderer rightClaw; - ModelRenderer leftShoulder; - ModelRenderer rightShoulder; - ModelRenderer bar1; - ModelRenderer bar2; - - public ModelMinorDemonGruntGuardian() - { - textureWidth = 128; - textureHeight = 64; - - head = new ModelRenderer(this, 0, 0); - head.addBox(-4F, -8F, -4F, 8, 8, 8); - head.setRotationPoint(0F, 0F, 0F); - head.setTextureSize(128, 64); - head.mirror = true; - setRotation(head, 0F, 0F, 0F); - chest = new ModelRenderer(this, 16, 16); - chest.addBox(-5F, 0F, -3.5F, 10, 7, 7); - chest.setRotationPoint(0F, 0F, 0F); - chest.setTextureSize(128, 64); - chest.mirror = true; - setRotation(chest, 0F, 0F, 0F); - midrift = new ModelRenderer(this, 16, 33); - midrift.addBox(-4F, 7F, -2F, 8, 5, 4); - midrift.setRotationPoint(0F, 0F, 0F); - midrift.setTextureSize(128, 64); - midrift.mirror = true; - setRotation(midrift, 0F, 0F, 0F); - rightarm = new ModelRenderer(this, 50, 16); - rightarm.mirror = true; - rightarm.addBox(-3F, -2F, -2F, 4, 12, 4); - rightarm.setRotationPoint(-6F, 2F, 0F); - rightarm.setTextureSize(128, 64); - rightarm.mirror = true; - setRotation(rightarm, 0F, 0F, 0F); - rightarm.mirror = false; - leftarm = new ModelRenderer(this, 50, 16); - leftarm.addBox(-1F, -2F, -2F, 4, 12, 4); - leftarm.setRotationPoint(6F, 2F, 0F); - leftarm.setTextureSize(128, 64); - leftarm.mirror = true; - setRotation(leftarm, 0F, 0F, 0F); - rightleg = new ModelRenderer(this, 0, 16); - rightleg.mirror = true; - rightleg.addBox(-2F, 0F, -2F, 4, 12, 4); - rightleg.setRotationPoint(-2F, 12F, 0F); - rightleg.setTextureSize(128, 64); - rightleg.mirror = true; - setRotation(rightleg, 0F, 0F, 0F); - rightleg.mirror = false; - leftleg = new ModelRenderer(this, 0, 16); - leftleg.addBox(-2F, 0F, -2F, 4, 12, 4); - leftleg.setRotationPoint(2F, 12F, 0F); - leftleg.setTextureSize(128, 64); - leftleg.mirror = true; - setRotation(leftleg, 0F, 0F, 0F); - middle = new ModelRenderer(this, 16, 43); - middle.addBox(-2F, 7F, -3F, 4, 3, 1); - middle.setRotationPoint(0F, 0F, 0F); - middle.setTextureSize(128, 64); - middle.mirror = true; - setRotation(middle, 0F, 0F, 0F); - helmet = new ModelRenderer(this, 67, 0); - helmet.addBox(-4.5F, -8.5F, -4.5F, 9, 9, 9); - helmet.setRotationPoint(0F, 0F, 0F); - helmet.setTextureSize(128, 64); - helmet.mirror = true; - setRotation(helmet, 0F, 0F, 0F); - leftClaw = new ModelRenderer(this, 67, 23); - leftClaw.addBox(1.5F, 6F, -2.5F, 2, 6, 5); - leftClaw.setRotationPoint(6F, 2F, 0F); - leftClaw.setTextureSize(128, 64); - leftClaw.mirror = true; - setRotation(leftClaw, 0F, 0F, 0F); - rightClaw = new ModelRenderer(this, 67, 23); - rightClaw.mirror = true; - rightClaw.addBox(-3.5F, 6F, -2.5F, 2, 6, 5); - rightClaw.setRotationPoint(-6F, 2F, 0F); - rightClaw.setTextureSize(128, 64); - rightClaw.mirror = true; - setRotation(rightClaw, 0F, 0F, 0F); - rightClaw.mirror = false; - leftShoulder = new ModelRenderer(this, 67, 35); - leftShoulder.addBox(-1F, -2.5F, -2.5F, 5, 4, 5); - leftShoulder.setRotationPoint(6F, 2F, 0F); - leftShoulder.setTextureSize(128, 64); - leftShoulder.mirror = true; - setRotation(leftShoulder, 0F, 0F, 0F); - rightShoulder = new ModelRenderer(this, 67, 35); - rightShoulder.mirror = true; - rightShoulder.addBox(-4F, -2.5F, -2.5F, 5, 4, 5); - rightShoulder.setRotationPoint(-6F, 2F, 0F); - rightShoulder.setTextureSize(128, 64); - rightShoulder.mirror = true; - setRotation(rightShoulder, 0F, 0F, 0F); - rightShoulder.mirror = false; - bar1 = new ModelRenderer(this, 67, 20); - bar1.addBox(-3F, 3F, 4F, 14, 1, 1); - bar1.setRotationPoint(0F, 0F, 0F); - bar1.setTextureSize(128, 64); - bar1.mirror = true; - setRotation(bar1, 0F, 0F, 0.7853982F); - bar2 = new ModelRenderer(this, 67, 20); - bar2.addBox(-11F, 3F, 4F, 14, 1, 1); - bar2.setRotationPoint(0F, 0F, 0F); - bar2.setTextureSize(128, 64); - bar2.mirror = true; - setRotation(bar2, 0F, 0F, -0.7853982F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - head.render(f5); - chest.render(f5); - midrift.render(f5); - rightarm.render(f5); - leftarm.render(f5); - rightleg.render(f5); - leftleg.render(f5); - middle.render(f5); - helmet.render(f5); - leftClaw.render(f5); - rightClaw.render(f5); - leftShoulder.render(f5); - rightShoulder.render(f5); - bar1.render(f5); - bar2.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - - this.head.rotateAngleX = f4 / (180F / (float) Math.PI); - this.head.rotateAngleY = f3 / (180F / (float) Math.PI); - - this.helmet.rotateAngleX = this.head.rotateAngleX; - this.helmet.rotateAngleY = this.head.rotateAngleY; - - this.leftleg.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1; - this.rightleg.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 1.0F * f1; - this.rightarm.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 1.0F * f1; - this.leftarm.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1; - - this.leftClaw.rotateAngleX = this.leftarm.rotateAngleX; - this.leftShoulder.rotateAngleX = this.leftarm.rotateAngleX; - - this.rightClaw.rotateAngleX = this.rightarm.rotateAngleX; - this.rightShoulder.rotateAngleX = this.rightarm.rotateAngleX; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelOmegaArmour.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelOmegaArmour.java deleted file mode 100644 index f09589aa..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelOmegaArmour.java +++ /dev/null @@ -1,898 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBiped; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelOmegaArmour extends ModelBiped -{ - // ModelRenderer head; -// ModelRenderer body; -// ModelRenderer rightarm; -// ModelRenderer leftarm; -// ModelRenderer rightleg; -// ModelRenderer leftleg; - ModelRenderer leftFacePlate; - ModelRenderer rightFacePlate; - ModelRenderer facePlate1; - ModelRenderer facePlate2; - ModelRenderer facePlate3; - ModelRenderer leftWingPlate1; - ModelRenderer leftWingPlate2; - ModelRenderer rightWingPlate1; - ModelRenderer rightWingPlate2; - ModelRenderer topPlate1; - ModelRenderer topPlate2; - ModelRenderer topPlate3; - ModelRenderer backPlate1; - ModelRenderer backPlate2; - ModelRenderer backPlate3; - ModelRenderer backPlate4; - ModelRenderer backPlate5; - ModelRenderer backPlate6; - ModelRenderer eyePlate; - ModelRenderer rightArmMain; - ModelRenderer rightKnucklePlate; - ModelRenderer rightKnuckleBrace; - ModelRenderer rightKnuckle1; - ModelRenderer rightKnuckle2; - ModelRenderer rightKnuckle3; - ModelRenderer rightKnuckle4; - ModelRenderer rightKnuckle5; - ModelRenderer rightKnuckle6; - ModelRenderer rightShoulder1; - ModelRenderer rightShoulder2; - ModelRenderer rightShoulder3; - ModelRenderer mainPlate; - ModelRenderer chestPlate1; - ModelRenderer chestPlate2; - ModelRenderer chestPlate3; - ModelRenderer chestPlate4; - ModelRenderer chestPlate5; - ModelRenderer chestPlate6; - ModelRenderer belt; - ModelRenderer leftArmMain; - ModelRenderer leftKnucklePlate; - ModelRenderer leftKnuckleBrace; - ModelRenderer leftKnuckle1; - ModelRenderer leftKnuckle2; - ModelRenderer leftKnuckle3; - ModelRenderer leftKnuckle4; - ModelRenderer leftKnuckle5; - ModelRenderer leftKnuckle6; - ModelRenderer leftShoulder1; - ModelRenderer leftShoulder2; - ModelRenderer leftShoulder3; - ModelRenderer leftBootBottom; - ModelRenderer leftBootPlate; - ModelRenderer leftBootBrace; - ModelRenderer leftBootWing1; - ModelRenderer leftBootWing2; - ModelRenderer rightBootBottom; - ModelRenderer rightBootPlate; - ModelRenderer rightBootBrace; - ModelRenderer rightBootWing1; - ModelRenderer rightBootWing2; - ModelRenderer leftLegSidePlate; - ModelRenderer leftLegMain; - ModelRenderer leftLegPlate1; - ModelRenderer leftLegPlate2; - ModelRenderer leftLegPlate3; - ModelRenderer leftLegPlate4; - ModelRenderer rightLegSidePlate; - ModelRenderer rightLegMain; - ModelRenderer rightLegPlate1; - ModelRenderer rightLegPlate2; - ModelRenderer rightLegPlate3; - ModelRenderer rightLegPlate4; - - public ModelOmegaArmour(float f, boolean addHelmet, boolean addChestPiece, boolean addLeggings, boolean addBoots) - { - super(f, 0.0f, 128, 128); - textureWidth = 128; - textureHeight = 128; - -// boolean addHelmet = true; -// boolean addChestPiece = true; -// boolean addLeggings = true; -// boolean addBoots = true; - - /* Duplicate player model */ - { -// head = new ModelRenderer(this, 0, 0); -// head.addBox(-4F, -8F, -4F, 8, 8, 8); -// head.setRotationPoint(0F, 0F, 0F); -// head.setTextureSize(128, 128); -// head.mirror = true; -// setRotation(head, 0F, 0F, 0F); -// body = new ModelRenderer(this, 16, 16); -// body.addBox(-4F, 0F, -2F, 8, 12, 4); -// body.setRotationPoint(0F, 0F, 0F); -// body.setTextureSize(128, 128); -// body.mirror = true; -// setRotation(body, 0F, 0F, 0F); -// rightarm = new ModelRenderer(this, 40, 16); -// rightarm.addBox(-3F, -2F, -2F, 4, 12, 4); -// rightarm.setRotationPoint(0F, 0F, 0F); -// rightarm.setTextureSize(128, 128); -// rightarm.mirror = true; -// setRotation(rightarm, 0F, 0F, 0F); -// leftarm = new ModelRenderer(this, 40, 16); -// leftarm.addBox(-1F, -2F, -2F, 4, 12, 4); -// leftarm.setRotationPoint(0F, 0F, 0F); -// leftarm.setTextureSize(128, 128); -// leftarm.mirror = true; -// setRotation(leftarm, 0F, 0F, 0F); -// rightleg = new ModelRenderer(this, 0, 16); -// rightleg.addBox(-2F, 0F, -2F, 4, 12, 4); -// rightleg.setRotationPoint(-2F, 12F, 0F); -// rightleg.setTextureSize(128, 128); -// rightleg.mirror = true; -// setRotation(rightleg, 0F, 0F, 0F); -// leftleg = new ModelRenderer(this, 0, 16); -// leftleg.addBox(-2F, 0F, -2F, 4, 12, 4); -// leftleg.setRotationPoint(2F, 12F, 0F); -// leftleg.setTextureSize(128, 128); -// leftleg.mirror = true; -// setRotation(leftleg, 0F, 0F, 0F); - } - - /* Helmet */ - { - leftFacePlate = new ModelRenderer(this, 66, 52); - leftFacePlate.addBox(-2F, -5F, -5F, 5, 4, 1); - leftFacePlate.setRotationPoint(0F, 0F, 0F); - leftFacePlate.setTextureSize(128, 128); - leftFacePlate.mirror = true; - setRotation(leftFacePlate, 0.296706F, -0.3490659F, -0.0872665F); - - rightFacePlate = new ModelRenderer(this, 66, 52); - rightFacePlate.mirror = true; - rightFacePlate.addBox(-3F, -5F, -5F, 5, 4, 1); - rightFacePlate.setRotationPoint(0F, 0F, 0F); - rightFacePlate.setTextureSize(128, 128); - rightFacePlate.mirror = true; - setRotation(rightFacePlate, 0.296706F, 0.3490659F, 0.0872665F); - rightFacePlate.mirror = false; - - facePlate1 = new ModelRenderer(this, 79, 52); - facePlate1.addBox(-5F, -8F, -5F, 10, 3, 1); - facePlate1.setRotationPoint(0F, 0F, 0F); - facePlate1.setTextureSize(128, 128); - facePlate1.mirror = true; - setRotation(facePlate1, 0F, 0F, 0F); - - facePlate2 = new ModelRenderer(this, 79, 57); - facePlate2.addBox(-1F, -5F, -5F, 2, 1, 1); - facePlate2.setRotationPoint(0F, 0F, 0F); - facePlate2.setTextureSize(128, 128); - facePlate2.mirror = true; - setRotation(facePlate2, 0F, 0F, 0F); - - facePlate3 = new ModelRenderer(this, 79, 60); - facePlate3.addBox(-3F, -4F, -5F, 6, 1, 1); - facePlate3.setRotationPoint(0F, 0F, 0F); - facePlate3.setTextureSize(128, 128); - facePlate3.mirror = true; - setRotation(facePlate3, 0F, 0F, 0F); - - leftWingPlate1 = new ModelRenderer(this, 66, 58); - leftWingPlate1.addBox(5F, -5F, -2.5F, 1, 5, 8); - leftWingPlate1.setRotationPoint(0F, 0F, 0F); - leftWingPlate1.setTextureSize(128, 128); - leftWingPlate1.mirror = true; - setRotation(leftWingPlate1, 0.2617994F, 0.1745329F, 0F); - - leftWingPlate2 = new ModelRenderer(this, 66, 72); - leftWingPlate2.addBox(5F, -8F, -2F, 1, 3, 10); - leftWingPlate2.setRotationPoint(0F, 0F, 0F); - leftWingPlate2.setTextureSize(128, 128); - leftWingPlate2.mirror = true; - setRotation(leftWingPlate2, 0.2617994F, 0.1745329F, 0F); - - rightWingPlate1 = new ModelRenderer(this, 66, 58); - rightWingPlate1.mirror = true; - rightWingPlate1.addBox(-6F, -5F, -2.5F, 1, 5, 8); - rightWingPlate1.setRotationPoint(0F, 0F, 0F); - rightWingPlate1.setTextureSize(128, 128); - rightWingPlate1.mirror = true; - setRotation(rightWingPlate1, 0.2617994F, -0.1745329F, 0F); - rightWingPlate1.mirror = false; - - rightWingPlate2 = new ModelRenderer(this, 66, 72); - rightWingPlate2.mirror = true; - rightWingPlate2.addBox(-6F, -8F, -2F, 1, 3, 10); - rightWingPlate2.setRotationPoint(0F, 0F, 0F); - rightWingPlate2.setTextureSize(128, 128); - rightWingPlate2.mirror = true; - setRotation(rightWingPlate2, 0.2617994F, -0.1745329F, 0F); - rightWingPlate2.mirror = false; - - topPlate1 = new ModelRenderer(this, 79, 72); - topPlate1.addBox(-5F, -9F, -0.5F, 10, 1, 5); - topPlate1.setRotationPoint(0F, 0F, 0F); - topPlate1.setTextureSize(128, 128); - topPlate1.mirror = true; - setRotation(topPlate1, 0.4363323F, 0F, 0F); - - topPlate2 = new ModelRenderer(this, 79, 72); - topPlate2.addBox(-5F, -8F, 1.5F, 10, 1, 5); - topPlate2.setRotationPoint(0F, 0F, 0F); - topPlate2.setTextureSize(128, 128); - topPlate2.mirror = true; - setRotation(topPlate2, 0.4363323F, 0F, 0F); - - topPlate3 = new ModelRenderer(this, 79, 72); - topPlate3.addBox(-5F, -7F, 3.5F, 10, 1, 5); - topPlate3.setRotationPoint(0F, 0F, 0F); - topPlate3.setTextureSize(128, 128); - topPlate3.mirror = true; - setRotation(topPlate3, 0.4363323F, 0F, 0F); - - backPlate1 = new ModelRenderer(this, 66, 86); - backPlate1.mirror = true; - backPlate1.addBox(-4.5F, -7F, 6F, 6, 4, 1); - backPlate1.setRotationPoint(0F, 0F, 0F); - backPlate1.setTextureSize(128, 128); - backPlate1.mirror = true; - setRotation(backPlate1, 0.2617994F, -0.2617994F, 0F); - backPlate1.mirror = false; - - backPlate2 = new ModelRenderer(this, 66, 86); - backPlate2.mirror = true; - backPlate2.addBox(-4.5F, -6.5F, 6F, 6, 4, 1); - backPlate2.setRotationPoint(0F, 2F, 0F); - backPlate2.setTextureSize(128, 128); - backPlate2.mirror = true; - setRotation(backPlate2, 0.2617994F, -0.2617994F, 0F); - backPlate2.mirror = false; - - backPlate3 = new ModelRenderer(this, 66, 86); - backPlate3.mirror = true; - backPlate3.addBox(-4.5F, -6F, 6F, 6, 4, 1); - backPlate3.setRotationPoint(0F, 4F, 0F); - backPlate3.setTextureSize(128, 128); - backPlate3.mirror = true; - setRotation(backPlate3, 0.2617994F, -0.2617994F, 0F); - backPlate3.mirror = false; - - backPlate4 = new ModelRenderer(this, 66, 86); - backPlate4.addBox(-1.5F, -7F, 6F, 6, 4, 1); - backPlate4.setRotationPoint(0F, 0F, 0F); - backPlate4.setTextureSize(128, 128); - backPlate4.mirror = true; - setRotation(backPlate4, 0.2617994F, 0.2617994F, 0F); - - backPlate5 = new ModelRenderer(this, 66, 86); - backPlate5.addBox(-1.5F, -7F, 6F, 6, 4, 1); - backPlate5.setRotationPoint(0F, 2.5F, 0F); - backPlate5.setTextureSize(128, 128); - backPlate5.mirror = true; - setRotation(backPlate5, 0.2617994F, 0.2617994F, 0F); - - backPlate6 = new ModelRenderer(this, 66, 86); - backPlate6.addBox(-1.5F, -7F, 6F, 6, 4, 1); - backPlate6.setRotationPoint(0F, 5F, 0F); - backPlate6.setTextureSize(128, 128); - backPlate6.mirror = true; - setRotation(backPlate6, 0.2617994F, 0.2617994F, 0F); - - eyePlate = new ModelRenderer(this, 63, 38); - eyePlate.addBox(-4F, -5F, -4.5F, 8, 2, 1); - eyePlate.setRotationPoint(0F, 0F, 0F); - eyePlate.setTextureSize(128, 128); - eyePlate.mirror = true; - setRotation(eyePlate, 0F, 0F, 0F); - } - - /* Right arm */ - { - rightArmMain = new ModelRenderer(this, 0, 33); - rightArmMain.mirror = true; - rightArmMain.addBox(-3.5F, -2.5F, -2.5F, 5, 11, 5); - rightArmMain.setRotationPoint(0F, 0F, 0F); - rightArmMain.setTextureSize(128, 128); - rightArmMain.mirror = true; - setRotation(rightArmMain, 0F, 0F, 0F); - - rightKnucklePlate = new ModelRenderer(this, 0, 50); - rightKnucklePlate.addBox(-4F, 4F, -1.5F, 1, 5, 3); - rightKnucklePlate.setRotationPoint(0F, 0F, 0F); - rightKnucklePlate.setTextureSize(128, 128); - rightKnucklePlate.mirror = true; - setRotation(rightKnucklePlate, 0F, 0F, 0F); - - rightKnuckleBrace = new ModelRenderer(this, 9, 50); - rightKnuckleBrace.mirror = true; - rightKnuckleBrace.addBox(-4F, 3F, -3F, 2, 1, 6); - rightKnuckleBrace.setRotationPoint(0F, 0F, 0F); - rightKnuckleBrace.setTextureSize(128, 128); - setRotation(rightKnuckleBrace, 0F, 0F, 0F); - - rightKnuckle1 = new ModelRenderer(this, 0, 59); - rightKnuckle1.mirror = true; - rightKnuckle1.addBox(-4F, 7F, -2.5F, 1, 6, 1); - rightKnuckle1.setRotationPoint(0F, 0F, 0F); - rightKnuckle1.setTextureSize(128, 128); - setRotation(rightKnuckle1, 0F, 0F, 0F); - - rightKnuckle2 = new ModelRenderer(this, 5, 59); - rightKnuckle2.mirror = true; - rightKnuckle2.addBox(-3F, 11F, -2.5F, 1, 3, 1); - rightKnuckle2.setRotationPoint(0F, 0F, 0F); - rightKnuckle2.setTextureSize(128, 128); - setRotation(rightKnuckle2, 0F, 0F, 0F); - - rightKnuckle3 = new ModelRenderer(this, 0, 59); - rightKnuckle3.mirror = true; - rightKnuckle3.addBox(-4.5F, 8F, -0.5F, 1, 6, 1); - rightKnuckle3.setRotationPoint(0F, 0F, 0F); - rightKnuckle3.setTextureSize(128, 128); - setRotation(rightKnuckle3, 0F, 0F, 0F); - - rightKnuckle4 = new ModelRenderer(this, 5, 59); - rightKnuckle4.mirror = true; - rightKnuckle4.addBox(-3.5F, 12F, -0.5F, 1, 3, 1); - rightKnuckle4.setRotationPoint(0F, 0F, 0F); - rightKnuckle4.setTextureSize(128, 128); - setRotation(rightKnuckle4, 0F, 0F, 0F); - - rightKnuckle5 = new ModelRenderer(this, 0, 59); - rightKnuckle5.mirror = true; - rightKnuckle5.addBox(-4F, 7F, 1.5F, 1, 6, 1); - rightKnuckle5.setRotationPoint(0F, 0F, 0F); - rightKnuckle5.setTextureSize(128, 128); - setRotation(rightKnuckle5, 0F, 0F, 0F); - - rightKnuckle6 = new ModelRenderer(this, 5, 59); - rightKnuckle6.mirror = true; - rightKnuckle6.addBox(-3F, 11F, 1.5F, 1, 3, 1); - rightKnuckle6.setRotationPoint(0F, 0F, 0F); - rightKnuckle6.setTextureSize(128, 128); - setRotation(rightKnuckle6, 0F, 0F, 0F); - - rightShoulder1 = new ModelRenderer(this, 10, 59); - rightShoulder1.mirror = true; - rightShoulder1.addBox(-5F, -3F, -4F, 1, 4, 8); - rightShoulder1.setRotationPoint(0F, 0F, 0F); - rightShoulder1.setTextureSize(128, 128); - setRotation(rightShoulder1, 0F, 0F, 0.6981317F); - - rightShoulder2 = new ModelRenderer(this, 10, 59); - rightShoulder2.mirror = true; - rightShoulder2.addBox(-4F, -1.5F, -4F, 1, 4, 8); - rightShoulder2.setRotationPoint(0F, 0F, 0F); - rightShoulder2.setTextureSize(128, 128); - setRotation(rightShoulder2, 0F, 0F, 0.6981317F); - - rightShoulder3 = new ModelRenderer(this, 10, 59); - rightShoulder3.mirror = true; - rightShoulder3.addBox(-3F, 0F, -4F, 1, 4, 8); - rightShoulder3.setRotationPoint(0F, 0F, 0F); - rightShoulder3.setTextureSize(128, 128); - setRotation(rightShoulder3, 0F, 0F, 0.6981317F); - } - - /* Chest piece main body */ - { - mainPlate = new ModelRenderer(this, 31, 33); - mainPlate.addBox(-4.5F, -0.5F, -3F, 9, 12, 6); - mainPlate.setRotationPoint(0F, 0F, 0F); - mainPlate.setTextureSize(128, 128); - mainPlate.mirror = true; - setRotation(mainPlate, 0F, 0F, 0F); - - chestPlate1 = new ModelRenderer(this, 63, 33); - chestPlate1.addBox(-1.5F, 3F, -4.5F, 6, 2, 1); - chestPlate1.setRotationPoint(0F, -3F, -1F); - chestPlate1.setTextureSize(128, 128); - setRotation(chestPlate1, 0.3490659F, 0F, -0.2617994F); - - chestPlate2 = new ModelRenderer(this, 63, 33); - chestPlate2.addBox(-1.5F, 3F, -4.5F, 6, 2, 1); - chestPlate2.setRotationPoint(0F, -1.5F, -1F); - chestPlate2.setTextureSize(128, 128); - setRotation(chestPlate2, 0.3490659F, 0F, -0.2617994F); - - chestPlate3 = new ModelRenderer(this, 63, 33); - chestPlate3.addBox(-1.5F, 3F, -4.5F, 6, 2, 1); - chestPlate3.setRotationPoint(0F, 0F, -1F); - chestPlate3.setTextureSize(128, 128); - setRotation(chestPlate3, 0.3490659F, 0F, -0.2617994F); - - chestPlate4 = new ModelRenderer(this, 63, 33); - chestPlate4.mirror = true; - chestPlate4.addBox(-4.5F, 3F, -4.5F, 6, 2, 1); - chestPlate4.setRotationPoint(0F, -3F, -1F); - chestPlate4.setTextureSize(128, 128); - setRotation(chestPlate4, 0.3490659F, 0F, 0.2617994F); - - chestPlate5 = new ModelRenderer(this, 63, 33); - chestPlate5.mirror = true; - chestPlate5.addBox(-4.5F, 3F, -4.5F, 6, 2, 1); - chestPlate5.setRotationPoint(0F, -1.5F, -1F); - chestPlate5.setTextureSize(128, 128); - setRotation(chestPlate5, 0.3490659F, 0F, 0.2617994F); - - chestPlate6 = new ModelRenderer(this, 63, 33); - chestPlate6.mirror = true; - chestPlate6.addBox(-4.5F, 3F, -4.5F, 6, 2, 1); - chestPlate6.setRotationPoint(0F, 0F, -1F); - chestPlate6.setTextureSize(128, 128); - setRotation(chestPlate6, 0.3490659F, 0F, 0.2617994F); - } - - /* Left arm */ - { - leftArmMain = new ModelRenderer(this, 0, 33); - leftArmMain.addBox(-1.5F, -2.533333F, -2.5F, 5, 11, 5); - leftArmMain.setRotationPoint(0F, 0F, 0F); - leftArmMain.setTextureSize(128, 128); - leftArmMain.mirror = true; - setRotation(leftArmMain, 0F, 0F, 0F); - - leftKnucklePlate = new ModelRenderer(this, 0, 50); - leftKnucklePlate.addBox(3F, 4F, -1.5F, 1, 5, 3); - leftKnucklePlate.setRotationPoint(0F, 0F, 0F); - leftKnucklePlate.setTextureSize(128, 128); - leftKnucklePlate.mirror = true; - setRotation(leftKnucklePlate, 0F, 0F, 0F); - - leftKnuckleBrace = new ModelRenderer(this, 9, 50); - leftKnuckleBrace.addBox(2F, 3F, -3F, 2, 1, 6); - leftKnuckleBrace.setRotationPoint(0F, 0F, 0F); - leftKnuckleBrace.setTextureSize(128, 128); - leftKnuckleBrace.mirror = true; - setRotation(leftKnuckleBrace, 0F, 0F, 0F); - - leftKnuckle1 = new ModelRenderer(this, 0, 59); - leftKnuckle1.addBox(3F, 7F, -2.5F, 1, 6, 1); - leftKnuckle1.setRotationPoint(0F, 0F, 0F); - leftKnuckle1.setTextureSize(128, 128); - leftKnuckle1.mirror = true; - setRotation(leftKnuckle1, 0F, 0F, 0F); - - leftKnuckle2 = new ModelRenderer(this, 5, 59); - leftKnuckle2.addBox(2F, 11F, -2.5F, 1, 3, 1); - leftKnuckle2.setRotationPoint(0F, 0F, 0F); - leftKnuckle2.setTextureSize(128, 128); - leftKnuckle2.mirror = true; - setRotation(leftKnuckle2, 0F, 0F, 0F); - - leftKnuckle3 = new ModelRenderer(this, 0, 59); - leftKnuckle3.addBox(3.5F, 8F, -0.5F, 1, 6, 1); - leftKnuckle3.setRotationPoint(0F, 0F, 0F); - leftKnuckle3.setTextureSize(128, 128); - leftKnuckle3.mirror = true; - setRotation(leftKnuckle3, 0F, 0F, 0F); - - leftKnuckle4 = new ModelRenderer(this, 5, 59); - leftKnuckle4.addBox(2.5F, 12F, -0.5F, 1, 3, 1); - leftKnuckle4.setRotationPoint(0F, 0F, 0F); - leftKnuckle4.setTextureSize(128, 128); - leftKnuckle4.mirror = true; - setRotation(leftKnuckle4, 0F, 0F, 0F); - - leftKnuckle5 = new ModelRenderer(this, 0, 59); - leftKnuckle5.addBox(3F, 7F, 1.5F, 1, 6, 1); - leftKnuckle5.setRotationPoint(0F, 0F, 0F); - leftKnuckle5.setTextureSize(128, 128); - leftKnuckle5.mirror = true; - setRotation(leftKnuckle5, 0F, 0F, 0F); - - leftKnuckle6 = new ModelRenderer(this, 5, 59); - leftKnuckle6.addBox(2F, 11F, 1.5F, 1, 3, 1); - leftKnuckle6.setRotationPoint(0F, 0F, 0F); - leftKnuckle6.setTextureSize(128, 128); - leftKnuckle6.mirror = true; - setRotation(leftKnuckle6, 0F, 0F, 0F); - - leftShoulder1 = new ModelRenderer(this, 10, 59); - leftShoulder1.addBox(4F, -3F, -4F, 1, 4, 8); - leftShoulder1.setRotationPoint(0F, 0F, 0F); - leftShoulder1.setTextureSize(128, 128); - leftShoulder1.mirror = true; - setRotation(leftShoulder1, 0F, 0F, -0.6981317F); - - leftShoulder2 = new ModelRenderer(this, 10, 59); - leftShoulder2.addBox(3F, -1.5F, -4F, 1, 4, 8); - leftShoulder2.setRotationPoint(0F, 0F, 0F); - leftShoulder2.setTextureSize(128, 128); - leftShoulder2.mirror = true; - setRotation(leftShoulder2, 0F, 0F, -0.6981317F); - - leftShoulder3 = new ModelRenderer(this, 10, 59); - leftShoulder3.addBox(2F, 0F, -4F, 1, 4, 8); - leftShoulder3.setRotationPoint(0F, 0F, 0F); - leftShoulder3.setTextureSize(128, 128); - leftShoulder3.mirror = true; - setRotation(leftShoulder3, 0F, 0F, -0.6981317F); - } - - /* Left boot */ - { - leftBootBottom = new ModelRenderer(this, 0, 84); - leftBootBottom.addBox(-2.5F, 9.5F, -5.5F, 6, 3, 8); - leftBootBottom.setRotationPoint(0F, 0F, 0F); - leftBootBottom.setTextureSize(128, 128); - leftBootBottom.mirror = true; - setRotation(leftBootBottom, 0F, 0F, 0F); - - leftBootPlate = new ModelRenderer(this, 0, 96); - leftBootPlate.addBox(-2F, 6F, 6F, 5, 3, 1); - leftBootPlate.setRotationPoint(0F, 0F, 0F); - leftBootPlate.setTextureSize(128, 128); - leftBootPlate.mirror = true; - setRotation(leftBootPlate, -1.151917F, 0F, 0F); - - leftBootBrace = new ModelRenderer(this, 0, 72); - leftBootBrace.addBox(-2F, 7F, -3F, 5, 3, 6); - leftBootBrace.setRotationPoint(0F, 0F, 0F); - leftBootBrace.setTextureSize(128, 128); - leftBootBrace.mirror = true; - setRotation(leftBootBrace, 0F, 0F, 0F); - - leftBootWing1 = new ModelRenderer(this, 13, 96); - leftBootWing1.addBox(3F, 7F, -4F, 1, 1, 7); - leftBootWing1.setRotationPoint(0F, 0F, 0F); - leftBootWing1.setTextureSize(128, 128); - leftBootWing1.mirror = true; - setRotation(leftBootWing1, 0.2617994F, 0.1745329F, 0F); - - leftBootWing2 = new ModelRenderer(this, 13, 96); - leftBootWing2.addBox(3F, 8F, -5F, 1, 1, 7); - leftBootWing2.setRotationPoint(0F, 0F, 0F); - leftBootWing2.setTextureSize(128, 128); - leftBootWing2.mirror = true; - setRotation(leftBootWing2, 0.2617994F, 0.1745329F, 0F); - } - - - /* Right boot */ - { - rightBootBottom = new ModelRenderer(this, 0, 84); - rightBootBottom.mirror = true; - rightBootBottom.addBox(-3.5F, 9.5F, -5.5F, 6, 3, 8); - rightBootBottom.setRotationPoint(0F, 0F, 0F); - rightBootBottom.setTextureSize(128, 128); - setRotation(rightBootBottom, 0F, 0F, 0F); - - rightBootPlate = new ModelRenderer(this, 0, 96); - rightBootPlate.mirror = true; - rightBootPlate.addBox(-3F, 6F, 6F, 5, 3, 1); - rightBootPlate.setRotationPoint(0F, 0F, 0F); - rightBootPlate.setTextureSize(128, 128); - setRotation(rightBootPlate, -1.151917F, 0F, 0F); - - rightBootBrace = new ModelRenderer(this, 0, 72); - rightBootBrace.mirror = true; - rightBootBrace.addBox(-3F, 7F, -3F, 5, 3, 6); - rightBootBrace.setRotationPoint(0F, 0F, 0F); - rightBootBrace.setTextureSize(128, 128); - setRotation(rightBootBrace, 0F, 0F, 0F); - - rightBootWing1 = new ModelRenderer(this, 13, 96); - rightBootWing1.mirror = true; - rightBootWing1.addBox(-4F, 7F, -4F, 1, 1, 7); - rightBootWing1.setRotationPoint(0F, 0F, 0F); - rightBootWing1.setTextureSize(128, 128); - setRotation(rightBootWing1, 0.2617994F, -0.1745329F, 0F); - - rightBootWing2 = new ModelRenderer(this, 13, 96); - rightBootWing2.mirror = true; - rightBootWing2.addBox(-4F, 8F, -5F, 1, 1, 7); - rightBootWing2.setRotationPoint(0F, 0F, 0F); - rightBootWing2.setTextureSize(128, 128); - setRotation(rightBootWing2, 0.2617994F, -0.1745329F, 0F); - } - - /* Main legs */ - { - belt = new ModelRenderer(this, 31, 52); - belt.addBox(-5F, 9.5F, -3.5F, 10, 2, 7); - belt.setRotationPoint(0F, 0F, 0F); - belt.setTextureSize(128, 128); - belt.mirror = true; - setRotation(belt, 0F, 0F, 0F); - } - - /* Left leg */ - { - leftLegSidePlate = new ModelRenderer(this, 40, 93); - leftLegSidePlate.addBox(-0.5F, 12F, -3F, 1, 6, 6); - leftLegSidePlate.setRotationPoint(-2F, -12F, 0F); - leftLegSidePlate.setTextureSize(128, 128); - leftLegSidePlate.mirror = true; - setRotation(leftLegSidePlate, 0F, 0F, -0.3490659F); - - leftLegMain = new ModelRenderer(this, 40, 93); - leftLegMain.addBox(-0.5F, 11F, -2.5F, 5, 9, 5); - leftLegMain.setRotationPoint(-2F, -12F, 0F); - leftLegMain.setTextureSize(128, 128); - leftLegMain.mirror = true; - setRotation(leftLegMain, 0F, 0F, 0F); - - leftLegPlate1 = new ModelRenderer(this, 46, 71); - leftLegPlate1.addBox(-2.5F, 11F, -3F, 2, 6, 1); - leftLegPlate1.setRotationPoint(-2F, -12F, 0F); - leftLegPlate1.setTextureSize(128, 128); - leftLegPlate1.mirror = true; - setRotation(leftLegPlate1, 0F, 0F, -0.3490659F); - - leftLegPlate2 = new ModelRenderer(this, 46, 71); - leftLegPlate2.addBox(-2.5F, 11F, 2F, 2, 6, 1); - leftLegPlate2.setRotationPoint(-2F, -12F, 0F); - leftLegPlate2.setTextureSize(128, 128); - leftLegPlate2.mirror = true; - setRotation(leftLegPlate2, 0F, 0F, -0.3490659F); - - leftLegPlate3 = new ModelRenderer(this, 31, 62); - leftLegPlate3.addBox(0F, 11.9F, -1F, 4, 7, 1); - leftLegPlate3.setRotationPoint(-2F, -12F, 0F); - leftLegPlate3.setTextureSize(128, 128); - leftLegPlate3.mirror = true; - setRotation(leftLegPlate3, -0.1745329F, 0F, 0F); - - leftLegPlate4 = new ModelRenderer(this, 42, 62); - leftLegPlate4.addBox(0F, 11.9F, 0F, 4, 7, 1); - leftLegPlate4.setRotationPoint(-2F, -12F, 0F); - leftLegPlate4.setTextureSize(128, 128); - leftLegPlate4.mirror = true; - setRotation(leftLegPlate4, 0.1745329F, 0F, 0F); - } - - /* Right leg */ - { - rightLegSidePlate = new ModelRenderer(this, 31, 71); - rightLegSidePlate.mirror = true; - rightLegSidePlate.addBox(-0.5F, 12F, -3F, 1, 6, 6); - rightLegSidePlate.setRotationPoint(2F, -12F, 0F); - rightLegSidePlate.setTextureSize(128, 128); - setRotation(rightLegSidePlate, 0F, 0F, 0.3490659F); - - rightLegMain = new ModelRenderer(this, 40, 93); - rightLegMain.mirror = true; - rightLegMain.addBox(-4.5F, 11F, -2.5F, 5, 9, 5); - rightLegMain.setRotationPoint(2F, -12F, 0F); - rightLegMain.setTextureSize(128, 128); - setRotation(rightLegMain, 0F, 0F, 0F); - - rightLegPlate1 = new ModelRenderer(this, 46, 71); - rightLegPlate1.mirror = true; - rightLegPlate1.addBox(0.5F, 11F, -3F, 2, 6, 1); - rightLegPlate1.setRotationPoint(2F, -12F, 0F); - rightLegPlate1.setTextureSize(128, 128); - setRotation(rightLegPlate1, 0F, 0F, 0.3490659F); - - rightLegPlate2 = new ModelRenderer(this, 46, 71); - rightLegPlate2.mirror = true; - rightLegPlate2.addBox(0.5F, 11F, 2F, 2, 6, 1); - rightLegPlate2.setRotationPoint(2F, -12F, 0F); - rightLegPlate2.setTextureSize(128, 128); - setRotation(rightLegPlate2, 0F, 0F, 0.3490659F); - - rightLegPlate3 = new ModelRenderer(this, 31, 62); - rightLegPlate3.mirror = true; - rightLegPlate3.addBox(-4F, 11.9F, -1F, 4, 7, 1); - rightLegPlate3.setRotationPoint(2F, -12F, 0F); - rightLegPlate3.setTextureSize(128, 128); - setRotation(rightLegPlate3, -0.1745329F, 0F, 0F); - - rightLegPlate4 = new ModelRenderer(this, 42, 62); - rightLegPlate4.mirror = true; - rightLegPlate4.addBox(-4F, 11.9F, 0F, 4, 7, 1); - rightLegPlate4.setRotationPoint(2F, -12F, 0F); - rightLegPlate4.setTextureSize(128, 128); - setRotation(rightLegPlate4, 0.1745329F, 0F, 0F); - } - - this.bipedHead.cubeList.clear(); - this.bipedHeadwear.cubeList.clear(); - if (addHelmet) - { - this.bipedHead.addChild(this.leftFacePlate); - this.bipedHead.addChild(this.rightFacePlate); - this.bipedHead.addChild(this.facePlate1); - this.bipedHead.addChild(this.facePlate2); - this.bipedHead.addChild(this.facePlate3); - this.bipedHead.addChild(this.leftWingPlate1); - this.bipedHead.addChild(this.leftWingPlate2); - this.bipedHead.addChild(this.rightWingPlate1); - this.bipedHead.addChild(this.rightWingPlate2); - this.bipedHead.addChild(this.topPlate1); - this.bipedHead.addChild(this.topPlate2); - this.bipedHead.addChild(this.topPlate3); - this.bipedHead.addChild(this.backPlate1); - this.bipedHead.addChild(this.backPlate2); - this.bipedHead.addChild(this.backPlate3); - this.bipedHead.addChild(this.backPlate4); - this.bipedHead.addChild(this.backPlate5); - this.bipedHead.addChild(this.backPlate6); - this.bipedHead.addChild(this.eyePlate); - } - - this.bipedBody.cubeList.clear(); - if (addChestPiece) - { - this.bipedBody.addChild(this.chestPlate1); - this.bipedBody.addChild(this.chestPlate2); - this.bipedBody.addChild(this.chestPlate3); - this.bipedBody.addChild(this.chestPlate4); - this.bipedBody.addChild(this.chestPlate5); - this.bipedBody.addChild(this.chestPlate6); - this.bipedBody.addChild(this.mainPlate); - } - if (addLeggings) - { - this.bipedBody.addChild(this.belt); - } - - this.bipedRightArm.cubeList.clear(); - if (addChestPiece) - { - this.bipedRightArm.addChild(rightArmMain); - this.bipedRightArm.addChild(this.rightKnucklePlate); - this.bipedRightArm.addChild(this.rightKnuckleBrace); - this.bipedRightArm.addChild(this.rightKnuckle1); - this.bipedRightArm.addChild(this.rightKnuckle2); - this.bipedRightArm.addChild(this.rightKnuckle3); - this.bipedRightArm.addChild(this.rightKnuckle4); - this.bipedRightArm.addChild(this.rightKnuckle5); - this.bipedRightArm.addChild(this.rightKnuckle6); - this.bipedRightArm.addChild(this.rightArmMain); - this.bipedRightArm.addChild(this.rightShoulder1); - this.bipedRightArm.addChild(this.rightShoulder2); - this.bipedRightArm.addChild(this.rightShoulder3); - } - - this.bipedLeftArm.cubeList.clear(); - if (addChestPiece) - { - this.bipedLeftArm.addChild(leftArmMain); - this.bipedLeftArm.addChild(this.leftKnucklePlate); - this.bipedLeftArm.addChild(this.leftKnuckleBrace); - this.bipedLeftArm.addChild(this.leftKnuckle1); - this.bipedLeftArm.addChild(this.leftKnuckle2); - this.bipedLeftArm.addChild(this.leftKnuckle3); - this.bipedLeftArm.addChild(this.leftKnuckle4); - this.bipedLeftArm.addChild(this.leftKnuckle5); - this.bipedLeftArm.addChild(this.leftKnuckle6); - this.bipedLeftArm.addChild(this.leftArmMain); - this.bipedLeftArm.addChild(this.leftShoulder1); - this.bipedLeftArm.addChild(this.leftShoulder2); - this.bipedLeftArm.addChild(this.leftShoulder3); - } - - this.bipedLeftLeg.cubeList.clear(); - if (addBoots) - { - this.bipedLeftLeg.addChild(this.leftBootBottom); - this.bipedLeftLeg.addChild(this.leftBootBrace); - this.bipedLeftLeg.addChild(this.leftBootPlate); - this.bipedLeftLeg.addChild(this.leftBootWing1); - this.bipedLeftLeg.addChild(this.leftBootWing2); - } - if (addLeggings) - { - this.bipedLeftLeg.addChild(this.leftLegMain); - this.bipedLeftLeg.addChild(this.leftLegSidePlate); - this.bipedLeftLeg.addChild(this.leftLegPlate1); - this.bipedLeftLeg.addChild(this.leftLegPlate2); - this.bipedLeftLeg.addChild(this.leftLegPlate3); - this.bipedLeftLeg.addChild(this.leftLegPlate4); - } - - this.bipedRightLeg.cubeList.clear(); - if (addBoots) - { - this.bipedRightLeg.addChild(this.rightBootBottom); - this.bipedRightLeg.addChild(this.rightBootBrace); - this.bipedRightLeg.addChild(this.rightBootPlate); - this.bipedRightLeg.addChild(this.rightBootWing1); - this.bipedRightLeg.addChild(this.rightBootWing2); - } - if (addLeggings) - { - this.bipedRightLeg.addChild(this.rightLegMain); - this.bipedRightLeg.addChild(this.rightLegSidePlate); - this.bipedRightLeg.addChild(this.rightLegPlate1); - this.bipedRightLeg.addChild(this.rightLegPlate2); - this.bipedRightLeg.addChild(this.rightLegPlate3); - this.bipedRightLeg.addChild(this.rightLegPlate4); - } - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { -// super.render(entity, f, f1, f2, f3, f4, f5); - - - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - - this.bipedHead.render(f5); - this.bipedBody.render(f5); - this.bipedLeftArm.render(f5); - this.bipedRightArm.render(f5); - this.bipedLeftLeg.render(f5); - this.bipedRightLeg.render(f5); - -// head.render(f5); -// body.render(f5); -// rightarm.render(f5); -// leftarm.render(f5); -// rightleg.render(f5); -// leftleg.render(f5); -// rightArmMain.render(f5); -// rightKnucklePlate.render(f5); -// rightKnuckleBrace.render(f5); -// rightKnuckle1.render(f5); -// rightKnuckle2.render(f5); -// rightKnuckle3.render(f5); -// rightKnuckle4.render(f5); -// rightKnuckle5.render(f5); -// rightKnuckle6.render(f5); -// rightShoulder1.render(f5); -// rightShoulder2.render(f5); -// rightShoulder3.render(f5); -// mainPlate.render(f5); -// chestPlate1.render(f5); -// chestPlate2.render(f5); -// chestPlate3.render(f5); -// chestPlate4.render(f5); -// chestPlate5.render(f5); -// chestPlate6.render(f5); -// belt.render(f5); -// leftArmMain.render(f5); -// leftKnucklePlate.render(f5); -// leftKnuckleBrace.render(f5); -// leftKnuckle1.render(f5); -// leftKnuckle2.render(f5); -// leftKnuckle3.render(f5); -// leftKnuckle4.render(f5); -// leftKnuckle5.render(f5); -// leftKnuckle6.render(f5); -// leftShoulder1.render(f5); -// leftShoulder2.render(f5); -// leftShoulder3.render(f5); -// leftBootBottom.render(f5); -// leftBootPlate.render(f5); -// leftBootBrace.render(f5); -// leftBootWing1.render(f5); -// leftBootWing2.render(f5); -// rightBootBottom.render(f5); -// rightBootPlate.render(f5); -// rightBootBrace.render(f5); -// rightBootWing1.render(f5); -// rightBootWing2.render(f5); -// -// { -// leftLegSidePlate.render(f5); -// leftLegMain.render(f5); -// leftLegPlate1.render(f5); -// leftLegPlate2.render(f5); -// leftLegPlate3.render(f5); -// leftLegPlate4.render(f5); -// } -// -// { -// rightLegSidePlate.render(f5); -// rightLegMain.render(f5); -// rightLegPlate1.render(f5); -// rightLegPlate2.render(f5); -// rightLegPlate3.render(f5); -// rightLegPlate4.render(f5); -// } - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelOmegaEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelOmegaEarth.java deleted file mode 100644 index 4af279d5..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelOmegaEarth.java +++ /dev/null @@ -1,509 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBiped; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -/** - * OmegaEarth.tcn - TechneToTabulaImporter - * Created using Tabula 4.1.0 - */ -public class ModelOmegaEarth extends ModelBiped{ - - public ModelRenderer backPlate; - public ModelRenderer topPlate; - public ModelRenderer sidePlate6; - public ModelRenderer sidePlate5; - public ModelRenderer sidePlate4; - public ModelRenderer sidePlate3; - public ModelRenderer sidePlate2; - public ModelRenderer sidePlate1; - public ModelRenderer facePlate6; - public ModelRenderer facePlate1; - public ModelRenderer facePlate5; - public ModelRenderer facePlate4; - public ModelRenderer facePlate2; - public ModelRenderer facePlate3; - public ModelRenderer chestMain; - public ModelRenderer backPlate_1; - public ModelRenderer chestPlate1; - public ModelRenderer chestPlate2; - public ModelRenderer chestPlate3; - public ModelRenderer chestPlate4; - public ModelRenderer chestPlate5; - public ModelRenderer chestPlate6; - public ModelRenderer belt; - public ModelRenderer rightShoulder; - public ModelRenderer rightArm; - public ModelRenderer rightArmSymbol; - public ModelRenderer rightArmPlate1; - public ModelRenderer rightArmPlate2; - public ModelRenderer rightArmPlate3; - public ModelRenderer rightArmPlate4; - public ModelRenderer leftShoulder; - public ModelRenderer leftArm; - public ModelRenderer leftArmSymbol; - public ModelRenderer leftArmPlate1; - public ModelRenderer leftArmPlate2; - public ModelRenderer leftArmPlate3; - public ModelRenderer leftArmPlate4; - public ModelRenderer rightLeg; - public ModelRenderer rightLegPlate1; - public ModelRenderer rightLegPlate2; - public ModelRenderer rightLegPlate3; - public ModelRenderer rightLegPlate4; - public ModelRenderer rightLegPlate5; - public ModelRenderer rightLegPlate6; - public ModelRenderer rightLegPlate7; - public ModelRenderer rightLegPlate8; - public ModelRenderer rightLegPlate10; - public ModelRenderer rightLegPlate9; - public ModelRenderer rightLegPlate11; - public ModelRenderer rightLegPlate12; - public ModelRenderer rightLegPlate13; - public ModelRenderer rightBoot1; - public ModelRenderer rightBoot2; - public ModelRenderer rightBoot3; - public ModelRenderer leftLeg; - public ModelRenderer leftLegPlate1; - public ModelRenderer leftLegPlate2; - public ModelRenderer leftLegPlate3; - public ModelRenderer leftLegPlate4; - public ModelRenderer leftLegPlate5; - public ModelRenderer leftLegPlate6; - public ModelRenderer leftLegPlate7; - public ModelRenderer leftLegPlate8; - public ModelRenderer leftLegPlate9; - public ModelRenderer leftLegPlate10; - public ModelRenderer leftLegPlate11; - public ModelRenderer leftLegPlate12; - public ModelRenderer leftLegPlate13; - public ModelRenderer leftBoot1; - public ModelRenderer leftBoot2; - public ModelRenderer leftBoot3; - - public ModelOmegaEarth(float f, boolean addHelmet, boolean addChestPiece, boolean addLeggings, boolean addBoots) - { - super(f, 0.0f, 256, 128); - this.leftShoulder = new ModelRenderer(this, 29, 33); - this.leftShoulder.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftShoulder.addBox(-1.0F, -3.0F, -3.0F, 6, 5, 6, 0.0F); - this.leftBoot1 = new ModelRenderer(this, 44, 61); - this.leftBoot1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftBoot1.addBox(-2.0F, 9.5F, -5.0F, 5, 3, 8, 0.0F); - this.leftLegPlate9 = new ModelRenderer(this, 0, 86); - this.leftLegPlate9.setRotationPoint(0.0F, 2.5F, 0.0F); - this.leftLegPlate9.addBox(-2.5F, 1.5F, 1.3F, 5, 3, 1, 0.0F); - this.setRotateAngle(leftLegPlate9, 0.40142572795869574F, -0.0F, 0.0F); - this.facePlate3 = new ModelRenderer(this, 0, 100); - this.facePlate3.setRotationPoint(0.0F, 0.0F, 0.0F); - this.facePlate3.addBox(-1.0F, -7.5F, -6.5F, 5, 4, 1, 0.0F); - this.setRotateAngle(facePlate3, -0.17453292012214658F, -0.15707963705062866F, 0.0F); - this.leftArm = new ModelRenderer(this, 29, 45); - this.leftArm.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftArm.addBox(-1.0F-0.5f, 2.0F, -2.5F, 5, 9, 5, 0.0F); - this.leftLegPlate11 = new ModelRenderer(this, 0, 91); - this.leftLegPlate11.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftLegPlate11.addBox(1.0F, 1.5F, -2.5F, 1, 3, 5, 0.0F); - this.setRotateAngle(leftLegPlate11, 0.0F, -0.0F, -0.40142572795869574F); - this.leftBoot3 = new ModelRenderer(this, 45, 73); - this.leftBoot3.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftBoot3.addBox(0.0F, 9.0F, -4.5F, 1, 3, 7, 0.0F); - this.setRotateAngle(leftBoot3, 0.10471975511965977F, -0.0F, -0.2617993877991494F); - this.leftLegPlate5 = new ModelRenderer(this, 13, 86); - this.leftLegPlate5.setRotationPoint(0.0F, 5.0F, 0.0F); - this.leftLegPlate5.addBox(-2.5F, 1.5F, -2.8F, 3, 2, 1, 0.0F); - this.setRotateAngle(leftLegPlate5, -0.40142572795869574F, -0.0F, 0.0F); - this.leftArmPlate1 = new ModelRenderer(this, 0, 56); - this.leftArmPlate1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftArmPlate1.addBox(-2.0F, -5.0F, -4.5F, 6, 3, 1, 0.0F); - this.setRotateAngle(leftArmPlate1, -0.19198621771937624F, -0.0F, 0.9599310885968813F); - this.rightLegPlate13 = new ModelRenderer(this, 0, 91); - this.rightLegPlate13.mirror = true; - this.rightLegPlate13.setRotationPoint(0.0F, 5.0F, 0.0F); - this.rightLegPlate13.addBox(-2.0F, 1.5F, -2.5F, 1, 3, 5, 0.0F); - this.setRotateAngle(rightLegPlate13, 0.0F, -0.0F, 0.40142572795869574F); - this.rightLegPlate2 = new ModelRenderer(this, 0, 86); - this.rightLegPlate2.mirror = true; - this.rightLegPlate2.setRotationPoint(0.0F, 2.5F, 0.0F); - this.rightLegPlate2.addBox(-2.5F, 1.5F, -2.3F, 5, 3, 1, 0.0F); - this.setRotateAngle(rightLegPlate2, -0.40142572795869574F, -0.0F, 0.0F); - this.rightLegPlate8 = new ModelRenderer(this, 0, 86); - this.rightLegPlate8.mirror = true; - this.rightLegPlate8.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightLegPlate8.addBox(-2.5F, 1.5F, 1.3F, 5, 3, 1, 0.0F); - this.setRotateAngle(rightLegPlate8, 0.40142572795869574F, -0.0F, 0.0F); - this.rightLegPlate1 = new ModelRenderer(this, 0, 86); - this.rightLegPlate1.mirror = true; - this.rightLegPlate1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightLegPlate1.addBox(-2.5F, 1.5F, -2.3F, 5, 3, 1, 0.0F); - this.setRotateAngle(rightLegPlate1, -0.40142572795869574F, -0.0F, 0.0F); - this.rightLegPlate7 = new ModelRenderer(this, 13, 90); - this.rightLegPlate7.mirror = true; - this.rightLegPlate7.setRotationPoint(0.0F, 5.0F, 0.0F); - this.rightLegPlate7.addBox(-1.5F, 1.0F, -2.8F, 1, 2, 1, 0.0F); - this.setRotateAngle(rightLegPlate7, -0.40142572795869574F, -0.0F, 0.0F); - this.chestPlate6 = new ModelRenderer(this, 0, 52); - this.chestPlate6.mirror = true; - this.chestPlate6.setRotationPoint(0.0F, -3.5F, 0.0F); - this.chestPlate6.addBox(-5.5F, 2.0F, -4.5F, 5, 2, 1, 0.0F); - this.setRotateAngle(chestPlate6, 0.3141592741012573F, -0.0F, -0.12217304855585097F); - - this.sidePlate5 = new ModelRenderer(this, 13, 110); - this.sidePlate5.setRotationPoint(0.0F, 0.5F, 3.0F); - this.sidePlate5.addBox(4.0F, -8.5F, -4.0F, 1, 7, 4, 0.0F); - this.setRotateAngle(sidePlate5, 0.0F, 0.22689279913902283F, 0.0F); - - this.chestMain = new ModelRenderer(this, 0, 33); - this.chestMain.setRotationPoint(0.0F, 0.0F, 0.0F); - this.chestMain.addBox(-4.5F, -0.009999999776482582F, -2.5F, 9, 13, 5, 0.0F); - this.facePlate2 = new ModelRenderer(this, 0, 110); - this.facePlate2.mirror = true; - this.facePlate2.setRotationPoint(0.0F, 0.5F, 0.0F); - this.facePlate2.addBox(-3.0F, -3.5F, -5.5F, 5, 3, 1, 0.0F); - this.setRotateAngle(facePlate2, 0.05235987901687623F, 0.34906584024429316F, 0.0F); - this.rightArm = new ModelRenderer(this, 29, 45); - this.rightArm.mirror = true; - this.rightArm.setRotationPoint(0.0F+0.5f, 0.0F, 0.0F); - this.rightArm.addBox(-4.0F, 2.0F, -2.5F, 5, 9, 5, 0.0F); - - this.rightLegPlate11 = new ModelRenderer(this, 0, 91); - this.rightLegPlate11.mirror = true; - this.rightLegPlate11.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightLegPlate11.addBox(-2.0F, 1.5F, -2.5F, 1, 3, 5, 0.0F); - this.setRotateAngle(rightLegPlate11, 0.0F, -0.0F, 0.40142572795869574F); - this.leftLegPlate3 = new ModelRenderer(this, 0, 86); - this.leftLegPlate3.setRotationPoint(0.0F, 5.0F, 0.0F); - this.leftLegPlate3.addBox(-2.5F, 1.5F, -2.3F, 5, 3, 1, 0.0F); - this.setRotateAngle(leftLegPlate3, -0.40142572795869574F, -0.0F, 0.0F); - this.rightArmPlate4 = new ModelRenderer(this, 0, 56); - this.rightArmPlate4.mirror = true; - this.rightArmPlate4.setRotationPoint(-0.0F, 0.0F, 0.0F); - this.rightArmPlate4.addBox(-4.0F, -3.0F, 3.0F, 6, 3, 1, 0.0F); - this.setRotateAngle(rightArmPlate4, 0.19198621771937624F, -0.0F, -0.9599310885968813F); - this.rightLegPlate10 = new ModelRenderer(this, 0, 86); - this.rightLegPlate10.mirror = true; - this.rightLegPlate10.setRotationPoint(0.0F, 5.0F, 0.0F); - this.rightLegPlate10.addBox(-2.5F, 1.5F, 1.3F, 5, 3, 1, 0.0F); - this.setRotateAngle(rightLegPlate10, 0.40142572795869574F, -0.0F, 0.0F); - this.rightArmSymbol = new ModelRenderer(this, 50, 45); - this.rightArmSymbol.mirror = true; - this.rightArmSymbol.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightArmSymbol.addBox(-5.0F+0.5f, 4.0F, -2.0F, 1, 4, 4, 0.0F); - this.leftLegPlate1 = new ModelRenderer(this, 0, 86); - this.leftLegPlate1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftLegPlate1.addBox(-2.5F, 1.5F, -2.3F, 5, 3, 1, 0.0F); - this.setRotateAngle(leftLegPlate1, -0.40142572795869574F, -0.0F, 0.0F); - this.rightArmPlate1 = new ModelRenderer(this, 0, 56); - this.rightArmPlate1.mirror = true; - this.rightArmPlate1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightArmPlate1.addBox(-4.0F, -5.0F, -4.5F, 6, 3, 1, 0.0F); - this.setRotateAngle(rightArmPlate1, -0.19198621771937624F, -0.0F, -0.9599310885968813F); - this.leftLegPlate13 = new ModelRenderer(this, 0, 91); - this.leftLegPlate13.setRotationPoint(0.0F, 5.0F, 0.0F); - this.leftLegPlate13.addBox(1.0F, 1.5F, -2.5F, 1, 3, 5, 0.0F); - this.setRotateAngle(leftLegPlate13, 0.0F, -0.0F, -0.40142572795869574F); - this.backPlate = new ModelRenderer(this, 22, 94); - this.backPlate.setRotationPoint(0.0F, 0.0F, 0.0F); - this.backPlate.addBox(-4.0F, -7.699999809265137F, 3.700000047683716F, 8, 8, 1, 0.0F); - this.setRotateAngle(backPlate, 0.06981316953897475F, -0.0F, 0.0F); - this.leftLegPlate8 = new ModelRenderer(this, 0, 86); - this.leftLegPlate8.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftLegPlate8.addBox(-2.5F, 1.5F, 1.3F, 5, 3, 1, 0.0F); - this.setRotateAngle(leftLegPlate8, 0.40142572795869574F, -0.0F, 0.0F); - this.leftLeg = new ModelRenderer(this, 0, 70); - this.leftLeg.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftLeg.addBox(-2.5F, 0.0F, -2.5F, 5, 10, 5, 0.0F); - this.facePlate5 = new ModelRenderer(this, 0, 106); - this.facePlate5.setRotationPoint(0.0F, 0.0F, 0.0F); - this.facePlate5.addBox(-4.0F, -4.5F, -4.5F, 8, 2, 1, 0.0F); - this.belt = new ModelRenderer(this, 0, 61); - this.belt.setRotationPoint(0.0F, 0.0F, 0.0F); - this.belt.addBox(-5.0F, 11.0F, -3.0F, 10, 2, 6, 0.0F); - this.rightLegPlate3 = new ModelRenderer(this, 0, 86); - this.rightLegPlate3.mirror = true; - this.rightLegPlate3.setRotationPoint(0.0F, 5.0F, 0.0F); - this.rightLegPlate3.addBox(-2.5F, 1.5F, -2.3F, 5, 3, 1, 0.0F); - this.setRotateAngle(rightLegPlate3, -0.40142572795869574F, -0.0F, 0.0F); - this.chestPlate3 = new ModelRenderer(this, 0, 52); - this.chestPlate3.setRotationPoint(0.0F, -1.5F, 0.0F); - this.chestPlate3.addBox(0.6000000238418579F, 2.0F, -4.5F, 5, 2, 1, 0.0F); - this.setRotateAngle(chestPlate3, 0.3141592741012573F, -0.0F, 0.17453292012214658F); - this.sidePlate4 = new ModelRenderer(this, 13, 110); - this.sidePlate4.setRotationPoint(0.0F, 0.5F, 0.0F); - this.sidePlate4.addBox(4.0F, -8.5F, -3.0F, 1, 7, 4, 0.0F); - this.setRotateAngle(sidePlate4, 0.0F, 0.22689279913902283F, 0.0F); - this.rightLegPlate6 = new ModelRenderer(this, 13, 90); - this.rightLegPlate6.mirror = true; - this.rightLegPlate6.setRotationPoint(0.0F, 2.5F, 0.0F); - this.rightLegPlate6.addBox(-1.5F, 1.0F, -2.8F, 1, 2, 1, 0.0F); - this.setRotateAngle(rightLegPlate6, -0.40142572795869574F, -0.0F, 0.0F); - - this.rightBoot2 = new ModelRenderer(this, 22, 73); - this.rightBoot2.mirror = true; - this.rightBoot2.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightBoot2.addBox(-3.0F, 8.5F, -3.0F, 5, 1, 6, 0.0F); - this.leftLegPlate7 = new ModelRenderer(this, 13, 90); - this.leftLegPlate7.setRotationPoint(0.0F, 5.0F, 0.0F); - this.leftLegPlate7.addBox(0.5F, 1.0F, -2.8F, 1, 2, 1, 0.0F); - this.setRotateAngle(leftLegPlate7, -0.40142572795869574F, -0.0F, 0.0F); - this.facePlate6 = new ModelRenderer(this, 19, 106); - this.facePlate6.setRotationPoint(0.0F, 0.0F, 0.0F); - this.facePlate6.addBox(-1.0F, -4.5F, -5.0F, 2, 2, 1, 0.0F); - this.facePlate1 = new ModelRenderer(this, 0, 110); - this.facePlate1.setRotationPoint(0.0F, 0.5F, 0.0F); - this.facePlate1.addBox(-2.0F, -3.5F, -5.5F, 5, 3, 1, 0.0F); - this.setRotateAngle(facePlate1, 0.05235987901687623F, -0.34906584024429316F, 0.0F); - this.sidePlate1 = new ModelRenderer(this, 13, 110); - this.sidePlate1.mirror = true; - this.sidePlate1.setRotationPoint(0.0F, 0.5F, 0.0F); - this.sidePlate1.addBox(-5.0F, -8.5F, -3.0F, 1, 7, 4, 0.0F); - this.setRotateAngle(sidePlate1, 0.0F, -0.22689279913902283F, 0.0F); - this.facePlate4 = new ModelRenderer(this, 0, 100); - this.facePlate4.mirror = true; - this.facePlate4.setRotationPoint(0.0F, 0.0F, 0.0F); - this.facePlate4.addBox(-4.0F, -7.5F, -6.5F, 5, 4, 1, 0.0F); - this.setRotateAngle(facePlate4, -0.17453292012214658F, 0.15707963705062866F, 0.0F); - this.rightLegPlate12 = new ModelRenderer(this, 0, 91); - this.rightLegPlate12.mirror = true; - this.rightLegPlate12.setRotationPoint(0.0F, 2.5F, 0.0F); - this.rightLegPlate12.addBox(-2.0F, 1.5F, -2.5F, 1, 3, 5, 0.0F); - this.setRotateAngle(rightLegPlate12, 0.0F, -0.0F, 0.40142572795869574F); - this.leftArmPlate4 = new ModelRenderer(this, 0, 56); - this.leftArmPlate4.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftArmPlate4.addBox(-2.0F, -3.0F, 3.0F, 6, 3, 1, 0.0F); - this.setRotateAngle(leftArmPlate4, 0.19198621771937624F, -0.0F, 0.9599310885968813F); - this.rightLegPlate4 = new ModelRenderer(this, 13, 86); - this.rightLegPlate4.mirror = true; - this.rightLegPlate4.setRotationPoint(0.0F, 2.5F, 0.0F); - this.rightLegPlate4.addBox(-0.5F, 1.5F, -2.8F, 3, 2, 1, 0.0F); - this.setRotateAngle(rightLegPlate4, -0.40142572795869574F, -0.0F, 0.0F); - this.leftLegPlate12 = new ModelRenderer(this, 0, 91); - this.leftLegPlate12.setRotationPoint(0.0F, 2.5F, 0.0F); - this.leftLegPlate12.addBox(1.0F, 1.5F, -2.5F, 1, 3, 5, 0.0F); - this.setRotateAngle(leftLegPlate12, 0.0F, -0.0F, -0.40142572795869574F); - this.chestPlate2 = new ModelRenderer(this, 0, 52); - this.chestPlate2.mirror = true; - this.chestPlate2.setRotationPoint(0.0F, 0.5F, 0.0F); - this.chestPlate2.addBox(-5.699999809265137F, 2.0F, -4.5F, 5, 2, 1, 0.0F); - this.setRotateAngle(chestPlate2, 0.3141592741012573F, -0.0F, -0.22689279913902285F); - this.backPlate_1 = new ModelRenderer(this, 33, 61); - this.backPlate_1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.backPlate_1.addBox(-2.0F, 2.0F, 2.5F, 4, 6, 1, 0.0F); - this.topPlate = new ModelRenderer(this, 22, 84); - this.topPlate.setRotationPoint(0.0F, 0.0F, 0.0F); - this.topPlate.addBox(-4.0F, -8.199999809265137F, -3.5999999046325684F, 8, 1, 8, 0.0F); - this.setRotateAngle(topPlate, 0.05235987901687623F, -0.0F, 0.0F); - this.rightBoot3 = new ModelRenderer(this, 45, 73); - this.rightBoot3.mirror = true; - this.rightBoot3.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightBoot3.addBox(-1.0F, 9.0F, -4.5F, 1, 3, 7, 0.0F); - this.setRotateAngle(rightBoot3, 0.10471975511965977F, -0.0F, 0.2617993877991494F); - this.leftArmSymbol = new ModelRenderer(this, 50, 45); - this.leftArmSymbol.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftArmSymbol.addBox(4.0F-0.5f, 4.0F, -2.0F, 1, 4, 4, 0.0F); - this.sidePlate6 = new ModelRenderer(this, 13, 110); - this.sidePlate6.setRotationPoint(0.0F, 0.5F, 6.0F); - this.sidePlate6.addBox(4.0F, -8.5F, -5.0F, 1, 7, 4, 0.0F); - this.setRotateAngle(sidePlate6, 0.0F, 0.22689279913902283F, 0.0F); - this.chestPlate5 = new ModelRenderer(this, 0, 52); - this.chestPlate5.setRotationPoint(0.0F, -3.5F, 0.0F); - this.chestPlate5.addBox(0.5F, 2.0F, -4.5F, 5, 2, 1, 0.0F); - this.setRotateAngle(chestPlate5, 0.3141592741012573F, -0.0F, 0.12217304855585097F); - this.rightLeg = new ModelRenderer(this, 0, 70); - this.rightLeg.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightLeg.addBox(-2.5F, 0.0F, -2.5F, 5, 10, 5, 0.0F); - this.leftArmPlate2 = new ModelRenderer(this, 0, 56); - this.leftArmPlate2.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftArmPlate2.addBox(-2.0F, -3.0F, -4.0F, 6, 3, 1, 0.0F); - this.setRotateAngle(leftArmPlate2, -0.19198621771937624F, -0.0F, 0.9599310885968813F); - this.leftBoot2 = new ModelRenderer(this, 22, 73); - this.leftBoot2.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftBoot2.addBox(-2.0F, 8.5F, -3.0F, 5, 1, 6, 0.0F); - this.leftArmPlate3 = new ModelRenderer(this, 0, 56); - this.leftArmPlate3.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftArmPlate3.addBox(-2.0F, -5.0F, 3.5F, 6, 3, 1, 0.0F); - this.setRotateAngle(leftArmPlate3, 0.19198621771937624F, -0.0F, 0.9599310885968813F); - - this.rightLegPlate5 = new ModelRenderer(this, 13, 86); - this.rightLegPlate5.mirror = true; - this.rightLegPlate5.setRotationPoint(0.0F, 5.0F, 0.0F); - this.rightLegPlate5.addBox(-0.5F, 1.5F, -2.8F, 3, 2, 1, 0.0F); - this.setRotateAngle(rightLegPlate5, -0.40142572795869574F, -0.0F, 0.0F); - this.sidePlate3 = new ModelRenderer(this, 13, 110); - this.sidePlate3.mirror = true; - this.sidePlate3.setRotationPoint(0.0F, 0.5F, 6.0F); - this.sidePlate3.addBox(-5.0F, -8.5F, -5.0F, 1, 7, 4, 0.0F); - this.setRotateAngle(sidePlate3, 0.0F, -0.22689279913902283F, 0.0F); - this.chestPlate1 = new ModelRenderer(this, 0, 52); - this.chestPlate1.setRotationPoint(0.0F, 0.5F, 0.0F); - this.chestPlate1.addBox(0.699999988079071F, 2.0F, -4.5F, 5, 2, 1, 0.0F); - this.setRotateAngle(chestPlate1, 0.3141592741012573F, -0.0F, 0.22689279913902285F); - this.leftLegPlate4 = new ModelRenderer(this, 13, 86); - this.leftLegPlate4.setRotationPoint(0.0F, 2.5F, 0.0F); - this.leftLegPlate4.addBox(-2.5F, 1.5F, -2.8F, 3, 2, 1, 0.0F); - this.setRotateAngle(leftLegPlate4, -0.40142572795869574F, -0.0F, 0.0F); - this.rightBoot1 = new ModelRenderer(this, 44, 61); - this.rightBoot1.mirror = true; - this.rightBoot1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightBoot1.addBox(-3.0F, 9.5F, -5.0F, 5, 3, 8, 0.0F); - this.chestPlate4 = new ModelRenderer(this, 0, 52); - this.chestPlate4.mirror = true; - this.chestPlate4.setRotationPoint(0.0F, -1.5F, 0.0F); - this.chestPlate4.addBox(-5.599999904632568F, 2.0F, -4.5F, 5, 2, 1, 0.0F); - this.setRotateAngle(chestPlate4, 0.3141592741012573F, -0.0F, -0.17453292012214658F); - this.rightShoulder = new ModelRenderer(this, 29, 33); - this.rightShoulder.mirror = true; - this.rightShoulder.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightShoulder.addBox(-5.0F, -3.0F, -3.0F, 6, 5, 6, 0.0F); - this.rightLegPlate9 = new ModelRenderer(this, 0, 86); - this.rightLegPlate9.mirror = true; - this.rightLegPlate9.setRotationPoint(0.0F, 2.5F, 0.0F); - this.rightLegPlate9.addBox(-2.5F, 1.5F, 1.3F, 5, 3, 1, 0.0F); - this.setRotateAngle(rightLegPlate9, 0.40142572795869574F, -0.0F, 0.0F); - this.sidePlate2 = new ModelRenderer(this, 13, 110); - this.sidePlate2.mirror = true; - this.sidePlate2.setRotationPoint(0.0F, 0.5F, 3.0F); - this.sidePlate2.addBox(-5.0F, -8.5F, -4.0F, 1, 7, 4, 0.0F); - this.setRotateAngle(sidePlate2, 0.0F, -0.22689279913902283F, 0.0F); - - this.rightArmPlate3 = new ModelRenderer(this, 0, 56); - this.rightArmPlate3.mirror = true; - this.rightArmPlate3.setRotationPoint(-0.0F, 0.0F, 0.0F); - this.rightArmPlate3.addBox(-4.0F, -5.0F, 3.5F, 6, 3, 1, 0.0F); - this.setRotateAngle(rightArmPlate3, 0.19198621771937624F, -0.0F, -0.9599310885968813F); - this.leftLegPlate6 = new ModelRenderer(this, 13, 90); - this.leftLegPlate6.setRotationPoint(0.0F, 2.5F, 0.0F); - this.leftLegPlate6.addBox(0.5F, 1.0F, -2.8F, 1, 2, 1, 0.0F); - this.setRotateAngle(leftLegPlate6, -0.40142572795869574F, -0.0F, 0.0F); - this.rightArmPlate2 = new ModelRenderer(this, 0, 56); - this.rightArmPlate2.mirror = true; - this.rightArmPlate2.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightArmPlate2.addBox(-4.0F, -3.0F, -4.0F, 6, 3, 1, 0.0F); - this.setRotateAngle(rightArmPlate2, -0.19198621771937624F, -0.0F, -0.9599310885968813F); - this.leftLegPlate10 = new ModelRenderer(this, 0, 86); - this.leftLegPlate10.setRotationPoint(0.0F, 5.0F, 0.0F); - this.leftLegPlate10.addBox(-2.5F, 1.5F, 1.3F, 5, 3, 1, 0.0F); - this.setRotateAngle(leftLegPlate10, 0.40142572795869574F, -0.0F, 0.0F); - this.leftLegPlate2 = new ModelRenderer(this, 0, 86); - this.leftLegPlate2.setRotationPoint(0.0F, 2.5F, 0.0F); - this.leftLegPlate2.addBox(-2.5F, 1.5F, -2.3F, 5, 3, 1, 0.0F); - this.setRotateAngle(leftLegPlate2, -0.40142572795869574F, -0.0F, 0.0F); - - this.bipedBody.cubeList.clear(); - this.bipedHead.cubeList.clear(); - this.bipedHeadwear.cubeList.clear(); - this.bipedLeftArm.cubeList.clear(); - this.bipedLeftLeg.cubeList.clear(); - this.bipedRightArm.cubeList.clear(); - this.bipedRightLeg.cubeList.clear(); - - if(addChestPiece) - { - this.bipedLeftArm.addChild(this.leftShoulder); - this.bipedLeftArm.addChild(this.leftArm); - this.bipedLeftArm.addChild(this.leftArmPlate1); - this.bipedBody.addChild(this.chestPlate6); - this.bipedHead.addChild(this.sidePlate5); - this.bipedBody.addChild(this.chestMain); - this.bipedRightArm.addChild(this.rightArm); - this.bipedRightArm.addChild(this.rightArmPlate4); - this.bipedRightArm.addChild(this.rightArmSymbol); - this.bipedRightArm.addChild(this.rightArmPlate1); - this.bipedBody.addChild(this.chestPlate3); - this.bipedLeftArm.addChild(this.leftArmPlate4); - this.bipedBody.addChild(this.chestPlate2); - this.bipedBody.addChild(this.backPlate_1); - this.bipedLeftArm.addChild(this.leftArmSymbol); - this.bipedBody.addChild(this.chestPlate5); - this.bipedLeftArm.addChild(this.leftArmPlate2); - this.bipedLeftArm.addChild(this.leftArmPlate3); - this.bipedBody.addChild(this.chestPlate1); - this.bipedBody.addChild(this.chestPlate4); - this.bipedRightArm.addChild(this.rightShoulder); - this.bipedRightArm.addChild(this.rightArmPlate3); - this.bipedRightArm.addChild(this.rightArmPlate2); - } - - if(addLeggings) - { - this.bipedLeftLeg.addChild(this.leftLegPlate9); - this.bipedLeftLeg.addChild(this.leftLegPlate11); - this.bipedLeftLeg.addChild(this.leftLegPlate5); - this.bipedRightLeg.addChild(this.rightLegPlate13); - this.bipedRightLeg.addChild(this.rightLegPlate2); - this.bipedRightLeg.addChild(this.rightLegPlate8); - this.bipedRightLeg.addChild(this.rightLegPlate1); - this.bipedRightLeg.addChild(this.rightLegPlate7); - this.bipedRightLeg.addChild(this.rightLegPlate11); - this.bipedLeftLeg.addChild(this.leftLegPlate3); - this.bipedRightLeg.addChild(this.rightLegPlate10); - this.bipedLeftLeg.addChild(this.leftLegPlate1); - this.bipedLeftLeg.addChild(this.leftLegPlate13); - this.bipedLeftLeg.addChild(this.leftLegPlate8); - this.bipedLeftLeg.addChild(this.leftLeg); - this.bipedBody.addChild(this.belt); - this.bipedRightLeg.addChild(this.rightLegPlate3); - this.bipedRightLeg.addChild(this.rightLegPlate6); - this.bipedLeftLeg.addChild(this.leftLegPlate7); - this.bipedRightLeg.addChild(this.rightLegPlate12); - this.bipedRightLeg.addChild(this.rightLegPlate4); - this.bipedLeftLeg.addChild(this.leftLegPlate12); - this.bipedRightLeg.addChild(this.rightLeg); - this.bipedRightLeg.addChild(this.rightLegPlate5); - this.bipedLeftLeg.addChild(this.leftLegPlate4); - this.bipedLeftLeg.addChild(this.leftLegPlate2); - this.bipedLeftLeg.addChild(this.leftLegPlate10); - this.bipedLeftLeg.addChild(this.leftLegPlate6); - this.bipedRightLeg.addChild(this.rightLegPlate9); - } - - if(addBoots) - { - this.bipedLeftLeg.addChild(this.leftBoot1); - this.bipedLeftLeg.addChild(this.leftBoot3); - this.bipedRightLeg.addChild(this.rightBoot2); - this.bipedLeftLeg.addChild(this.leftBoot2); - this.bipedRightLeg.addChild(this.rightBoot1); - this.bipedRightLeg.addChild(this.rightBoot3); - } - - if(addHelmet) - { - this.bipedHead.addChild(this.facePlate3); - this.bipedHead.addChild(this.facePlate2); - this.bipedHead.addChild(this.backPlate); - this.bipedHead.addChild(this.facePlate5); - this.bipedHead.addChild(this.sidePlate4); - this.bipedHead.addChild(this.facePlate6); - this.bipedHead.addChild(this.facePlate1); - this.bipedHead.addChild(this.sidePlate1); - this.bipedHead.addChild(this.facePlate4); - this.bipedHead.addChild(this.topPlate); - this.bipedHead.addChild(this.sidePlate6); - this.bipedHead.addChild(this.sidePlate3); - this.bipedHead.addChild(this.sidePlate2); - } - } - - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - this.bipedLeftArm.render(f5); - this.bipedRightArm.render(f5); - this.bipedLeftLeg.render(f5); - this.bipedHead.render(f5); - this.bipedRightLeg.render(f5); - this.bipedBody.render(f5); - } - - /** - * This is a helper function from Tabula to set the rotation of model parts - */ - public void setRotateAngle(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/WayofTime/alchemicalWizardry/common/renderer/model/ModelOmegaFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelOmegaFire.java deleted file mode 100644 index 2d8a2c79..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelOmegaFire.java +++ /dev/null @@ -1,434 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBiped; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -/** - * OmegaFire - WayofTime - * Created using Tabula 4.1.0 - */ -public class ModelOmegaFire extends ModelBiped -{ - public ModelRenderer facePlate1; - public ModelRenderer facePlate2; - public ModelRenderer facePlate3; - public ModelRenderer facePlate4; - public ModelRenderer facePlate5; - public ModelRenderer facePlate6; - public ModelRenderer facePlate7; - public ModelRenderer topPlate; - public ModelRenderer facePlate8; - public ModelRenderer backPlate; - public ModelRenderer chestMain; - public ModelRenderer bodyPlate1; - public ModelRenderer bodyPlate2; - public ModelRenderer bodyPlate3; - public ModelRenderer bodyPlate5; - public ModelRenderer bodyPlate4; - public ModelRenderer belt; - public ModelRenderer bodyPlate6; - public ModelRenderer omegaPlate; - public ModelRenderer rightSpacer1; - public ModelRenderer leftSpacer1; - public ModelRenderer rightShoulder; - public ModelRenderer rightArm; - public ModelRenderer rightArmPlate7; - public ModelRenderer rightArmPlate1; - public ModelRenderer rightArmPlate2; - public ModelRenderer rightArmPlate3; - public ModelRenderer rightArmPlate4; - public ModelRenderer rightArmPlate5; - public ModelRenderer rightArmPlate6; - public ModelRenderer leftShoulder; - public ModelRenderer leftArm; - public ModelRenderer leftArmPlate1; - public ModelRenderer leftArmPlate2; - public ModelRenderer leftArmPlate3; - public ModelRenderer leftArmPlate5; - public ModelRenderer leftArmPlate4; - public ModelRenderer leftArmPlate6; - public ModelRenderer leftArmPlate7; - public ModelRenderer leftLeg; - public ModelRenderer leftLegPlate1; - public ModelRenderer leftLegPlate2; - public ModelRenderer leftLegPlate3; - public ModelRenderer leftLegPlate4; - public ModelRenderer leftLegPlate5; - public ModelRenderer leftLegPlate6; - public ModelRenderer leftLegPlate7; - public ModelRenderer leftBoot1; - public ModelRenderer leftBoot2; - public ModelRenderer leftBoot3; - public ModelRenderer rightLeg; - public ModelRenderer rightLegPlate1; - public ModelRenderer rightLegPlate1_1; - public ModelRenderer rightLegPlate3; - public ModelRenderer rightLegPlate4; - public ModelRenderer rightLegPlate5; - public ModelRenderer rightLegPlate6; - public ModelRenderer rightLegPlate7; - public ModelRenderer rightBoot1; - public ModelRenderer rightBoot2; - public ModelRenderer rightBoot3; - - public ModelOmegaFire(float f, boolean addHelmet, boolean addChestPiece, boolean addLeggings, boolean addBoots) - { - super(f, 0.0f, 128, 128); - this.textureWidth = 128; - this.textureHeight = 128; - this.bodyPlate5 = new ModelRenderer(this, 29, 33); - this.bodyPlate5.setRotationPoint(0.0F, 3.0F, 0.0F); - this.bodyPlate5.addBox(-0.9F, 1.4F, -3.3F, 5, 2, 1, 0.0F); - this.setRotateAngle(bodyPlate5, -0.3490658503988659F, -0.22689280275926282F, 0.0F); - this.facePlate2 = new ModelRenderer(this, 24, 89); - this.facePlate2.setRotationPoint(0.0F, 0.0F, 0.0F); - this.facePlate2.addBox(-1.0F, -4.5F, -5.0F, 2, 2, 1, 0.0F); - this.leftArmPlate5 = new ModelRenderer(this, 16, 54); - this.leftArmPlate5.setRotationPoint(0.0F, 3.4F, 0.0F); - this.leftArmPlate5.addBox(5.3F, -2.0F, -2.5F, 1, 3, 4, 0.0F); - this.setRotateAngle(leftArmPlate5, 0.0F, 0.22689280275926282F, -0.3490658503988659F); - this.leftArmPlate6 = new ModelRenderer(this, 16, 62); - this.leftArmPlate6.setRotationPoint(0.0F, 3.4F, 0.0F); - this.leftArmPlate6.addBox(5.3F, -2.0F, -1.5F, 1, 3, 4, 0.0F); - this.setRotateAngle(leftArmPlate6, 0.0F, -0.22689280275926282F, -0.3490658503988659F); - this.facePlate8 = new ModelRenderer(this, 27, 104); - this.facePlate8.mirror = true; - this.facePlate8.setRotationPoint(0.0F, 0.0F, 0.0F); - this.facePlate8.addBox(-4.4F, -8.0F, -3.6F, 1, 8, 9, 0.0F); - this.setRotateAngle(facePlate8, 0.0F, -0.10471975511965977F, 0.0F); - this.leftArmPlate7 = new ModelRenderer(this, 29, 73); - this.leftArmPlate7.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftArmPlate7.addBox(0.0F, -3.5F, -3.5F, 3, 4, 7, 0.0F); - this.leftArm = new ModelRenderer(this, 29, 49); - this.leftArm.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftArm.addBox(-1.0F, 2.0F, -2.5F, 5, 9, 5, 0.0F); - this.rightShoulder = new ModelRenderer(this, 29, 37); - this.rightShoulder.mirror = true; - this.rightShoulder.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightShoulder.addBox(-5.0F, -3.0F, -3.0F, 6, 5, 6, 0.0F); - this.rightArmPlate6 = new ModelRenderer(this, 16, 62); - this.rightArmPlate6.setRotationPoint(0.0F, 3.4F, 0.0F); - this.rightArmPlate6.addBox(-6.3F, -2.0F, -1.5F, 1, 3, 4, 0.0F); - this.setRotateAngle(rightArmPlate6, 0.0F, 0.22689280275926282F, 0.3490658503988659F); - this.leftSpacer1 = new ModelRenderer(this, 11, 54); - this.leftSpacer1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftSpacer1.addBox(2.5F, 6.3F, -3.0F, 1, 4, 1, 0.0F); - this.omegaPlate = new ModelRenderer(this, 0, 54); - this.omegaPlate.setRotationPoint(0.0F, 0.0F, 0.0F); - this.omegaPlate.addBox(-2.0F, 5.3F, -3.5F, 4, 4, 1, 0.0F); - this.bodyPlate2 = new ModelRenderer(this, 29, 33); - this.bodyPlate2.setRotationPoint(0.0F, 1.5F, 0.0F); - this.bodyPlate2.addBox(-0.9F, 1.4F, -3.5F, 5, 2, 1, 0.0F); - this.setRotateAngle(bodyPlate2, -0.3490658503988659F, -0.22689280275926282F, 0.0F); - this.rightLeg = new ModelRenderer(this, 0, 70); - this.rightLeg.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightLeg.addBox(-2.5F, 0.0F, -2.5F, 5, 10, 5, 0.0F); - this.leftArmPlate2 = new ModelRenderer(this, 16, 62); - this.leftArmPlate2.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftArmPlate2.addBox(5.3F, -2.0F, -1.5F, 1, 3, 4, 0.0F); - this.setRotateAngle(leftArmPlate2, 0.0F, -0.22689280275926282F, -0.3490658503988659F); - this.rightLegPlate3 = new ModelRenderer(this, 0, 86); - this.rightLegPlate3.mirror = true; - this.rightLegPlate3.setRotationPoint(0.0F, 4.6F, 0.0F); - this.rightLegPlate3.addBox(-2.4F, 1.6F, -2.7F, 5, 3, 1, 0.0F); - this.setRotateAngle(rightLegPlate3, -0.20943951023931953F, 0.1832595714594046F, 0.0F); - this.leftLegPlate5 = new ModelRenderer(this, 0, 91); - this.leftLegPlate5.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftLegPlate5.addBox(-2.6F, 1.6F, 1.7F, 5, 3, 1, 0.0F); - this.setRotateAngle(leftLegPlate5, 0.20943951023931953F, 0.1832595714594046F, 0.0F); - this.leftLegPlate2 = new ModelRenderer(this, 0, 86); - this.leftLegPlate2.setRotationPoint(0.0F, 2.3F, 0.0F); - this.leftLegPlate2.addBox(-2.6F, 1.6F, -2.7F, 5, 3, 1, 0.0F); - this.setRotateAngle(leftLegPlate2, -0.20943951023931953F, -0.1832595714594046F, 0.0F); - this.rightSpacer1 = new ModelRenderer(this, 11, 54); - this.rightSpacer1.mirror = true; - this.rightSpacer1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightSpacer1.addBox(-3.5F, 6.3F, -3.0F, 1, 4, 1, 0.0F); - this.rightArmPlate2 = new ModelRenderer(this, 16, 62); - this.rightArmPlate2.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightArmPlate2.addBox(-6.3F, -2.0F, -1.5F, 1, 3, 4, 0.0F); - this.setRotateAngle(rightArmPlate2, 0.0F, 0.22689280275926282F, 0.3490658503988659F); - this.rightArmPlate3 = new ModelRenderer(this, 16, 54); - this.rightArmPlate3.setRotationPoint(0.0F, 1.7F, 0.0F); - this.rightArmPlate3.addBox(-6.3F, -2.0F, -2.5F, 1, 3, 4, 0.0F); - this.setRotateAngle(rightArmPlate3, 0.0F, -0.22689280275926282F, 0.3490658503988659F); - this.topPlate = new ModelRenderer(this, 37, 89); - this.topPlate.setRotationPoint(0.0F, 0.0F, 0.0F); - this.topPlate.addBox(-4.0F, -8.2F, -3.6F, 8, 1, 8, 0.0F); - this.setRotateAngle(topPlate, 0.05235987755982988F, -0.0F, 0.0F); - this.leftBoot1 = new ModelRenderer(this, 0, 99); - this.leftBoot1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftBoot1.addBox(-2.0F, 9.5F, -5.0F, 5, 3, 8, 0.0F); - this.leftArmPlate1 = new ModelRenderer(this, 16, 54); - this.leftArmPlate1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftArmPlate1.addBox(5.3F, -2.0F, -2.5F, 1, 3, 4, 0.0F); - this.setRotateAngle(leftArmPlate1, 0.0F, 0.22689280275926282F, -0.3490658503988659F); - this.rightLegPlate1_1 = new ModelRenderer(this, 0, 86); - this.rightLegPlate1_1.mirror = true; - this.rightLegPlate1_1.setRotationPoint(0.0F, 2.3F, 0.0F); - this.rightLegPlate1_1.addBox(-2.4F, 1.6F, -2.7F, 5, 3, 1, 0.0F); - this.setRotateAngle(rightLegPlate1_1, -0.20943951023931953F, 0.1832595714594046F, 0.0F); - this.bodyPlate4 = new ModelRenderer(this, 29, 33); - this.bodyPlate4.mirror = true; - this.bodyPlate4.setRotationPoint(0.0F, 1.5F, 0.0F); - this.bodyPlate4.addBox(-4.1F, 1.4F, -3.5F, 5, 2, 1, 0.0F); - this.setRotateAngle(bodyPlate4, -0.3490658503988659F, 0.22689280275926282F, 0.0F); - this.leftLegPlate3 = new ModelRenderer(this, 0, 86); - this.leftLegPlate3.setRotationPoint(0.0F, 4.6F, 0.0F); - this.leftLegPlate3.addBox(-2.6F, 1.6F, -2.7F, 5, 3, 1, 0.0F); - this.setRotateAngle(leftLegPlate3, -0.20943951023931953F, -0.1832595714594046F, 0.0F); - this.chestMain = new ModelRenderer(this, 0, 33); - this.chestMain.setRotationPoint(0.0F, 0.0F, 0.0F); - this.chestMain.addBox(-4.5F, -0.01F, -2.5F, 9, 13, 5, 0.0F); - this.rightArmPlate5 = new ModelRenderer(this, 16, 54); - this.rightArmPlate5.setRotationPoint(0.0F, 3.4F, 0.0F); - this.rightArmPlate5.addBox(-6.3F, -2.0F, -2.5F, 1, 3, 4, 0.0F); - this.setRotateAngle(rightArmPlate5, 0.0F, -0.22689280275926282F, 0.3490658503988659F); - this.rightArm = new ModelRenderer(this, 29, 49); - this.rightArm.mirror = true; - this.rightArm.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightArm.addBox(-4.0F, 2.0F, -2.5F, 5, 9, 5, 0.0F); - this.bodyPlate1 = new ModelRenderer(this, 29, 33); - this.bodyPlate1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.bodyPlate1.addBox(-0.9F, 1.4F, -3.7F, 5, 2, 1, 0.0F); - this.setRotateAngle(bodyPlate1, -0.3490658503988659F, -0.22689280275926282F, 0.0F); - this.facePlate3 = new ModelRenderer(this, 24, 93); - this.facePlate3.setRotationPoint(0.0F, 0.5F, 0.0F); - this.facePlate3.addBox(-2.0F, -3.5F, -5.5F, 5, 3, 1, 0.0F); - this.setRotateAngle(facePlate3, 0.05235987755982988F, -0.3490658503988659F, 0.0F); - this.facePlate1 = new ModelRenderer(this, 24, 85); - this.facePlate1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.facePlate1.addBox(-4.0F, -4.5F, -4.5F, 8, 2, 1, 0.0F); - this.facePlate6 = new ModelRenderer(this, 24, 98); - this.facePlate6.mirror = true; - this.facePlate6.setRotationPoint(0.0F, 0.5F, 0.0F); - this.facePlate6.addBox(-2.9F, -8.7F, -6.0F, 5, 4, 1, 0.0F); - this.setRotateAngle(facePlate6, -0.05235987755982988F, 0.3490658503988659F, 0.0F); - this.rightLegPlate6 = new ModelRenderer(this, 0, 91); - this.rightLegPlate6.mirror = true; - this.rightLegPlate6.setRotationPoint(0.0F, 2.3F, 0.0F); - this.rightLegPlate6.addBox(-2.4F, 1.6F, 1.7F, 5, 3, 1, 0.0F); - this.setRotateAngle(rightLegPlate6, 0.20943951023931953F, -0.1832595714594046F, 0.0F); - this.leftShoulder = new ModelRenderer(this, 29, 37); - this.leftShoulder.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftShoulder.addBox(-1.0F, -3.0F, -3.0F, 6, 5, 6, 0.0F); - this.rightBoot1 = new ModelRenderer(this, 0, 99); - this.rightBoot1.mirror = true; - this.rightBoot1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightBoot1.addBox(-3.0F, 9.5F, -5.0F, 5, 3, 8, 0.0F); - this.leftLegPlate4 = new ModelRenderer(this, 13, 86); - this.leftLegPlate4.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftLegPlate4.addBox(2.0F, 1.1F, -2.0F, 1, 8, 4, 0.0F); - this.setRotateAngle(leftLegPlate4, 0.0F, 0.0F, -0.08726646259971647F); - this.rightBoot2 = new ModelRenderer(this, 0, 111); - this.rightBoot2.mirror = true; - this.rightBoot2.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightBoot2.addBox(-3.0F, 8.5F, -3.0F, 5, 1, 6, 0.0F); - this.leftArmPlate3 = new ModelRenderer(this, 16, 54); - this.leftArmPlate3.setRotationPoint(0.0F, 1.7F, 0.0F); - this.leftArmPlate3.addBox(5.3F, -2.0F, -2.5F, 1, 3, 4, 0.0F); - this.setRotateAngle(leftArmPlate3, 0.0F, 0.22689280275926282F, -0.3490658503988659F); - this.rightLegPlate4 = new ModelRenderer(this, 13, 86); - this.rightLegPlate4.mirror = true; - this.rightLegPlate4.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightLegPlate4.addBox(-3.0F, 1.1F, -2.0F, 1, 8, 4, 0.0F); - this.setRotateAngle(rightLegPlate4, 0.0F, 0.0F, 0.08726646259971647F); - this.leftLegPlate7 = new ModelRenderer(this, 0, 91); - this.leftLegPlate7.setRotationPoint(0.0F, 4.6F, 0.0F); - this.leftLegPlate7.addBox(-2.6F, 1.6F, 1.7F, 5, 3, 1, 0.0F); - this.setRotateAngle(leftLegPlate7, 0.20943951023931953F, 0.1832595714594046F, 0.0F); - this.bodyPlate6 = new ModelRenderer(this, 29, 33); - this.bodyPlate6.mirror = true; - this.bodyPlate6.setRotationPoint(0.0F, 3.0F, 0.0F); - this.bodyPlate6.addBox(-4.1F, 1.4F, -3.3F, 5, 2, 1, 0.0F); - this.setRotateAngle(bodyPlate6, -0.3490658503988659F, 0.22689280275926282F, 0.0F); - this.facePlate5 = new ModelRenderer(this, 24, 98); - this.facePlate5.setRotationPoint(0.0F, 0.5F, 0.0F); - this.facePlate5.addBox(-2.0F, -8.7F, -6.0F, 5, 4, 1, 0.0F); - this.setRotateAngle(facePlate5, -0.05235987755982988F, -0.3490658503988659F, 0.0F); - this.backPlate = new ModelRenderer(this, 48, 99); - this.backPlate.setRotationPoint(0.0F, 0.0F, 0.0F); - this.backPlate.addBox(-4.0F, -7.8F, 3.6F, 8, 8, 1, 0.0F); - this.setRotateAngle(backPlate, 0.05235987755982988F, -0.0F, 0.0F); - this.rightBoot3 = new ModelRenderer(this, 0, 119); - this.rightBoot3.mirror = true; - this.rightBoot3.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightBoot3.addBox(-3.0F, 9.0F, -2.5F, 1, 2, 7, 0.0F); - this.setRotateAngle(rightBoot3, 0.0F, 0.0F, 0.08726646259971647F); - this.leftLeg = new ModelRenderer(this, 0, 70); - this.leftLeg.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftLeg.addBox(-2.5F, 0.0F, -2.5F, 5, 10, 5, 0.0F); - this.bodyPlate3 = new ModelRenderer(this, 29, 33); - this.bodyPlate3.mirror = true; - this.bodyPlate3.setRotationPoint(0.0F, 0.0F, 0.0F); - this.bodyPlate3.addBox(-4.1F, 1.4F, -3.7F, 5, 2, 1, 0.0F); - this.setRotateAngle(bodyPlate3, -0.3490658503988659F, 0.22689280275926282F, 0.0F); - this.facePlate4 = new ModelRenderer(this, 24, 93); - this.facePlate4.mirror = true; - this.facePlate4.setRotationPoint(0.0F, 0.5F, 0.0F); - this.facePlate4.addBox(-3.0F, -3.5F, -5.5F, 5, 3, 1, 0.0F); - this.setRotateAngle(facePlate4, 0.05235987755982988F, 0.3490658503988659F, 0.0F); - this.rightArmPlate4 = new ModelRenderer(this, 16, 62); - this.rightArmPlate4.setRotationPoint(0.0F, 1.7F, 0.0F); - this.rightArmPlate4.addBox(-6.3F, -2.0F, -1.5F, 1, 3, 4, 0.0F); - this.setRotateAngle(rightArmPlate4, 0.0F, 0.22689280275926282F, 0.3490658503988659F); - this.leftLegPlate1 = new ModelRenderer(this, 0, 86); - this.leftLegPlate1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftLegPlate1.addBox(-2.6F, 1.6F, -2.7F, 5, 3, 1, 0.0F); - this.setRotateAngle(leftLegPlate1, -0.20943951023931953F, -0.1832595714594046F, 0.0F); - this.rightLegPlate7 = new ModelRenderer(this, 0, 91); - this.rightLegPlate7.mirror = true; - this.rightLegPlate7.setRotationPoint(0.0F, 4.6F, 0.0F); - this.rightLegPlate7.addBox(-2.4F, 1.6F, 1.7F, 5, 3, 1, 0.0F); - this.setRotateAngle(rightLegPlate7, 0.20943951023931953F, -0.1832595714594046F, 0.0F); - this.rightLegPlate1 = new ModelRenderer(this, 0, 86); - this.rightLegPlate1.mirror = true; - this.rightLegPlate1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightLegPlate1.addBox(-2.4F, 1.6F, -2.7F, 5, 3, 1, 0.0F); - this.setRotateAngle(rightLegPlate1, -0.20943951023931953F, 0.1832595714594046F, 0.0F); - this.belt = new ModelRenderer(this, 29, 64); - this.belt.setRotationPoint(0.0F, 0.0F, 0.0F); - this.belt.addBox(-5.0F, 11.0F, -3.0F, 10, 2, 6, 0.0F); - this.rightLegPlate5 = new ModelRenderer(this, 0, 91); - this.rightLegPlate5.mirror = true; - this.rightLegPlate5.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightLegPlate5.addBox(-2.4F, 1.6F, 1.7F, 5, 3, 1, 0.0F); - this.setRotateAngle(rightLegPlate5, 0.20943951023931953F, -0.1832595714594046F, 0.0F); - this.leftBoot3 = new ModelRenderer(this, 0, 119); - this.leftBoot3.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftBoot3.addBox(2.0F, 9.0F, -2.5F, 1, 2, 7, 0.0F); - this.setRotateAngle(leftBoot3, 0.0F, 0.0F, -0.08726646259971647F); - this.leftBoot2 = new ModelRenderer(this, 0, 111); - this.leftBoot2.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftBoot2.addBox(-2.0F, 8.5F, -3.0F, 5, 1, 6, 0.0F); - this.leftLegPlate6 = new ModelRenderer(this, 0, 91); - this.leftLegPlate6.setRotationPoint(0.0F, 2.3F, 0.0F); - this.leftLegPlate6.addBox(-2.6F, 1.6F, 1.7F, 5, 3, 1, 0.0F); - this.setRotateAngle(leftLegPlate6, 0.20943951023931953F, 0.1832595714594046F, 0.0F); - this.rightArmPlate7 = new ModelRenderer(this, 29, 73); - this.rightArmPlate7.mirror = true; - this.rightArmPlate7.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightArmPlate7.addBox(-3.0F, -3.5F, -3.5F, 3, 4, 7, 0.0F); - this.rightArmPlate1 = new ModelRenderer(this, 16, 54); - this.rightArmPlate1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightArmPlate1.addBox(-6.3F, -2.0F, -2.5F, 1, 3, 4, 0.0F); - this.setRotateAngle(rightArmPlate1, 0.0F, -0.22689280275926282F, 0.3490658503988659F); - this.leftArmPlate4 = new ModelRenderer(this, 16, 62); - this.leftArmPlate4.setRotationPoint(0.0F, 1.7F, 0.0F); - this.leftArmPlate4.addBox(5.3F, -2.0F, -1.5F, 1, 3, 4, 0.0F); - this.setRotateAngle(leftArmPlate4, 0.0F, -0.22689280275926282F, -0.3490658503988659F); - this.facePlate7 = new ModelRenderer(this, 27, 104); - this.facePlate7.setRotationPoint(0.0F, 0.0F, 0.0F); - this.facePlate7.addBox(3.4F, -8.0F, -3.6F, 1, 8, 9, 0.0F); - this.setRotateAngle(facePlate7, 0.0F, 0.10471975511965977F, 0.0F); - - this.bipedBody.cubeList.clear(); - this.bipedHead.cubeList.clear(); - this.bipedHeadwear.cubeList.clear(); - this.bipedLeftArm.cubeList.clear(); - this.bipedLeftLeg.cubeList.clear(); - this.bipedRightArm.cubeList.clear(); - this.bipedRightLeg.cubeList.clear(); - - if(addChestPiece) - { - this.bipedBody.addChild(this.bodyPlate5); - this.bipedBody.addChild(this.leftSpacer1); - this.bipedBody.addChild(this.bodyPlate2); - this.bipedBody.addChild(this.omegaPlate); - this.bipedLeftArm.addChild(this.leftArmPlate5); - this.bipedLeftArm.addChild(this.leftArmPlate6); - this.bipedLeftArm.addChild(this.leftArmPlate7); - this.bipedLeftArm.addChild(this.leftArm); - this.bipedRightArm.addChild(this.rightShoulder); - this.bipedRightArm.addChild(this.rightArmPlate6); - this.bipedLeftArm.addChild(this.leftArmPlate2); - this.bipedLeftArm.addChild(this.leftArmPlate1); - this.bipedRightArm.addChild(this.rightArmPlate2); - this.bipedRightArm.addChild(this.rightArmPlate3); - this.bipedRightArm.addChild(this.rightArmPlate5); - this.bipedRightArm.addChild(this.rightArm); - this.bipedLeftArm.addChild(this.leftShoulder); - this.bipedLeftArm.addChild(this.leftArmPlate3); - this.bipedRightArm.addChild(this.rightArmPlate5); - this.bipedRightArm.addChild(this.rightArmPlate7); - this.bipedRightArm.addChild(this.rightArmPlate1); - this.bipedLeftArm.addChild(this.leftArmPlate4); - this.bipedRightArm.addChild(this.rightArmPlate4); - this.bipedBody.addChild(this.bodyPlate6); - this.bipedBody.addChild(this.rightSpacer1); - this.bipedBody.addChild(this.bodyPlate1); - this.bipedBody.addChild(this.bodyPlate4); - this.bipedBody.addChild(this.bodyPlate3); - this.bipedBody.addChild(this.chestMain); - } - - if(addLeggings) - { - this.bipedBody.addChild(this.belt); - this.bipedRightLeg.addChild(this.rightLeg); - this.bipedRightLeg.addChild(this.rightLegPlate3); - this.bipedLeftLeg.addChild(this.leftLegPlate5); - this.bipedLeftLeg.addChild(this.leftLegPlate2); - this.bipedRightLeg.addChild(this.rightLegPlate6); - this.bipedLeftLeg.addChild(this.leftLegPlate4); - this.bipedLeftLeg.addChild(this.leftLegPlate7); - this.bipedRightLeg.addChild(this.rightLegPlate4); - this.bipedRightLeg.addChild(this.rightLegPlate1_1); - this.bipedLeftLeg.addChild(this.leftLegPlate6); - this.bipedLeftLeg.addChild(this.leftLegPlate3); - this.bipedLeftLeg.addChild(this.leftLeg); - this.bipedRightLeg.addChild(this.rightLegPlate7); - this.bipedRightLeg.addChild(this.rightLegPlate1); - this.bipedRightLeg.addChild(this.rightLegPlate5); - this.bipedLeftLeg.addChild(this.leftLegPlate1); - } - - if(addBoots) - { - this.bipedLeftLeg.addChild(this.leftBoot1); - this.bipedRightLeg.addChild(this.rightBoot1); - this.bipedRightLeg.addChild(this.rightBoot2); - this.bipedLeftLeg.addChild(this.leftBoot3); - this.bipedLeftLeg.addChild(this.leftBoot2); - this.bipedRightLeg.addChild(this.rightBoot3); - } - - if(addHelmet) - { - this.bipedHead.addChild(this.facePlate3); - this.bipedHead.addChild(this.facePlate1); - this.bipedHead.addChild(this.facePlate6); - this.bipedHead.addChild(this.facePlate2); - this.bipedHead.addChild(this.facePlate8); - this.bipedHead.addChild(this.topPlate); - this.bipedHead.addChild(this.facePlate5); - this.bipedHead.addChild(this.backPlate); - this.bipedHead.addChild(this.facePlate4); - this.bipedHead.addChild(this.facePlate7); - } - } - - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - this.bipedRightLeg.render(f5); - this.bipedRightArm.render(f5); - this.bipedLeftArm.render(f5); - this.bipedBody.render(f5); - this.bipedHead.render(f5); - this.bipedLeftLeg.render(f5); - } - - /** - * This is a helper function from Tabula to set the rotation of model parts - */ - public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) - { - modelRenderer.rotateAngleX = x; - modelRenderer.rotateAngleY = y; - modelRenderer.rotateAngleZ = z; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelOmegaWater.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelOmegaWater.java deleted file mode 100644 index b46da158..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelOmegaWater.java +++ /dev/null @@ -1,500 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBiped; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelOmegaWater extends ModelBiped -{ - //fields - ModelRenderer belt; - - ModelRenderer chestMain; - ModelRenderer chestPlate1; - ModelRenderer chestPlate2; - ModelRenderer chestPlate3; - ModelRenderer chestPlate4; - ModelRenderer leftTank; - ModelRenderer rightTank; - ModelRenderer tankBrace; - ModelRenderer leftArmPlate1; - ModelRenderer leftArmPlate2; - ModelRenderer leftShoulder; - ModelRenderer leftArm; - ModelRenderer rightArm; - ModelRenderer rightArmPlate1; - ModelRenderer rightArmPlate2; - ModelRenderer rightShoulder; - ModelRenderer leftLeg; - ModelRenderer leftLegBrace; - ModelRenderer leftLegPouch; - ModelRenderer rightLeg; - ModelRenderer leftFoot; - ModelRenderer leftFootBrace; - ModelRenderer leftFootPlate; - ModelRenderer rightFoot; - ModelRenderer rightFootBrace; - ModelRenderer rightFootPlate; - ModelRenderer topHeadPlate; - ModelRenderer facePlate1; - ModelRenderer facePlate2; - ModelRenderer facePlate3; - ModelRenderer facePlate4; - ModelRenderer facePlate5; - ModelRenderer leftPlate1; - ModelRenderer leftPlate2; - ModelRenderer leftPlate3; - ModelRenderer backPlate2; - ModelRenderer leftPlate4; - ModelRenderer backPlate1; - ModelRenderer rightPlate1; - ModelRenderer rightPlate2; - ModelRenderer rightPlate3; - ModelRenderer rightPlate4; - - public ModelOmegaWater(float f, boolean addHelmet, boolean addChestPiece, boolean addLeggings, boolean addBoots) - { - super(f, 0.0f, 256, 128); - textureWidth = 256; - textureHeight = 128; - - belt = new ModelRenderer(this, 29, 42); - belt.addBox(-5F, 0F, -3F, 10, 2, 6); - belt.setRotationPoint(0F, 11F, 0F); - belt.setTextureSize(256, 128); - belt.mirror = true; - setRotation(belt, 0F, 0F, 0F); - - chestMain = new ModelRenderer(this, 0, 42); - chestMain.addBox(-4.5F, -0.5F, -2.5F, 9, 13, 5); - chestMain.setRotationPoint(0F, 0F, 0F); - chestMain.setTextureSize(256, 128); - chestMain.mirror = true; - setRotation(chestMain, 0F, 0F, 0F); - - chestPlate1 = new ModelRenderer(this, 0, 60); - chestPlate1.addBox(-4F, 1F, -2.5F, 8, 3, 2); - chestPlate1.setRotationPoint(0F, 0F, 0F); - chestPlate1.setTextureSize(256, 128); - chestPlate1.mirror = true; - setRotation(chestPlate1, -0.3490659F, 0F, 0F); - - chestPlate2 = new ModelRenderer(this, 0, 66); - chestPlate2.mirror = true; - chestPlate2.addBox(-4.5F, 2.5F, -3.5F, 3, 3, 1); - chestPlate2.setRotationPoint(0F, 0F, 0F); - chestPlate2.setTextureSize(256, 128); - chestPlate2.mirror = true; - setRotation(chestPlate2, 0F, 0F, 0F); - chestPlate2.mirror = false; - - chestPlate3 = new ModelRenderer(this, 0, 66); - chestPlate3.addBox(1.5F, 2.5F, -3.5F, 3, 3, 1); - chestPlate3.setRotationPoint(0F, 0F, 0F); - chestPlate3.setTextureSize(256, 128); - chestPlate3.mirror = true; - setRotation(chestPlate3, 0F, 0F, 0F); - - chestPlate4 = new ModelRenderer(this, 0, 71); - chestPlate4.addBox(-1.5F, 4.5F, -3.5F, 3, 5, 1); - chestPlate4.setRotationPoint(0F, 0F, 0F); - chestPlate4.setTextureSize(256, 128); - chestPlate4.mirror = true; - setRotation(chestPlate4, 0F, 0F, 0F); - - leftTank = new ModelRenderer(this, 9, 66); - leftTank.addBox(1F, 1F, 2.5F, 2, 8, 1); - leftTank.setRotationPoint(0F, 0F, 0F); - leftTank.setTextureSize(256, 128); - leftTank.mirror = true; - setRotation(leftTank, 0F, 0F, 0F); - - rightTank = new ModelRenderer(this, 9, 66); - rightTank.addBox(-3F, 1F, 2.5F, 2, 8, 1); - rightTank.setRotationPoint(0F, 0F, 0F); - rightTank.setTextureSize(256, 128); - rightTank.mirror = true; - setRotation(rightTank, 0F, 0F, 0F); - - tankBrace = new ModelRenderer(this, 0, 78); - tankBrace.addBox(-4F, 1.5F, 2F, 8, 2, 1); - tankBrace.setRotationPoint(0F, 0F, 0F); - tankBrace.setTextureSize(256, 128); - tankBrace.mirror = true; - setRotation(tankBrace, 0F, 0F, 0F); - - leftArmPlate1 = new ModelRenderer(this, 0, 82); - leftArmPlate1.addBox(-0.4F-4F, -2F-3F, -4F-1, 6, 3, 1); - leftArmPlate1.setRotationPoint(5F, 2F, 0F); - leftArmPlate1.setTextureSize(256, 128); - leftArmPlate1.mirror = true; - setRotation(leftArmPlate1, -0.3490659F, 0F, -0.2617994F); - - leftArmPlate2 = new ModelRenderer(this, 0, 82); - leftArmPlate2.addBox(-0.4F-4F, -2F-3F, -4F-1, 6, 3, 1); - leftArmPlate2.setRotationPoint(5F, 4F, 0F); - leftArmPlate2.setTextureSize(256, 128); - leftArmPlate2.mirror = true; - setRotation(leftArmPlate2, -0.3490659F, 0F, -0.2617994F); - - leftShoulder = new ModelRenderer(this, 21, 82); - leftShoulder.addBox(-1F-5F, -3F-2F, -3F, 6, 5, 6); - leftShoulder.setRotationPoint(5F, 2F, 0F); - leftShoulder.setTextureSize(256, 128); - leftShoulder.mirror = true; - setRotation(leftShoulder, 0F, 0F, 0F); - - leftArm = new ModelRenderer(this, 0, 87); - leftArm.addBox(-1F-5.5F, 1.5F-2F, -2.5F, 5, 9, 5); - leftArm.setRotationPoint(5F, 2F, 0F); - leftArm.setTextureSize(256, 128); - leftArm.mirror = true; - setRotation(leftArm, 0F, 0F, 0F); - - rightArm = new ModelRenderer(this, 0, 87); - rightArm.mirror = true; - rightArm.addBox(-4F+5.5F, 1.5F-2F, -2.5F, 5, 9, 5); - rightArm.setRotationPoint(-5F, 2F, 0F); - rightArm.setTextureSize(256, 128); - rightArm.mirror = true; - setRotation(rightArm, 0F, 0F, 0F); - rightArm.mirror = false; - - rightArmPlate1 = new ModelRenderer(this, 0, 82); - rightArmPlate1.mirror = true; - rightArmPlate1.addBox(-4.6F+4F, -2.2F-3F, -4F-1, 6, 3, 1); - rightArmPlate1.setRotationPoint(-6F, 2F, 0F); - rightArmPlate1.setTextureSize(256, 128); - rightArmPlate1.mirror = true; - setRotation(rightArmPlate1, -0.3490659F, 0F, 0.2617994F); - rightArmPlate1.mirror = false; - - rightArmPlate2 = new ModelRenderer(this, 0, 82); - rightArmPlate2.mirror = true; - rightArmPlate2.addBox(-4.6F+4F, -2.2F-3F, -4F-1, 6, 3, 1); - rightArmPlate2.setRotationPoint(-6F, 4F, 0F); - rightArmPlate2.setTextureSize(256, 128); - rightArmPlate2.mirror = true; - setRotation(rightArmPlate2, -0.3490659F, 0F, 0.2617994F); - rightArmPlate2.mirror = false; - - rightShoulder = new ModelRenderer(this, 21, 82); - rightShoulder.mirror = true; - rightShoulder.addBox(-4F+5F, -3F-2F, -3F, 6, 5, 6); - rightShoulder.setRotationPoint(-6F, 2F, 0F); - rightShoulder.setTextureSize(256, 128); - rightShoulder.mirror = true; - setRotation(rightShoulder, 0F, 0F, 0F); - rightShoulder.mirror = false; - - leftLeg = new ModelRenderer(this, 29, 51); - leftLeg.addBox(-4.5F, -12F, -2.5F, 5, 10, 5); - leftLeg.setRotationPoint(2F, 12F, 0F); - leftLeg.setTextureSize(256, 128); - leftLeg.mirror = true; - setRotation(leftLeg, 0F, 0F, 0F); - - leftLegBrace = new ModelRenderer(this, 38, 67); - leftLegBrace.addBox(-2F, -7F, -3F, 3, 1, 6); - leftLegBrace.setRotationPoint(2F, 12F, 0F); - leftLegBrace.setTextureSize(256, 128); - leftLegBrace.mirror = true; - setRotation(leftLegBrace, 0F, 0F, 0F); - - leftLegPouch = new ModelRenderer(this, 29, 67); - leftLegPouch.addBox(0.5F, 3F-12F, -1.5F, 1, 4, 3); - leftLegPouch.setRotationPoint(2F, 12F, 0F); - leftLegPouch.setTextureSize(256, 128); - leftLegPouch.mirror = true; - setRotation(leftLegPouch, 0F, 0F, 0F); - - rightLeg = new ModelRenderer(this, 29, 51); - rightLeg.mirror = true; - rightLeg.addBox(-0.5F, 0F-12F, -2.5F, 5, 10, 5); - rightLeg.setRotationPoint(-2F, 12F, 0F); - rightLeg.setTextureSize(256, 128); - rightLeg.mirror = true; - setRotation(rightLeg, 0F, 0F, 0F); - rightLeg.mirror = false; - - leftFoot = new ModelRenderer(this, 21, 103); - leftFoot.addBox(-4F, 9.5F-12F, -5F, 5, 3, 8); - leftFoot.setRotationPoint(2F, 12F, 0F); - leftFoot.setTextureSize(256, 128); - leftFoot.mirror = true; - setRotation(leftFoot, 0F, 0F, 0F); - - leftFootBrace = new ModelRenderer(this, 21, 94); - leftFootBrace.addBox(-4F, 7.5F-12F, -3F, 5, 2, 6); - leftFootBrace.setRotationPoint(2F, 12F, 0F); - leftFootBrace.setTextureSize(256, 128); - leftFootBrace.mirror = true; - setRotation(leftFootBrace, 0F, 0F, 0F); - - leftFootPlate = new ModelRenderer(this, 21, 115); - leftFootPlate.addBox(-3.5F, 7F-8F, 4F-9F, 4, 3, 1); - leftFootPlate.setRotationPoint(2F, 12F, 0F); - leftFootPlate.setTextureSize(256, 128); - leftFootPlate.mirror = true; - setRotation(leftFootPlate, -0.8726646F, 0F, 0F); - - rightFoot = new ModelRenderer(this, 21, 103); - rightFoot.mirror = true; - rightFoot.addBox(-1F, 9.5F-12F, -5F, 5, 3, 8); - rightFoot.setRotationPoint(-2F, 12F, 0F); - rightFoot.setTextureSize(256, 128); - rightFoot.mirror = true; - setRotation(rightFoot, 0F, 0F, 0F); - rightFoot.mirror = false; - - rightFootBrace = new ModelRenderer(this, 21, 94); - rightFootBrace.mirror = true; - rightFootBrace.addBox(-1F, 7.5F-12F, -3F, 5, 2, 6); - rightFootBrace.setRotationPoint(-2F, 12F, 0F); - rightFootBrace.setTextureSize(256, 128); - rightFootBrace.mirror = true; - setRotation(rightFootBrace, 0F, 0F, 0F); - rightFootBrace.mirror = false; - - rightFootPlate = new ModelRenderer(this, 21, 115); - rightFootPlate.mirror = true; - rightFootPlate.addBox(-0.5F, 7F-8F, 4F-9F, 4, 3, 1); - rightFootPlate.setRotationPoint(-2F, 12F, 0F); - rightFootPlate.setTextureSize(256, 128); - rightFootPlate.mirror = true; - setRotation(rightFootPlate, -0.8726646F, 0F, 0F); - rightFootPlate.mirror = false; - - topHeadPlate = new ModelRenderer(this, 58, 19); - topHeadPlate.addBox(-4F, -8.5F, -4.5F, 8, 1, 9); - topHeadPlate.setRotationPoint(0F, 0F, 0F); - topHeadPlate.setTextureSize(256, 128); - topHeadPlate.mirror = true; - setRotation(topHeadPlate, 0F, 0F, 0F); - - facePlate1 = new ModelRenderer(this, 58, 0); - facePlate1.addBox(-4F, -8.5F, -5F, 8, 4, 1); - facePlate1.setRotationPoint(0F, 0F, 0F); - facePlate1.setTextureSize(256, 128); - facePlate1.mirror = true; - setRotation(facePlate1, 0F, 0F, 0F); - - facePlate2 = new ModelRenderer(this, 58, 6); - facePlate2.addBox(-1F, -4.5F, -5F, 2, 2, 1); - facePlate2.setRotationPoint(0F, 0F, 0F); - facePlate2.setTextureSize(256, 128); - facePlate2.mirror = true; - setRotation(facePlate2, 0F, 0F, 0F); - - facePlate3 = new ModelRenderer(this, 58, 15); - facePlate3.addBox(-4F, -4.5F, -4.5F, 8, 2, 1); - facePlate3.setRotationPoint(0F, 0F, 0F); - facePlate3.setTextureSize(256, 128); - facePlate3.mirror = true; - setRotation(facePlate3, 0F, 0F, 0F); - - facePlate4 = new ModelRenderer(this, 58, 10); - facePlate4.mirror = true; - facePlate4.addBox(-2F, -3.5F, -5.5F, 4, 3, 1); - facePlate4.setRotationPoint(0F, 0.5F, 0F); - facePlate4.setTextureSize(256, 128); - facePlate4.mirror = true; - setRotation(facePlate4, 0.0523599F, 0.3490659F, 0F); - facePlate4.mirror = false; - - facePlate5 = new ModelRenderer(this, 58, 10); - facePlate5.addBox(-2F, -3.5F, -5.5F, 4, 3, 1); - facePlate5.setRotationPoint(0F, 0.5F, 0F); - facePlate5.setTextureSize(256, 128); - facePlate5.mirror = true; - setRotation(facePlate5, 0.0523599F, -0.3490659F, 0F); - - leftPlate1 = new ModelRenderer(this, 77, 0); - leftPlate1.addBox(4.5F, -5.2F, -4.6F, 1, 3, 9); - leftPlate1.setRotationPoint(0F, -2F, 0F); - leftPlate1.setTextureSize(256, 128); - leftPlate1.mirror = true; - setRotation(leftPlate1, 0F, 0F, -0.1919862F); - - leftPlate2 = new ModelRenderer(this, 77, 0); - leftPlate2.addBox(4.5F, -5.2F, -4.6F, 1, 3, 9); - leftPlate2.setRotationPoint(0F, 0F, 0F); - leftPlate2.setTextureSize(256, 128); - leftPlate2.mirror = true; - setRotation(leftPlate2, 0F, 0F, -0.1919862F); - - leftPlate3 = new ModelRenderer(this, 77, 0); - leftPlate3.addBox(4.5F, -5.2F, -4.6F, 1, 3, 9); - leftPlate3.setRotationPoint(0F, 2F, 0F); - leftPlate3.setTextureSize(256, 128); - leftPlate3.mirror = true; - setRotation(leftPlate3, 0F, 0F, -0.1919862F); - - backPlate2 = new ModelRenderer(this, 98, 0); - backPlate2.addBox(-4F, -5.5F, 4.5F, 8, 4, 1); - backPlate2.setRotationPoint(0F, 2F, 0F); - backPlate2.setTextureSize(256, 128); - backPlate2.mirror = true; - setRotation(backPlate2, 0.122173F, 0F, 0F); - - leftPlate4 = new ModelRenderer(this, 98, 6); - leftPlate4.addBox(3.5F, -5.8F, -4.6F, 1, 2, 9); - leftPlate4.setRotationPoint(0F, 4F, 0F); - leftPlate4.setTextureSize(256, 128); - leftPlate4.mirror = true; - setRotation(leftPlate4, 0F, 0F, 0F); - - backPlate1 = new ModelRenderer(this, 98, 0); - backPlate1.addBox(-4F, -5.5F, 4.5F, 8, 4, 1); - backPlate1.setRotationPoint(0F, -2F, 0F); - backPlate1.setTextureSize(256, 128); - backPlate1.mirror = true; - setRotation(backPlate1, 0.122173F, 0F, 0F); - - rightPlate1 = new ModelRenderer(this, 77, 0); - rightPlate1.mirror = true; - rightPlate1.addBox(-5.5F, -5.2F, -4.6F, 1, 3, 9); - rightPlate1.setRotationPoint(0F, -2F, 0F); - rightPlate1.setTextureSize(256, 128); - rightPlate1.mirror = true; - setRotation(rightPlate1, 0F, 0F, 0.1919862F); - rightPlate1.mirror = false; - - rightPlate2 = new ModelRenderer(this, 77, 0); - rightPlate2.mirror = true; - rightPlate2.addBox(-5.5F, -5.2F, -4.6F, 1, 3, 9); - rightPlate2.setRotationPoint(0F, 0F, 0F); - rightPlate2.setTextureSize(256, 128); - rightPlate2.mirror = true; - setRotation(rightPlate2, 0F, 0F, 0.1919862F); - rightPlate2.mirror = false; - - rightPlate3 = new ModelRenderer(this, 77, 0); - rightPlate3.mirror = true; - rightPlate3.addBox(-5.5F, -5.2F, -4.6F, 1, 3, 9); - rightPlate3.setRotationPoint(0F, 2F, 0F); - rightPlate3.setTextureSize(256, 128); - rightPlate3.mirror = true; - setRotation(rightPlate3, 0F, 0F, 0.1919862F); - rightPlate3.mirror = false; - - rightPlate4 = new ModelRenderer(this, 98, 6); - rightPlate4.mirror = true; - rightPlate4.addBox(-4.5F, -5.8F, -4.6F, 1, 2, 9); - rightPlate4.setRotationPoint(0F, 4F, 0F); - rightPlate4.setTextureSize(256, 128); - rightPlate4.mirror = true; - setRotation(rightPlate4, 0F, 0F, 0F); - rightPlate4.mirror = false; - - this.bipedHead.cubeList.clear(); - this.bipedHeadwear.cubeList.clear(); - if (addHelmet) - { - this.bipedHead.addChild(this.facePlate1); - this.bipedHead.addChild(this.facePlate2); - this.bipedHead.addChild(this.facePlate3); - this.bipedHead.addChild(this.facePlate4); - this.bipedHead.addChild(this.facePlate5); - this.bipedHead.addChild(this.topHeadPlate); - this.bipedHead.addChild(this.leftPlate1); - this.bipedHead.addChild(this.rightPlate1); - this.bipedHead.addChild(this.leftPlate2); - this.bipedHead.addChild(this.rightPlate2); - this.bipedHead.addChild(this.leftPlate3); - this.bipedHead.addChild(this.rightPlate3); - this.bipedHead.addChild(this.leftPlate4); - this.bipedHead.addChild(this.rightPlate4); - this.bipedHead.addChild(this.backPlate1); - this.bipedHead.addChild(this.backPlate2); - - } - - this.bipedBody.cubeList.clear(); - if (addChestPiece) - { - this.bipedBody.addChild(this.chestMain); - this.bipedBody.addChild(this.chestPlate1); - this.bipedBody.addChild(this.chestPlate2); - this.bipedBody.addChild(this.chestPlate3); - this.bipedBody.addChild(this.chestPlate4); - this.bipedBody.addChild(this.leftTank); - this.bipedBody.addChild(this.rightTank); - this.bipedBody.addChild(this.tankBrace); - } - if (addLeggings) - { - this.bipedBody.addChild(this.belt); - } - - this.bipedRightArm.cubeList.clear(); - if (addChestPiece) - { - this.bipedRightArm.addChild(this.rightArm); - this.bipedRightArm.addChild(this.rightShoulder); - this.bipedRightArm.addChild(this.rightArmPlate1); - this.bipedRightArm.addChild(this.rightArmPlate2); - - } - - this.bipedLeftArm.cubeList.clear(); - if (addChestPiece) - { - this.bipedLeftArm.addChild(this.leftArm); - this.bipedLeftArm.addChild(this.leftShoulder); - this.bipedLeftArm.addChild(this.leftArmPlate1); - this.bipedLeftArm.addChild(this.leftArmPlate2); - } - - this.bipedLeftLeg.cubeList.clear(); - if (addBoots) - { - this.bipedLeftLeg.addChild(this.leftFoot); - this.bipedLeftLeg.addChild(this.leftFootBrace); - this.bipedLeftLeg.addChild(this.leftFootPlate); - } - if (addLeggings) - { - this.bipedLeftLeg.addChild(this.leftLeg); - this.bipedLeftLeg.addChild(this.leftLegBrace); - this.bipedLeftLeg.addChild(this.leftLegPouch); - } - - this.bipedRightLeg.cubeList.clear(); - if (addBoots) - { - this.bipedRightLeg.addChild(this.rightFoot); - this.bipedRightLeg.addChild(this.rightFootBrace); - this.bipedRightLeg.addChild(this.rightFootPlate); - } - if (addLeggings) - { - this.bipedRightLeg.addChild(this.rightLeg); - } - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - - this.bipedHead.render(f5); - this.bipedBody.render(f5); - this.bipedLeftArm.render(f5); - this.bipedRightArm.render(f5); - this.bipedLeftLeg.render(f5); - this.bipedRightLeg.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelOmegaWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelOmegaWind.java deleted file mode 100644 index 6dfb7dc8..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelOmegaWind.java +++ /dev/null @@ -1,405 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBiped; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -/** - * OmegaWind.tcn - TechneToTabulaImporter - * Created using Tabula 4.1.0 - */ -public class ModelOmegaWind extends ModelBiped -{ - public ModelRenderer facePlate1; - public ModelRenderer facePlate2; - public ModelRenderer facePlate3; - public ModelRenderer facePlate4; - public ModelRenderer forePlate; - public ModelRenderer topWingPlate; - public ModelRenderer leftWingPlate1; - public ModelRenderer leftWingPlate3; - public ModelRenderer rightWingPlate1; - public ModelRenderer rightWingPlate2; - public ModelRenderer rightWingPlate3; - public ModelRenderer topPlate; - public ModelRenderer backPlate; - public ModelRenderer leftWingPlate2; - public ModelRenderer chestMain; - public ModelRenderer chestPlate1; - public ModelRenderer chestPlate3; - public ModelRenderer chestPlate4; - public ModelRenderer chestPlate5; - public ModelRenderer chestPlate6; - public ModelRenderer chestOrnament; - public ModelRenderer belt; - public ModelRenderer chestPlate2; - public ModelRenderer rightArm; - public ModelRenderer rightShoulder; - public ModelRenderer rightArmPlate1; - public ModelRenderer rightArmPlate2; - public ModelRenderer rightArmPlate3; - public ModelRenderer rightFloater1; - public ModelRenderer rightFloater2; - public ModelRenderer rightFloater3; - public ModelRenderer rightFloater4; - public ModelRenderer leftArm; - public ModelRenderer leftShoulder; - public ModelRenderer leftArmPlate1; - public ModelRenderer leftArmPlate2; - public ModelRenderer leftArmPlate3; - public ModelRenderer leftFloater1; - public ModelRenderer leftFloater2; - public ModelRenderer leftFloater3; - public ModelRenderer leftFloater4; - public ModelRenderer rightLeg; - public ModelRenderer rightLegFloater1; - public ModelRenderer rightLegFloater2; - public ModelRenderer rightLegFloater3; - public ModelRenderer rightFoot2; - public ModelRenderer rightFootPlate; - public ModelRenderer rightFoot1; - public ModelRenderer leftLeg; - public ModelRenderer leftLegFloater1; - public ModelRenderer leftLegFloater2; - public ModelRenderer leftLegFloater3; - public ModelRenderer leftFoot1; - public ModelRenderer leftFoot2; - public ModelRenderer leftFootPlate; - - public ModelOmegaWind(float f, boolean addHelmet, boolean addChestPiece, boolean addLeggings, boolean addBoots) - { - super(f, 0.0f, 128, 128); - this.rightWingPlate2 = new ModelRenderer(this, 33, 82); - this.rightWingPlate2.mirror = true; - this.rightWingPlate2.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightWingPlate2.addBox(-5.0F, -4.900000095367432F, -2.5F, 1, 2, 3, 0.0F); - this.setRotateAngle(rightWingPlate2, 0.13962633907794952F, -0.0F, 0.0F); - this.leftFloater1 = new ModelRenderer(this, 0, 78); - this.leftFloater1.setRotationPoint(1.0F, 7.0F, 0.0F); - this.leftFloater1.addBox(3.5F, -2.0F, -1.5F, 1, 3, 3, 0.0F); - this.setRotateAngle(leftFloater1, -0.148352986419518F, -0.5040510879759623F, 0.30002209841782523F); - - this.leftWingPlate3 = new ModelRenderer(this, 38, 92); - this.leftWingPlate3.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftWingPlate3.addBox(3.5F, -5.0F, -3.9000000953674316F, 1, 5, 9, 0.0F); - this.setRotateAngle(leftWingPlate3, 0.0F, 0.12217304855585097F, 0.0F); - this.leftFoot1 = new ModelRenderer(this, 0, 110); - this.leftFoot1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftFoot1.addBox(-2.0F, 9.5F, -5.0F, 5, 3, 8, 0.0F); - this.rightArmPlate1 = new ModelRenderer(this, 21, 51); - this.rightArmPlate1.mirror = true; - this.rightArmPlate1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightArmPlate1.addBox(-5.5F, -2.0F, -4.0F, 1, 4, 8, 0.0F); - this.setRotateAngle(rightArmPlate1, 0.0F, -0.0F, 0.5585053606381855F); - this.topPlate = new ModelRenderer(this, 59, 92); - this.topPlate.setRotationPoint(0.0F, 0.0F, 0.0F); - this.topPlate.addBox(-4.5F, -8.100000381469727F, -4.0F, 9, 1, 8, 0.0F); - - this.leftShoulder = new ModelRenderer(this, 0, 66); - this.leftShoulder.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftShoulder.addBox(-1.0F, -3.0F, -3.0F, 5, 5, 6, 0.0F); - this.leftArmPlate3 = new ModelRenderer(this, 21, 51); - this.leftArmPlate3.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftArmPlate3.addBox(2.5F, 1.0F, -4.0F, 1, 4, 8, 0.0F); - this.setRotateAngle(leftArmPlate3, 0.0F, -0.0F, -0.5585053606381855F); - this.leftFloater4 = new ModelRenderer(this, 0, 78); - this.leftFloater4.setRotationPoint(1.0F, 7.0F, 0.0F); - this.leftFloater4.addBox(3.5F, -2.0F, -1.5F, 1, 3, 3, 0.0F); - this.setRotateAngle(leftFloater4, -1.5707963267948966F, -1.3089969389957472F, 1.5707963267948966F); - this.leftWingPlate1 = new ModelRenderer(this, 42, 77); - this.leftWingPlate1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftWingPlate1.addBox(4.0F, -7.900000095367432F, -4.5F, 1, 3, 11, 0.0F); - this.setRotateAngle(leftWingPlate1, 0.13962633907794952F, -0.0F, 0.0F); - this.rightShoulder = new ModelRenderer(this, 0, 66); - this.rightShoulder.mirror = true; - this.rightShoulder.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightShoulder.addBox(-4.0F, -3.0F, -3.0F, 5, 5, 6, 0.0F); - this.leftLegFloater3 = new ModelRenderer(this, 0, 78); - this.leftLegFloater3.mirror = true; - this.leftLegFloater3.setRotationPoint(0.0F, 5.0F, 0.0F); - this.leftLegFloater3.addBox(4.0F, -1.5F, -1.5F, 1, 3, 3, 0.0F); - this.setRotateAngle(leftLegFloater3, -0.7681194038027044F, -1.2027063875492923F, 0.8026769229921922F); - this.facePlate4 = new ModelRenderer(this, 42, 63); - this.facePlate4.mirror = true; - this.facePlate4.setRotationPoint(0.0F, 0.5F, 0.0F); - this.facePlate4.addBox(-2.0F, -3.5F, -5.5F, 4, 3, 1, 0.0F); - this.setRotateAngle(facePlate4, 0.05235987901687623F, 0.34906584024429316F, 0.0F); - this.leftLegFloater1 = new ModelRenderer(this, 0, 78); - this.leftLegFloater1.mirror = true; - this.leftLegFloater1.setRotationPoint(0.0F, 5.0F, 0.0F); - this.leftLegFloater1.addBox(4.0F, -1.5F, -1.5F, 1, 3, 3, 0.0F); - this.setRotateAngle(leftLegFloater1, 0.0F, -0.0F, 0.2617993877991494F); - this.rightLegFloater2 = new ModelRenderer(this, 0, 78); - this.rightLegFloater2.setRotationPoint(0.0F, 5.0F, 0.0F); - this.rightLegFloater2.addBox(-5.0F, -1.5F, -1.5F, 1, 3, 3, 0.0F); - this.setRotateAngle(rightLegFloater2, -0.7681194038027044F, 1.2027063875492923F, -0.8026769229921922F); - this.leftFloater3 = new ModelRenderer(this, 0, 78); - this.leftFloater3.setRotationPoint(1.0F, 7.0F, 0.0F); - this.leftFloater3.addBox(3.5F, -2.0F, -1.5F, 1, 3, 3, 0.0F); - this.setRotateAngle(leftFloater3, 1.5707963267948966F, 1.3089969389957472F, 1.5707963267948966F); - this.leftWingPlate2 = new ModelRenderer(this, 33, 82); - this.leftWingPlate2.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftWingPlate2.addBox(4.0F, -4.900000095367432F, -2.5F, 1, 2, 3, 0.0F); - this.setRotateAngle(leftWingPlate2, 0.13962633907794952F, -0.0F, 0.0F); - this.facePlate3 = new ModelRenderer(this, 42, 63); - this.facePlate3.setRotationPoint(0.0F, 0.5F, 0.0F); - this.facePlate3.addBox(-2.0F, -3.5F, -5.5F, 4, 3, 1, 0.0F); - this.setRotateAngle(facePlate3, 0.05235987901687623F, -0.34906584024429316F, 0.0F); - this.rightLegFloater3 = new ModelRenderer(this, 0, 78); - this.rightLegFloater3.setRotationPoint(0.0F, 5.0F, 0.0F); - this.rightLegFloater3.addBox(-5.0F, -1.5F, -1.5F, 1, 3, 3, 0.0F); - this.setRotateAngle(rightLegFloater3, 0.7681194038027044F, -1.2027063875492923F, -0.8026769229921922F); - this.rightArmPlate3 = new ModelRenderer(this, 21, 51); - this.rightArmPlate3.mirror = true; - this.rightArmPlate3.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightArmPlate3.addBox(-3.5F, 1.0F, -4.0F, 1, 4, 8, 0.0F); - this.setRotateAngle(rightArmPlate3, 0.0F, -0.0F, 0.5585053606381855F); - this.chestPlate6 = new ModelRenderer(this, 29, 33); - this.chestPlate6.mirror = true; - this.chestPlate6.setRotationPoint(0.0F, 3.0F, -3.0F); - this.chestPlate6.addBox(-6.0F, -1.0F, 0.0F, 5, 2, 1, 0.0F); - this.setRotateAngle(chestPlate6, 0.17457550921422682F, -0.060447682496676876F, -0.5246555175572628F); - this.belt = new ModelRenderer(this, 0, 85); - this.belt.setRotationPoint(0.0F, 0.0F, 0.0F); - this.belt.addBox(-5.0F, 11.0F, -3.0F, 10, 2, 6, 0.0F); - this.rightArmPlate2 = new ModelRenderer(this, 21, 51); - this.rightArmPlate2.mirror = true; - this.rightArmPlate2.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightArmPlate2.addBox(-4.5F, -0.5F, -4.0F, 1, 4, 8, 0.0F); - this.setRotateAngle(rightArmPlate2, 0.0F, -0.0F, 0.5585053606381855F); - this.rightFoot2 = new ModelRenderer(this, 27, 110); - this.rightFoot2.mirror = true; - this.rightFoot2.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightFoot2.addBox(-3.0F, 7.5F, -3.0F, 5, 2, 6, 0.0F); - this.rightLegFloater1 = new ModelRenderer(this, 0, 78); - this.rightLegFloater1.setRotationPoint(0.0F, 5.0F, 0.0F); - this.rightLegFloater1.addBox(-5.0F, -1.5F, -1.5F, 1, 3, 3, 0.0F); - this.setRotateAngle(rightLegFloater1, 0.0F, -0.0F, -0.2617993877991494F); - this.leftFloater2 = new ModelRenderer(this, 0, 78); - this.leftFloater2.setRotationPoint(1.0F, 7.0F, 0.0F); - this.leftFloater2.addBox(3.5F, -2.0F, -1.5F, 1, 3, 3, 0.0F); - this.setRotateAngle(leftFloater2, 0.148352986419518F, 0.5040510879759623F, 0.30002209841782523F); - this.rightFloater2 = new ModelRenderer(this, 0, 78); - this.rightFloater2.mirror = true; - this.rightFloater2.setRotationPoint(-1.0F, 7.0F, 0.0F); - this.rightFloater2.addBox(-4.5F, -2.0F, -1.5F, 1, 3, 3, 0.0F); - this.setRotateAngle(rightFloater2, -1.5707963267948966F, 1.3089969389957472F, -1.5707963267948966F); - this.rightWingPlate1 = new ModelRenderer(this, 42, 77); - this.rightWingPlate1.mirror = true; - this.rightWingPlate1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightWingPlate1.addBox(-5.0F, -7.900000095367432F, -4.5F, 1, 3, 11, 0.0F); - this.setRotateAngle(rightWingPlate1, 0.13962633907794952F, -0.0F, 0.0F); - - this.leftArm = new ModelRenderer(this, 0, 51); - this.leftArm.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftArm.addBox(-1.5F, 2.0F, -2.5F, 5, 9, 5, 0.0F); - this.rightLeg = new ModelRenderer(this, 0, 94); - this.rightLeg.mirror = true; - this.rightLeg.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightLeg.addBox(-2.5F, 0.0F, -2.5F, 5, 10, 5, 0.0F); - this.leftLegFloater2 = new ModelRenderer(this, 0, 78); - this.leftLegFloater2.mirror = true; - this.leftLegFloater2.setRotationPoint(0.0F, 5.0F, 0.0F); - this.leftLegFloater2.addBox(4.0F, -1.5F, -1.5F, 1, 3, 3, 0.0F); - this.setRotateAngle(leftLegFloater2, 0.7681194038027044F, 1.2027063875492923F, 0.8026769229921922F); - this.chestMain = new ModelRenderer(this, 0, 33); - this.chestMain.setRotationPoint(0.0F, 0.0F, 0.0F); - this.chestMain.addBox(-4.5F, -0.5F, -2.5F, 9, 12, 5, 0.0F); - this.chestPlate4 = new ModelRenderer(this, 29, 33); - this.chestPlate4.mirror = true; - this.chestPlate4.setRotationPoint(0.0F, 3.0F, -3.0F); - this.chestPlate4.addBox(-6.0F, -1.0F, 0.0F, 5, 2, 1, 0.0F); - this.setRotateAngle(chestPlate4, 0.10467716894167224F, -0.060447682496676876F, 0.5246555175572628F); - this.leftLeg = new ModelRenderer(this, 0, 94); - this.leftLeg.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftLeg.addBox(-2.5F, 0.0F, -2.5F, 5, 10, 5, 0.0F); - - this.rightFloater3 = new ModelRenderer(this, 0, 78); - this.rightFloater3.mirror = true; - this.rightFloater3.setRotationPoint(-1.0F, 7.0F, 0.0F); - this.rightFloater3.addBox(-4.5F, -2.0F, -1.5F, 1, 3, 3, 0.0F); - this.setRotateAngle(rightFloater3, 0.148352986419518F, -0.5040510879759623F, -0.30002209841782523F); - this.chestPlate2 = new ModelRenderer(this, 29, 33); - this.chestPlate2.setRotationPoint(0.0F, 3.0F, -3.0F); - this.chestPlate2.addBox(1.0F, -1.0F, 0.0F, 5, 2, 1, 0.0F); - this.setRotateAngle(chestPlate2, 0.13962633907794952F, 0.06981316953897476F, 0.0F); - this.rightFootPlate = new ModelRenderer(this, 21, 94); - this.rightFootPlate.mirror = true; - this.rightFootPlate.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightFootPlate.addBox(-1.5F, 9.5F, -3.5F, 1, 3, 7, 0.0F); - this.setRotateAngle(rightFootPlate, 0.0F, -0.0F, 0.22689280275926282F); - this.chestOrnament = new ModelRenderer(this, 29, 37); - this.chestOrnament.setRotationPoint(0.0F, 3.0F, -3.0F); - this.chestOrnament.addBox(-2.0F, -2.0F, -0.5F, 4, 4, 1, 0.0F); - this.rightFloater1 = new ModelRenderer(this, 0, 78); - this.rightFloater1.mirror = true; - this.rightFloater1.setRotationPoint(-1.0F, 7.0F, 0.0F); - this.rightFloater1.addBox(-4.5F, -2.0F, -1.5F, 1, 3, 3, 0.0F); - this.setRotateAngle(rightFloater1, -0.148352986419518F, 0.5040510879759623F, -0.30002209841782523F); - this.leftArmPlate2 = new ModelRenderer(this, 21, 51); - this.leftArmPlate2.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftArmPlate2.addBox(3.5F, -0.5F, -4.0F, 1, 4, 8, 0.0F); - this.setRotateAngle(leftArmPlate2, 0.0F, -0.0F, -0.5585053606381855F); - this.rightFoot1 = new ModelRenderer(this, 0, 110); - this.rightFoot1.mirror = true; - this.rightFoot1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightFoot1.addBox(-3.0F, 9.5F, -5.0F, 5, 3, 8, 0.0F); - this.chestPlate3 = new ModelRenderer(this, 29, 33); - this.chestPlate3.setRotationPoint(0.0F, 3.0F, -3.0F); - this.chestPlate3.addBox(1.0F, -1.0F, 0.0F, 5, 2, 1, 0.0F); - this.setRotateAngle(chestPlate3, 0.17457550921422682F, 0.060447682496676876F, 0.5246555175572628F); - this.chestPlate1 = new ModelRenderer(this, 29, 33); - this.chestPlate1.setRotationPoint(0.0F, 3.0F, -3.0F); - this.chestPlate1.addBox(1.0F, -1.0F, 0.0F, 5, 2, 1, 0.0F); - this.setRotateAngle(chestPlate1, 0.10467716894167224F, 0.060447682496676876F, -0.5246555175572628F); - this.rightArm = new ModelRenderer(this, 0, 51); - this.rightArm.mirror = true; - this.rightArm.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightArm.addBox(-3.5F, 2.0F, -2.5F, 5, 9, 5, 0.0F); - this.leftFoot2 = new ModelRenderer(this, 27, 110); - this.leftFoot2.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftFoot2.addBox(-2.0F, 7.5F, -3.0F, 5, 2, 6, 0.0F); - this.leftFootPlate = new ModelRenderer(this, 21, 94); - this.leftFootPlate.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftFootPlate.addBox(0.5F, 9.5F, -3.5F, 1, 3, 7, 0.0F); - this.setRotateAngle(leftFootPlate, 0.0F, -0.0F, -0.22689280275926282F); - this.facePlate1 = new ModelRenderer(this, 23, 64); - this.facePlate1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.facePlate1.addBox(-4.0F, -4.5F, -4.5F, 8, 2, 1, 0.0F); - this.leftArmPlate1 = new ModelRenderer(this, 21, 51); - this.leftArmPlate1.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftArmPlate1.addBox(4.5F, -2.0F, -4.0F, 1, 4, 8, 0.0F); - this.setRotateAngle(leftArmPlate1, 0.0F, -0.0F, -0.5585053606381855F); - this.topWingPlate = new ModelRenderer(this, 34, 68); - this.topWingPlate.setRotationPoint(0.0F, 0.0F, 0.0F); - this.topWingPlate.addBox(-4.5F, -2.5F, -9.100000381469727F, 9, 3, 1, 0.0F); - this.setRotateAngle(topWingPlate, -0.9773843884468076F, -0.0F, 0.0F); - this.rightWingPlate3 = new ModelRenderer(this, 38, 92); - this.rightWingPlate3.mirror = true; - this.rightWingPlate3.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightWingPlate3.addBox(-4.5F, -5.0F, -3.9000000953674316F, 1, 5, 9, 0.0F); - this.setRotateAngle(rightWingPlate3, 0.0F, -0.12217304855585097F, 0.0F); - - this.backPlate = new ModelRenderer(this, 59, 102); - this.backPlate.setRotationPoint(0.0F, 0.0F, 0.0F); - this.backPlate.addBox(-4.5F, -7.5F, 4.0F, 9, 8, 1, 0.0F); - this.setRotateAngle(backPlate, 0.1047197580337524F, -0.0F, 0.0F); - this.facePlate2 = new ModelRenderer(this, 23, 68); - this.facePlate2.setRotationPoint(0.0F, 0.0F, 0.0F); - this.facePlate2.addBox(-1.0F, -4.5F, -5.0F, 2, 2, 1, 0.0F); - this.rightFloater4 = new ModelRenderer(this, 0, 78); - this.rightFloater4.mirror = true; - this.rightFloater4.setRotationPoint(-1.0F, 7.0F, 0.0F); - this.rightFloater4.addBox(-4.5F, -2.0F, -1.5F, 1, 3, 3, 0.0F); - this.setRotateAngle(rightFloater4, 1.5707963267948966F, -1.3089969389957472F, -1.5707963267948966F); - this.forePlate = new ModelRenderer(this, 23, 77); - this.forePlate.setRotationPoint(0.0F, 0.0F, 0.0F); - this.forePlate.addBox(-4.0F, -7.900000095367432F, -4.5F, 8, 3, 1, 0.0F); - this.setRotateAngle(forePlate, 0.13962633907794952F, -0.0F, 0.0F); - this.chestPlate5 = new ModelRenderer(this, 29, 33); - this.chestPlate5.mirror = true; - this.chestPlate5.setRotationPoint(0.0F, 3.0F, -3.0F); - this.chestPlate5.addBox(-6.0F, -1.0F, 0.0F, 5, 2, 1, 0.0F); - this.setRotateAngle(chestPlate5, 0.13962633907794952F, -0.06981316953897476F, 0.0F); - - this.bipedBody.cubeList.clear(); - this.bipedHead.cubeList.clear(); - this.bipedHeadwear.cubeList.clear(); - this.bipedLeftArm.cubeList.clear(); - this.bipedLeftLeg.cubeList.clear(); - this.bipedRightArm.cubeList.clear(); - this.bipedRightLeg.cubeList.clear(); - - if(addChestPiece) - { - this.bipedLeftArm.addChild(this.leftFloater1); - this.bipedRightArm.addChild(this.rightArmPlate1); - this.bipedLeftArm.addChild(this.leftShoulder); - this.bipedLeftArm.addChild(this.leftArmPlate3); - this.bipedLeftArm.addChild(this.leftFloater4); - this.bipedRightArm.addChild(this.rightShoulder); - this.bipedLeftArm.addChild(this.leftFloater3); - this.bipedRightArm.addChild(this.rightArmPlate3); - this.bipedBody.addChild(this.chestPlate6); - this.bipedRightArm.addChild(this.rightArmPlate2); - this.bipedLeftArm.addChild(this.leftFloater2); - this.bipedRightArm.addChild(this.rightFloater2); - this.bipedLeftArm.addChild(this.leftArm); - this.bipedBody.addChild(this.chestMain); - this.bipedBody.addChild(this.chestPlate4); - this.bipedRightArm.addChild(this.rightFloater3); - this.bipedBody.addChild(this.chestPlate2); - this.bipedBody.addChild(this.chestOrnament); - this.bipedRightArm.addChild(this.rightFloater1); - this.bipedLeftArm.addChild(this.leftArmPlate2); - this.bipedBody.addChild(this.chestPlate3); - this.bipedBody.addChild(this.chestPlate1); - this.bipedRightArm.addChild(this.rightArm); - this.bipedRightArm.addChild(this.rightFloater4); - this.bipedBody.addChild(this.chestPlate5); - this.bipedLeftArm.addChild(this.leftArmPlate1); - } - - if(addLeggings) - { - this.bipedLeftLeg.addChild(this.leftLegFloater3); - this.bipedLeftLeg.addChild(this.leftLegFloater1); - this.bipedRightLeg.addChild(this.rightLegFloater2); - this.bipedRightLeg.addChild(this.rightLegFloater3); - this.bipedBody.addChild(this.belt); - this.bipedRightLeg.addChild(this.rightLegFloater1); - this.bipedRightLeg.addChild(this.rightLeg); - this.bipedLeftLeg.addChild(this.leftLegFloater2); - this.bipedLeftLeg.addChild(this.leftLeg); - } - - if(addBoots) - { - this.bipedLeftLeg.addChild(this.leftFoot1); - this.bipedRightLeg.addChild(this.rightFoot2); - this.bipedRightLeg.addChild(this.rightFootPlate); - this.bipedRightLeg.addChild(this.rightFoot1); - this.bipedLeftLeg.addChild(this.leftFoot2); - this.bipedLeftLeg.addChild(this.leftFootPlate); - } - - if(addHelmet) - { - this.bipedHead.addChild(this.rightWingPlate2); - this.bipedHead.addChild(this.leftWingPlate3); - this.bipedHead.addChild(this.topPlate); - this.bipedHead.addChild(this.leftWingPlate1); - this.bipedHead.addChild(this.facePlate4); - this.bipedHead.addChild(this.leftWingPlate2); - this.bipedHead.addChild(this.facePlate3); - this.bipedHead.addChild(this.rightWingPlate1); - this.bipedHead.addChild(this.facePlate1); - this.bipedHead.addChild(this.topWingPlate); - this.bipedHead.addChild(this.rightWingPlate3); - this.bipedHead.addChild(this.backPlate); - this.bipedHead.addChild(this.facePlate2); - this.bipedHead.addChild(this.forePlate); - } - } - - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - this.bipedBody.render(f5); - this.bipedRightLeg.render(f5); - this.bipedLeftLeg.render(f5); - this.bipedRightArm.render(f5); - this.bipedLeftArm.render(f5); - this.bipedHead.render(f5); - } - - /** - * This is a helper function from Tabula to set the rotation of model parts - */ - public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) { - modelRenderer.rotateAngleX = x; - modelRenderer.rotateAngleY = y; - modelRenderer.rotateAngleZ = z; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelPedestal.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelPedestal.java deleted file mode 100644 index 753df6a5..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelPedestal.java +++ /dev/null @@ -1,58 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelPedestal extends ModelBase -{ - //fields - ModelRenderer base; - ModelRenderer top; - ModelRenderer middle; - - public ModelPedestal() - { - textureWidth = 64; - textureHeight = 32; - base = new ModelRenderer(this, 0, 0); - base.addBox(0F, 0F, 0F, 10, 1, 10); - base.setRotationPoint(-5F, 23F, -5F); - base.setTextureSize(64, 32); - base.mirror = true; - setRotation(base, 0F, 0F, 0F); - top = new ModelRenderer(this, 0, 19); - top.addBox(0F, 0F, 0F, 6, 1, 6); - top.setRotationPoint(-3F, 14F, -3F); - top.setTextureSize(64, 32); - top.mirror = true; - setRotation(top, 0F, 0F, 0F); - middle = new ModelRenderer(this, 50, 0); - middle.addBox(0F, 0F, 0F, 2, 8, 2); - middle.setRotationPoint(-1F, 15F, -1F); - middle.setTextureSize(64, 32); - middle.mirror = true; - setRotation(middle, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - base.render(f5); - top.render(f5); - middle.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelPlinth.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelPlinth.java deleted file mode 100644 index f4190b5d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelPlinth.java +++ /dev/null @@ -1,90 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelPlinth extends ModelBase -{ - //fields - ModelRenderer base; - ModelRenderer table; - ModelRenderer pillar; - ModelRenderer edge1; - ModelRenderer edge2; - ModelRenderer edge3; - ModelRenderer edge4; - - public ModelPlinth() - { - textureWidth = 64; - textureHeight = 64; - base = new ModelRenderer(this, 0, 16); - base.addBox(0F, 0F, 0F, 10, 2, 10); - base.setRotationPoint(-5F, 22F, -5F); - base.setTextureSize(64, 64); - base.mirror = true; - setRotation(base, 0F, 0F, 0F); - table = new ModelRenderer(this, 0, 0); - table.addBox(0F, 0F, 0F, 14, 1, 14); - table.setRotationPoint(-7F, 11F, -7F); - table.setTextureSize(64, 64); - table.mirror = true; - setRotation(table, 0F, 0F, 0F); - pillar = new ModelRenderer(this, 0, 32); - pillar.addBox(0F, 0F, 0F, 6, 10, 6); - pillar.setRotationPoint(-3F, 12F, -3F); - pillar.setTextureSize(64, 64); - pillar.mirror = true; - setRotation(pillar, 0F, 0F, 0F); - edge1 = new ModelRenderer(this, 0, 29); - edge1.addBox(0F, 0F, 0F, 14, 1, 1); - edge1.setRotationPoint(-7F, 10F, 6F); - edge1.setTextureSize(64, 64); - edge1.mirror = true; - setRotation(edge1, 0F, 0F, 0F); - edge2 = new ModelRenderer(this, 0, 29); - edge2.addBox(0F, 0F, 0F, 14, 1, 1); - edge2.setRotationPoint(-7F, 10F, -7F); - edge2.setTextureSize(64, 64); - edge2.mirror = true; - setRotation(edge2, 0F, 0F, 0F); - edge3 = new ModelRenderer(this, 25, 32); - edge3.addBox(0F, 0F, 0F, 1, 1, 12); - edge3.setRotationPoint(-7F, 10F, -6F); - edge3.setTextureSize(64, 64); - edge3.mirror = true; - setRotation(edge3, 0F, 0F, 0F); - edge4 = new ModelRenderer(this, 25, 32); - edge4.addBox(0F, 0F, 0F, 1, 1, 12); - edge4.setRotationPoint(6F, 10F, -6F); - edge4.setTextureSize(64, 64); - edge4.mirror = true; - setRotation(edge4, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - base.render(f5); - table.render(f5); - pillar.render(f5); - edge1.render(f5); - edge2.render(f5); - edge3.render(f5); - edge4.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelShade.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelShade.java deleted file mode 100644 index 8a7f2632..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelShade.java +++ /dev/null @@ -1,86 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelShade extends ModelBase -{ - //fields - ModelRenderer body; - ModelRenderer tail1; - ModelRenderer leftArm; - ModelRenderer rightArm; - ModelRenderer tail2; - ModelRenderer head; - - public ModelShade() - { - textureWidth = 64; - textureHeight = 64; - body = new ModelRenderer(this, 0, 45); - body.addBox(-6F, 0F, -3F, 12, 12, 6); - body.setRotationPoint(0F, -4F, 0F); - body.setTextureSize(64, 64); - body.mirror = true; - setRotation(body, 0F, 0F, 0F); - tail1 = new ModelRenderer(this, 37, 43); - tail1.addBox(-2F, 1F, -2F, 4, 6, 4); - tail1.setRotationPoint(0F, 8F, 0F); - tail1.setTextureSize(64, 64); - tail1.mirror = true; - setRotation(tail1, 0.122173F, 0F, 0F); - leftArm = new ModelRenderer(this, 0, 0); - leftArm.addBox(0F, -4F, -2F, 4, 20, 4); - leftArm.setRotationPoint(6F, -2F, 0F); - leftArm.setTextureSize(64, 64); - leftArm.mirror = true; - setRotation(leftArm, 0F, 0F, 0F); - rightArm = new ModelRenderer(this, 0, 0); - rightArm.mirror = true; - rightArm.addBox(-4F, -4F, -2F, 4, 20, 4); - rightArm.setRotationPoint(-6F, -2F, 0F); - rightArm.setTextureSize(64, 64); - rightArm.mirror = true; - setRotation(rightArm, 0F, 0F, 0F); - rightArm.mirror = false; - tail2 = new ModelRenderer(this, 37, 54); - tail2.addBox(-1.5F, 6F, -3F, 3, 6, 3); - tail2.setRotationPoint(0F, 8F, 0F); - tail2.setTextureSize(64, 64); - tail2.mirror = true; - setRotation(tail2, 0.4363323F, 0F, 0F); - head = new ModelRenderer(this, 17, 0); - head.addBox(-4F, -8F, -4F, 8, 8, 8); - head.setRotationPoint(0F, -4F, -1F); - head.setTextureSize(64, 64); - head.mirror = true; - setRotation(head, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - body.render(f5); - tail1.render(f5); - leftArm.render(f5); - rightArm.render(f5); - tail2.render(f5); - head.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - this.head.rotateAngleX = f4 / (180F / (float) Math.PI); - this.head.rotateAngleY = f3 / (180F / (float) Math.PI); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSmallEarthGolem.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSmallEarthGolem.java deleted file mode 100644 index 45a232de..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSmallEarthGolem.java +++ /dev/null @@ -1,127 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.util.MathHelper; - -public class ModelSmallEarthGolem extends ModelBase -{ - //fields - ModelRenderer leftLeg; - ModelRenderer rightLeg; - ModelRenderer body; - ModelRenderer head; - ModelRenderer chest1; - ModelRenderer chest2; - ModelRenderer chest3; - ModelRenderer leftArm; - ModelRenderer rightArm; - ModelRenderer back1; - - public ModelSmallEarthGolem() - { - textureWidth = 32; - textureHeight = 32; - leftLeg = new ModelRenderer(this, 13, 0); - leftLeg.addBox(-1F, 0F, -1F, 2, 5, 2); - leftLeg.setRotationPoint(1F, 19F, 0F); - leftLeg.setTextureSize(32, 32); - leftLeg.mirror = true; - setRotation(leftLeg, 0F, 0F, 0F); - rightLeg = new ModelRenderer(this, 13, 0); - rightLeg.mirror = true; - rightLeg.addBox(-1F, 0F, -1F, 2, 5, 2); - rightLeg.setRotationPoint(-1F, 19F, 0F); - rightLeg.setTextureSize(32, 32); - rightLeg.mirror = true; - setRotation(rightLeg, 0F, 0F, 0F); - rightLeg.mirror = false; - body = new ModelRenderer(this, 0, 7); - body.addBox(-2F, 0F, -1F, 4, 5, 2); - body.setRotationPoint(0F, 14F, 0F); - body.setTextureSize(32, 32); - body.mirror = true; - setRotation(body, 0F, 0F, 0F); - head = new ModelRenderer(this, 0, 0); - head.addBox(-1.5F, -3F, -2F, 3, 3, 3); - head.setRotationPoint(0F, 14F, 0F); - head.setTextureSize(32, 32); - head.mirror = true; - setRotation(head, 0F, 0F, 0F); - chest1 = new ModelRenderer(this, 22, 0); - chest1.addBox(-1F, 0.5F, -2F, 2, 3, 1); - chest1.setRotationPoint(0F, 14F, 0F); - chest1.setTextureSize(32, 32); - chest1.mirror = true; - setRotation(chest1, 0F, 0F, 0F); - chest2 = new ModelRenderer(this, 22, 5); - chest2.addBox(1F, 1.5F, -2F, 1, 1, 1); - chest2.setRotationPoint(0F, 14F, 0F); - chest2.setTextureSize(32, 32); - chest2.mirror = true; - setRotation(chest2, 0F, 0F, 0F); - chest3 = new ModelRenderer(this, 22, 5); - chest3.mirror = true; - chest3.addBox(-2F, 1.5F, -2F, 1, 1, 1); - chest3.setRotationPoint(0F, 14F, 0F); - chest3.setTextureSize(32, 32); - chest3.mirror = true; - setRotation(chest3, 0F, 0F, 0F); - chest3.mirror = false; - leftArm = new ModelRenderer(this, 13, 7); - leftArm.addBox(0F, -1F, -1F, 2, 5, 2); - leftArm.setRotationPoint(2F, 15F, 0F); - leftArm.setTextureSize(32, 32); - leftArm.mirror = true; - setRotation(leftArm, 0F, 0F, 0F); - rightArm = new ModelRenderer(this, 13, 7); - rightArm.mirror = true; - rightArm.addBox(-2F, -1F, -1F, 2, 5, 2); - rightArm.setRotationPoint(-2F, 15F, 0F); - rightArm.setTextureSize(32, 32); - rightArm.mirror = true; - setRotation(rightArm, 0F, 0F, 0F); - rightArm.mirror = false; - back1 = new ModelRenderer(this, 22, 8); - back1.addBox(-1.5F, 1.5F, 1F, 3, 1, 1); - back1.setRotationPoint(0F, 14F, 0F); - back1.setTextureSize(32, 32); - back1.mirror = true; - setRotation(back1, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - leftLeg.render(f5); - rightLeg.render(f5); - body.render(f5); - head.render(f5); - chest1.render(f5); - chest2.render(f5); - chest3.render(f5); - leftArm.render(f5); - rightArm.render(f5); - back1.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - this.head.rotateAngleX = f4 / (180F / (float) Math.PI); - this.head.rotateAngleY = f3 / (180F / (float) Math.PI); - this.leftLeg.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1; - this.rightLeg.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 1.4F * f1; - this.rightArm.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 1.4F * f1; - this.leftArm.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellEffectBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellEffectBlock.java deleted file mode 100644 index fcf03321..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellEffectBlock.java +++ /dev/null @@ -1,332 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.util.EnumFacing; - -public class ModelSpellEffectBlock extends ModelBase -{ - //fields - ModelRenderer core; - ModelRenderer frame1; - ModelRenderer frame2; - ModelRenderer frame3; - ModelRenderer frame4; - ModelRenderer frame5; - ModelRenderer frame6; - ModelRenderer frame7; - ModelRenderer frame8; - ModelRenderer frame9; - ModelRenderer frame10; - ModelRenderer frame11; - ModelRenderer frame12; - ModelRenderer inputSpacer1; - ModelRenderer inputFace; - ModelRenderer inputSpacer2; - ModelRenderer inputSpacer3; - ModelRenderer inputSpacer4; - ModelRenderer outputFace; - ModelRenderer outputPlug; - ModelRenderer outputSpacer1; - ModelRenderer outputSpacer2; - ModelRenderer outputSpacer3; - ModelRenderer outputSpacer4; - - public ModelSpellEffectBlock() - { - textureWidth = 64; - textureHeight = 64; - - core = new ModelRenderer(this, 0, 0); - core.addBox(-3F, -3F, -3F, 6, 6, 6); - core.setRotationPoint(0F, 16F, 0F); - core.setTextureSize(64, 64); - core.mirror = true; - setRotation(core, 0F, 0F, 0F); - frame1 = new ModelRenderer(this, 16, 18); - frame1.addBox(3F, -3F, -5F, 2, 6, 2); - frame1.setRotationPoint(0F, 16F, 0F); - frame1.setTextureSize(64, 64); - frame1.mirror = true; - setRotation(frame1, 0F, 0F, 0F); - frame2 = new ModelRenderer(this, 0, 18); - frame2.addBox(-5F, -3F, -5F, 2, 6, 2); - frame2.setRotationPoint(0F, 16F, 0F); - frame2.setTextureSize(64, 64); - frame2.mirror = true; - setRotation(frame2, 0F, 0F, 0F); - frame3 = new ModelRenderer(this, 0, 13); - frame3.addBox(-5F, -5F, -5F, 10, 2, 2); - frame3.setRotationPoint(0F, 16F, 0F); - frame3.setTextureSize(64, 64); - frame3.mirror = true; - setRotation(frame3, 0F, 0F, 0F); - frame4 = new ModelRenderer(this, 0, 27); - frame4.addBox(-5F, 3F, -5F, 10, 2, 2); - frame4.setRotationPoint(0F, 16F, 0F); - frame4.setTextureSize(64, 64); - frame4.mirror = true; - setRotation(frame4, 0F, 0F, 0F); - frame5 = new ModelRenderer(this, 0, 34); - frame5.addBox(-5F, -5F, 3F, 10, 2, 2); - frame5.setRotationPoint(0F, 16F, 0F); - frame5.setTextureSize(64, 64); - frame5.mirror = true; - setRotation(frame5, 0F, 0F, 0F); - frame6 = new ModelRenderer(this, 0, 48); - frame6.addBox(-5F, 3F, 3F, 10, 2, 2); - frame6.setRotationPoint(0F, 16F, 0F); - frame6.setTextureSize(64, 64); - frame6.mirror = true; - setRotation(frame6, 0F, 0F, 0F); - frame7 = new ModelRenderer(this, 16, 39); - frame7.addBox(-5F, -3F, 3F, 2, 6, 2); - frame7.setRotationPoint(0F, 16F, 0F); - frame7.setTextureSize(64, 64); - frame7.mirror = true; - setRotation(frame7, 0F, 0F, 0F); - frame8 = new ModelRenderer(this, 0, 39); - frame8.addBox(3F, -3F, 3F, 2, 6, 2); - frame8.setRotationPoint(0F, 16F, 0F); - frame8.setTextureSize(64, 64); - frame8.mirror = true; - setRotation(frame8, 0F, 0F, 0F); - frame9 = new ModelRenderer(this, 25, 9); - frame9.addBox(-5F, 3F, -3F, 2, 2, 6); - frame9.setRotationPoint(0F, 16F, 0F); - frame9.setTextureSize(64, 64); - frame9.mirror = true; - setRotation(frame9, 0F, 0F, 0F); - frame10 = new ModelRenderer(this, 25, 0); - frame10.addBox(-5F, -5F, -3F, 2, 2, 6); - frame10.setRotationPoint(0F, 16F, 0F); - frame10.setTextureSize(64, 64); - frame10.mirror = true; - setRotation(frame10, 0F, 0F, 0F); - frame11 = new ModelRenderer(this, 42, 0); - frame11.addBox(3F, -5F, -3F, 2, 2, 6); - frame11.setRotationPoint(0F, 16F, 0F); - frame11.setTextureSize(64, 64); - frame11.mirror = true; - setRotation(frame11, 0F, 0F, 0F); - frame12 = new ModelRenderer(this, 42, 9); - frame12.addBox(3F, 3F, -3F, 2, 2, 6); - frame12.setRotationPoint(0F, 16F, 0F); - frame12.setTextureSize(64, 64); - frame12.mirror = true; - setRotation(frame12, 0F, 0F, 0F); - inputSpacer1 = new ModelRenderer(this, 25, 27); - inputSpacer1.addBox(3F, -5F, -8F, 2, 2, 3); - inputSpacer1.setRotationPoint(0F, 16F, 0F); - inputSpacer1.setTextureSize(64, 64); - inputSpacer1.mirror = true; - setRotation(inputSpacer1, 0F, 0F, 0F); - inputFace = new ModelRenderer(this, 38, 27); - inputFace.addBox(-2F, -2F, -8F, 4, 4, 5); - inputFace.setRotationPoint(0F, 16F, 0F); - inputFace.setTextureSize(64, 64); - inputFace.mirror = true; - setRotation(inputFace, 0F, 0F, 0F); - inputSpacer2 = new ModelRenderer(this, 25, 27); - inputSpacer2.addBox(-5F, -5F, -8F, 2, 2, 3); - inputSpacer2.setRotationPoint(0F, 16F, 0F); - inputSpacer2.setTextureSize(64, 64); - inputSpacer2.mirror = true; - setRotation(inputSpacer2, 0F, 0F, 0F); - inputSpacer3 = new ModelRenderer(this, 25, 27); - inputSpacer3.addBox(3F, 3F, -8F, 2, 2, 3); - inputSpacer3.setRotationPoint(0F, 16F, 0F); - inputSpacer3.setTextureSize(64, 64); - inputSpacer3.mirror = true; - setRotation(inputSpacer3, 0F, 0F, 0F); - inputSpacer4 = new ModelRenderer(this, 25, 27); - inputSpacer4.addBox(-5F, 3F, -8F, 2, 2, 3); - inputSpacer4.setRotationPoint(0F, 16F, 0F); - inputSpacer4.setTextureSize(64, 64); - inputSpacer4.mirror = true; - setRotation(inputSpacer4, 0F, 0F, 0F); - outputFace = new ModelRenderer(this, 38, 37); - outputFace.addBox(6F, -2F, -2F, 2, 4, 4); - outputFace.setRotationPoint(0F, 16F, 0F); - outputFace.setTextureSize(64, 64); - outputFace.mirror = true; - setRotation(outputFace, 0F, 0F, 0F); - outputPlug = new ModelRenderer(this, 36, 48); - outputPlug.addBox(3F, -3F, -3F, 2, 6, 6); - outputPlug.setRotationPoint(0F, 16F, 0F); - outputPlug.setTextureSize(64, 64); - outputPlug.mirror = true; - setRotation(outputPlug, 0F, 0F, 0F); - outputSpacer1 = new ModelRenderer(this, 25, 48); - outputSpacer1.addBox(5F, -5F, -5F, 3, 2, 2); - outputSpacer1.setRotationPoint(0F, 16F, 0F); - outputSpacer1.setTextureSize(64, 64); - outputSpacer1.mirror = true; - setRotation(outputSpacer1, 0F, 0F, 0F); - outputSpacer2 = new ModelRenderer(this, 25, 48); - outputSpacer2.addBox(5F, -5F, 3F, 3, 2, 2); - outputSpacer2.setRotationPoint(0F, 16F, 0F); - outputSpacer2.setTextureSize(64, 64); - outputSpacer2.mirror = true; - setRotation(outputSpacer2, 0F, 0F, 0F); - outputSpacer3 = new ModelRenderer(this, 25, 48); - outputSpacer3.addBox(5F, 3F, -5F, 3, 2, 2); - outputSpacer3.setRotationPoint(0F, 16F, 0F); - outputSpacer3.setTextureSize(64, 64); - outputSpacer3.mirror = true; - setRotation(outputSpacer3, 0F, 0F, 0F); - outputSpacer4 = new ModelRenderer(this, 25, 48); - outputSpacer4.addBox(5F, 3F, 3F, 3, 2, 2); - outputSpacer4.setRotationPoint(0F, 16F, 0F); - outputSpacer4.setTextureSize(64, 64); - outputSpacer4.mirror = true; - setRotation(outputSpacer4, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5, EnumFacing input, EnumFacing output) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - float xInputRot = 0.0f; - float yInputRot = 0.0f; - float zInputRot = 0.0f; - float xOutputRot = 0.0f; - float yOutputRot = 0.0f; - float zOutputRot = 0.0f; - - switch (input) - { - case NORTH: - xInputRot = 0.0f; - yInputRot = 0.0f; - zInputRot = 0.0f; - break; - - case EAST: - xInputRot = 0.0f; - yInputRot = (float) (0.5f * Math.PI); - zInputRot = 0.0f; - break; - - case SOUTH: - xInputRot = 0.0f; - yInputRot = (float) (1.0f * Math.PI); - zInputRot = 0.0f; - break; - - case WEST: - xInputRot = 0.0f; - yInputRot = (float) (-0.5f * Math.PI); - zInputRot = 0.0f; - break; - - case UP: - xInputRot = (float) (-0.5f * Math.PI); - yInputRot = 0.0f; - zInputRot = 0.0f; - break; - - case DOWN: - xInputRot = (float) (0.5f * Math.PI); - yInputRot = 0.0f; - zInputRot = 0.0f; - break; - - default: - break; - } - - switch (output) - { - case NORTH: - xOutputRot = 0.0f; - yOutputRot = (float) (0.5f * Math.PI); - zOutputRot = 0.0f; - break; - - case EAST: - xOutputRot = 0.0f; - yOutputRot = (float) (1.0f * Math.PI); - zOutputRot = 0.0f; - break; - - case SOUTH: - xOutputRot = 0.0f; - yOutputRot = (float) (-0.5f * Math.PI); - zOutputRot = 0.0f; - break; - - case WEST: - xOutputRot = 0.0f; - yOutputRot = 0.0f; - zOutputRot = 0.0f; - break; - - case UP: - xOutputRot = 0.0f; - yOutputRot = 0.0f; - zOutputRot = (float) (-0.5f * Math.PI); - break; - - case DOWN: - xOutputRot = 0.0f; - yOutputRot = 0.0f; - zOutputRot = (float) (0.5f * Math.PI); - break; - - default: - break; - } - - this.setRotation(inputFace, xInputRot, yInputRot, zInputRot); - this.setRotation(outputFace, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(inputSpacer1, xInputRot, yInputRot, zInputRot); - this.setRotation(inputSpacer2, xInputRot, yInputRot, zInputRot); - this.setRotation(inputSpacer3, xInputRot, yInputRot, zInputRot); - this.setRotation(inputSpacer4, xInputRot, yInputRot, zInputRot); - this.setRotation(outputPlug, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(outputSpacer1, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(outputSpacer2, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(outputSpacer3, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(outputSpacer4, xOutputRot, yOutputRot, zOutputRot); - - core.render(f5); - frame1.render(f5); - frame2.render(f5); - frame3.render(f5); - frame4.render(f5); - frame5.render(f5); - frame6.render(f5); - frame7.render(f5); - frame8.render(f5); - frame9.render(f5); - frame10.render(f5); - frame11.render(f5); - frame12.render(f5); - inputSpacer1.render(f5); - inputFace.render(f5); - inputSpacer2.render(f5); - inputSpacer3.render(f5); - inputSpacer4.render(f5); - outputFace.render(f5); - outputPlug.render(f5); - outputSpacer1.render(f5); - outputSpacer2.render(f5); - outputSpacer3.render(f5); - outputSpacer4.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellEnhancementBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellEnhancementBlock.java deleted file mode 100644 index 19e20c45..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellEnhancementBlock.java +++ /dev/null @@ -1,334 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.util.EnumFacing; - - -public class ModelSpellEnhancementBlock extends ModelBase -{ - //fields - ModelRenderer core; - ModelRenderer frame1; - ModelRenderer frame2; - ModelRenderer frame3; - ModelRenderer frame4; - ModelRenderer frame5; - ModelRenderer frame6; - ModelRenderer frame7; - ModelRenderer frame8; - ModelRenderer frame9; - ModelRenderer frame10; - ModelRenderer frame11; - ModelRenderer frame12; - ModelRenderer outputMain; - ModelRenderer inputMain; - ModelRenderer output1; - ModelRenderer output2; - ModelRenderer output3; - ModelRenderer output4; - ModelRenderer input1; - ModelRenderer input2; - ModelRenderer input3; - ModelRenderer input4; - ModelRenderer outputSecond; - - public ModelSpellEnhancementBlock() - { - textureWidth = 128; - textureHeight = 64; - - core = new ModelRenderer(this, 0, 0); - core.addBox(-3F, -3F, -3F, 6, 6, 6); - core.setRotationPoint(0F, 16F, 0F); - core.setTextureSize(128, 64); - core.mirror = true; - setRotation(core, 0F, 0F, 0F); - frame1 = new ModelRenderer(this, 0, 32); - frame1.addBox(-7F, 5F, -7F, 14, 2, 2); - frame1.setRotationPoint(0F, 16F, 0F); - frame1.setTextureSize(128, 64); - frame1.mirror = true; - setRotation(frame1, 0F, 0F, 0F); - frame2 = new ModelRenderer(this, 24, 19); - frame2.addBox(5F, -5F, -7F, 2, 10, 2); - frame2.setRotationPoint(0F, 16F, 0F); - frame2.setTextureSize(128, 64); - frame2.mirror = true; - setRotation(frame2, 0F, 0F, 0F); - frame3 = new ModelRenderer(this, 0, 19); - frame3.addBox(-7F, -5F, -7F, 2, 10, 2); - frame3.setRotationPoint(0F, 16F, 0F); - frame3.setTextureSize(128, 64); - frame3.mirror = true; - setRotation(frame3, 0F, 0F, 0F); - frame4 = new ModelRenderer(this, 0, 14); - frame4.addBox(-7F, -7F, -7F, 14, 2, 2); - frame4.setRotationPoint(0F, 16F, 0F); - frame4.setTextureSize(128, 64); - frame4.mirror = true; - setRotation(frame4, 0F, 0F, 0F); - frame5 = new ModelRenderer(this, 0, 57); - frame5.addBox(-7F, 5F, 5F, 14, 2, 2); - frame5.setRotationPoint(0F, 16F, 0F); - frame5.setTextureSize(128, 64); - frame5.mirror = true; - setRotation(frame5, 0F, 0F, 0F); - frame6 = new ModelRenderer(this, 0, 44); - frame6.addBox(5F, -5F, 5F, 2, 10, 2); - frame6.setRotationPoint(0F, 16F, 0F); - frame6.setTextureSize(128, 64); - frame6.mirror = true; - setRotation(frame6, 0F, 0F, 0F); - frame7 = new ModelRenderer(this, 24, 44); - frame7.addBox(-7F, -5F, 5F, 2, 10, 2); - frame7.setRotationPoint(0F, 16F, 0F); - frame7.setTextureSize(128, 64); - frame7.mirror = true; - setRotation(frame7, 0F, 0F, 0F); - frame8 = new ModelRenderer(this, 0, 39); - frame8.addBox(-7F, -7F, 5F, 14, 2, 2); - frame8.setRotationPoint(0F, 16F, 0F); - frame8.setTextureSize(128, 64); - frame8.mirror = true; - setRotation(frame8, 0F, 0F, 0F); - frame9 = new ModelRenderer(this, 66, 14); - frame9.addBox(5F, 5F, -5F, 2, 2, 10); - frame9.setRotationPoint(0F, 16F, 0F); - frame9.setTextureSize(128, 64); - frame9.mirror = true; - setRotation(frame9, 0F, 0F, 0F); - frame10 = new ModelRenderer(this, 40, 14); - frame10.addBox(-7F, 5F, -5F, 2, 2, 10); - frame10.setRotationPoint(0F, 16F, 0F); - frame10.setTextureSize(128, 64); - frame10.mirror = true; - setRotation(frame10, 0F, 0F, 0F); - frame11 = new ModelRenderer(this, 66, 0); - frame11.addBox(5F, -7F, -5F, 2, 2, 10); - frame11.setRotationPoint(0F, 16F, 0F); - frame11.setTextureSize(128, 64); - frame11.mirror = true; - setRotation(frame11, 0F, 0F, 0F); - frame12 = new ModelRenderer(this, 40, 0); - frame12.addBox(-7F, -7F, -5F, 2, 2, 10); - frame12.setRotationPoint(0F, 16F, 0F); - frame12.setTextureSize(128, 64); - frame12.mirror = true; - setRotation(frame12, 0F, 0F, 0F); - outputMain = new ModelRenderer(this, 78, 36); - outputMain.addBox(6F, -2F, -2F, 2, 4, 4); - outputMain.setRotationPoint(0F, 16F, 0F); - outputMain.setTextureSize(128, 64); - outputMain.mirror = true; - setRotation(outputMain, 0F, 0F, 0F); - inputMain = new ModelRenderer(this, 40, 36); - inputMain.addBox(-2F, -2F, -8F, 4, 4, 5); - inputMain.setRotationPoint(0F, 16F, 0F); - inputMain.setTextureSize(128, 64); - inputMain.mirror = true; - setRotation(inputMain, 0F, 0F, 0F); - output1 = new ModelRenderer(this, 80, 30); - output1.addBox(5F, -5F, -5F, 3, 2, 2); - output1.setRotationPoint(0F, 16F, 0F); - output1.setTextureSize(128, 64); - output1.mirror = true; - setRotation(output1, 0F, 0F, 0F); - output2 = new ModelRenderer(this, 80, 30); - output2.addBox(5F, -5F, 3F, 3, 2, 2); - output2.setRotationPoint(0F, 16F, 0F); - output2.setTextureSize(128, 64); - output2.mirror = true; - setRotation(output2, 0F, 0F, 0F); - output3 = new ModelRenderer(this, 80, 30); - output3.addBox(5F, 3F, -5F, 3, 2, 2); - output3.setRotationPoint(0F, 16F, 0F); - output3.setTextureSize(128, 64); - output3.mirror = true; - setRotation(output3, 0F, 0F, 0F); - output4 = new ModelRenderer(this, 80, 30); - output4.addBox(5F, 3F, 3F, 3, 2, 2); - output4.setRotationPoint(0F, 16F, 0F); - output4.setTextureSize(128, 64); - output4.mirror = true; - setRotation(output4, 0F, 0F, 0F); - input1 = new ModelRenderer(this, 40, 27); - input1.addBox(3F, -5F, -8F, 2, 2, 5); - input1.setRotationPoint(0F, 16F, 0F); - input1.setTextureSize(128, 64); - input1.mirror = true; - setRotation(input1, 0F, 0F, 0F); - input2 = new ModelRenderer(this, 40, 27); - input2.addBox(-5F, -5F, -8F, 2, 2, 5); - input2.setRotationPoint(0F, 16F, 0F); - input2.setTextureSize(128, 64); - input2.mirror = true; - setRotation(input2, 0F, 0F, 0F); - input3 = new ModelRenderer(this, 40, 27); - input3.addBox(3F, 3F, -8F, 2, 2, 5); - input3.setRotationPoint(0F, 16F, 0F); - input3.setTextureSize(128, 64); - input3.mirror = true; - setRotation(input3, 0F, 0F, 0F); - input4 = new ModelRenderer(this, 40, 27); - input4.addBox(-5F, 3F, -8F, 2, 2, 5); - input4.setRotationPoint(0F, 16F, 0F); - input4.setTextureSize(128, 64); - input4.mirror = true; - setRotation(input4, 0F, 0F, 0F); - outputSecond = new ModelRenderer(this, 78, 47); - outputSecond.addBox(4F, -3F, -3F, 1, 6, 6); - outputSecond.setRotationPoint(0F, 16F, 0F); - outputSecond.setTextureSize(128, 64); - outputSecond.mirror = true; - setRotation(outputSecond, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5, EnumFacing input, EnumFacing output) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - - float xInputRot = 0.0f; - float yInputRot = 0.0f; - float zInputRot = 0.0f; - float xOutputRot = 0.0f; - float yOutputRot = 0.0f; - float zOutputRot = 0.0f; - - switch (input) - { - case NORTH: - xInputRot = 0.0f; - yInputRot = 0.0f; - zInputRot = 0.0f; - break; - - case EAST: - xInputRot = 0.0f; - yInputRot = (float) (0.5f * Math.PI); - zInputRot = 0.0f; - break; - - case SOUTH: - xInputRot = 0.0f; - yInputRot = (float) (1.0f * Math.PI); - zInputRot = 0.0f; - break; - - case WEST: - xInputRot = 0.0f; - yInputRot = (float) (-0.5f * Math.PI); - zInputRot = 0.0f; - break; - - case UP: - xInputRot = (float) (-0.5f * Math.PI); - yInputRot = 0.0f; - zInputRot = 0.0f; - break; - - case DOWN: - xInputRot = (float) (0.5f * Math.PI); - yInputRot = 0.0f; - zInputRot = 0.0f; - break; - - default: - break; - } - - switch (output) - { - case NORTH: - xOutputRot = 0.0f; - yOutputRot = (float) (0.5f * Math.PI); - zOutputRot = 0.0f; - break; - - case EAST: - xOutputRot = 0.0f; - yOutputRot = (float) (1.0f * Math.PI); - zOutputRot = 0.0f; - break; - - case SOUTH: - xOutputRot = 0.0f; - yOutputRot = (float) (-0.5f * Math.PI); - zOutputRot = 0.0f; - break; - - case WEST: - xOutputRot = 0.0f; - yOutputRot = 0.0f; - zOutputRot = 0.0f; - break; - - case UP: - xOutputRot = 0.0f; - yOutputRot = 0.0f; - zOutputRot = (float) (-0.5f * Math.PI); - break; - - case DOWN: - xOutputRot = 0.0f; - yOutputRot = 0.0f; - zOutputRot = (float) (0.5f * Math.PI); - break; - - default: - break; - } - - this.setRotation(inputMain, xInputRot, yInputRot, zInputRot); - this.setRotation(outputMain, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(input1, xInputRot, yInputRot, zInputRot); - this.setRotation(input2, xInputRot, yInputRot, zInputRot); - this.setRotation(input3, xInputRot, yInputRot, zInputRot); - this.setRotation(input4, xInputRot, yInputRot, zInputRot); - this.setRotation(outputSecond, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(output1, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(output2, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(output3, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(output4, xOutputRot, yOutputRot, zOutputRot); - - core.render(f5); - frame1.render(f5); - frame2.render(f5); - frame3.render(f5); - frame4.render(f5); - frame5.render(f5); - frame6.render(f5); - frame7.render(f5); - frame8.render(f5); - frame9.render(f5); - frame10.render(f5); - frame11.render(f5); - frame12.render(f5); - outputMain.render(f5); - inputMain.render(f5); - output1.render(f5); - output2.render(f5); - output3.render(f5); - output4.render(f5); - input1.render(f5); - input2.render(f5); - input3.render(f5); - input4.render(f5); - outputSecond.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellModifierBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellModifierBlock.java deleted file mode 100644 index 28faaf7e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellModifierBlock.java +++ /dev/null @@ -1,303 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.util.EnumFacing; - -public class ModelSpellModifierBlock extends ModelBase -{ - //fields - ModelRenderer core; - ModelRenderer inputMain; - ModelRenderer Shape2; - ModelRenderer Shape3; - ModelRenderer Shape4; - ModelRenderer Shape5; - ModelRenderer Shape6; - ModelRenderer Shape7; - ModelRenderer Shape8; - ModelRenderer Shape9; - ModelRenderer outputMain; - ModelRenderer Shape11; - ModelRenderer Shape12; - ModelRenderer Shape13; - ModelRenderer Shape14; - ModelRenderer output1; - ModelRenderer output2; - ModelRenderer output3; - ModelRenderer output4; - - public ModelSpellModifierBlock() - { - textureWidth = 64; - textureHeight = 64; - - core = new ModelRenderer(this, 0, 0); - core.addBox(-3F, -3F, -3F, 6, 6, 6); - core.setRotationPoint(0F, 16F, 0F); - core.setTextureSize(64, 64); - core.mirror = true; - setRotation(core, 0F, 0F, 0F); - inputMain = new ModelRenderer(this, 25, 18); - inputMain.addBox(-2F, -2F, -8F, 4, 4, 1); - inputMain.setRotationPoint(0F, 16F, 0F); - inputMain.setTextureSize(64, 64); - inputMain.mirror = true; - setRotation(inputMain, 0F, 0F, 0F); - Shape2 = new ModelRenderer(this, 0, 13); - Shape2.addBox(-5F, -5F, -8F, 10, 2, 2); - Shape2.setRotationPoint(0F, 16F, 0F); - Shape2.setTextureSize(64, 64); - Shape2.mirror = true; - setRotation(Shape2, 0F, 0F, 0F); - Shape3 = new ModelRenderer(this, 0, 27); - Shape3.addBox(-5F, 3F, -8F, 10, 2, 2); - Shape3.setRotationPoint(0F, 16F, 0F); - Shape3.setTextureSize(64, 64); - Shape3.mirror = true; - setRotation(Shape3, 0F, 0F, 0F); - Shape4 = new ModelRenderer(this, 16, 18); - Shape4.addBox(3F, -3F, -8F, 2, 6, 2); - Shape4.setRotationPoint(0F, 16F, 0F); - Shape4.setTextureSize(64, 64); - Shape4.mirror = true; - setRotation(Shape4, 0F, 0F, 0F); - Shape5 = new ModelRenderer(this, 0, 18); - Shape5.addBox(-5F, -3F, -8F, 2, 6, 2); - Shape5.setRotationPoint(0F, 16F, 0F); - Shape5.setTextureSize(64, 64); - Shape5.mirror = true; - setRotation(Shape5, 0F, 0F, 0F); - Shape6 = new ModelRenderer(this, 0, 32); - Shape6.addBox(-1F, -6F, -7F, 2, 1, 5); - Shape6.setRotationPoint(0F, 16F, 0F); - Shape6.setTextureSize(64, 64); - Shape6.mirror = true; - setRotation(Shape6, 0F, 0F, 0F); - Shape7 = new ModelRenderer(this, 15, 32); - Shape7.addBox(-2F, -6F, -2F, 4, 1, 4); - Shape7.setRotationPoint(0F, 16F, 0F); - Shape7.setTextureSize(64, 64); - Shape7.mirror = true; - setRotation(Shape7, 0F, 0F, 0F); - Shape8 = new ModelRenderer(this, 15, 39); - Shape8.addBox(-2F, 5F, -2F, 4, 1, 4); - Shape8.setRotationPoint(0F, 16F, 0F); - Shape8.setTextureSize(64, 64); - Shape8.mirror = true; - setRotation(Shape8, 0F, 0F, 0F); - Shape9 = new ModelRenderer(this, 0, 39); - Shape9.addBox(-1F, 5F, -7F, 2, 1, 5); - Shape9.setRotationPoint(0F, 16F, 0F); - Shape9.setTextureSize(64, 64); - Shape9.mirror = true; - setRotation(Shape9, 0F, 0F, 0F); - outputMain = new ModelRenderer(this, 51, 23); - outputMain.addBox(7F, -2F, -2F, 1, 4, 4); - outputMain.setRotationPoint(0F, 16F, 0F); - outputMain.setTextureSize(64, 64); - outputMain.mirror = true; - setRotation(outputMain, 0F, 0F, 0F); - Shape11 = new ModelRenderer(this, 13, 46); - Shape11.addBox(5F, -2F, -2F, 1, 4, 4); - Shape11.setRotationPoint(0F, 16F, 0F); - Shape11.setTextureSize(64, 64); - Shape11.mirror = true; - setRotation(Shape11, 0F, 0F, 0F); - Shape12 = new ModelRenderer(this, 0, 46); - Shape12.addBox(5F, -1F, -7F, 1, 2, 5); - Shape12.setRotationPoint(0F, 16F, 0F); - Shape12.setTextureSize(64, 64); - Shape12.mirror = true; - setRotation(Shape12, 0F, 0F, 0F); - Shape13 = new ModelRenderer(this, 0, 56); - Shape13.addBox(-6F, -1F, -7F, 1, 2, 5); - Shape13.setRotationPoint(0F, 16F, 0F); - Shape13.setTextureSize(64, 64); - Shape13.mirror = true; - setRotation(Shape13, 0F, 0F, 0F); - Shape14 = new ModelRenderer(this, 13, 56); - Shape14.addBox(-6F, -2F, -2F, 1, 4, 4); - Shape14.setRotationPoint(0F, 16F, 0F); - Shape14.setTextureSize(64, 64); - Shape14.mirror = true; - setRotation(Shape14, 0F, 0F, 0F); - output1 = new ModelRenderer(this, 51, 18); - output1.addBox(5F, -5F, -5F, 3, 2, 2); - output1.setRotationPoint(0F, 16F, 0F); - output1.setTextureSize(64, 64); - output1.mirror = true; - setRotation(output1, 0F, 0F, 0F); - output2 = new ModelRenderer(this, 51, 18); - output2.addBox(5F, -5F, 3F, 3, 2, 2); - output2.setRotationPoint(0F, 16F, 0F); - output2.setTextureSize(64, 64); - output2.mirror = true; - setRotation(output2, 0F, 0F, 0F); - output3 = new ModelRenderer(this, 51, 18); - output3.addBox(5F, 3F, -5F, 3, 2, 2); - output3.setRotationPoint(0F, 16F, 0F); - output3.setTextureSize(64, 64); - output3.mirror = true; - setRotation(output3, 0F, 0F, 0F); - output4 = new ModelRenderer(this, 51, 18); - output4.addBox(5F, 3F, 3F, 3, 2, 2); - output4.setRotationPoint(0F, 16F, 0F); - output4.setTextureSize(64, 64); - output4.mirror = true; - setRotation(output4, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5, EnumFacing input, EnumFacing output) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - - float xInputRot = 0.0f; - float yInputRot = 0.0f; - float zInputRot = 0.0f; - float xOutputRot = 0.0f; - float yOutputRot = 0.0f; - float zOutputRot = 0.0f; - - switch (input) - { - case NORTH: - xInputRot = 0.0f; - yInputRot = 0.0f; - zInputRot = 0.0f; - break; - - case EAST: - xInputRot = 0.0f; - yInputRot = (float) (0.5f * Math.PI); - zInputRot = 0.0f; - break; - - case SOUTH: - xInputRot = 0.0f; - yInputRot = (float) (1.0f * Math.PI); - zInputRot = 0.0f; - break; - - case WEST: - xInputRot = 0.0f; - yInputRot = (float) (-0.5f * Math.PI); - zInputRot = 0.0f; - break; - - case UP: - xInputRot = (float) (-0.5f * Math.PI); - yInputRot = 0.0f; - zInputRot = 0.0f; - break; - - case DOWN: - xInputRot = (float) (0.5f * Math.PI); - yInputRot = 0.0f; - zInputRot = 0.0f; - break; - - default: - break; - } - - switch (output) - { - case NORTH: - xOutputRot = 0.0f; - yOutputRot = (float) (0.5f * Math.PI); - zOutputRot = 0.0f; - break; - - case EAST: - xOutputRot = 0.0f; - yOutputRot = (float) (1.0f * Math.PI); - zOutputRot = 0.0f; - break; - - case SOUTH: - xOutputRot = 0.0f; - yOutputRot = (float) (-0.5f * Math.PI); - zOutputRot = 0.0f; - break; - - case WEST: - xOutputRot = 0.0f; - yOutputRot = 0.0f; - zOutputRot = 0.0f; - break; - - case UP: - xOutputRot = 0.0f; - yOutputRot = 0.0f; - zOutputRot = (float) (-0.5f * Math.PI); - break; - - case DOWN: - xOutputRot = 0.0f; - yOutputRot = 0.0f; - zOutputRot = (float) (0.5f * Math.PI); - break; - - default: - break; - } - - this.setRotation(inputMain, xInputRot, yInputRot, zInputRot); - this.setRotation(Shape2, xInputRot, yInputRot, zInputRot); - this.setRotation(Shape3, xInputRot, yInputRot, zInputRot); - this.setRotation(Shape4, xInputRot, yInputRot, zInputRot); - this.setRotation(Shape5, xInputRot, yInputRot, zInputRot); - this.setRotation(Shape6, xInputRot, yInputRot, zInputRot); - this.setRotation(Shape7, xInputRot, yInputRot, zInputRot); - this.setRotation(Shape8, xInputRot, yInputRot, zInputRot); - this.setRotation(Shape9, xInputRot, yInputRot, zInputRot); - this.setRotation(Shape12, xInputRot, yInputRot, zInputRot); - this.setRotation(Shape11, xInputRot, yInputRot, zInputRot); - this.setRotation(Shape13, xInputRot, yInputRot, zInputRot); - this.setRotation(Shape14, xInputRot, yInputRot, zInputRot); - - this.setRotation(outputMain, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(output1, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(output2, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(output3, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(output4, xOutputRot, yOutputRot, zOutputRot); - - - core.render(f5); - inputMain.render(f5); - Shape2.render(f5); - Shape3.render(f5); - Shape4.render(f5); - Shape5.render(f5); - Shape6.render(f5); - Shape7.render(f5); - Shape8.render(f5); - Shape9.render(f5); - outputMain.render(f5); - Shape11.render(f5); - Shape12.render(f5); - Shape13.render(f5); - Shape14.render(f5); - output1.render(f5); - output2.render(f5); - output3.render(f5); - output4.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - -} - diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellParadigmBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellParadigmBlock.java deleted file mode 100644 index 4053b60b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellParadigmBlock.java +++ /dev/null @@ -1,233 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -//Date: 07/03/2014 9:30:25 PM -//Template version 1.1 -//Java generated by Techne -//Keep in mind that you still need to fill in some blanks -//- ZeuX - - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.util.EnumFacing; - -public class ModelSpellParadigmBlock extends ModelBase -{ - //fields - ModelRenderer core; - ModelRenderer outputMain; - ModelRenderer output1; - ModelRenderer output2; - ModelRenderer output3; - ModelRenderer output4; - ModelRenderer Shape1; - ModelRenderer Shape2; - ModelRenderer Shape3; - ModelRenderer Shape4; - ModelRenderer Shape5; - - public ModelSpellParadigmBlock() - { - textureWidth = 64; - textureHeight = 64; - - core = new ModelRenderer(this, 0, 0); - core.addBox(-3F, -3F, -3F, 6, 6, 6); - core.setRotationPoint(0F, 16F, 0F); - core.setTextureSize(64, 64); - core.mirror = true; - setRotation(core, 0F, 0F, 0F); - outputMain = new ModelRenderer(this, 0, 13); - outputMain.addBox(6F, -2F, -2F, 2, 4, 4); - outputMain.setRotationPoint(0F, 16F, 0F); - outputMain.setTextureSize(64, 64); - outputMain.mirror = true; - setRotation(outputMain, 0F, 0F, 0F); - output1 = new ModelRenderer(this, 0, 22); - output1.addBox(5F, -5F, -5F, 3, 2, 2); - output1.setRotationPoint(0F, 16F, 0F); - output1.setTextureSize(64, 64); - output1.mirror = true; - setRotation(output1, 0F, 0F, 0F); - output2 = new ModelRenderer(this, 0, 22); - output2.addBox(5F, -5F, 3F, 3, 2, 2); - output2.setRotationPoint(0F, 16F, 0F); - output2.setTextureSize(64, 64); - output2.mirror = true; - setRotation(output2, 0F, 0F, 0F); - output3 = new ModelRenderer(this, 0, 22); - output3.addBox(5F, 3F, -5F, 3, 2, 2); - output3.setRotationPoint(0F, 16F, 0F); - output3.setTextureSize(64, 64); - output3.mirror = true; - setRotation(output3, 0F, 0F, 0F); - output4 = new ModelRenderer(this, 0, 22); - output4.addBox(5F, 3F, 3F, 3, 2, 2); - output4.setRotationPoint(0F, 16F, 0F); - output4.setTextureSize(64, 64); - output4.mirror = true; - setRotation(output4, 0F, 0F, 0F); - Shape1 = new ModelRenderer(this, 0, 28); - Shape1.addBox(-5F, -5F, -1F, 10, 1, 2); - Shape1.setRotationPoint(0F, 16F, 0F); - Shape1.setTextureSize(64, 64); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); - Shape2 = new ModelRenderer(this, 25, 28); - Shape2.addBox(-5F, -4F, -4F, 1, 8, 8); - Shape2.setRotationPoint(0F, 16F, 0F); - Shape2.setTextureSize(64, 64); - Shape2.mirror = true; - setRotation(Shape2, 0F, 0F, 0F); - Shape3 = new ModelRenderer(this, 0, 33); - Shape3.addBox(-5F, 4F, -1F, 10, 1, 2); - Shape3.setRotationPoint(0F, 16F, 0F); - Shape3.setTextureSize(64, 64); - Shape3.mirror = true; - setRotation(Shape3, 0F, 0F, 0F); - Shape4 = new ModelRenderer(this, 0, 38); - Shape4.addBox(-5F, -1F, -5F, 10, 2, 1); - Shape4.setRotationPoint(0F, 16F, 0F); - Shape4.setTextureSize(64, 64); - Shape4.mirror = true; - setRotation(Shape4, 0F, 0F, 0F); - Shape5 = new ModelRenderer(this, 0, 43); - Shape5.addBox(-5F, -1F, 4F, 10, 2, 1); - Shape5.setRotationPoint(0F, 16F, 0F); - Shape5.setTextureSize(64, 64); - Shape5.mirror = true; - setRotation(Shape5, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5, EnumFacing input, EnumFacing output) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - float xInputRot = 0.0f; - float yInputRot = 0.0f; - float zInputRot = 0.0f; - float xOutputRot = 0.0f; - float yOutputRot = 0.0f; - float zOutputRot = 0.0f; - - switch (input) - { - case NORTH: - xInputRot = 0.0f; - yInputRot = 0.0f; - zInputRot = 0.0f; - break; - - case EAST: - xInputRot = 0.0f; - yInputRot = (float) (0.5f * Math.PI); - zInputRot = 0.0f; - break; - - case SOUTH: - xInputRot = 0.0f; - yInputRot = (float) (1.0f * Math.PI); - zInputRot = 0.0f; - break; - - case WEST: - xInputRot = 0.0f; - yInputRot = (float) (-0.5f * Math.PI); - zInputRot = 0.0f; - break; - - case UP: - xInputRot = (float) (-0.5f * Math.PI); - yInputRot = 0.0f; - zInputRot = 0.0f; - break; - - case DOWN: - xInputRot = (float) (0.5f * Math.PI); - yInputRot = 0.0f; - zInputRot = 0.0f; - break; - - default: - break; - } - - switch (output) - { - case NORTH: - xOutputRot = 0.0f; - yOutputRot = (float) (0.5f * Math.PI); - zOutputRot = 0.0f; - break; - - case EAST: - xOutputRot = 0.0f; - yOutputRot = (float) (1.0f * Math.PI); - zOutputRot = 0.0f; - break; - - case SOUTH: - xOutputRot = 0.0f; - yOutputRot = (float) (-0.5f * Math.PI); - zOutputRot = 0.0f; - break; - - case WEST: - xOutputRot = 0.0f; - yOutputRot = 0.0f; - zOutputRot = 0.0f; - break; - - case UP: - xOutputRot = 0.0f; - yOutputRot = 0.0f; - zOutputRot = (float) (-0.5f * Math.PI); - break; - - case DOWN: - xOutputRot = 0.0f; - yOutputRot = 0.0f; - zOutputRot = (float) (0.5f * Math.PI); - break; - - default: - break; - } - - this.setRotation(outputMain, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(output1, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(output2, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(output3, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(output4, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(Shape1, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(Shape2, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(Shape3, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(Shape4, xOutputRot, yOutputRot, zOutputRot); - this.setRotation(Shape5, xOutputRot, yOutputRot, zOutputRot); - core.render(f5); - outputMain.render(f5); - output1.render(f5); - output2.render(f5); - output3.render(f5); - output4.render(f5); - Shape1.render(f5); - Shape2.render(f5); - Shape3.render(f5); - Shape4.render(f5); - Shape5.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelWingedFireDemon.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelWingedFireDemon.java deleted file mode 100644 index 07164ffd..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelWingedFireDemon.java +++ /dev/null @@ -1,203 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.util.MathHelper; - -public class ModelWingedFireDemon extends ModelBase -{ - //fields - ModelRenderer leftLegPlate; - ModelRenderer leftLeg; - ModelRenderer codPiece; - ModelRenderer rightLegPlate; - ModelRenderer rightLeg; - ModelRenderer body; - ModelRenderer leftShoulder; - ModelRenderer leftArm; - ModelRenderer head; - ModelRenderer rightShoulder; - ModelRenderer rightArm; - ModelRenderer leftWing; - ModelRenderer rightWing; - ModelRenderer leftHorn1; - ModelRenderer rightHorn1; - ModelRenderer leftHorn2; - ModelRenderer rightHorn2; - - public ModelWingedFireDemon() - { - textureWidth = 64; - textureHeight = 64; - leftLegPlate = new ModelRenderer(this, 40, 36); - leftLegPlate.addBox(0F, -3F, -3F, 6, 6, 6); - leftLegPlate.setRotationPoint(2F, 5F, 0F); - leftLegPlate.setTextureSize(64, 64); - leftLegPlate.mirror = true; - setRotation(leftLegPlate, 0F, 0F, 0F); - leftLeg = new ModelRenderer(this, 48, 16); - leftLeg.addBox(1F, 3F, -2F, 4, 16, 4); - leftLeg.setRotationPoint(2F, 5F, 0F); - leftLeg.setTextureSize(64, 64); - leftLeg.mirror = true; - setRotation(leftLeg, 0F, 0F, 0F); - codPiece = new ModelRenderer(this, 48, 0); - codPiece.addBox(-2F, 0F, -2F, 4, 6, 4); - codPiece.setRotationPoint(0F, 1F, 0F); - codPiece.setTextureSize(64, 64); - codPiece.mirror = true; - setRotation(codPiece, 0F, 0F, 0F); - rightLegPlate = new ModelRenderer(this, 40, 36); - rightLegPlate.mirror = true; - rightLegPlate.addBox(-6F, -3F, -3F, 6, 6, 6); - rightLegPlate.setRotationPoint(-2F, 5F, 0F); - rightLegPlate.setTextureSize(64, 64); - rightLegPlate.mirror = true; - setRotation(rightLegPlate, 0F, 0F, 0F); - rightLegPlate.mirror = false; - rightLeg = new ModelRenderer(this, 48, 16); - rightLeg.mirror = true; - rightLeg.addBox(-5F, 3F, -2F, 4, 16, 4); - rightLeg.setRotationPoint(-2F, 5F, 0F); - rightLeg.setTextureSize(64, 64); - rightLeg.mirror = true; - setRotation(rightLeg, 0F, 0F, 0F); - rightLeg.mirror = false; - body = new ModelRenderer(this, 0, 44); - body.addBox(-5F, -14F, -3F, 10, 14, 6); - body.setRotationPoint(0F, 1F, 0F); - body.setTextureSize(64, 64); - body.mirror = true; - setRotation(body, 0F, 0F, 0F); - leftShoulder = new ModelRenderer(this, 0, 29); - leftShoulder.addBox(0F, -5F, -4F, 8, 7, 8); - leftShoulder.setRotationPoint(5F, -10F, 0F); - leftShoulder.setTextureSize(64, 64); - leftShoulder.mirror = true; - setRotation(leftShoulder, 0F, 0F, 0F); - leftArm = new ModelRenderer(this, 32, 0); - leftArm.addBox(3F, 2F, -2F, 4, 12, 4); - leftArm.setRotationPoint(5F, -10F, 0F); - leftArm.setTextureSize(64, 64); - leftArm.mirror = true; - setRotation(leftArm, 0F, 0F, 0F); - head = new ModelRenderer(this, 32, 48); - head.addBox(-4F, -7F, -4F, 8, 8, 8); - head.setRotationPoint(0F, -14F, -1F); - head.setTextureSize(64, 64); - head.mirror = true; - setRotation(head, 0F, 0F, 0F); - rightShoulder = new ModelRenderer(this, 0, 29); - rightShoulder.mirror = true; - rightShoulder.mirror = true; - rightShoulder.addBox(-8F, -5F, -4F, 8, 7, 8); - rightShoulder.setRotationPoint(-5F, -10F, 0F); - rightShoulder.setTextureSize(64, 64); - rightShoulder.mirror = true; - setRotation(rightShoulder, 0F, 0F, 0F); - rightShoulder.mirror = false; - rightArm = new ModelRenderer(this, 32, 0); - rightArm.mirror = true; - rightArm.mirror = true; - rightArm.addBox(-7F, 2F, -2F, 4, 12, 4); - rightArm.setRotationPoint(-5F, -10F, 0F); - rightArm.setTextureSize(64, 64); - rightArm.mirror = true; - setRotation(rightArm, 0F, 0F, 0F); - rightArm.mirror = false; - leftWing = new ModelRenderer(this, 0, 0); - leftWing.addBox(0F, -2F, 0F, 16, 12, 0); - leftWing.setRotationPoint(0F, -11F, 3F); - leftWing.setTextureSize(64, 64); - leftWing.mirror = true; - setRotation(leftWing, 0F, -0.5061455F, 0F); - rightWing = new ModelRenderer(this, 0, 0); - rightWing.mirror = true; - rightWing.addBox(-16F, -2F, 0F, 16, 12, 0); - rightWing.setRotationPoint(0F, -11F, 3F); - rightWing.setTextureSize(64, 64); - rightWing.mirror = true; - setRotation(rightWing, 0F, 0.5061455F, 0F); - rightWing.mirror = false; - leftHorn1 = new ModelRenderer(this, 0, 12); - leftHorn1.addBox(4F, -9F, -1F, 1, 5, 1); - leftHorn1.setRotationPoint(0F, -14F, -1F); - leftHorn1.setTextureSize(64, 64); - leftHorn1.mirror = true; - setRotation(leftHorn1, 0F, 0F, 0F); - rightHorn1 = new ModelRenderer(this, 0, 12); - rightHorn1.mirror = true; - rightHorn1.addBox(-5F, -9F, -1F, 1, 5, 1); - rightHorn1.setRotationPoint(0F, -14F, -1F); - rightHorn1.setTextureSize(64, 64); - rightHorn1.mirror = true; - setRotation(rightHorn1, 0F, 0F, 0F); - rightHorn1.mirror = false; - leftHorn2 = new ModelRenderer(this, 4, 12); - leftHorn2.addBox(4F, -10F, 0F, 1, 5, 1); - leftHorn2.setRotationPoint(0F, -14F, -1F); - leftHorn2.setTextureSize(64, 64); - leftHorn2.mirror = true; - setRotation(leftHorn2, 0F, 0F, 0F); - rightHorn2 = new ModelRenderer(this, 4, 12); - rightHorn2.mirror = true; - rightHorn2.addBox(-5F, -10F, 0F, 1, 5, 1); - rightHorn2.setRotationPoint(0F, -14F, -1F); - rightHorn2.setTextureSize(64, 64); - rightHorn2.mirror = true; - setRotation(rightHorn2, 0F, 0F, 0F); - rightHorn2.mirror = false; - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - leftLegPlate.render(f5); - leftLeg.render(f5); - codPiece.render(f5); - rightLegPlate.render(f5); - rightLeg.render(f5); - body.render(f5); - leftShoulder.render(f5); - leftArm.render(f5); - head.render(f5); - rightShoulder.render(f5); - rightArm.render(f5); - leftWing.render(f5); - rightWing.render(f5); - leftHorn1.render(f5); - rightHorn1.render(f5); - leftHorn2.render(f5); - rightHorn2.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - this.head.rotateAngleX = f4 / (180F / (float) Math.PI); - this.head.rotateAngleY = f3 / (180F / (float) Math.PI); - this.leftHorn1.rotateAngleX = head.rotateAngleX; - this.leftHorn1.rotateAngleY = head.rotateAngleY; - this.leftHorn2.rotateAngleX = head.rotateAngleX; - this.leftHorn2.rotateAngleY = head.rotateAngleY; - this.rightHorn1.rotateAngleX = head.rotateAngleX; - this.rightHorn1.rotateAngleY = head.rotateAngleY; - this.rightHorn2.rotateAngleX = head.rotateAngleX; - this.rightHorn2.rotateAngleY = head.rotateAngleY; - this.leftLeg.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1; - this.rightLeg.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 1.0F * f1; - this.rightArm.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 1.0F * f1; - this.leftArm.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1; - this.leftShoulder.rotateAngleX = this.leftArm.rotateAngleX; - this.rightShoulder.rotateAngleX = this.rightArm.rotateAngleX; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/projectile/RenderEnergyBazookaMainProjectile.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/projectile/RenderEnergyBazookaMainProjectile.java deleted file mode 100644 index 826cec70..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/projectile/RenderEnergyBazookaMainProjectile.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.projectile; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.entity.Entity; -import net.minecraft.util.ResourceLocation; - -import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL12; - -import WayofTime.alchemicalWizardry.common.renderer.model.ModelEnergyBazookaMainProjectile; - -public class RenderEnergyBazookaMainProjectile extends Render -{ - public RenderEnergyBazookaMainProjectile() - { - super(Minecraft.getMinecraft().getRenderManager()); - } - - public ModelBase model = new ModelEnergyBazookaMainProjectile(); - private static final ResourceLocation field_110833_a = new ResourceLocation("alchemicalwizardry", "textures/models/EnergyBazookaMainProjectile.png"); - - @Override - public void doRender(Entity entity, double d0, double d1, double d2, float f, float f1) - { - float scale = 1.0f; - GL11.glPushMatrix(); - GL11.glTranslatef((float) d0, (float) d1, (float) d2); - GL11.glEnable(GL12.GL_RESCALE_NORMAL); - GL11.glScalef(scale, scale, scale); - this.bindTexture(this.getEntityTexture(entity)); - GL11.glRotatef(entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * f1, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(180.0f - entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * f1, 1.0F, 0.0F, 0.0f); - model.render(entity, 0, (float) d0, (float) d1, (float) d2, f, f1); - GL11.glDisable(GL12.GL_RESCALE_NORMAL); - GL11.glPopMatrix(); - } - - @Override - protected ResourceLocation getEntityTexture(Entity entity) - { - // TODO Auto-generated method stub - return field_110833_a; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/projectile/RenderEnergyBlastProjectile.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/projectile/RenderEnergyBlastProjectile.java deleted file mode 100644 index 53228e59..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/projectile/RenderEnergyBlastProjectile.java +++ /dev/null @@ -1,109 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.projectile; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.WorldRenderer; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.entity.Entity; -import net.minecraft.entity.IProjectile; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL12; - -import WayofTime.alchemicalWizardry.common.entity.projectile.ExplosionProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.FireProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.HolyProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.IceProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.LightningBoltProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.MudProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.WaterProjectile; -import WayofTime.alchemicalWizardry.common.entity.projectile.WindGustProjectile; - -@SideOnly(Side.CLIENT) -public class RenderEnergyBlastProjectile extends Render -{ - public RenderEnergyBlastProjectile() - { - super(Minecraft.getMinecraft().getRenderManager()); - } - - public void doRenderEnergyBlastProjectile(Entity entityShot, double par2, double par4, double par6, float par8, float par9) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float) par2, (float) par4, (float) par6); - GL11.glEnable(GL12.GL_RESCALE_NORMAL); - GL11.glScalef(0.1F, 0.1F, 0.1F); - this.bindTexture(this.getEntityTexture(entityShot)); - Tessellator var12 = Tessellator.getInstance(); - GL11.glRotatef(180.0F - renderManager.playerViewY, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(-renderManager.playerViewX, 1.0F, 0.0F, 0.0F); - WorldRenderer wr = var12.getWorldRenderer(); - wr.startDrawingQuads(); - wr.func_178980_d(0.0F, 1.0F, 0.0F); //SetNormal - wr.addVertexWithUV(-0.5F, -0.25F, 0.0D, 0, 1); - wr.addVertexWithUV(0.5F, -0.25F, 0.0D, 1, 1); - wr.addVertexWithUV(0.5F, 0.75F, 0.0D, 1, 0); - wr.addVertexWithUV(-0.5F, 0.75F, 0.0D, 0, 0); - var12.draw(); - GL11.glDisable(GL12.GL_RESCALE_NORMAL); - GL11.glPopMatrix(); - } - - @Override - public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9) - { - if (par1Entity instanceof IProjectile) - { - this.doRenderEnergyBlastProjectile(par1Entity, par2, par4, par6, par8, par9); - } - } - - @Override - protected ResourceLocation getEntityTexture(Entity entity) - { - if (entity instanceof IceProjectile) - { - return new ResourceLocation("alchemicalwizardry", "textures/entities/iceProjectile.png"); - } - - if (entity instanceof FireProjectile) - { - return new ResourceLocation("alchemicalwizardry", "textures/entities/fireProjectile.png"); - } - - if (entity instanceof ExplosionProjectile) - { - return new ResourceLocation("alchemicalwizardry", "textures/entities/explosionProjectile.png"); - } - - if (entity instanceof HolyProjectile) - { - return new ResourceLocation("alchemicalwizardry", "textures/entities/holyProjectile.png"); - } - - if (entity instanceof WindGustProjectile) - { - return new ResourceLocation("alchemicalwizardry", "textures/entities/windGustProjectile.png"); - } - - if (entity instanceof LightningBoltProjectile) - { - return new ResourceLocation("alchemicalwizardry", "textures/entities/lightningProjectile.png"); - } - - if (entity instanceof WaterProjectile) - { - return new ResourceLocation("alchemicalwizardry", "textures/entities/waterProjectile.png"); - } - - if (entity instanceof MudProjectile) - { - return new ResourceLocation("alchemicalwizardry", "textures/entities/mudProjectile.png"); - } - - return new ResourceLocation("alchemicalwizardry", "textures/entities/energyBlastProjectile.png"); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/projectile/RenderMeteor.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/projectile/RenderMeteor.java deleted file mode 100644 index f33d1178..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/projectile/RenderMeteor.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.projectile; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.entity.Entity; -import net.minecraft.util.ResourceLocation; - -import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL12; - -import WayofTime.alchemicalWizardry.common.renderer.model.ModelMeteor; - -public class RenderMeteor extends Render -{ - public RenderMeteor() - { - super(Minecraft.getMinecraft().getRenderManager()); - // TODO Auto-generated constructor stub - } - - public ModelBase model = new ModelMeteor(); - private static final ResourceLocation field_110833_a = new ResourceLocation("alchemicalwizardry", "textures/models/Meteor.png"); - - @Override - public void doRender(Entity entity, double d0, double d1, double d2, float f, float f1) - { - float scale = 1.0f; - GL11.glPushMatrix(); - GL11.glTranslatef((float) d0, (float) d1, (float) d2); - GL11.glEnable(GL12.GL_RESCALE_NORMAL); - GL11.glScalef(scale, scale, scale); - this.bindTexture(this.getEntityTexture(entity)); - GL11.glRotatef(entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * f1, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(180.0f - entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * f1, 1.0F, 0.0F, 0.0f); - model.render(entity, 0, (float) d0, (float) d1, (float) d2, f, f1); - GL11.glDisable(GL12.GL_RESCALE_NORMAL); - GL11.glPopMatrix(); - } - - @Override - protected ResourceLocation getEntityTexture(Entity entity) - { - return field_110833_a; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/LocalStorageAlphaPact.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/LocalStorageAlphaPact.java deleted file mode 100644 index a63baace..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/LocalStorageAlphaPact.java +++ /dev/null @@ -1,25 +0,0 @@ -//package WayofTime.alchemicalWizardry.common.rituals; -// -//import java.util.HashSet; -//import java.util.Set; -// -//import WayofTime.alchemicalWizardry.api.Int3; -//import WayofTime.alchemicalWizardry.api.rituals.LocalRitualStorage; -//import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.IHoardDemon; -// -//public class LocalStorageAlphaPact extends LocalRitualStorage -//{ -// public static Set hoardList = new HashSet(); -// -// public void thrallDemon(IHoardDemon demon) -// { -// if(demon instanceof IHoardDemon) -// { -// boolean enthrall = ((IHoardDemon) demon).thrallDemon(new Int3(this.xCoord, this.yCoord, this.zCoord)); -// if(enthrall) -// { -// this.hoardList.add((IHoardDemon)demon); -// } -// } -// } -//} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectAlphaPact.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectAlphaPact.java deleted file mode 100644 index 6fafc94c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectAlphaPact.java +++ /dev/null @@ -1,178 +0,0 @@ -//package WayofTime.alchemicalWizardry.common.rituals; -// -//import java.util.ArrayList; -//import java.util.List; -//import java.util.Random; -// -//import net.minecraft.block.Block; -//import net.minecraft.entity.EntityLivingBase; -//import net.minecraft.util.BlockPos; -//import net.minecraft.util.MathHelper; -//import net.minecraft.world.World; -//import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -//import WayofTime.alchemicalWizardry.api.rituals.LocalRitualStorage; -//import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -//import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -//import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -//import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGrunt; -//import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.IHoardDemon; -// -//public class RitualEffectAlphaPact extends RitualEffect -//{ -// Random rand = new Random(); -// -// @Override -// public void performEffect(IMasterRitualStone ritualStone) -// { -// String owner = ritualStone.getOwner(); -// -// int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); -// World world = ritualStone.getWorldObj(); -// BlockPos pos = ritualStone.getPosition(); -// -// if (world.getWorldTime() % 20 != 0) -// { -// return; -// } -// -// LocalRitualStorage stor = ritualStone.getLocalStorage(); -// if(stor instanceof LocalStorageAlphaPact) -// { -// LocalStorageAlphaPact storage = (LocalStorageAlphaPact)stor; -// -// Object[] demonList = storage.hoardList.toArray(); -// -// for(Object demon : demonList) -// { -// if(demon instanceof EntityLivingBase) -// { -// if(!((EntityLivingBase) demon).isEntityAlive()) -// { -// System.out.println(storage.hoardList.remove(demon)); -// } -// } -// } -// -// System.out.println("Hi!"); -// -// int summons = 0; -// -// int horizontalRange = 25; -// int verticalRange = 20; -// -// if(storage.hoardList.isEmpty()) -// { -// IHoardDemon demon = this.getRandomDemonForStage(world, x, y, z, horizontalRange, verticalRange); -// if(demon instanceof EntityLivingBase) -// { -// world.spawnEntityInWorld((EntityLivingBase)demon); -// storage.thrallDemon(demon); -// } -// }else -// { -// } -// } -// } -// -// public IHoardDemon getRandomDemonForStage(World world, int x, int y, int z, int horizontalRange, int verticalRange) -// { -// EntityLivingBase entityLiving = new EntityMinorDemonGrunt(world); -// -// boolean isGood = false; -// for(int n=0; n<100; n++) -// { -// double newX = x + (rand.nextInt(horizontalRange) - horizontalRange) + 0.5; -// double newY = y + (double) (rand.nextInt((int) verticalRange)); -// double newZ = z + (rand.nextInt(horizontalRange) - horizontalRange) + 0.5; -// -// entityLiving.posX = newX; -// entityLiving.posY = newY; -// entityLiving.posZ = newZ; -// -// int i = MathHelper.floor_double(entityLiving.posX); -// int j = MathHelper.floor_double(entityLiving.posY); -// int k = MathHelper.floor_double(entityLiving.posZ); -// Block l; -// -// if (entityLiving.worldObj.blockExists(i, j, k)) -// { -// boolean flag1 = false; -// -// while (!flag1 && j > 0) -// { -// l = entityLiving.worldObj.getBlock(i, j - 1, k); -// -// if (l != null && l.getMaterial().blocksMovement()) -// { -// flag1 = true; -// } else -// { -// --entityLiving.posY; -// --j; -// } -// } -// } -// -// if(entityLiving.worldObj.getCollidingBoundingBoxes(entityLiving, entityLiving.boundingBox).isEmpty() && !entityLiving.worldObj.isAnyLiquid(entityLiving.boundingBox)) -// { -// entityLiving.setPositionAndUpdate(newX, newY, newZ); -// isGood = true; -// } -// } -// -// if(isGood = false) -// { -// return null; -// } -// -// return (IHoardDemon)entityLiving; -// } -// -// public int spawnMoreDemons(LocalStorageAlphaPact storage) -// { -// return 5; -// } -// -// @Override -// public int getCostPerRefresh() -// { -// return 1; -// } -// -// public LocalRitualStorage getNewLocalStorage() -// { -// return new LocalStorageAlphaPact(); -// } -// -// @Override -// public List getRitualComponentList() -// { -// ArrayList omegaRitual = new ArrayList(); -// -// this.addCornerRunes(omegaRitual, 1, 0, RitualComponent.BLANK); -// this.addOffsetRunes(omegaRitual, 2, 1, 0, RitualComponent.FIRE); -// this.addParallelRunes(omegaRitual, 4, 0, RitualComponent.WATER); -// this.addParallelRunes(omegaRitual, 5, 0, RitualComponent.EARTH); -// this.addCornerRunes(omegaRitual, 4, 0, RitualComponent.AIR); -// this.addOffsetRunes(omegaRitual, 3, 4, 0, RitualComponent.AIR); -// this.addParallelRunes(omegaRitual, 5, 1, RitualComponent.WATER); -// this.addParallelRunes(omegaRitual, 5, 2, RitualComponent.EARTH); -// this.addParallelRunes(omegaRitual, 4, 3, RitualComponent.WATER); -// this.addParallelRunes(omegaRitual, 4, 4, RitualComponent.WATER); -// this.addParallelRunes(omegaRitual, 3, 5, RitualComponent.BLANK); -// this.addParallelRunes(omegaRitual, 2, 5, RitualComponent.FIRE); -// this.addParallelRunes(omegaRitual, 1, 5, RitualComponent.DUSK); -// this.addOffsetRunes(omegaRitual, 5, 3, 1, RitualComponent.WATER); -// this.addOffsetRunes(omegaRitual, 6, 3, 1, RitualComponent.DUSK); -// this.addOffsetRunes(omegaRitual, 6, 4, 1, RitualComponent.FIRE); -// this.addOffsetRunes(omegaRitual, 6, 5, 1, RitualComponent.BLANK); -// this.addCornerRunes(omegaRitual, 4, 2, RitualComponent.FIRE); -// this.addCornerRunes(omegaRitual, 4, 3, RitualComponent.AIR); -// this.addCornerRunes(omegaRitual, 4, 4, RitualComponent.AIR); -// this.addOffsetRunes(omegaRitual, 4, 3, 2, RitualComponent.BLANK); -// this.addCornerRunes(omegaRitual, 3, 5, RitualComponent.EARTH); -// this.addOffsetRunes(omegaRitual, 2, 3, 5, RitualComponent.AIR); -// -// return omegaRitual; -// } -//} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectAnimalGrowth.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectAnimalGrowth.java deleted file mode 100644 index a9068614..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectAnimalGrowth.java +++ /dev/null @@ -1,155 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.EntityAgeable; -import net.minecraft.entity.passive.EntityAnimal; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; - -public class RitualEffectAnimalGrowth extends RitualEffect -{ - public static final int breedingCost = 50; - public static final int reductusDrain = 1; - public static final int virtusDrain = 10; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (world.getWorldTime() % 20 != 0) - { - return; - } - - double range = 2; - - AxisAlignedBB axisalignedbb = new AxisAlignedBB(pos.offsetUp(), pos.add(1, 3, 1)).expand(range, 0, range); - List list = world.getEntitiesWithinAABB(EntityAgeable.class, axisalignedbb); - - int entityCount = 0; - boolean flag = false; - - if (currentEssence < this.getCostPerRefresh() * list.size()) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - boolean hasReductus = this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); - - for (EntityAgeable entity : list) - { - if (entity.getGrowingAge() < 0) - { - entity.addGrowth(5); - entityCount++; - } else - { - hasReductus = hasReductus && this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); - if (hasReductus && entity instanceof EntityAnimal && entity.getGrowingAge() > 0) - { - EntityAnimal animal = (EntityAnimal) entity; - entity.setGrowingAge(Math.max(0, animal.getGrowingAge() - 20 * 2)); - this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, true); - entityCount++; - } - } - } - - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh() * entityCount); - } - - boolean hasVirtus = this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, false); - - if (hasVirtus && SoulNetworkHandler.canSyphonFromOnlyNetwork(owner, breedingCost)) - { - List animalList = world.getEntitiesWithinAABB(EntityAnimal.class, axisalignedbb); - TileEntity tile = world.getTileEntity(pos.offsetUp()); - IInventory inventory = null; - if (tile instanceof IInventory) - { - inventory = (IInventory) tile; - } else - { - tile = world.getTileEntity(pos.offsetDown()); - if (tile instanceof IInventory) - { - inventory = (IInventory) tile; - } - } - - if (inventory != null) - { - for (EntityAnimal entityAnimal : animalList) - { - if (entityAnimal.isInLove() || entityAnimal.isChild() || entityAnimal.getGrowingAge() > 0) - { - continue; - } - - hasVirtus = hasVirtus && this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, false); - boolean hasLP = SoulNetworkHandler.canSyphonFromOnlyNetwork(owner, breedingCost); - - for (int i = 0; i < inventory.getSizeInventory(); i++) - { - ItemStack stack = inventory.getStackInSlot(i); - - if (stack != null && entityAnimal.isBreedingItem(stack)) - { - inventory.decrStackSize(i, 1); - entityAnimal.setInLove(null); - this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, true); - SoulNetworkHandler.syphonFromNetwork(owner, breedingCost); - break; - } - } - } - } - } - } - - @Override - public int getCostPerRefresh() - { - - return 2; - } - - @Override - public List getRitualComponentList() - { - ArrayList animalGrowthRitual = new ArrayList(); - animalGrowthRitual.add(new RitualComponent(0, 0, 2, RitualComponent.DUSK)); - animalGrowthRitual.add(new RitualComponent(2, 0, 0, RitualComponent.DUSK)); - animalGrowthRitual.add(new RitualComponent(0, 0, -2, RitualComponent.DUSK)); - animalGrowthRitual.add(new RitualComponent(-2, 0, 0, RitualComponent.DUSK)); - animalGrowthRitual.add(new RitualComponent(0, 0, 1, RitualComponent.WATER)); - animalGrowthRitual.add(new RitualComponent(1, 0, 0, RitualComponent.WATER)); - animalGrowthRitual.add(new RitualComponent(0, 0, -1, RitualComponent.WATER)); - animalGrowthRitual.add(new RitualComponent(-1, 0, 0, RitualComponent.WATER)); - animalGrowthRitual.add(new RitualComponent(1, 0, 2, RitualComponent.EARTH)); - animalGrowthRitual.add(new RitualComponent(-1, 0, 2, RitualComponent.EARTH)); - animalGrowthRitual.add(new RitualComponent(1, 0, -2, RitualComponent.EARTH)); - animalGrowthRitual.add(new RitualComponent(-1, 0, -2, RitualComponent.EARTH)); - animalGrowthRitual.add(new RitualComponent(2, 0, 1, RitualComponent.AIR)); - animalGrowthRitual.add(new RitualComponent(2, 0, -1, RitualComponent.AIR)); - animalGrowthRitual.add(new RitualComponent(-2, 0, 1, RitualComponent.AIR)); - animalGrowthRitual.add(new RitualComponent(-2, 0, -1, RitualComponent.AIR)); - return animalGrowthRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectApiaryOverclock.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectApiaryOverclock.java deleted file mode 100644 index f1878498..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectApiaryOverclock.java +++ /dev/null @@ -1,71 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RitualEffectApiaryOverclock extends RitualEffect -{ - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - World worldSave = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) worldSave.loadItemData(LifeEssenceNetwork.class, owner); - - if (data == null) - { - data = new LifeEssenceNetwork(owner); - worldSave.setItemData(owner, data); - } - - int currentEssence = data.currentEssence; - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - - if (currentEssence < this.getCostPerRefresh()) - { - EntityPlayer entityOwner = SpellHelper.getPlayerForUsername(owner); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); - } - } - - @Override - public int getCostPerRefresh() - { - return 10; - } - - @Override - public List getRitualComponentList() - { - ArrayList apiaryRitual = new ArrayList(); - apiaryRitual.add(new RitualComponent(1, 0, 0, RitualComponent.DUSK)); - apiaryRitual.add(new RitualComponent(1, 0, 1, RitualComponent.DUSK)); - apiaryRitual.add(new RitualComponent(1, 0, -1, RitualComponent.DUSK)); - apiaryRitual.add(new RitualComponent(-1, 0, -1, RitualComponent.DUSK)); - apiaryRitual.add(new RitualComponent(-1, 0, 1, RitualComponent.DUSK)); - apiaryRitual.add(new RitualComponent(-1, 0, 0, RitualComponent.DUSK)); - apiaryRitual.add(new RitualComponent(0, 0, -1, RitualComponent.DUSK)); - apiaryRitual.add(new RitualComponent(0, 0, 1, RitualComponent.DUSK)); - return apiaryRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectAutoAlchemy.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectAutoAlchemy.java deleted file mode 100644 index c8406e13..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectAutoAlchemy.java +++ /dev/null @@ -1,430 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; -import WayofTime.alchemicalWizardry.api.alchemy.AlchemyRecipeRegistry; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.api.tile.IBloodAltar; -import WayofTime.alchemicalWizardry.common.tileEntity.TEChemistrySet; - -public class RitualEffectAutoAlchemy extends RitualEffect -{ - public static final boolean fillToOne = true; - - public static final int potentiaDrain = 2; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (currentEssence < this.getCostPerRefresh() * 6) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - boolean hasPotentia = this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, false); - - int flag = 0; - - TileEntity topEntity = world.getTileEntity(pos.offsetUp()); - if (!(topEntity instanceof IBloodAltar)) - { - return; - } - - IBloodAltar altar = (IBloodAltar) topEntity; - ItemStack targetStack = ((IInventory)altar).getStackInSlot(0); - if (targetStack == null) - { - return; - } - - ItemStack[] recipe = AlchemyRecipeRegistry.getRecipeForItemStack(targetStack); - if (recipe != null) - { - TEChemistrySet alchemyEntity; - IInventory outputInv = null; - IInventory inputInv1 = null; - IInventory inputInv2 = null; - - TileEntity northEntity = world.getTileEntity(pos.offsetNorth()); - TileEntity southEntity = world.getTileEntity(pos.offsetSouth()); - TileEntity eastEntity = world.getTileEntity(pos.offsetEast()); - TileEntity westEntity = world.getTileEntity(pos.offsetWest()); - - if (northEntity instanceof TEChemistrySet) - { - alchemyEntity = (TEChemistrySet) northEntity; - if (southEntity instanceof IInventory && !(southEntity instanceof TEChemistrySet)) - { - outputInv = (IInventory) southEntity; - } - if (eastEntity instanceof IInventory && !(eastEntity instanceof TEChemistrySet)) - { - inputInv1 = (IInventory) eastEntity; - } - if (westEntity instanceof IInventory && !(westEntity instanceof TEChemistrySet)) - { - inputInv2 = (IInventory) westEntity; - } - } else if (southEntity instanceof TEChemistrySet) - { - alchemyEntity = (TEChemistrySet) southEntity; - if (northEntity instanceof IInventory) - { - outputInv = (IInventory) northEntity; - } - if (eastEntity instanceof IInventory && !(eastEntity instanceof TEChemistrySet)) - { - inputInv1 = (IInventory) eastEntity; - } - if (westEntity instanceof IInventory && !(westEntity instanceof TEChemistrySet)) - { - inputInv2 = (IInventory) westEntity; - } - } else if (eastEntity instanceof TEChemistrySet) - { - alchemyEntity = (TEChemistrySet) eastEntity; - if (westEntity instanceof IInventory && !(westEntity instanceof TEChemistrySet)) - { - outputInv = (IInventory) westEntity; - } - if (northEntity instanceof IInventory) - { - inputInv1 = (IInventory) northEntity; - } - if (southEntity instanceof IInventory) - { - inputInv2 = (IInventory) southEntity; - } - } else if (westEntity instanceof TEChemistrySet) - { - alchemyEntity = (TEChemistrySet) westEntity; - if (eastEntity instanceof IInventory) - { - outputInv = (IInventory) eastEntity; - } - if (northEntity instanceof IInventory) - { - inputInv1 = (IInventory) northEntity; - } - if (southEntity instanceof IInventory) - { - inputInv2 = (IInventory) southEntity; - } - } else - { - return; - } - - if (hasPotentia) - { - alchemyEntity.setAccelerationTime(5); - if (alchemyEntity.isWorking()) - { - this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, true); - } - } - - if (outputInv != null) - { - ItemStack outputStack = alchemyEntity.getStackInSlot(6); - if (outputStack != null) - { - for (int i = 0; i < outputInv.getSizeInventory(); i++) - { - ItemStack curStack = outputInv.getStackInSlot(i); - if (curStack == null) - { - ItemStack copyStack = outputStack.copy(); - copyStack.stackSize = 1; - - outputStack.stackSize--; - if (outputStack.stackSize <= 0) - { - alchemyEntity.setInventorySlotContents(6, null); - } else - { - alchemyEntity.setInventorySlotContents(6, outputStack); - } - - outputInv.setInventorySlotContents(i, copyStack); - flag++; - break; - } else if (curStack.isItemEqual(outputStack) && curStack.stackSize < curStack.getMaxStackSize() && ItemStack.areItemStackTagsEqual(outputStack, curStack)) - { - outputStack.stackSize--; - if (outputStack.stackSize <= 0) - { - alchemyEntity.setInventorySlotContents(6, null); - } else - { - alchemyEntity.setInventorySlotContents(6, outputStack); - } - - curStack.stackSize++; - outputInv.setInventorySlotContents(i, curStack); - flag++; - break; - } - } - } - - for (int i = 0; i < 5; i++) - { - ItemStack recItem; - if (recipe.length <= i) - { - recItem = null; - } else - { - recItem = recipe[i]; - } - - ItemStack alchStack = alchemyEntity.getStackInSlot(i + 1); - if ((recItem == null && alchStack != null) || (alchStack != null && !(areItemStacksEqualWithWildcard(recItem, alchStack)))) - { - for (int j = 0; j < outputInv.getSizeInventory(); j++) - { - ItemStack curStack = outputInv.getStackInSlot(j); - if (curStack == null) - { - ItemStack copyStack = alchStack.copy(); - copyStack.stackSize = 1; - - alchStack.stackSize--; - if (alchStack.stackSize <= 0) - { - alchemyEntity.setInventorySlotContents(i + 1, null); - } else - { - alchemyEntity.setInventorySlotContents(i + 1, alchStack); - } - - outputInv.setInventorySlotContents(j, copyStack); - flag++; - break; - } else if (curStack.isItemEqual(alchStack) && curStack.stackSize < curStack.getMaxStackSize() && ItemStack.areItemStackTagsEqual(alchStack, curStack)) - { - alchStack.stackSize--; - if (alchStack.stackSize <= 0) - { - alchemyEntity.setInventorySlotContents(i + 1, null); - } else - { - alchemyEntity.setInventorySlotContents(i + 1, alchStack); - } - - curStack.stackSize++; - outputInv.setInventorySlotContents(j, curStack); - flag++; - break; - } - } - } - } - - } - - if (world.getWorldTime() % 10 == 0) - { - if (flag == 0 && inputInv1 != null) - { - for (int i = 0; i < recipe.length; i++) - { - ItemStack recItem = recipe[i]; - if (recItem == null) - { - continue; - } - ItemStack alchStack = alchemyEntity.getStackInSlot(i + 1); - - if (alchStack != null && ((!areItemStacksEqualWithWildcard(recItem, alchStack)) || alchStack.stackSize >= (fillToOne ? 1 : alchStack.getMaxStackSize()))) - { - continue; - } - - for (int j = 0; j < inputInv1.getSizeInventory(); j++) - { - ItemStack curItem = inputInv1.getStackInSlot(j); - if (curItem == null) - { - continue; - } - - if(!inputInv1.isItemValidForSlot(j, curItem) || (inputInv1 instanceof ISidedInventory && !((ISidedInventory) inputInv1).canExtractItem(j, curItem, EnumFacing.DOWN))) - { - continue; - } - - if (areItemStacksEqualWithWildcard(recItem, curItem)) - { - if (alchStack == null) - { - ItemStack copyStack = recItem.copy(); - copyStack.stackSize = 1; - alchemyEntity.setInventorySlotContents(i + 1, copyStack); - - curItem.stackSize--; - if (curItem.stackSize <= 0) - { - inputInv1.setInventorySlotContents(j, null); - } else - { - inputInv1.setInventorySlotContents(j, curItem); - } - - flag++; - break; - - } else - { - alchStack.stackSize++; - alchemyEntity.setInventorySlotContents(i + 1, alchStack); - - curItem.stackSize--; - if (curItem.stackSize <= 0) - { - inputInv1.setInventorySlotContents(j, null); - } else - { - inputInv1.setInventorySlotContents(j, curItem); - } - - flag++; - break; - } - } - } - } - } - if (flag == 0 && inputInv2 != null) - { - for (int i = 0; i < recipe.length; i++) - { - ItemStack recItem = recipe[i]; - if (recItem == null) - { - continue; - } - ItemStack alchStack = alchemyEntity.getStackInSlot(i + 1); - if (alchStack != null && ((!areItemStacksEqualWithWildcard(recItem, alchStack)) || alchStack.stackSize >= (fillToOne ? 1 : alchStack.getMaxStackSize()))) - { - continue; - } - - for (int j = 0; j < inputInv2.getSizeInventory(); j++) - { - ItemStack curItem = inputInv2.getStackInSlot(j); - if (curItem == null) - { - continue; - } - if (areItemStacksEqualWithWildcard(recItem, curItem)) - { - if (alchStack == null) - { - ItemStack copyStack = recItem.copy(); - copyStack.stackSize = 1; - alchemyEntity.setInventorySlotContents(i + 1, copyStack); - - curItem.stackSize--; - if (curItem.stackSize <= 0) - { - inputInv2.setInventorySlotContents(j, null); - } else - { - inputInv2.setInventorySlotContents(j, curItem); - } - - flag++; - break; - - } else - { - alchStack.stackSize++; - alchemyEntity.setInventorySlotContents(i + 1, alchStack); - - curItem.stackSize--; - if (curItem.stackSize <= 0) - { - inputInv2.setInventorySlotContents(j, null); - } else - { - inputInv2.setInventorySlotContents(j, curItem); - } - - flag++; - break; - } - } - } - } - } - } - } - - if (flag > 0) - { - for(EnumFacing face : EnumFacing.HORIZONTALS) - { - world.markBlockForUpdate(pos.offset(face)); - } - - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh() * flag); - } - } - } - - @Override - public int getCostPerRefresh() - { - return 10; - } - - @Override - public List getRitualComponentList() - { - ArrayList autoAlchemyRitual = new ArrayList(); - autoAlchemyRitual.add(new RitualComponent(1, 0, 1, RitualComponent.DUSK)); - autoAlchemyRitual.add(new RitualComponent(1, 0, -1, RitualComponent.DUSK)); - autoAlchemyRitual.add(new RitualComponent(-1, 0, -1, RitualComponent.DUSK)); - autoAlchemyRitual.add(new RitualComponent(-1, 0, 1, RitualComponent.DUSK)); - autoAlchemyRitual.add(new RitualComponent(2, 0, 2, RitualComponent.WATER)); - autoAlchemyRitual.add(new RitualComponent(2, 0, -2, RitualComponent.WATER)); - autoAlchemyRitual.add(new RitualComponent(-2, 0, -2, RitualComponent.WATER)); - autoAlchemyRitual.add(new RitualComponent(-2, 0, 2, RitualComponent.WATER)); - autoAlchemyRitual.add(new RitualComponent(-3, 0, -2, RitualComponent.FIRE)); - autoAlchemyRitual.add(new RitualComponent(-2, 0, -3, RitualComponent.FIRE)); - autoAlchemyRitual.add(new RitualComponent(-3, 0, 2, RitualComponent.FIRE)); - autoAlchemyRitual.add(new RitualComponent(-2, 0, 3, RitualComponent.FIRE)); - autoAlchemyRitual.add(new RitualComponent(3, 0, -2, RitualComponent.FIRE)); - autoAlchemyRitual.add(new RitualComponent(2, 0, -3, RitualComponent.FIRE)); - autoAlchemyRitual.add(new RitualComponent(3, 0, 2, RitualComponent.FIRE)); - autoAlchemyRitual.add(new RitualComponent(2, 0, 3, RitualComponent.FIRE)); - return autoAlchemyRitual; - } - - public boolean areItemStacksEqualWithWildcard(ItemStack recipeStack, ItemStack comparedStack) - { - return recipeStack.isItemEqual(comparedStack) || (recipeStack.getItemDamage() == OreDictionary.WILDCARD_VALUE && recipeStack.getItem() == comparedStack.getItem()); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectBinding.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectBinding.java deleted file mode 100644 index 5416441b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectBinding.java +++ /dev/null @@ -1,189 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.bindingRegistry.BindingRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RitualEffectBinding extends RitualEffect -{ - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (currentEssence < this.getCostPerRefresh()) - { - EntityPlayer entityOwner = SpellHelper.getPlayerForUsername(owner); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); - } else - { - if (ritualStone.getVar1() == 0) - { - int d0 = 0; - AxisAlignedBB axisalignedbb = new AxisAlignedBB(pos.offsetUp(), pos.add(1, 2, 1)).expand(d0, d0, d0); - List list = world.getEntitiesWithinAABB(EntityItem.class, axisalignedbb); - Iterator iterator = list.iterator(); - EntityItem item; - - while (iterator.hasNext()) - { - item = (EntityItem) iterator.next(); - ItemStack itemStack = item.getEntityItem(); - - if (itemStack == null) - { - continue; - } - - - if (BindingRegistry.isRequiredItemValid(itemStack)) - { - ritualStone.setVar1(BindingRegistry.getIndexForItem(itemStack) + 1); - itemStack.stackSize--; - world.addWeatherEffect(new EntityLightningBolt(world, pos.getX(), pos.getY() + 1, pos.getZ())); - ritualStone.setCooldown(ritualStone.getCooldown() - 1); - if(itemStack.stackSize <= 0) - { - item.setDead(); - } - break; - } - - if (world.rand.nextInt(10) == 0) - { - SpellHelper.sendIndexedParticleToAllAround(world, pos, 20, world.provider.getDimensionId(), 1, pos); - } - } - - SoulNetworkHandler.syphonFromNetwork(owner, getCostPerRefresh()); - } else - { - ritualStone.setCooldown(ritualStone.getCooldown() - 1); - - if (world.rand.nextInt(20) == 0) - { - int lightningPoint = world.rand.nextInt(8); - - BlockPos newPos = getPositionForLightning(pos, lightningPoint); - world.addWeatherEffect(new EntityLightningBolt(world, newPos.getX(), newPos.getY(), newPos.getZ())); - } - - if (ritualStone.getCooldown() <= 0) - { - - ItemStack spawnedItem = BindingRegistry.getOutputForIndex(ritualStone.getVar1() - 1); - - if (spawnedItem != null) - { - EntityItem newItem = new EntityItem(world, pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5, spawnedItem.copy()); - world.spawnEntityInWorld(newItem); - } - - ritualStone.setActive(false); - } - } - } - } - - public BlockPos getPositionForLightning(BlockPos pos, int lightning) - { - switch (lightning) - { - case 0: - return pos.add(4, 3, 0); - - case 1: - return pos.add(-4, 3, 0); - - case 2: - return pos.add(0, 3, 4); - - case 3: - return pos.add(0, 3, -4); - - case 4: - return pos.add(3, 3, 3); - - case 5: - return pos.add(-3, 3, 3); - - case 6: - return pos.add(-3, 3, -3); - - case 7: - return pos.add(3, 3, -3); - - default: - return pos.add(0, 3, 0); - } - } - - @Override - public int getCostPerRefresh() - { - return 0; - } - - @Override - public int getInitialCooldown() - { - return 200; - } - - @Override - public List getRitualComponentList() - { - ArrayList boundSoulRitual = new ArrayList(); - boundSoulRitual.add(new RitualComponent(3, 0, 0, 2)); - boundSoulRitual.add(new RitualComponent(-3, 0, 0, 2)); - boundSoulRitual.add(new RitualComponent(0, 0, 3, 2)); - boundSoulRitual.add(new RitualComponent(0, 0, -3, 2)); - boundSoulRitual.add(new RitualComponent(2, 0, 2, 4)); - boundSoulRitual.add(new RitualComponent(-2, 0, 2, 4)); - boundSoulRitual.add(new RitualComponent(2, 0, -2, 4)); - boundSoulRitual.add(new RitualComponent(-2, 0, -2, 4)); - boundSoulRitual.add(new RitualComponent(4, 2, 0, 1)); - boundSoulRitual.add(new RitualComponent(-4, 2, 0, 1)); - boundSoulRitual.add(new RitualComponent(0, 2, 4, 1)); - boundSoulRitual.add(new RitualComponent(0, 2, -4, 1)); - boundSoulRitual.add(new RitualComponent(3, 2, 3, 3)); - boundSoulRitual.add(new RitualComponent(3, 2, -3, 3)); - boundSoulRitual.add(new RitualComponent(-3, 2, 3, 3)); - boundSoulRitual.add(new RitualComponent(-3, 2, -3, 3)); - boundSoulRitual.add(new RitualComponent(4, 1, 0, 0)); - boundSoulRitual.add(new RitualComponent(-4, 1, 0, 0)); - boundSoulRitual.add(new RitualComponent(0, 1, 4, 0)); - boundSoulRitual.add(new RitualComponent(0, 1, -4, 0)); - boundSoulRitual.add(new RitualComponent(3, 1, 3, 0)); - boundSoulRitual.add(new RitualComponent(3, 1, -3, 0)); - boundSoulRitual.add(new RitualComponent(-3, 1, 3, 0)); - boundSoulRitual.add(new RitualComponent(-3, 1, -3, 0)); - return boundSoulRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectBiomeChanger.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectBiomeChanger.java deleted file mode 100644 index a113d896..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectBiomeChanger.java +++ /dev/null @@ -1,410 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import net.minecraft.world.biome.BiomeGenBase; -import net.minecraft.world.chunk.Chunk; -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import WayofTime.alchemicalWizardry.common.tileEntity.TEPlinth; - -public class RitualEffectBiomeChanger extends RitualEffect -{ - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int cooldown = ritualStone.getCooldown(); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (cooldown > 0) - { - ritualStone.setCooldown(cooldown - 1); - - if (world.rand.nextInt(15) == 0) - { - world.addWeatherEffect(new EntityLightningBolt(world, pos.getX() - 1 + world.rand.nextInt(3), pos.getY() + 1, pos.getZ() - 1 + world.rand.nextInt(3))); - } - - return; - } - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - - - int range = 10; - - if (currentEssence < this.getCostPerRefresh()) - { - EntityPlayer entityOwner = SpellHelper.getPlayerForUsername(owner); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); - } else - { - boolean[][] boolList = new boolean[range * 2 + 1][range * 2 + 1]; - - for (int i = 0; i < 2 * range + 1; i++) - { - for (int j = 0; j < 2 * range + 1; j++) - { - boolList[i][j] = false; - } - } - - boolList[range][range] = true; - boolean isReady = false; - - while (!isReady) - { - isReady = true; - - for (int i = 0; i < 2 * range + 1; i++) - { - for (int j = 0; j < 2 * range + 1; j++) - { - if (boolList[i][j]) - { - BlockPos position = pos.add(i - range, 1, j - range); - - for(EnumFacing face : EnumFacing.HORIZONTALS) - { - int iP = i + face.getFrontOffsetX(); - int jP = j + face.getFrontOffsetY(); - - if(iP >= 0 && iP <= 2 * range && jP >= 0 && jP <= 2 * range && !boolList[iP][jP]) - { - BlockPos newPos = position.add(face.getDirectionVec()); - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - if (!ModBlocks.largeBloodStoneBrick.equals(block) && !ModBlocks.bloodStoneBrick.equals(block)) - { - boolList[iP][jP] = true; - isReady = false; - } - } - } - } - } - } - } - - float temperature = 0.5f; - float humidity = 0.5f; - float acceptableRange = 0.1f; - - for (int i = -1; i <= 1; i++) - { - for (int j = -1; j <= 1; j++) - { - if (i == 0 && j == 0) - { - continue; - } - - boolean isItemConsumed = false; - BlockPos newPos = pos.add(i, 0, j); - TileEntity tileEntity = world.getTileEntity(newPos); - - if (!(tileEntity instanceof TEPlinth)) - { - continue; - } - - TEPlinth tilePlinth = (TEPlinth) tileEntity; - ItemStack itemStack = tilePlinth.getStackInSlot(0); - - if (itemStack != null) - { - Item itemTest = itemStack.getItem(); - - if (itemTest != null) - { - if (itemTest instanceof ItemBlock) - { - Block item = ((ItemBlock) itemTest).getBlock(); - if (item == (Blocks.sand)) - { - humidity -= 0.1f; - isItemConsumed = true; - } else if (item == (Blocks.lapis_block)) - { - humidity += 0.4f; - isItemConsumed = true; - } else if (item == (Blocks.sand)) - { - humidity -= 0.1f; - isItemConsumed = true; - } else if (item == (Blocks.sandstone)) - { - humidity -= 0.2f; - isItemConsumed = true; - } else if (item == (Blocks.netherrack)) - { - humidity -= 0.4f; - isItemConsumed = true; - } else if (item == (Blocks.coal_block)) - { - temperature += 0.2f; - isItemConsumed = true; - } else if (item == (Blocks.ice)) - { - temperature -= 0.4f; - isItemConsumed = true; - } else if (item == (Blocks.snow)) - { - temperature -= 0.2f; - isItemConsumed = true; - } - } else if (itemTest.equals(Items.dye) && itemStack.getItemDamage() == 4) - { - humidity += 0.1f; - isItemConsumed = true; - } else if (itemTest.equals(Items.lava_bucket)) - { - temperature += 0.4f; - isItemConsumed = true; - } else if (itemTest.equals(Items.water_bucket)) - { - humidity += 0.2f; - isItemConsumed = true; - } else if (itemTest.equals(Items.coal)) - { - temperature += 0.1f; - isItemConsumed = true; - } else if (itemTest.equals(Items.snowball)) - { - temperature -= 0.1f; - isItemConsumed = true; - } - } - } - - if (isItemConsumed) - { - tilePlinth.setInventorySlotContents(0, null); - world.markBlockForUpdate(newPos); - world.addWeatherEffect(new EntityLightningBolt(world, newPos.getX(), newPos.getY() + 1, newPos.getZ())); - } - } - } - - int biomeID = 1; - BiomeGenBase[] biomeList = BiomeGenBase.getBiomeGenArray(); - int iteration = 0; - - for (BiomeGenBase biome : biomeList) - { - if (biome == null) - { - continue; - } - - float temp = biome.temperature; - float rainfall = biome.rainfall; - temperature = Math.min(2.0f, Math.max(0.0f, temperature)); - humidity = Math.min(2.0f, Math.max(0.0f, humidity)); - - if (Math.abs(rainfall - humidity) < acceptableRange && Math.abs(temperature - temp) < acceptableRange) - { - biomeID = iteration; - break; - } - - iteration++; - } - - for (int i = 0; i < 2 * range + 1; i++) - { - for (int j = 0; j < 2 * range + 1; j++) - { - if (boolList[i][j]) - { - BlockPos newPos = pos.add(i - range, 0, j - range); - Chunk chunk = world.getChunkFromBlockCoords(newPos); - byte[] byteArray = chunk.getBiomeArray(); - int moduX = (newPos.getX()) % 16; - int moduZ = (newPos.getZ()) % 16; - - if (moduX < 0) - { - moduX = moduX + 16; - } - - if (moduZ < 0) - { - moduZ = moduZ + 16; - } - - byteArray[moduZ * 16 + moduX] = (byte) biomeID; - chunk.setBiomeArray(byteArray); - } - } - } - - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); - ritualStone.setActive(false); - } - } - - @Override - public int getCostPerRefresh() - { - return 0; - } - - @Override - public int getInitialCooldown() - { - return 200; - } - - @Override - public List getRitualComponentList() - { - ArrayList biomeChangerRitual = new ArrayList(); - biomeChangerRitual.add(new RitualComponent(1, 0, -2, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(1, 0, -3, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(2, 0, -1, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(3, 0, -1, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(1, 0, 2, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(1, 0, 3, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(2, 0, 1, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(3, 0, 1, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(-1, 0, -2, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(-1, 0, -3, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(-2, 0, -1, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(-3, 0, -1, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(-1, 0, 2, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(-1, 0, 3, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(-2, 0, 1, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(-3, 0, 1, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(3, 0, -3, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(3, 0, -4, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(4, 0, -3, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(4, 0, -5, RitualComponent.FIRE)); - biomeChangerRitual.add(new RitualComponent(5, 0, -4, RitualComponent.FIRE)); - biomeChangerRitual.add(new RitualComponent(3, 0, 3, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(3, 0, 4, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(4, 0, 3, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(4, 0, 5, RitualComponent.FIRE)); - biomeChangerRitual.add(new RitualComponent(5, 0, 4, RitualComponent.FIRE)); - biomeChangerRitual.add(new RitualComponent(-3, 0, 3, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(-3, 0, 4, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(-4, 0, 3, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(-4, 0, 5, RitualComponent.FIRE)); - biomeChangerRitual.add(new RitualComponent(-5, 0, 4, RitualComponent.FIRE)); - biomeChangerRitual.add(new RitualComponent(-3, 0, -3, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(-3, 0, -4, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(-4, 0, -3, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(-4, 0, -5, RitualComponent.FIRE)); - biomeChangerRitual.add(new RitualComponent(-5, 0, -4, RitualComponent.FIRE)); - biomeChangerRitual.add(new RitualComponent(0, 0, -5, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(-1, 0, -6, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(1, 0, -6, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(-1, 0, -8, RitualComponent.BLANK)); - biomeChangerRitual.add(new RitualComponent(0, 0, -8, RitualComponent.BLANK)); - biomeChangerRitual.add(new RitualComponent(1, 0, -8, RitualComponent.BLANK)); - biomeChangerRitual.add(new RitualComponent(-1, 0, -10, RitualComponent.DUSK)); - biomeChangerRitual.add(new RitualComponent(0, 0, -10, RitualComponent.DUSK)); - biomeChangerRitual.add(new RitualComponent(1, 0, -10, RitualComponent.DUSK)); - biomeChangerRitual.add(new RitualComponent(0, 0, 5, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(-1, 0, 6, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(1, 0, 6, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(-1, 0, 8, RitualComponent.BLANK)); - biomeChangerRitual.add(new RitualComponent(0, 0, 8, RitualComponent.BLANK)); - biomeChangerRitual.add(new RitualComponent(1, 0, 8, RitualComponent.BLANK)); - biomeChangerRitual.add(new RitualComponent(-1, 0, 10, RitualComponent.DUSK)); - biomeChangerRitual.add(new RitualComponent(0, 0, 10, RitualComponent.DUSK)); - biomeChangerRitual.add(new RitualComponent(1, 0, 10, RitualComponent.DUSK)); - biomeChangerRitual.add(new RitualComponent(-5, 0, 0, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(-6, 0, -1, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(-6, 0, 1, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(-8, 0, -1, RitualComponent.BLANK)); - biomeChangerRitual.add(new RitualComponent(-8, 0, 0, RitualComponent.BLANK)); - biomeChangerRitual.add(new RitualComponent(-8, 0, 1, RitualComponent.BLANK)); - biomeChangerRitual.add(new RitualComponent(-10, 0, -1, RitualComponent.DUSK)); - biomeChangerRitual.add(new RitualComponent(-10, 0, 0, RitualComponent.DUSK)); - biomeChangerRitual.add(new RitualComponent(-10, 0, 1, RitualComponent.DUSK)); - biomeChangerRitual.add(new RitualComponent(5, 0, 0, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(6, 0, -1, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(6, 0, 1, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(8, 0, -1, RitualComponent.BLANK)); - biomeChangerRitual.add(new RitualComponent(8, 0, 0, RitualComponent.BLANK)); - biomeChangerRitual.add(new RitualComponent(8, 0, 1, RitualComponent.BLANK)); - biomeChangerRitual.add(new RitualComponent(10, 0, -1, RitualComponent.DUSK)); - biomeChangerRitual.add(new RitualComponent(10, 0, 0, RitualComponent.DUSK)); - biomeChangerRitual.add(new RitualComponent(10, 0, 1, RitualComponent.DUSK)); - biomeChangerRitual.add(new RitualComponent(6, 0, -6, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(6, 0, -7, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(7, 0, -6, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(7, 0, -5, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(5, 0, -7, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(8, 0, -5, RitualComponent.DUSK)); - biomeChangerRitual.add(new RitualComponent(8, 0, -4, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(9, 0, -4, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(5, 0, -8, RitualComponent.DUSK)); - biomeChangerRitual.add(new RitualComponent(4, 0, -8, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(4, 0, -9, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(-6, 0, 6, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(-6, 0, 7, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(-7, 0, 6, RitualComponent.AIR)); - biomeChangerRitual.add(new RitualComponent(-7, 0, 5, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(-5, 0, 7, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(-8, 0, 5, RitualComponent.DUSK)); - biomeChangerRitual.add(new RitualComponent(-8, 0, 4, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(-9, 0, 4, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(-5, 0, 8, RitualComponent.DUSK)); - biomeChangerRitual.add(new RitualComponent(-4, 0, 8, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(-4, 0, 9, RitualComponent.EARTH)); - biomeChangerRitual.add(new RitualComponent(6, 0, 6, RitualComponent.FIRE)); - biomeChangerRitual.add(new RitualComponent(6, 0, 7, RitualComponent.FIRE)); - biomeChangerRitual.add(new RitualComponent(7, 0, 6, RitualComponent.FIRE)); - biomeChangerRitual.add(new RitualComponent(7, 0, 5, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(5, 0, 7, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(8, 0, 5, RitualComponent.DUSK)); - biomeChangerRitual.add(new RitualComponent(8, 0, 4, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(9, 0, 4, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(5, 0, 8, RitualComponent.DUSK)); - biomeChangerRitual.add(new RitualComponent(4, 0, 8, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(4, 0, 9, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(-6, 0, -6, RitualComponent.FIRE)); - biomeChangerRitual.add(new RitualComponent(-6, 0, -7, RitualComponent.FIRE)); - biomeChangerRitual.add(new RitualComponent(-7, 0, -6, RitualComponent.FIRE)); - biomeChangerRitual.add(new RitualComponent(-7, 0, -5, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(-5, 0, -7, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(-8, 0, -5, RitualComponent.DUSK)); - biomeChangerRitual.add(new RitualComponent(-8, 0, -4, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(-9, 0, -4, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(-5, 0, -8, RitualComponent.DUSK)); - biomeChangerRitual.add(new RitualComponent(-4, 0, -8, RitualComponent.WATER)); - biomeChangerRitual.add(new RitualComponent(-4, 0, -9, RitualComponent.WATER)); - return biomeChangerRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectContainment.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectContainment.java deleted file mode 100644 index bdd237f6..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectContainment.java +++ /dev/null @@ -1,129 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.monster.EntityCreeper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.ReflectionHelper; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RitualEffectContainment extends RitualEffect -{ - public static final String[] TIME_SINCE_IGNITED = new String[]{"timeSinceIgnited", "field_70833_d", "bq"}; - public static final int crepitousDrain = 1; - public static final int terraeDrain = 3; - public static final int magicalesDrain = 10; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (currentEssence < this.getCostPerRefresh()) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - int d0 = 5; - List entityList = SpellHelper.getEntitiesInRange(world, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, d0, d0); - boolean flag = false; - boolean hasCrepitous = this.canDrainReagent(ritualStone, ReagentRegistry.crepitousReagent, crepitousDrain, false); - boolean hasMagicales = this.canDrainReagent(ritualStone, ReagentRegistry.magicalesReagent, magicalesDrain, false); - - for (Entity entity : entityList) - { - if (!(entity instanceof EntityLivingBase)) - { - continue; - } - - EntityLivingBase livingEntity = (EntityLivingBase) entity; - - if (livingEntity instanceof EntityPlayer) - { - continue; - } - - - double xDif = livingEntity.posX - (pos.getX() + 0.5); - double yDif = livingEntity.posY - (pos.getY() + 3); - double zDif = livingEntity.posZ - (pos.getZ() + 0.5); - livingEntity.motionX = -0.05 * xDif; - livingEntity.motionY = -0.05 * yDif; - livingEntity.motionZ = -0.05 * zDif; - flag = true; - - livingEntity.fallDistance = 0; - - if (hasMagicales && this.canDrainReagent(ritualStone, ReagentRegistry.magicalesReagent, magicalesDrain, false)) - { - if (!livingEntity.isPotionActive(AlchemicalWizardry.customPotionPlanarBinding)) - { - livingEntity.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionPlanarBinding.id, 100, 0)); - this.canDrainReagent(ritualStone, ReagentRegistry.magicalesReagent, magicalesDrain, true); - } - } - - if (hasCrepitous && this.canDrainReagent(ritualStone, ReagentRegistry.crepitousReagent, crepitousDrain, false)) - { - if (entity instanceof EntityCreeper) - { - ReflectionHelper.setPrivateValue(EntityCreeper.class, (EntityCreeper) entity, 2, TIME_SINCE_IGNITED); - ((EntityCreeper) entity).setAttackTarget(null); - this.canDrainReagent(ritualStone, ReagentRegistry.crepitousReagent, crepitousDrain, true); - } - } - } - - if (world.getWorldTime() % 2 == 0 && flag) - { - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); - } - } - } - - @Override - public int getCostPerRefresh() - { - return 1; - } - - @Override - public List getRitualComponentList() - { - ArrayList containmentRitual = new ArrayList(); - containmentRitual.add(new RitualComponent(1, 0, 0, 3)); - containmentRitual.add(new RitualComponent(-1, 0, 0, 3)); - containmentRitual.add(new RitualComponent(0, 0, 1, 3)); - containmentRitual.add(new RitualComponent(0, 0, -1, 3)); - containmentRitual.add(new RitualComponent(2, 0, 2, 3)); - containmentRitual.add(new RitualComponent(2, 0, -2, 3)); - containmentRitual.add(new RitualComponent(-2, 0, 2, 3)); - containmentRitual.add(new RitualComponent(-2, 0, -2, 3)); - containmentRitual.add(new RitualComponent(1, 5, 0, 3)); - containmentRitual.add(new RitualComponent(-1, 5, 0, 3)); - containmentRitual.add(new RitualComponent(0, 5, 1, 3)); - containmentRitual.add(new RitualComponent(0, 5, -1, 3)); - containmentRitual.add(new RitualComponent(2, 5, 2, 3)); - containmentRitual.add(new RitualComponent(2, 5, -2, 3)); - containmentRitual.add(new RitualComponent(-2, 5, 2, 3)); - containmentRitual.add(new RitualComponent(-2, 5, -2, 3)); - return containmentRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectCrafting.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectCrafting.java deleted file mode 100644 index 5b5a623b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectCrafting.java +++ /dev/null @@ -1,445 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.CraftingManager; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; -import WayofTime.alchemicalWizardry.api.Int3; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RitualEffectCrafting extends RitualEffect -{ - public static final boolean limitToSingleStack = true; - public static final int potentiaDrain = 2; - public static final int virtusDrain = 2; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { -// long startTime = System.nanoTime(); - - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - boolean hasPotentia = this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, false); - - if(world.getWorldTime() % (hasPotentia ? 1 : 4) != 0) - { - return; - } - - if (currentEssence < this.getCostPerRefresh()) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - NBTTagCompound tag = ritualStone.getCustomRitualTag(); - - if(tag == null) - { - ritualStone.setCustomRitualTag(new NBTTagCompound()); - tag = ritualStone.getCustomRitualTag(); - } - - boolean lastFailed = tag.getBoolean("didLastCraftFail"); - - int slotDesignation = tag.getInteger("slotDesignation"); - if(lastFailed) - { - slotDesignation++; - tag.setInteger("slotDesignation", slotDesignation); - tag.setBoolean("didLastCraftFail", false); - } - int direction = ritualStone.getDirection(); - - boolean canContinue = false; - - ItemStack[] recipe = new ItemStack[9]; - InventoryCrafting inventory = new InventoryCrafting(new Container() - { - public boolean canInteractWith(EntityPlayer player) - { - return false; - } - }, 3, 3); - - for(int i=-1; i<=1; i++) - { - for(int j=-1; j<=1; j++) - { - int gridSpace = (i+1)*3 + (j+1); - - Int3 position = this.getSlotPositionForDirection(gridSpace, direction); - TileEntity inv = world.getTileEntity(pos.add(position.xCoord, position.yCoord, position.zCoord)); - if(inv instanceof IInventory) - { - if(((IInventory) inv).getSizeInventory() <= slotDesignation || !((IInventory) inv).isItemValidForSlot(slotDesignation, ((IInventory) inv).getStackInSlot(slotDesignation))) - { - - }else - { - ItemStack invStack = ((IInventory) inv).getStackInSlot(slotDesignation); - if(invStack != null) - { - inventory.setInventorySlotContents(gridSpace, invStack); - recipe[gridSpace] = invStack; - canContinue = true; - } - } - } - } - } - - if(!canContinue) - { - tag.setInteger("slotDesignation", 0); - return; - } - - ItemStack returnStack = CraftingManager.getInstance().findMatchingRecipe(inventory, world); - - if (returnStack == null) - { - tag.setBoolean("didLastCraftFail", true); - }else - { - boolean hasVirtus = this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, false); - boolean addOutputToInputs = hasVirtus; - - IInventory outputInv = null; - - List invList = new ArrayList(); - - TileEntity northEntity = world.getTileEntity(pos.add(0, -1, -2)); - TileEntity southEntity = world.getTileEntity(pos.add(0, -1, 2)); - TileEntity eastEntity = world.getTileEntity(pos.add(2, -1, 0)); - TileEntity westEntity = world.getTileEntity(pos.add(-2, -1, 0)); - - switch(direction) - { - case 1: - if(southEntity instanceof IInventory) - { - outputInv = (IInventory)southEntity; - }else - { - return; - } - - if(northEntity instanceof IInventory) - { - invList.add((IInventory)northEntity); - } - if(eastEntity instanceof IInventory) - { - invList.add((IInventory)eastEntity); - } - if(westEntity instanceof IInventory) - { - invList.add((IInventory)westEntity); - } - - break; - - case 2: - if(westEntity instanceof IInventory) - { - outputInv = (IInventory)westEntity; - }else - { - return; - } - - if(northEntity instanceof IInventory) - { - invList.add((IInventory)northEntity); - } - if(eastEntity instanceof IInventory) - { - invList.add((IInventory)eastEntity); - } - if(southEntity instanceof IInventory) - { - invList.add((IInventory)southEntity); - } - - break; - - case 3: - if(northEntity instanceof IInventory) - { - outputInv = (IInventory)northEntity; - }else - { - return; - } - - if(eastEntity instanceof IInventory) - { - invList.add((IInventory)eastEntity); - } - if(southEntity instanceof IInventory) - { - invList.add((IInventory)southEntity); - } - if(westEntity instanceof IInventory) - { - invList.add((IInventory)westEntity); - } - - break; - - case 4: - if(eastEntity instanceof IInventory) - { - outputInv = (IInventory)eastEntity; - }else - { - return; - } - - if(northEntity instanceof IInventory) - { - invList.add((IInventory)northEntity); - } - if(southEntity instanceof IInventory) - { - invList.add((IInventory)southEntity); - } - if(westEntity instanceof IInventory) - { - invList.add((IInventory)westEntity); - } - - break; - } - - if (outputInv != null) - { - if(!(!limitToSingleStack ? SpellHelper.canInsertStackFullyIntoInventory(returnStack, outputInv, EnumFacing.DOWN) : SpellHelper.canInsertStackFullyIntoInventory(returnStack, outputInv, EnumFacing.DOWN, true, returnStack.getMaxStackSize()))) - { - tag.setBoolean("didLastCraftFail", true); - return; - } - - if(addOutputToInputs) - { - invList.add(outputInv); - } - - Map> syphonMap = new HashMap>(); //Inventory, Slot, how much claimed - - for(int n = 0; n < recipe.length; n++) //Look for the correct items - { - ItemStack recipeStack = recipe[n]; - if(recipeStack == null) - { - continue; - } - - boolean isItemTaken = false; - - for(int i = 0; i < invList.size(); i++) - { - if(isItemTaken) - { - break; - } - IInventory inputInv = invList.get(i); - if(inputInv == null) - { - continue; - } - - for(int j = 0; j < inputInv.getSizeInventory(); j++) - { - if(!inputInv.isItemValidForSlot(j, recipeStack)) - { - continue; - } - - ItemStack invItem = inputInv.getStackInSlot(j); - if(invItem == null) - { - continue; - } - - if(this.areItemsEqualForCrafting(recipeStack, invItem)) - { - //TODO - inventory.setInventorySlotContents(n, invItem); -// ItemStack returnedStack = CraftingManager.getInstance().findMatchingRecipe(inventory, world); -// if(returnedStack == null || returnedStack.getItem() == null || returnedStack.getItem() != returnStack.getItem()) -// { -// continue; -// } - Map slotMap = syphonMap.get(i); - if(slotMap == null) - { - slotMap = new HashMap(); - syphonMap.put(i, slotMap); - } - - if(slotMap.containsKey(j)) - { - int syphoned = slotMap.get(j); - if(invItem.stackSize - syphoned > 0) - { - slotMap.put(j, syphoned + 1); - isItemTaken = true; - break; - } - }else - { - slotMap.put(j, 1); - isItemTaken = true; - break; - } - } - } - } - - if(!isItemTaken) - { - tag.setBoolean("didLastCraftFail", true); - return; - } - } - - /* The recipe is valid and the items have been found */ - - SpellHelper.insertStackIntoInventory(CraftingManager.getInstance().findMatchingRecipe(inventory, world), outputInv, EnumFacing.DOWN); - - for(Entry> entry1 : syphonMap.entrySet()) - { - IInventory inputInv = invList.get(entry1.getKey()); - for(Entry entry2 : entry1.getValue().entrySet()) - { - ItemStack drainedStack = inputInv.getStackInSlot(entry2.getKey()); - Item item = drainedStack.getItem(); - if(item.hasContainerItem(drainedStack)) - { - inputInv.setInventorySlotContents(entry2.getKey(), item.getContainerItem(drainedStack)); - }else - { - drainedStack.stackSize -= entry2.getValue(); - if(drainedStack.stackSize <= 0) - { - inputInv.setInventorySlotContents(entry2.getKey(), null); - } - } - } - } - - if(addOutputToInputs && syphonMap.containsKey(invList.size())) - { - this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, true); - } - - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); - - if(hasPotentia) - { - this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, true); - } - - world.markBlockForUpdate(pos.add(0, 1, 2)); - world.markBlockForUpdate(pos.add(0, 1, -2)); - world.markBlockForUpdate(pos.add(2, 1, 0)); - world.markBlockForUpdate(pos.add(-2, 1, 0)); - -// long endTime = System.nanoTime(); -// -// long duration = (endTime - startTime); //divide by 1000000 to get milliseconds. -// System.out.println("(Total) method time in ms: " + (float)(duration)/1000000.0); - } - } - } - } - - @Override - public int getCostPerRefresh() - { - return 10; - } - - @Override - public List getRitualComponentList() - { - ArrayList autoCraftingRitual = new ArrayList(); - - this.addCornerRunes(autoCraftingRitual, 1, 1, RitualComponent.EARTH); - this.addParallelRunes(autoCraftingRitual, 1, 1, RitualComponent.EARTH); - autoCraftingRitual.add(new RitualComponent(0, 1, 0, RitualComponent.AIR)); - this.addOffsetRunes(autoCraftingRitual, 1, 2, -1, RitualComponent.FIRE); - this.addCornerRunes(autoCraftingRitual, 1, -1, RitualComponent.FIRE); - autoCraftingRitual.add(new RitualComponent(-1, -1, 0, RitualComponent.EARTH)); - autoCraftingRitual.add(new RitualComponent(1, -1, 0, RitualComponent.EARTH)); - autoCraftingRitual.add(new RitualComponent(0, -1, -1, RitualComponent.EARTH)); - autoCraftingRitual.add(new RitualComponent(0, -1, 0, RitualComponent.FIRE)); - autoCraftingRitual.add(new RitualComponent(0, -1, 1, RitualComponent.WATER)); - - return autoCraftingRitual; - } - - public boolean areItemsEqualForCrafting(ItemStack stack1, ItemStack stack2) - { - if (stack1 == null || stack2 == null) - { - return false; - } -// -// if (stack1.isItemStackDamageable() ^ stack2.isItemStackDamageable()) -// { -// return false; -// } - - return stack1.getItem() == stack2.getItem() && !stack1.getItem().getHasSubtypes() || stack1.getItemDamage() == stack2.getItemDamage(); - } - - public boolean areItemStacksEqualWithWildcard(ItemStack recipeStack, ItemStack comparedStack) - { - return recipeStack.isItemEqual(comparedStack) || (recipeStack.getItemDamage() == OreDictionary.WILDCARD_VALUE && recipeStack.getItem() == comparedStack.getItem()); - } - - public Int3 getSlotPositionForDirection(int slot, int direction) - { - int x = slot % 3 - 1; - int z = slot / 3 - 1; - switch(direction) - { - case 1: //NORTH-facing - return new Int3(x, 2, z); - case 2: //EAST-facing - return new Int3(z, 2, -x); - case 3: //SOUTH-facing - return new Int3(-x, 2, -z); - case 4: //WEST-facing - return new Int3(-z, 2, x); - } - return new Int3(0,0,0); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectCrushing.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectCrushing.java deleted file mode 100644 index 7d461d57..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectCrushing.java +++ /dev/null @@ -1,267 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.init.Blocks; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RitualEffectCrushing extends RitualEffect -{ - public static final int crystallosDrain = 10; - public static final int orbisTerraeDrain = 10; - public static final int potentiaDrain = 10; - public static final int virtusDrain = 10; - public static final int incendiumDrain = 10; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (world.getWorldTime() % 10 != 5) - { - return; - } - - TileEntity tile = world.getTileEntity(pos.offsetUp()); - IInventory tileEntity; - - if (tile instanceof IInventory) - { - tileEntity = (IInventory) tile; - } else - { - return; - } - - if (tileEntity.getSizeInventory() <= 0) - { - return; - } - - boolean hasRoom = false; - for (int i = 0; i < tileEntity.getSizeInventory(); i++) - { - if (tileEntity.getStackInSlot(i) == null) - { - hasRoom = true; - break; - } - } - - if (!hasRoom) - { - return; //Prevents overflow - } - - boolean hasCrystallos = this.canDrainReagent(ritualStone, ReagentRegistry.crystallosReagent, crystallosDrain, false); - boolean hasOrbisTerrae = this.canDrainReagent(ritualStone, ReagentRegistry.orbisTerraeReagent, orbisTerraeDrain, false); - boolean hasPotentia = this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, false); - boolean hasVirtus = this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, false); - boolean hasIncendium = this.canDrainReagent(ritualStone, ReagentRegistry.incendiumReagent, incendiumDrain, false); - - int fortuneLevel = 0; - if (hasOrbisTerrae) - { - fortuneLevel++; - } - if (hasPotentia) - { - fortuneLevel++; - } - if (hasVirtus) - { - fortuneLevel++; - } - - if (currentEssence < this.getCostPerRefresh()) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - for (int j = -3; j < 0; j++) - { - for (int i = -1; i <= 1; i++) - { - for (int k = -1; k <= 1; k++) - { - BlockPos newPos = pos.add(i, j, k); - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - - if(block.getBlockHardness(world, newPos) == -1) - { - continue; - } - - if (!world.isAirBlock(newPos)) - { - if ((block.equals(ModBlocks.ritualStone) || block.equals(ModBlocks.blockMasterStone)) || SpellHelper.isBlockFluid(block)) - { - continue; - } - - if (hasCrystallos && block.canSilkHarvest(world, newPos, state, null)) - { - ItemStack item = new ItemStack(block, 1, block.getMetaFromState(state)); - ItemStack copyStack = ItemStack.copyItemStack(item); - - SpellHelper.insertStackIntoInventory(copyStack, tileEntity, EnumFacing.DOWN); - - if (copyStack.stackSize > 0) - { - world.spawnEntityInWorld(new EntityItem(world, pos.getX() + 0.5, pos.getY() + 2, pos.getZ() + 0.5, copyStack)); - } - - if (hasCrystallos) - { - this.canDrainReagent(ritualStone, ReagentRegistry.crystallosReagent, crystallosDrain, true); - } - } else - { - List itemDropList = block.getDrops(world, newPos, state, fortuneLevel); - - if (itemDropList != null) - { - int invSize = tileEntity.getSizeInventory(); - - for (ItemStack item : itemDropList) - { - hasIncendium = hasIncendium && this.canDrainReagent(ritualStone, ReagentRegistry.incendiumReagent, incendiumDrain, false); - ItemStack copyStack = ItemStack.copyItemStack(item); - - if (this.usesIncendium(copyStack)) - { - copyStack = this.transformToNewItem(copyStack, hasIncendium, false); - this.canDrainReagent(ritualStone, ReagentRegistry.incendiumReagent, incendiumDrain, true); - } - - SpellHelper.insertStackIntoInventory(copyStack, tileEntity, EnumFacing.DOWN); - if (copyStack.stackSize > 0) - { - world.spawnEntityInWorld(new EntityItem(world, pos.getX() + 0.5, pos.getY() + 2, pos.getZ() + 0.5, copyStack)); - } - } - - if (hasOrbisTerrae) - { - this.canDrainReagent(ritualStone, ReagentRegistry.orbisTerraeReagent, orbisTerraeDrain, true); - } - if (hasPotentia) - { - this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, true); - } - if (hasVirtus) - { - this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, true); - } - } - } - world.setBlockToAir(newPos); - world.playSoundEffect(newPos.getX(), newPos.getY(), newPos.getZ(), "mob.endermen.portal", 1.0F, 1.0F); - - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); - - return; - } - } - } - } - } - } - - private boolean usesIncendium(ItemStack stack) - { - if (stack != null) - { - Item item = stack.getItem(); - if (item instanceof ItemBlock) - { - Block block = ((ItemBlock) item).getBlock(); - - if (block == Blocks.cobblestone || block == Blocks.stone) - { - return true; - } - } - } - return false; - } - - private ItemStack transformToNewItem(ItemStack stack, boolean hasIncendium, boolean hasCrepitous) - { - if (stack != null) - { - ItemStack copyStack = ItemStack.copyItemStack(stack); - int stackSize = copyStack.stackSize; - - Item item = stack.getItem(); - if (item instanceof ItemBlock) - { - Block block = ((ItemBlock) item).getBlock(); - - if (hasIncendium) - { - if (block == Blocks.cobblestone || block == Blocks.stone) - { - copyStack = new ItemStack(Blocks.netherrack, stackSize, 0); - } - } - } - - return copyStack; - } - return stack; - } - - @Override - public int getCostPerRefresh() - { - return 7; - } - - @Override - public List getRitualComponentList() - { - ArrayList crushingRitual = new ArrayList(); - crushingRitual.add(new RitualComponent(0, 0, 1, RitualComponent.EARTH)); - crushingRitual.add(new RitualComponent(1, 0, 0, RitualComponent.EARTH)); - crushingRitual.add(new RitualComponent(0, 0, -1, RitualComponent.EARTH)); - crushingRitual.add(new RitualComponent(-1, 0, 0, RitualComponent.EARTH)); - crushingRitual.add(new RitualComponent(2, 0, 0, RitualComponent.FIRE)); - crushingRitual.add(new RitualComponent(0, 0, 2, RitualComponent.FIRE)); - crushingRitual.add(new RitualComponent(-2, 0, 0, RitualComponent.FIRE)); - crushingRitual.add(new RitualComponent(0, 0, -2, RitualComponent.FIRE)); - crushingRitual.add(new RitualComponent(2, 0, 2, RitualComponent.DUSK)); - crushingRitual.add(new RitualComponent(2, 0, -2, RitualComponent.DUSK)); - crushingRitual.add(new RitualComponent(-2, 0, 2, RitualComponent.DUSK)); - crushingRitual.add(new RitualComponent(-2, 0, -2, RitualComponent.DUSK)); - crushingRitual.add(new RitualComponent(2, 1, 0, RitualComponent.AIR)); - crushingRitual.add(new RitualComponent(-2, 1, 0, RitualComponent.AIR)); - crushingRitual.add(new RitualComponent(0, 1, 2, RitualComponent.AIR)); - crushingRitual.add(new RitualComponent(0, 1, -2, RitualComponent.AIR)); - return crushingRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectDemonPortal.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectDemonPortal.java deleted file mode 100644 index 2674b0ce..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectDemonPortal.java +++ /dev/null @@ -1,182 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -import WayofTime.alchemicalWizardry.common.tileEntity.TEBelljar; -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.api.Int3; -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.TEDemonPortal; -import WayofTime.alchemicalWizardry.api.tile.IBloodAltar; - -public class RitualEffectDemonPortal extends RitualEffect -{ - public static final int neededAmount = 16000; - public static final Random rand = new Random(); - public static final int drainRate = 50; - public static final Reagent[] reagents = new Reagent[]{ReagentRegistry.aetherReagent, ReagentRegistry.aquasalusReagent, ReagentRegistry.terraeReagent, ReagentRegistry.incendiumReagent, ReagentRegistry.sanctusReagent, ReagentRegistry.tenebraeReagent, ReagentRegistry.magicalesReagent, ReagentRegistry.potentiaReagent}; - public static final Int3[] jarLocations = new Int3[]{new Int3(4, 5, 4), new Int3(-4, 5, 4), new Int3(4, 5, -4), new Int3(-4, 5, -4), new Int3(0, 5, 6), new Int3(0, 5, -6), new Int3(6, 5, 0), new Int3(-6, 5, 0)}; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (currentEssence < this.getCostPerRefresh()) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - NBTTagCompound tag = ritualStone.getCustomRitualTag(); - - boolean reagentsFulfilled = true; - - for(Reagent reagent : reagents) - { - int reagentAmount = tag.getInteger(ReagentRegistry.getKeyForReagent(reagent)); - if(reagentAmount < neededAmount) - { - reagentsFulfilled = false; -// System.out.println("Reagents not fulfilled. Missing: " + ReagentRegistry.getKeyForReagent(reagent)); - int drainAmount = Math.min(drainRate, neededAmount - reagentAmount); - - if(drainAmount <= 0) - { - continue; - } - - if(this.canDrainReagent(ritualStone, reagent, drainAmount, true)) - { - if(rand.nextInt(10) == 0) - { - this.createRandomLightning(world, pos.getX(), pos.getY(), pos.getZ()); - } - reagentAmount += drainAmount; - - tag.setInteger(ReagentRegistry.getKeyForReagent(reagent), reagentAmount); - break; - } - } - } - - ritualStone.setCustomRitualTag(tag); - - if(reagentsFulfilled && checkCreatePortal(ritualStone)) - { - world.setBlockState(pos.offsetUp(), ModBlocks.blockDemonPortal.getDefaultState()); - - TEDemonPortal portal = (TEDemonPortal) world.getTileEntity(pos.offsetUp()); - portal.start(); - - ritualStone.setActive(false); - } - - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); - } - } - - public boolean checkCreatePortal(IMasterRitualStone ritualStone) - { - BlockPos pos = ritualStone.getPosition(); - TileEntity entity = ritualStone.getWorldObj().getTileEntity(pos.offsetUp()); - if(entity instanceof IBloodAltar) - { - IBloodAltar altar = (IBloodAltar)entity; - if(altar.hasDemonBlood() && ritualStone.getWorldObj().isAirBlock(pos.offsetUp(2))) - { - return true; - } - } - return false; - } - - @Override - public int getCostPerRefresh() - { - return 0; - } - - public void createRandomLightning(World world, int x, int y, int z) - { - world.addWeatherEffect(new EntityLightningBolt(world, x + rand.nextInt(10) - rand.nextInt(10), y + 1, z + rand.nextInt(10) - rand.nextInt(10))); - } - - @Override - public boolean startRitual(IMasterRitualStone ritualStone, EntityPlayer player) - { - if(!checkJars(ritualStone)) - { - player.addChatMessage(new ChatComponentTranslation("message.ritualdemonportal.missingjar")); - return false; - } - return true; - } - - public boolean checkJars(IMasterRitualStone ritualStone) - { - BlockPos position = ritualStone.getPosition(); - - for(Int3 pos : jarLocations) - { - if(!(ritualStone.getWorldObj().getTileEntity(position.add(pos.xCoord, pos.yCoord, pos.zCoord)) instanceof TEBelljar)) - { - return false; - } - } - - return true; - } - - @Override - public List getRitualComponentList() - { - ArrayList demonRitual = new ArrayList(); - this.addParallelRunes(demonRitual, 3, 0, RitualComponent.FIRE); - this.addParallelRunes(demonRitual, 5, 0, RitualComponent.FIRE); - this.addCornerRunes(demonRitual, 2, 0, RitualComponent.AIR); - this.addCornerRunes(demonRitual, 3, 0, RitualComponent.DUSK); - this.addOffsetRunes(demonRitual, 3, 4, 0, RitualComponent.AIR); - - this.addCornerRunes(demonRitual, 4, 1, RitualComponent.BLANK); - this.addCornerRunes(demonRitual, 4, 2, RitualComponent.EARTH); - this.addCornerRunes(demonRitual, 4, 3, RitualComponent.EARTH); - this.addCornerRunes(demonRitual, 4, 4, RitualComponent.DUSK); - - this.addParallelRunes(demonRitual, 6, 1, RitualComponent.BLANK); - this.addParallelRunes(demonRitual, 6, 2, RitualComponent.WATER); - this.addParallelRunes(demonRitual, 6, 3, RitualComponent.WATER); - this.addParallelRunes(demonRitual, 6, 4, RitualComponent.DUSK); - - this.addOffsetRunes(demonRitual, 2, 6, 1, RitualComponent.FIRE); - this.addOffsetRunes(demonRitual, 2, 7, 1, RitualComponent.BLANK); - this.addOffsetRunes(demonRitual, 2, 8, 1, RitualComponent.FIRE); - this.addOffsetRunes(demonRitual, 2, 9, 1, RitualComponent.BLANK); - this.addOffsetRunes(demonRitual, 1, 9, 1, RitualComponent.AIR); - this.addParallelRunes(demonRitual, 9, 2, RitualComponent.DUSK); - - this.addCornerRunes(demonRitual, 6, 3, RitualComponent.BLANK); - this.addOffsetRunes(demonRitual, 6, 7, 3, RitualComponent.BLANK); - this.addOffsetRunes(demonRitual, 5, 7, 3, RitualComponent.AIR); - this.addOffsetRunes(demonRitual, 4, 7, 3, RitualComponent.AIR); - - return demonRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectEllipsoid.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectEllipsoid.java deleted file mode 100644 index bdb47c52..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectEllipsoid.java +++ /dev/null @@ -1,259 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.Int3; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RitualEffectEllipsoid extends RitualEffect -{ - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - TileEntity tile = world.getTileEntity(pos.offsetUp()); - - if (!(tile instanceof IInventory) || ((IInventory) tile).getSizeInventory() < 3) - { - return; - } - - ItemStack item1 = ((IInventory) tile).getStackInSlot(0); - ItemStack item2 = ((IInventory) tile).getStackInSlot(1); - ItemStack item3 = ((IInventory) tile).getStackInSlot(2); - - int xSize = item1 == null ? 0 : item1.stackSize; - int ySize = item2 == null ? 0 : item2.stackSize; - int zSize = item3 == null ? 0 : item3.stackSize; - - int cost = 5; - - if (currentEssence < cost) - { - EntityPlayer entityOwner = SpellHelper.getPlayerForUsername(owner); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); - } else - { - tile = world.getTileEntity(pos.offsetDown()); - if(!(tile instanceof IInventory)) - { - return; - } - - ItemBlock placedBlock = null; - ItemStack stack = null; - int slot = 0; - IInventory inv = (IInventory)tile; - - while(slot < inv.getSizeInventory()) - { - stack = inv.getStackInSlot(slot); - if(stack == null) - { - slot++; - continue; - } - - if(stack.getItem() instanceof ItemBlock) - { - placedBlock = (ItemBlock)stack.getItem(); - break; - } - - slot++; - } - - if(placedBlock == null || stack == null || slot >= inv.getSizeInventory()) - { - return; - } - - int count = 10; - - Int3 lastPos = this.getLastPosition(ritualStone.getCustomRitualTag()); - - int i = -xSize; - int j = -ySize; - int k = -zSize; - - if(lastPos != null) - { - i = Math.min(xSize, Math.max(-xSize, lastPos.xCoord)); - j = Math.min(ySize, Math.max(-ySize, lastPos.yCoord)); - k = Math.min(zSize, Math.max(-zSize, lastPos.zCoord)); - } - - boolean incrementNext = false; - - while(j <= ySize) - { - if(pos.getY() + j < 0) - { - j++; - continue; - } - while(i <= xSize) - { - while(k <= zSize) - { - if (Math.pow(i * (ySize - 0.50f) * (zSize - 0.50f), 2) + Math.pow(j * (xSize - 0.50f) * (zSize - 0.50f), 2) + Math.pow(k * (xSize - 0.50f) * (ySize - 0.50f), 2) <= Math.pow((xSize - 1 + 0.50f) * (ySize - 1 + 0.50f) * (zSize - 1 + 0.50f), 2)) - { - k++; - continue; - } - - if (Math.pow(i * (ySize + 0.50f) * (zSize + 0.50f), 2) + Math.pow(j * (xSize + 0.50f) * (zSize + 0.50f), 2) + Math.pow(k * (xSize + 0.50f) * (ySize + 0.50f), 2) >= Math.pow((xSize + 0.50f) * (ySize + 0.50f) * (zSize + 0.50f), 2)) - { - k++; - continue; - } - - if(incrementNext || count <= 0) - { - this.setLastPosition(ritualStone.getCustomRitualTag(), new Int3(i, j, k)); - return; - } - - count--; - - BlockPos newPos = pos.add(i, j, k); - - if (!world.isAirBlock(newPos)) - { - k++; - continue; - } else - { - //This is pulled from the ItemBlock's placing calls - int newState = placedBlock.getMetadata(stack.getMetadata()); - IBlockState iblockstate1 = placedBlock.block.onBlockPlaced(world, newPos, EnumFacing.UP, 0, 0, 0, newState, null); - - if (placedBlock.placeBlockAt(stack, null, world, pos, EnumFacing.UP, 0, 0, 0, iblockstate1)) - { - world.playSoundEffect((double)((float)pos.getX() + 0.5F), (double)((float)pos.getY() + 0.5F), (double)((float)pos.getZ() + 0.5F), placedBlock.block.stepSound.getPlaceSound(), (placedBlock.block.stepSound.getVolume() + 1.0F) / 2.0F, placedBlock.block.stepSound.getFrequency() * 0.8F); - --stack.stackSize; - } - - this.setLastPosition(ritualStone.getCustomRitualTag(), new Int3(i, j, k)); - - incrementNext = true; - SoulNetworkHandler.syphonFromNetwork(owner, cost); - - k++; - } - } - k = -zSize; - i++; - } - i = -xSize; - j++; - this.setLastPosition(ritualStone.getCustomRitualTag(), new Int3(i, j, k)); - return; - } - - this.setLastPosition(ritualStone.getCustomRitualTag(), new Int3(-xSize, -ySize, -zSize)); - } - } - - @Override - public int getCostPerRefresh() - { - return 0; - } - - @Override - public List getRitualComponentList() - { - ArrayList ellipsoidRitual = new ArrayList(); - - ellipsoidRitual.add(new RitualComponent(-1, 0, -1, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(-1, 0, 1, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(1, 0, -1, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(1, 0, 1, RitualComponent.DUSK)); - - ellipsoidRitual.add(new RitualComponent(4, 0, 0, RitualComponent.FIRE)); - ellipsoidRitual.add(new RitualComponent(5, 0, 0, RitualComponent.FIRE)); - ellipsoidRitual.add(new RitualComponent(5, 0, -1, RitualComponent.FIRE)); - ellipsoidRitual.add(new RitualComponent(5, 0, -2, RitualComponent.FIRE)); - ellipsoidRitual.add(new RitualComponent(-4, 0, 0, RitualComponent.FIRE)); - ellipsoidRitual.add(new RitualComponent(-5, 0, 0, RitualComponent.FIRE)); - ellipsoidRitual.add(new RitualComponent(-5, 0, 1, RitualComponent.FIRE)); - ellipsoidRitual.add(new RitualComponent(-5, 0, 2, RitualComponent.FIRE)); - - ellipsoidRitual.add(new RitualComponent(0, 0, 4, RitualComponent.AIR)); - ellipsoidRitual.add(new RitualComponent(0, 0, 5, RitualComponent.AIR)); - ellipsoidRitual.add(new RitualComponent(1, 0, 5, RitualComponent.AIR)); - ellipsoidRitual.add(new RitualComponent(2, 0, 5, RitualComponent.AIR)); - ellipsoidRitual.add(new RitualComponent(0, 0, -4, RitualComponent.AIR)); - ellipsoidRitual.add(new RitualComponent(0, 0, -5, RitualComponent.AIR)); - ellipsoidRitual.add(new RitualComponent(-1, 0, -5, RitualComponent.AIR)); - ellipsoidRitual.add(new RitualComponent(-2, 0, -5, RitualComponent.AIR)); - - ellipsoidRitual.add(new RitualComponent(3, 0, 1, RitualComponent.EARTH)); - ellipsoidRitual.add(new RitualComponent(3, 0, 2, RitualComponent.EARTH)); - ellipsoidRitual.add(new RitualComponent(3, 0, 3, RitualComponent.EARTH)); - ellipsoidRitual.add(new RitualComponent(2, 0, 3, RitualComponent.EARTH)); - ellipsoidRitual.add(new RitualComponent(-3, 0, -1, RitualComponent.EARTH)); - ellipsoidRitual.add(new RitualComponent(-3, 0, -2, RitualComponent.EARTH)); - ellipsoidRitual.add(new RitualComponent(-3, 0, -3, RitualComponent.EARTH)); - ellipsoidRitual.add(new RitualComponent(-2, 0, -3, RitualComponent.EARTH)); - - ellipsoidRitual.add(new RitualComponent(1, 0, -3, RitualComponent.WATER)); - ellipsoidRitual.add(new RitualComponent(2, 0, -3, RitualComponent.WATER)); - ellipsoidRitual.add(new RitualComponent(3, 0, -3, RitualComponent.WATER)); - ellipsoidRitual.add(new RitualComponent(3, 0, -2, RitualComponent.WATER)); - ellipsoidRitual.add(new RitualComponent(-1, 0, 3, RitualComponent.WATER)); - ellipsoidRitual.add(new RitualComponent(-2, 0, 3, RitualComponent.WATER)); - ellipsoidRitual.add(new RitualComponent(-3, 0, 3, RitualComponent.WATER)); - ellipsoidRitual.add(new RitualComponent(-3, 0, 2, RitualComponent.WATER)); - - return ellipsoidRitual; - } - - public Int3 getLastPosition(NBTTagCompound tag) - { - if(tag != null && tag.getBoolean("hasWorked")) - { - return Int3.readFromNBT(tag); - } - - return null; - } - - public void setLastPosition(NBTTagCompound tag, Int3 pos) - { - if(tag != null) - { - pos.writeToNBT(tag); - tag.setBoolean("hasWorked", true); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectEvaporation.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectEvaporation.java deleted file mode 100644 index 53c81bba..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectEvaporation.java +++ /dev/null @@ -1,211 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RitualEffectEvaporation extends RitualEffect -{ - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (currentEssence < 0) - { - EntityPlayer entityOwner = SpellHelper.getPlayerForUsername(owner); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); - } else - { - IBlockState state1 = world.getBlockState(pos.offsetDown()); - Block block1 = state1.getBlock(); - int range = this.getRadiusForModifierBlock(block1); - - boolean[][][] boolList = new boolean[range * 2 + 1][range * 2 + 1][range * 2 + 1]; - - for (int i = 0; i < 2 * range + 1; i++) - { - for (int j = 0; j < 2 * range + 1; j++) - { - for (int k = 0; k < 2 * range + 1; k++) - { - boolList[i][j][k] = false; - } - } - } - - boolList[range][range][range] = true; - boolean isReady = false; - - while (!isReady) - { - isReady = true; - - for (int i = 0; i < 2 * range + 1; i++) - { - for (int j = 0; j < 2 * range + 1; j++) - { - for (int k = 0; k < 2 * range + 1; k++) - { - if (boolList[i][j][k]) - { - BlockPos position = pos.add(i - range, j - range, k - range); - - for(EnumFacing face : EnumFacing.VALUES) - { - int iP = i + face.getFrontOffsetX(); - int jP = j + face.getFrontOffsetY(); - int kP = k + face.getFrontOffsetZ(); - - if(iP >= 0 && iP <= 2 * range && jP >= 0 && jP <= 2 * range && kP >= 0 && kP <= 2 * range && !boolList[iP][jP][kP]) - { - BlockPos newPos = position.add(face.getDirectionVec()); - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - if (world.isAirBlock(newPos) || block == ModBlocks.blockSpectralContainer) - { - boolList[iP][jP][kP] = true; - isReady = false; - } - } - } - } - } - } - } - } - - for (int i = 0; i < 2 * range + 1; i++) - { - for (int j = 0; j < 2 * range + 1; j++) - { - for (int k = 0; k < 2 * range + 1; k++) - { - if (!boolList[i][j][k]) - { - continue; - } - - BlockPos newPos = pos.add(i - range, j - range, k - range); - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - - if (block == ModBlocks.blockSpectralContainer) - { - world.setBlockToAir(newPos); - } - } - } - } - - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); - - ritualStone.setActive(false); - } - } - - @Override - public int getCostPerRefresh() - { - return 0; - } - - @Override - public List getRitualComponentList() - { - ArrayList ellipsoidRitual = new ArrayList(); - - ellipsoidRitual.add(new RitualComponent(-1, 0, -1, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(-1, 0, 1, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(1, 0, -1, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(1, 0, 1, RitualComponent.DUSK)); - - ellipsoidRitual.add(new RitualComponent(4, 0, 0, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(5, 0, 0, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(5, 0, -1, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(5, 0, -2, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(-4, 0, 0, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(-5, 0, 0, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(-5, 0, 1, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(-5, 0, 2, RitualComponent.DUSK)); - - ellipsoidRitual.add(new RitualComponent(0, 0, 4, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(0, 0, 5, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(1, 0, 5, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(2, 0, 5, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(0, 0, -4, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(0, 0, -5, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(-1, 0, -5, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(-2, 0, -5, RitualComponent.DUSK)); - - ellipsoidRitual.add(new RitualComponent(3, 0, 1, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(3, 0, 2, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(3, 0, 3, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(2, 0, 3, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(-3, 0, -1, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(-3, 0, -2, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(-3, 0, -3, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(-2, 0, -3, RitualComponent.DUSK)); - - ellipsoidRitual.add(new RitualComponent(1, 0, -3, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(2, 0, -3, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(3, 0, -3, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(3, 0, -2, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(-1, 0, 3, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(-2, 0, 3, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(-3, 0, 3, RitualComponent.DUSK)); - ellipsoidRitual.add(new RitualComponent(-3, 0, 2, RitualComponent.DUSK)); - - return ellipsoidRitual; - } - - public int getRadiusForModifierBlock(Block block) - { - if (block == null) - { - return 10; - } - - if (block == Blocks.diamond_block) - { - return 30; - } - - if (block == Blocks.gold_block) - { - return 20; - } - - if (block == Blocks.iron_block) - { - return 15; - } - - return 10; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectExpulsion.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectExpulsion.java deleted file mode 100644 index 0ee1c57e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectExpulsion.java +++ /dev/null @@ -1,339 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.living.EnderTeleportEvent; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import WayofTime.alchemicalWizardry.common.spell.simple.SpellTeleport; - -public class RitualEffectExpulsion extends RitualEffect -{ - public static final int virtusDrain = 10; - public static final int potentiaDrain = 10; - public static final int tennebraeDrain = 5; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (currentEssence < this.getCostPerRefresh()) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - boolean hasVirtus = this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, false); - boolean hasPotentia = this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, false); - - int teleportDistance = hasVirtus ? 300 : 100; - int range = hasPotentia ? 50 : 25; - List playerList = SpellHelper.getPlayersInRange(world, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, range, range); - boolean flag = false; - - TileEntity tile = world.getTileEntity(pos.offsetUp()); - IInventory inventoryTile = null; - if (tile instanceof IInventory) - { - inventoryTile = (IInventory) tile; - } - - for (EntityPlayer entityplayer : playerList) - { - if(entityplayer.capabilities.isCreativeMode) - { - continue; - } - String playerString = SpellHelper.getUsername(entityplayer); - if (!playerString.equals(owner)) - { - if (inventoryTile != null) - { - boolean test = false; - for (int i = 0; i < inventoryTile.getSizeInventory(); i++) - { - ItemStack stack = inventoryTile.getStackInSlot(i); - if (stack != null && stack.getItem() instanceof IBindable && BindableItems.getOwnerName(stack).equals(playerString)) - { - test = true; - } - } - - if(test) - { - continue; - } - } - flag = teleportRandomly(entityplayer, teleportDistance) || flag; - } - } - - if (flag) - { - if (hasVirtus) - { - this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, true); - } - - if (hasPotentia) - { - this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, true); - } - - SoulNetworkHandler.syphonFromNetwork(owner, getCostPerRefresh()); - } - } - - boolean hasTennebrae = this.canDrainReagent(ritualStone, ReagentRegistry.tenebraeReagent, tennebraeDrain, false); - if (hasTennebrae && SoulNetworkHandler.canSyphonFromOnlyNetwork(owner, 1000)) - { - boolean hasVirtus = this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, false); - boolean hasPotentia = this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, false); - - int teleportDistance = hasVirtus ? 300 : 100; - int range = hasPotentia ? 50 : 25; - List livingList = SpellHelper.getLivingEntitiesInRange(world, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, range, range); - boolean flag = false; - - for (EntityLivingBase livingEntity : livingList) - { - if (livingEntity instanceof EntityPlayer) - { - continue; - } - - flag = teleportRandomly(livingEntity, teleportDistance) || flag; - } - - if (flag) - { - if (hasVirtus) - { - this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, true); - } - - if (hasPotentia) - { - this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, true); - } - - this.canDrainReagent(ritualStone, ReagentRegistry.tenebraeReagent, tennebraeDrain, true); - - SoulNetworkHandler.syphonFromNetwork(owner, 1000); - } - } - } - - @Override - public int getCostPerRefresh() - { - return 1000; - } - - public boolean teleportRandomly(EntityLivingBase entityLiving, double distance) - { - double x = entityLiving.posX; - double y = entityLiving.posY; - double z = entityLiving.posZ; - Random rand = new Random(); - double d0 = x + (rand.nextDouble() - 0.5D) * distance; - double d1 = y + (rand.nextInt((int) distance) - (distance) / 2); - double d2 = z + (rand.nextDouble() - 0.5D) * distance; - int i = 0; - - while (!teleportTo(entityLiving, d0, d1, d2, x, y, z) && i < 100) - { - d0 = x + (rand.nextDouble() - 0.5D) * distance; - d1 = y + (rand.nextInt((int) distance) - (distance) / 2); - d2 = z + (rand.nextDouble() - 0.5D) * distance; - i++; - } - - if (i >= 100) - { - return false; - } - - return true; - } - - public boolean teleportTo(EntityLivingBase entityLiving, double par1, double par3, double par5, double lastX, double lastY, double lastZ) - { - EnderTeleportEvent event = new EnderTeleportEvent(entityLiving, par1, par3, par5, 0); - - if (MinecraftForge.EVENT_BUS.post(event)) - { - return false; - } - - SpellTeleport.moveEntityViaTeleport(entityLiving, event.targetX, event.targetY, event.targetZ); - boolean flag = false; - - - int i = MathHelper.floor_double(entityLiving.posX); - int j = MathHelper.floor_double(entityLiving.posY); - int k = MathHelper.floor_double(entityLiving.posZ); - int l; - -// if (entityLiving.worldObj.blockExists(i, j, k)) - { - boolean flag1 = false; - - while (!flag1 && j > 0) - { - BlockPos newPos = new BlockPos(i, j - 1, k); - IBlockState state = entityLiving.worldObj.getBlockState(newPos); - Block block = state.getBlock(); - - if (block != null && block.getMaterial().blocksMovement()) - { - flag1 = true; - } else - { - --entityLiving.posY; - --j; - } - } - - if (flag1) - { - SpellTeleport.moveEntityViaTeleport(entityLiving, entityLiving.posX, entityLiving.posY, entityLiving.posZ); - - if (entityLiving.worldObj.getCollidingBoundingBoxes(entityLiving, entityLiving.getBoundingBox()).isEmpty() && !entityLiving.worldObj.isAnyLiquid(entityLiving.getBoundingBox())) - { - flag = true; - } - } - } - - if (!flag) - { - SpellTeleport.moveEntityViaTeleport(entityLiving, lastX, lastY, lastZ); - return false; - } else - { - short short1 = 128; - - for (l = 0; l < short1; ++l) - { - double d6 = (double) l / ((double) short1 - 1.0D); - float f = (entityLiving.worldObj.rand.nextFloat() - 0.5F) * 0.2F; - float f1 = (entityLiving.worldObj.rand.nextFloat() - 0.5F) * 0.2F; - float f2 = (entityLiving.worldObj.rand.nextFloat() - 0.5F) * 0.2F; - double d7 = lastX + (entityLiving.posX - lastX) * d6 + (entityLiving.worldObj.rand.nextDouble() - 0.5D) * (double) entityLiving.width * 2.0D; - double d8 = lastY + (entityLiving.posY - lastY) * d6 + entityLiving.worldObj.rand.nextDouble() * (double) entityLiving.height; - double d9 = lastZ + (entityLiving.posZ - lastZ) * d6 + (entityLiving.worldObj.rand.nextDouble() - 0.5D) * (double) entityLiving.width * 2.0D; - entityLiving.worldObj.spawnParticle(EnumParticleTypes.PORTAL, d7, d8, d9, (double) f, (double) f1, (double) f2); - } - return true; - } - } - - public void moveEntityViaTeleport(EntityLivingBase entityLiving, double x, double y, double z) - { - if (entityLiving instanceof EntityPlayer) - { - if (entityLiving instanceof EntityPlayerMP) - { - EntityPlayerMP entityplayermp = (EntityPlayerMP) entityLiving; - - if (entityplayermp.worldObj == entityLiving.worldObj) - { - EnderTeleportEvent event = new EnderTeleportEvent(entityplayermp, x, y, z, 5.0F); - - if (!MinecraftForge.EVENT_BUS.post(event)) - { - if (entityLiving.isRiding()) - { - entityLiving.mountEntity(null); - } - entityLiving.setPositionAndUpdate(event.targetX, event.targetY, event.targetZ); - } - } - } - } else if (entityLiving != null) - { - entityLiving.setPosition(x, y, z); - } - } - - @Override - public List getRitualComponentList() - { - ArrayList expulsionRitual = new ArrayList(); - expulsionRitual.add(new RitualComponent(2, 0, 2, RitualComponent.EARTH)); - expulsionRitual.add(new RitualComponent(2, 0, 1, RitualComponent.EARTH)); - expulsionRitual.add(new RitualComponent(1, 0, 2, RitualComponent.EARTH)); - expulsionRitual.add(new RitualComponent(2, 0, -2, RitualComponent.EARTH)); - expulsionRitual.add(new RitualComponent(2, 0, -1, RitualComponent.EARTH)); - expulsionRitual.add(new RitualComponent(-1, 0, 2, RitualComponent.EARTH)); - expulsionRitual.add(new RitualComponent(-2, 0, 2, RitualComponent.EARTH)); - expulsionRitual.add(new RitualComponent(-2, 0, 1, RitualComponent.EARTH)); - expulsionRitual.add(new RitualComponent(1, 0, -2, RitualComponent.EARTH)); - expulsionRitual.add(new RitualComponent(-2, 0, -2, RitualComponent.EARTH)); - expulsionRitual.add(new RitualComponent(-2, 0, -1, RitualComponent.EARTH)); - expulsionRitual.add(new RitualComponent(-1, 0, -2, RitualComponent.EARTH)); - expulsionRitual.add(new RitualComponent(4, 0, 2, RitualComponent.AIR)); - expulsionRitual.add(new RitualComponent(5, 0, 2, RitualComponent.AIR)); - expulsionRitual.add(new RitualComponent(4, 0, -2, RitualComponent.AIR)); - expulsionRitual.add(new RitualComponent(5, 0, -2, RitualComponent.AIR)); - expulsionRitual.add(new RitualComponent(-4, 0, 2, RitualComponent.AIR)); - expulsionRitual.add(new RitualComponent(-5, 0, 2, RitualComponent.AIR)); - expulsionRitual.add(new RitualComponent(-4, 0, -2, RitualComponent.AIR)); - expulsionRitual.add(new RitualComponent(-5, 0, -2, RitualComponent.AIR)); - expulsionRitual.add(new RitualComponent(2, 0, 4, RitualComponent.AIR)); - expulsionRitual.add(new RitualComponent(2, 0, 5, RitualComponent.AIR)); - expulsionRitual.add(new RitualComponent(-2, 0, 4, RitualComponent.AIR)); - expulsionRitual.add(new RitualComponent(-2, 0, 5, RitualComponent.AIR)); - expulsionRitual.add(new RitualComponent(2, 0, -4, RitualComponent.AIR)); - expulsionRitual.add(new RitualComponent(2, 0, -5, RitualComponent.AIR)); - expulsionRitual.add(new RitualComponent(-2, 0, -4, RitualComponent.AIR)); - expulsionRitual.add(new RitualComponent(-2, 0, -5, RitualComponent.AIR)); - expulsionRitual.add(new RitualComponent(0, 0, 6, RitualComponent.EARTH)); - expulsionRitual.add(new RitualComponent(0, 0, -6, RitualComponent.EARTH)); - expulsionRitual.add(new RitualComponent(6, 0, 0, RitualComponent.EARTH)); - expulsionRitual.add(new RitualComponent(-6, 0, 0, RitualComponent.EARTH)); - expulsionRitual.add(new RitualComponent(-5, 0, 0, RitualComponent.DUSK)); - expulsionRitual.add(new RitualComponent(-6, 0, 1, RitualComponent.DUSK)); - expulsionRitual.add(new RitualComponent(-6, 0, -1, RitualComponent.DUSK)); - expulsionRitual.add(new RitualComponent(5, 0, 0, RitualComponent.DUSK)); - expulsionRitual.add(new RitualComponent(6, 0, 1, RitualComponent.DUSK)); - expulsionRitual.add(new RitualComponent(6, 0, -1, RitualComponent.DUSK)); - expulsionRitual.add(new RitualComponent(0, 0, 5, RitualComponent.DUSK)); - expulsionRitual.add(new RitualComponent(1, 0, 6, RitualComponent.DUSK)); - expulsionRitual.add(new RitualComponent(-1, 0, 6, RitualComponent.DUSK)); - expulsionRitual.add(new RitualComponent(0, 0, -5, RitualComponent.DUSK)); - expulsionRitual.add(new RitualComponent(1, 0, -6, RitualComponent.DUSK)); - expulsionRitual.add(new RitualComponent(-1, 0, -6, RitualComponent.DUSK)); - expulsionRitual.add(new RitualComponent(4, 0, 4, RitualComponent.FIRE)); - expulsionRitual.add(new RitualComponent(4, 0, -4, RitualComponent.FIRE)); - expulsionRitual.add(new RitualComponent(-4, 0, 4, RitualComponent.FIRE)); - expulsionRitual.add(new RitualComponent(-4, 0, -4, RitualComponent.FIRE)); - return expulsionRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFeatheredEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFeatheredEarth.java deleted file mode 100644 index 6b8faa20..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFeatheredEarth.java +++ /dev/null @@ -1,171 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; - -public class RitualEffectFeatheredEarth extends RitualEffect //Nullifies all fall damage in the area of effect -{ - public static final int terraeDrain = 1; - public static final int orbisTerraeDrain = 1; - public static final int aetherDrain = 1; - - public static final int costCooldown = 10; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (ritualStone.getCooldown() > 0) - { - int x = pos.getX(); - int y = pos.getY(); - int z = pos.getZ(); - - world.addWeatherEffect(new EntityLightningBolt(world, x + 4, y + 5, z + 4)); - world.addWeatherEffect(new EntityLightningBolt(world, x + 4, y + 5, z - 4)); - world.addWeatherEffect(new EntityLightningBolt(world, x - 4, y + 5, z - 4)); - world.addWeatherEffect(new EntityLightningBolt(world, x - 4, y + 5, z + 4)); - ritualStone.setCooldown(0); - } - - boolean hasTerrae = this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, false); - boolean hasOrbisTerrae = this.canDrainReagent(ritualStone, ReagentRegistry.orbisTerraeReagent, orbisTerraeDrain, false); - boolean hasAether = this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, false); - - int range = this.getHorizontalRangeForReagent(hasTerrae, hasOrbisTerrae); - int verticalRange = hasAether ? 60 : 30; - List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, new AxisAlignedBB(pos, pos.add(1, 1, 1)).expand(range, verticalRange, range)); - int entityCount = 0; - boolean flag = false; - - entityCount += entities.size(); - - if (currentEssence < this.getCostPerRefresh() * entityCount) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - for (EntityLivingBase entity : entities) - { - entity.fallDistance = 0; - flag = true; - } - - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh() * entityCount); - - if (flag && world.getWorldTime() % costCooldown == 0) - { - if (hasTerrae) - { - this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, true); - } - if (hasOrbisTerrae) - { - this.canDrainReagent(ritualStone, ReagentRegistry.orbisTerraeReagent, orbisTerraeDrain, true); - } - if (hasAether) - { - this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, true); - } - } - } - } - - @Override - public int getCostPerRefresh() - { - return 0; - } - - @Override - public int getInitialCooldown() - { - return 1; - } - - @Override - public List getRitualComponentList() - { - ArrayList featheredEarthRitual = new ArrayList(); - featheredEarthRitual.add(new RitualComponent(1, 0, 0, RitualComponent.DUSK)); - featheredEarthRitual.add(new RitualComponent(-1, 0, 0, RitualComponent.DUSK)); - featheredEarthRitual.add(new RitualComponent(0, 0, 1, RitualComponent.DUSK)); - featheredEarthRitual.add(new RitualComponent(0, 0, -1, RitualComponent.DUSK)); - featheredEarthRitual.add(new RitualComponent(2, 0, 2, RitualComponent.AIR)); - featheredEarthRitual.add(new RitualComponent(-2, 0, 2, RitualComponent.AIR)); - featheredEarthRitual.add(new RitualComponent(-2, 0, -2, RitualComponent.AIR)); - featheredEarthRitual.add(new RitualComponent(2, 0, -2, RitualComponent.AIR)); - featheredEarthRitual.add(new RitualComponent(1, 0, 3, RitualComponent.EARTH)); - featheredEarthRitual.add(new RitualComponent(0, 0, 3, RitualComponent.EARTH)); - featheredEarthRitual.add(new RitualComponent(-1, 0, 3, RitualComponent.EARTH)); - featheredEarthRitual.add(new RitualComponent(1, 0, -3, RitualComponent.EARTH)); - featheredEarthRitual.add(new RitualComponent(0, 0, -3, RitualComponent.EARTH)); - featheredEarthRitual.add(new RitualComponent(-1, 0, -3, RitualComponent.EARTH)); - featheredEarthRitual.add(new RitualComponent(3, 0, 1, RitualComponent.EARTH)); - featheredEarthRitual.add(new RitualComponent(3, 0, 0, RitualComponent.EARTH)); - featheredEarthRitual.add(new RitualComponent(3, 0, -1, RitualComponent.EARTH)); - featheredEarthRitual.add(new RitualComponent(-3, 0, 1, RitualComponent.EARTH)); - featheredEarthRitual.add(new RitualComponent(-3, 0, 0, RitualComponent.EARTH)); - featheredEarthRitual.add(new RitualComponent(-3, 0, -1, RitualComponent.EARTH)); - featheredEarthRitual.add(new RitualComponent(4, 4, 4, RitualComponent.FIRE)); - featheredEarthRitual.add(new RitualComponent(-4, 4, 4, RitualComponent.FIRE)); - featheredEarthRitual.add(new RitualComponent(-4, 4, -4, RitualComponent.FIRE)); - featheredEarthRitual.add(new RitualComponent(4, 4, -4, RitualComponent.FIRE)); - featheredEarthRitual.add(new RitualComponent(4, 5, 5, RitualComponent.AIR)); - featheredEarthRitual.add(new RitualComponent(4, 5, 3, RitualComponent.AIR)); - featheredEarthRitual.add(new RitualComponent(5, 5, 4, RitualComponent.AIR)); - featheredEarthRitual.add(new RitualComponent(3, 5, 4, RitualComponent.AIR)); - featheredEarthRitual.add(new RitualComponent(-4, 5, 5, RitualComponent.AIR)); - featheredEarthRitual.add(new RitualComponent(-4, 5, 3, RitualComponent.AIR)); - featheredEarthRitual.add(new RitualComponent(-5, 5, 4, RitualComponent.AIR)); - featheredEarthRitual.add(new RitualComponent(-3, 5, 4, RitualComponent.AIR)); - featheredEarthRitual.add(new RitualComponent(4, 5, -5, RitualComponent.AIR)); - featheredEarthRitual.add(new RitualComponent(4, 5, -3, RitualComponent.AIR)); - featheredEarthRitual.add(new RitualComponent(5, 5, -4, RitualComponent.AIR)); - featheredEarthRitual.add(new RitualComponent(3, 5, -4, RitualComponent.AIR)); - featheredEarthRitual.add(new RitualComponent(-4, 5, -5, RitualComponent.AIR)); - featheredEarthRitual.add(new RitualComponent(-4, 5, -3, RitualComponent.AIR)); - featheredEarthRitual.add(new RitualComponent(-5, 5, -4, RitualComponent.AIR)); - featheredEarthRitual.add(new RitualComponent(-3, 5, -4, RitualComponent.AIR)); - return featheredEarthRitual; - } - - public int getHorizontalRangeForReagent(boolean hasTerrae, boolean hasOrbisTerrae) - { - if (hasOrbisTerrae) - { - if (hasTerrae) - { - return 64; - } else - { - return 45; - } - } else - { - if (hasTerrae) - { - return 30; - } else - { - return 20; - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFeatheredKnife.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFeatheredKnife.java deleted file mode 100644 index 39c0e4e7..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFeatheredKnife.java +++ /dev/null @@ -1,181 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import WayofTime.alchemicalWizardry.api.tile.IBloodAltar; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.List; - -public class RitualEffectFeatheredKnife extends RitualEffect -{ - public final int amount = 100; - - public static final int sanctusDrain = 5; - public static final int reductusDrain = 3; - public static final int magicalesDrain = 2; - public static final int potentiaDrain = 5; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - boolean hasPotentia = this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, false); - - int timeDelay = hasPotentia ? 10 : 20; - - if (world.getWorldTime() % timeDelay != 0) - { - return; - } - - IBloodAltar tileAltar = null; - boolean testFlag = false; - - for (int i = -5; i <= 5; i++) - { - for (int j = -5; j <= 5; j++) - { - for (int k = -10; k <= 10; k++) - { - BlockPos newPos = pos.add(i, k, j); - if (world.getTileEntity(newPos) instanceof IBloodAltar) - { - tileAltar = (IBloodAltar) world.getTileEntity(newPos); - testFlag = true; - } - } - } - } - - if (!testFlag) - { - return; - } - - boolean hasReductus = this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); - - double range = hasReductus ? 8 : 15; - double vertRange = hasReductus ? 8 : 20; - List list = SpellHelper.getPlayersInRange(world, pos.getX(), pos.getY(), pos.getZ(), range, vertRange); - - int entityCount = 0; - - if (currentEssence < this.getCostPerRefresh() * list.size()) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - boolean hasMagicales = this.canDrainReagent(ritualStone, ReagentRegistry.magicalesReagent, magicalesDrain, false); - boolean hasSanctus = this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, false); - - EntityPlayer ownerPlayer = SpellHelper.getPlayerForUsername(owner); - for (EntityPlayer player : list) - { - hasSanctus = hasSanctus && this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, false); - double threshold = hasSanctus ? 0.7d : 0.3d; - - if ((hasMagicales && player == ownerPlayer) || !hasMagicales) - { - if (!SpellHelper.isFakePlayer(world, player)) - { - if (player.getHealth() / player.getMaxHealth() > threshold) - { - player.setHealth(player.getHealth() - 1); - entityCount++; - tileAltar.sacrificialDaggerCall(this.amount, false); - if (hasSanctus) - { - this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, true); - } - if (hasMagicales) - { - this.canDrainReagent(ritualStone, ReagentRegistry.magicalesReagent, magicalesDrain, true); - break; - } - } - } - } - } - - if (entityCount > 0) - { - if (hasReductus) - { - this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, true); - } - if (hasPotentia) - { - this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, true); - } - - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh() * entityCount); - } - } - } - - @Override - public int getCostPerRefresh() - { - return 20; - } - - @Override - public List getRitualComponentList() - { - ArrayList featheredKnifeRitual = new ArrayList(); - featheredKnifeRitual.add(new RitualComponent(1, 0, 0, RitualComponent.DUSK)); - featheredKnifeRitual.add(new RitualComponent(-1, 0, 0, RitualComponent.DUSK)); - featheredKnifeRitual.add(new RitualComponent(0, 0, 1, RitualComponent.DUSK)); - featheredKnifeRitual.add(new RitualComponent(0, 0, -1, RitualComponent.DUSK)); - featheredKnifeRitual.add(new RitualComponent(2, -1, 0, RitualComponent.WATER)); - featheredKnifeRitual.add(new RitualComponent(-2, -1, 0, RitualComponent.WATER)); - featheredKnifeRitual.add(new RitualComponent(0, -1, 2, RitualComponent.WATER)); - featheredKnifeRitual.add(new RitualComponent(0, -1, -2, RitualComponent.WATER)); - featheredKnifeRitual.add(new RitualComponent(1, -1, 1, RitualComponent.AIR)); - featheredKnifeRitual.add(new RitualComponent(1, -1, -1, RitualComponent.AIR)); - featheredKnifeRitual.add(new RitualComponent(-1, -1, 1, RitualComponent.AIR)); - featheredKnifeRitual.add(new RitualComponent(-1, -1, -1, RitualComponent.AIR)); - featheredKnifeRitual.add(new RitualComponent(4, -1, 2, RitualComponent.FIRE)); - featheredKnifeRitual.add(new RitualComponent(2, -1, 4, RitualComponent.FIRE)); - featheredKnifeRitual.add(new RitualComponent(-4, -1, 2, RitualComponent.FIRE)); - featheredKnifeRitual.add(new RitualComponent(2, -1, -4, RitualComponent.FIRE)); - featheredKnifeRitual.add(new RitualComponent(4, -1, -2, RitualComponent.FIRE)); - featheredKnifeRitual.add(new RitualComponent(-2, -1, 4, RitualComponent.FIRE)); - featheredKnifeRitual.add(new RitualComponent(-4, -1, -2, RitualComponent.FIRE)); - featheredKnifeRitual.add(new RitualComponent(-2, -1, -4, RitualComponent.FIRE)); - featheredKnifeRitual.add(new RitualComponent(4, 0, 2, RitualComponent.EARTH)); - featheredKnifeRitual.add(new RitualComponent(2, 0, 4, RitualComponent.EARTH)); - featheredKnifeRitual.add(new RitualComponent(-4, 0, 2, RitualComponent.EARTH)); - featheredKnifeRitual.add(new RitualComponent(2, 0, -4, RitualComponent.EARTH)); - featheredKnifeRitual.add(new RitualComponent(4, 0, -2, RitualComponent.EARTH)); - featheredKnifeRitual.add(new RitualComponent(-2, 0, 4, RitualComponent.EARTH)); - featheredKnifeRitual.add(new RitualComponent(-4, 0, -2, RitualComponent.EARTH)); - featheredKnifeRitual.add(new RitualComponent(-2, 0, -4, RitualComponent.EARTH)); - featheredKnifeRitual.add(new RitualComponent(4, 0, 3, RitualComponent.EARTH)); - featheredKnifeRitual.add(new RitualComponent(3, 0, 4, RitualComponent.EARTH)); - featheredKnifeRitual.add(new RitualComponent(-4, 0, 3, RitualComponent.EARTH)); - featheredKnifeRitual.add(new RitualComponent(3, 0, -4, RitualComponent.EARTH)); - featheredKnifeRitual.add(new RitualComponent(4, 0, -3, RitualComponent.EARTH)); - featheredKnifeRitual.add(new RitualComponent(-3, 0, 4, RitualComponent.EARTH)); - featheredKnifeRitual.add(new RitualComponent(-4, 0, -3, RitualComponent.EARTH)); - featheredKnifeRitual.add(new RitualComponent(-3, 0, -4, RitualComponent.EARTH)); - featheredKnifeRitual.add(new RitualComponent(3, 0, 3, RitualComponent.AIR)); - featheredKnifeRitual.add(new RitualComponent(3, 0, -3, RitualComponent.AIR)); - featheredKnifeRitual.add(new RitualComponent(-3, 0, 3, RitualComponent.AIR)); - featheredKnifeRitual.add(new RitualComponent(-3, 0, -3, RitualComponent.AIR)); - return featheredKnifeRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFlight.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFlight.java deleted file mode 100644 index 177d7a7e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFlight.java +++ /dev/null @@ -1,182 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.List; - -public class RitualEffectFlight extends RitualEffect -{ - public static final int aetherDrain = 10; - public static final int reductusDrain = 5; - public static final int reagentCooldown = 50; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - int range = 20; - int verticalRange = 70; - AxisAlignedBB axis = new AxisAlignedBB(pos, pos.add(1, 1, 1)).expand(range, verticalRange, range); -// axis.maxY = 256; -// axis.minY = 0; - List entities = world.getEntitiesWithinAABB(EntityPlayer.class, axis); - int entityCount = 0; - - boolean hasAether = this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, false); - boolean hasReductus = this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); - - for (EntityPlayer entity : entities) - { - entityCount++; - } - - if (currentEssence < this.getCostPerRefresh() * entityCount) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - entityCount = 0; - EntityPlayer ownerEntity = SpellHelper.getPlayerForUsername(owner); - for (EntityPlayer entity : entities) - { - if (hasReductus && entity != ownerEntity) - { - continue; - } - entity.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionFlight.id, hasAether ? 30 * 20 : 20, 0)); - entityCount++; - } - - if (entityCount > 0 && world.getWorldTime() % reagentCooldown == 0) - { - if (hasAether) - { - this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, true); - } - if (hasReductus) - { - this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, true); - } - } - - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh() * entityCount); - } - } - - @Override - public int getCostPerRefresh() - { - return 0; - } - - @Override - public int getInitialCooldown() - { - return 1; - } - - @Override - public List getRitualComponentList() - { - ArrayList flightRitual = new ArrayList(); - flightRitual.add(new RitualComponent(1, 0, 0, RitualComponent.DUSK)); - flightRitual.add(new RitualComponent(-1, 0, 0, RitualComponent.DUSK)); - flightRitual.add(new RitualComponent(0, 0, 1, RitualComponent.DUSK)); - flightRitual.add(new RitualComponent(0, 0, -1, RitualComponent.DUSK)); - flightRitual.add(new RitualComponent(2, 0, 2, RitualComponent.AIR)); - flightRitual.add(new RitualComponent(-2, 0, 2, RitualComponent.AIR)); - flightRitual.add(new RitualComponent(-2, 0, -2, RitualComponent.AIR)); - flightRitual.add(new RitualComponent(2, 0, -2, RitualComponent.AIR)); - flightRitual.add(new RitualComponent(1, 0, 3, RitualComponent.EARTH)); - flightRitual.add(new RitualComponent(0, 0, 3, RitualComponent.EARTH)); - flightRitual.add(new RitualComponent(-1, 0, 3, RitualComponent.EARTH)); - flightRitual.add(new RitualComponent(1, 0, -3, RitualComponent.EARTH)); - flightRitual.add(new RitualComponent(0, 0, -3, RitualComponent.EARTH)); - flightRitual.add(new RitualComponent(-1, 0, -3, RitualComponent.EARTH)); - flightRitual.add(new RitualComponent(3, 0, 1, RitualComponent.EARTH)); - flightRitual.add(new RitualComponent(3, 0, 0, RitualComponent.EARTH)); - flightRitual.add(new RitualComponent(3, 0, -1, RitualComponent.EARTH)); - flightRitual.add(new RitualComponent(-3, 0, 1, RitualComponent.EARTH)); - flightRitual.add(new RitualComponent(-3, 0, 0, RitualComponent.EARTH)); - flightRitual.add(new RitualComponent(-3, 0, -1, RitualComponent.EARTH)); - flightRitual.add(new RitualComponent(-3, 0, -4, RitualComponent.WATER)); - flightRitual.add(new RitualComponent(-4, 0, -3, RitualComponent.WATER)); - flightRitual.add(new RitualComponent(-3, 0, 4, RitualComponent.WATER)); - flightRitual.add(new RitualComponent(4, 0, -3, RitualComponent.WATER)); - flightRitual.add(new RitualComponent(3, 0, -4, RitualComponent.WATER)); - flightRitual.add(new RitualComponent(-4, 0, 3, RitualComponent.WATER)); - flightRitual.add(new RitualComponent(3, 0, 4, RitualComponent.WATER)); - flightRitual.add(new RitualComponent(4, 0, 3, RitualComponent.WATER)); - flightRitual.add(new RitualComponent(-1, 1, 0, RitualComponent.FIRE)); - flightRitual.add(new RitualComponent(1, 1, 0, RitualComponent.FIRE)); - flightRitual.add(new RitualComponent(0, 1, -1, RitualComponent.FIRE)); - flightRitual.add(new RitualComponent(0, 1, 1, RitualComponent.FIRE)); - flightRitual.add(new RitualComponent(-2, 1, 0, RitualComponent.BLANK)); - flightRitual.add(new RitualComponent(2, 1, 0, RitualComponent.BLANK)); - flightRitual.add(new RitualComponent(0, 1, -2, RitualComponent.BLANK)); - flightRitual.add(new RitualComponent(0, 1, 2, RitualComponent.BLANK)); - flightRitual.add(new RitualComponent(-4, 1, 0, RitualComponent.BLANK)); - flightRitual.add(new RitualComponent(4, 1, 0, RitualComponent.BLANK)); - flightRitual.add(new RitualComponent(0, 1, -4, RitualComponent.BLANK)); - flightRitual.add(new RitualComponent(0, 1, 4, RitualComponent.BLANK)); - flightRitual.add(new RitualComponent(-5, 1, 0, RitualComponent.AIR)); - flightRitual.add(new RitualComponent(5, 1, 0, RitualComponent.AIR)); - flightRitual.add(new RitualComponent(0, 1, -5, RitualComponent.AIR)); - flightRitual.add(new RitualComponent(0, 1, 5, RitualComponent.AIR)); - flightRitual.add(new RitualComponent(5, 0, 0, RitualComponent.DUSK)); - flightRitual.add(new RitualComponent(-5, 0, 0, RitualComponent.DUSK)); - flightRitual.add(new RitualComponent(0, 0, 5, RitualComponent.DUSK)); - flightRitual.add(new RitualComponent(0, 0, -5, RitualComponent.DUSK)); - - for (int i = 2; i <= 4; i++) - { - flightRitual.add(new RitualComponent(-i, 2, 0, RitualComponent.EARTH)); - flightRitual.add(new RitualComponent(i, 2, 0, RitualComponent.EARTH)); - flightRitual.add(new RitualComponent(0, 2, -i, RitualComponent.EARTH)); - flightRitual.add(new RitualComponent(0, 2, i, RitualComponent.EARTH)); - } - - flightRitual.add(new RitualComponent(2, 4, 1, RitualComponent.FIRE)); - flightRitual.add(new RitualComponent(1, 4, 2, RitualComponent.FIRE)); - flightRitual.add(new RitualComponent(-2, 4, 1, RitualComponent.FIRE)); - flightRitual.add(new RitualComponent(1, 4, -2, RitualComponent.FIRE)); - flightRitual.add(new RitualComponent(2, 4, -1, RitualComponent.FIRE)); - flightRitual.add(new RitualComponent(-1, 4, 2, RitualComponent.FIRE)); - flightRitual.add(new RitualComponent(-2, 4, -1, RitualComponent.FIRE)); - flightRitual.add(new RitualComponent(-1, 4, -2, RitualComponent.FIRE)); - flightRitual.add(new RitualComponent(2, 4, 2, RitualComponent.AIR)); - flightRitual.add(new RitualComponent(-2, 4, 2, RitualComponent.AIR)); - flightRitual.add(new RitualComponent(2, 4, -2, RitualComponent.AIR)); - flightRitual.add(new RitualComponent(-2, 4, -2, RitualComponent.AIR)); - flightRitual.add(new RitualComponent(-4, 2, -4, RitualComponent.FIRE)); - flightRitual.add(new RitualComponent(4, 2, 4, RitualComponent.FIRE)); - flightRitual.add(new RitualComponent(4, 2, -4, RitualComponent.FIRE)); - flightRitual.add(new RitualComponent(-4, 2, 4, RitualComponent.FIRE)); - - for (int i = -1; i <= 1; i++) - { - flightRitual.add(new RitualComponent(3, 4, i, RitualComponent.EARTH)); - flightRitual.add(new RitualComponent(-3, 4, i, RitualComponent.EARTH)); - flightRitual.add(new RitualComponent(i, 4, 3, RitualComponent.EARTH)); - flightRitual.add(new RitualComponent(i, 4, -3, RitualComponent.EARTH)); - } - return flightRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFullStomach.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFullStomach.java deleted file mode 100644 index 2d967606..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFullStomach.java +++ /dev/null @@ -1,151 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemFood; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.FoodStats; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RitualEffectFullStomach extends RitualEffect -{ - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (world.getWorldTime() % 20 != 0) - { - return; - } - - double horizRange = 16; - double vertRange = 16; - - List playerList = SpellHelper.getPlayersInRange(world, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, horizRange, vertRange); - - if (playerList == null) - { - return; - } - - if (currentEssence < this.getCostPerRefresh() * playerList.size()) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - TileEntity tile = world.getTileEntity(pos.offsetUp()); - IInventory inventory = null; - if (tile instanceof IInventory) - { - inventory = (IInventory) tile; - } else - { - tile = world.getTileEntity(pos.offsetDown()); - if (tile instanceof IInventory) - { - inventory = (IInventory) tile; - } - } - - int count = 0; - - if (inventory != null) - { - for (EntityPlayer player : playerList) - { - FoodStats foodStats = player.getFoodStats(); - float satLevel = foodStats.getSaturationLevel(); - - for (int i = 0; i < inventory.getSizeInventory(); i++) - { - ItemStack stack = inventory.getStackInSlot(i); - - if (stack != null && stack.getItem() instanceof ItemFood) - { - ItemFood foodItem = (ItemFood) stack.getItem(); - - int regularHeal = foodItem.getHealAmount(stack); - float saturatedHeal = foodItem.getSaturationModifier(stack) * regularHeal * 2.0f; - - if (saturatedHeal + satLevel <= 20) - { - NBTTagCompound nbt = new NBTTagCompound(); - foodStats.writeNBT(nbt); - nbt.setFloat("foodSaturationLevel", saturatedHeal + satLevel); - foodStats.readNBT(nbt); - - inventory.decrStackSize(i, 1); - count++; - break; - } - } - } - } - } - - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh() * count); - } - } - - @Override - public int getCostPerRefresh() - { - return 100; - } - - @Override - public List getRitualComponentList() - { - ArrayList fullRitual = new ArrayList(); - fullRitual.add(new RitualComponent(0, 0, 3, RitualComponent.FIRE)); - fullRitual.add(new RitualComponent(0, 0, -3, RitualComponent.FIRE)); - fullRitual.add(new RitualComponent(3, 0, 0, RitualComponent.FIRE)); - fullRitual.add(new RitualComponent(-3, 0, 0, RitualComponent.FIRE)); - fullRitual.add(new RitualComponent(1, 0, 1, RitualComponent.AIR)); - fullRitual.add(new RitualComponent(1, 0, -1, RitualComponent.AIR)); - fullRitual.add(new RitualComponent(-1, 0, -1, RitualComponent.AIR)); - fullRitual.add(new RitualComponent(-1, 0, 1, RitualComponent.AIR)); - - fullRitual.add(new RitualComponent(2, 0, 1, RitualComponent.AIR)); - fullRitual.add(new RitualComponent(2, 0, -1, RitualComponent.AIR)); - fullRitual.add(new RitualComponent(-2, 0, -1, RitualComponent.AIR)); - fullRitual.add(new RitualComponent(-2, 0, 1, RitualComponent.AIR)); - fullRitual.add(new RitualComponent(1, 0, 2, RitualComponent.AIR)); - fullRitual.add(new RitualComponent(1, 0, -2, RitualComponent.AIR)); - fullRitual.add(new RitualComponent(-1, 0, -2, RitualComponent.AIR)); - fullRitual.add(new RitualComponent(-1, 0, 2, RitualComponent.AIR)); - - fullRitual.add(new RitualComponent(4, 0, 4, RitualComponent.WATER)); - fullRitual.add(new RitualComponent(4, 0, -4, RitualComponent.WATER)); - fullRitual.add(new RitualComponent(-4, 0, -4, RitualComponent.WATER)); - fullRitual.add(new RitualComponent(-4, 0, 4, RitualComponent.WATER)); - - fullRitual.add(new RitualComponent(4, 0, 3, RitualComponent.EARTH)); - fullRitual.add(new RitualComponent(3, 0, 4, RitualComponent.EARTH)); - fullRitual.add(new RitualComponent(-4, 0, 3, RitualComponent.EARTH)); - fullRitual.add(new RitualComponent(3, 0, -4, RitualComponent.EARTH)); - fullRitual.add(new RitualComponent(-4, 0, -3, RitualComponent.EARTH)); - fullRitual.add(new RitualComponent(-3, 0, -4, RitualComponent.EARTH)); - fullRitual.add(new RitualComponent(4, 0, -3, RitualComponent.EARTH)); - fullRitual.add(new RitualComponent(-3, 0, 4, RitualComponent.EARTH)); - - return fullRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectGrowth.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectGrowth.java deleted file mode 100644 index 3ec289cd..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectGrowth.java +++ /dev/null @@ -1,148 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.IGrowable; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.IPlantable; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RitualEffectGrowth extends RitualEffect -{ - private static final int aquasalusDrain = 10; - private static final int terraeDrain = 20; - private static final int orbisTerraeDrain = 20; - private static final int virtusDrain = 10; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (currentEssence < this.getCostPerRefresh() * 9) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - boolean hasTerrae = this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, false); - boolean hasOrbisTerrae = this.canDrainReagent(ritualStone, ReagentRegistry.orbisTerraeReagent, orbisTerraeDrain, false); - boolean hasVirtus = this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, false); - - int speed = this.getSpeedForReagents(hasTerrae, hasOrbisTerrae); - if (world.getWorldTime() % speed != 0) - { - return; - } - - if (this.canDrainReagent(ritualStone, ReagentRegistry.aquasalusReagent, aquasalusDrain, false)) - { - int hydrationRange = hasVirtus ? 4 : 1; - for (int i = -hydrationRange; i <= hydrationRange; i++) - { - for (int j = -hydrationRange; j <= hydrationRange; j++) - { - if (this.canDrainReagent(ritualStone, ReagentRegistry.aquasalusReagent, aquasalusDrain, false)) - { - BlockPos newPos = pos.add(i, 1, j); - if (SpellHelper.hydrateSoil(world, newPos)) - { - this.canDrainReagent(ritualStone, ReagentRegistry.aquasalusReagent, aquasalusDrain, true); - } - } - } - } - } - - int flag = 0; - - int range = hasVirtus ? 4 : 1; - for (int i = -range; i <= range; i++) - { - for (int j = -range; j <= range; j++) - { - BlockPos newPos = pos.add(i, 2, j); - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - - if (block instanceof IPlantable || block instanceof IGrowable) - { - { - SpellHelper.sendIndexedParticleToAllAround(world, pos, 20, world.provider.getDimensionId(), 3, pos); - block.updateTick(world, newPos, state, world.rand); - flag++; - } - } - } - } - - if (flag > 0) - { - if (hasTerrae) - this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, true); - if (hasOrbisTerrae) - this.canDrainReagent(ritualStone, ReagentRegistry.orbisTerraeReagent, orbisTerraeDrain, true); - if (hasVirtus) - this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, true); - - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh() * flag); - } - } - } - - @Override - public int getCostPerRefresh() - { - return 20; - } - - @Override - public List getRitualComponentList() - { - ArrayList growthRitual = new ArrayList(); - growthRitual.add(new RitualComponent(1, 0, 0, 1)); - growthRitual.add(new RitualComponent(-1, 0, 0, 1)); - growthRitual.add(new RitualComponent(0, 0, 1, 1)); - growthRitual.add(new RitualComponent(0, 0, -1, 1)); - growthRitual.add(new RitualComponent(-1, 0, 1, 3)); - growthRitual.add(new RitualComponent(1, 0, 1, 3)); - growthRitual.add(new RitualComponent(-1, 0, -1, 3)); - growthRitual.add(new RitualComponent(1, 0, -1, 3)); - return growthRitual; - } - - public int getSpeedForReagents(boolean hasTerrae, boolean hasOrbisTerrae) - { - if (hasOrbisTerrae) - { - if (hasTerrae) - { - return 10; - } else - { - return 15; - } - } else - { - if (hasTerrae) - { - return 20; - } else - { - return 30; - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectHarvest.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectHarvest.java deleted file mode 100644 index 55307e88..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectHarvest.java +++ /dev/null @@ -1,142 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.harvest.HarvestRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RitualEffectHarvest extends RitualEffect -{ - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - int maxCount = 100; - - if (currentEssence < this.getCostPerRefresh() * maxCount) - { - EntityPlayer entityOwner = SpellHelper.getPlayerForUsername(owner); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); - } else - { - if (world.getWorldTime() % 5 != 0) - { - return; - } - - IBlockState state = world.getBlockState(pos.offsetDown()); - Block block = state.getBlock(); - int flag = 0; - int range = this.getRadiusForModifierBlock(block); - int vertRange = 4; - - for (int i = -range; i <= range; i++) - { - for (int j = -vertRange; j <= vertRange; j++) - { - for (int k = -range; k <= range; k++) - { - if (HarvestRegistry.harvestBlock(world, pos.add(i, j, k)) && flag < maxCount) - { - flag++; - } - } - } - } - - if (flag > 0) - { - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh() * Math.min(maxCount, flag)); - } - } - } - - @Override - public int getCostPerRefresh() - { - return 20; - } - - public int getRadiusForModifierBlock(Block block) - { - if (block == null) - { - return 4; - } - - if (block == Blocks.diamond_block) - { - return 15; - } - - if (block == Blocks.gold_block) - { - return 10; - } - - if (block == Blocks.iron_block) - { - return 6; - } - - return 4; - } - - @Override - public List getRitualComponentList() - { - ArrayList harvestRitual = new ArrayList(); - - harvestRitual.add(new RitualComponent(1, 0, 1, RitualComponent.DUSK)); - harvestRitual.add(new RitualComponent(1, 0, -1, RitualComponent.DUSK)); - harvestRitual.add(new RitualComponent(-1, 0, -1, RitualComponent.DUSK)); - harvestRitual.add(new RitualComponent(-1, 0, 1, RitualComponent.DUSK)); - harvestRitual.add(new RitualComponent(2, 0, 0, RitualComponent.EARTH)); - harvestRitual.add(new RitualComponent(-2, 0, 0, RitualComponent.EARTH)); - harvestRitual.add(new RitualComponent(0, 0, 2, RitualComponent.EARTH)); - harvestRitual.add(new RitualComponent(0, 0, -2, RitualComponent.EARTH)); - harvestRitual.add(new RitualComponent(3, 0, 1, RitualComponent.EARTH)); - harvestRitual.add(new RitualComponent(3, 0, -1, RitualComponent.EARTH)); - harvestRitual.add(new RitualComponent(-3, 0, 1, RitualComponent.EARTH)); - harvestRitual.add(new RitualComponent(-3, 0, -1, RitualComponent.EARTH)); - harvestRitual.add(new RitualComponent(1, 0, 3, RitualComponent.EARTH)); - harvestRitual.add(new RitualComponent(-1, 0, 3, RitualComponent.EARTH)); - harvestRitual.add(new RitualComponent(1, 0, -3, RitualComponent.EARTH)); - harvestRitual.add(new RitualComponent(-1, 0, -3, RitualComponent.EARTH)); - harvestRitual.add(new RitualComponent(2, 0, 3, RitualComponent.WATER)); - harvestRitual.add(new RitualComponent(3, 0, 2, RitualComponent.WATER)); - harvestRitual.add(new RitualComponent(2, 0, -3, RitualComponent.WATER)); - harvestRitual.add(new RitualComponent(-3, 0, 2, RitualComponent.WATER)); - harvestRitual.add(new RitualComponent(-2, 0, 3, RitualComponent.WATER)); - harvestRitual.add(new RitualComponent(3, 0, -2, RitualComponent.WATER)); - harvestRitual.add(new RitualComponent(-2, 0, -3, RitualComponent.WATER)); - harvestRitual.add(new RitualComponent(-3, 0, -2, RitualComponent.WATER)); - - - return harvestRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectHealing.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectHealing.java deleted file mode 100644 index 8a39075a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectHealing.java +++ /dev/null @@ -1,178 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RitualEffectHealing extends RitualEffect -{ - public static final int reductusDrain = 10; - public static final int virtusDrain = 10; - public static final int praesidiumDrain = 2; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - int timeDelay = 50; - - if (world.getWorldTime() % timeDelay != 0) - { - return; - } - - boolean hasPraesidium = this.canDrainReagent(ritualStone, ReagentRegistry.praesidiumReagent, praesidiumDrain, false); - - int range = 15 * (hasPraesidium ? 3 : 1); - int vertRange = 15 * (hasPraesidium ? 3 : 1); - - List list = SpellHelper.getLivingEntitiesInRange(world, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, range, vertRange); - int entityCount = 0; - - for (EntityLivingBase livingEntity : list) - { - if (livingEntity instanceof EntityPlayer) - { - entityCount += 10; - } else - { - entityCount++; - } - } - - boolean hasVirtus = this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, false); - - int cost = this.getCostPerRefresh() * (hasVirtus ? 3 : 1); - int potency = hasVirtus ? 1 : 0; - - if (currentEssence < cost * entityCount) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - entityCount = 0; - - boolean hasReductus = this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); - - for (EntityLivingBase livingEntity : list) - { - hasReductus = hasReductus && this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); - if (hasReductus && !(livingEntity instanceof EntityPlayer)) - { - continue; - } - - if (livingEntity.getHealth() + 0.1f < livingEntity.getMaxHealth()) - { - PotionEffect effect = livingEntity.getActivePotionEffect(Potion.regeneration); - if (effect == null || (effect.getAmplifier() <= potency && effect.getDuration() <= timeDelay)) - { - if (!hasVirtus || (this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, false))) - { - livingEntity.addPotionEffect(new PotionEffect(Potion.regeneration.id, timeDelay + 2, potency)); - if (hasReductus) - { - this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, true); - } - if (hasVirtus) - { - this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, true); - } - - if (livingEntity instanceof EntityPlayer) - { - entityCount += 10; - } else - { - entityCount++; - } - } - } - } - } - - if (entityCount > 0) - { - if (hasPraesidium) - { - this.canDrainReagent(ritualStone, ReagentRegistry.praesidiumReagent, praesidiumDrain, true); - } - SoulNetworkHandler.syphonFromNetwork(owner, cost * entityCount); - } - } - } - - @Override - public int getCostPerRefresh() - { - return 20; - } - - @Override - public List getRitualComponentList() - { - ArrayList healingRitual = new ArrayList(); - healingRitual.add(new RitualComponent(4, 0, 0, RitualComponent.AIR)); - healingRitual.add(new RitualComponent(5, 0, -1, RitualComponent.AIR)); - healingRitual.add(new RitualComponent(5, 0, 1, RitualComponent.AIR)); - healingRitual.add(new RitualComponent(-4, 0, 0, RitualComponent.AIR)); - healingRitual.add(new RitualComponent(-5, 0, -1, RitualComponent.AIR)); - healingRitual.add(new RitualComponent(-5, 0, 1, RitualComponent.AIR)); - healingRitual.add(new RitualComponent(0, 0, 4, RitualComponent.FIRE)); - healingRitual.add(new RitualComponent(-1, 0, 5, RitualComponent.FIRE)); - healingRitual.add(new RitualComponent(1, 0, 5, RitualComponent.FIRE)); - healingRitual.add(new RitualComponent(0, 0, -4, RitualComponent.FIRE)); - healingRitual.add(new RitualComponent(-1, 0, -5, RitualComponent.FIRE)); - healingRitual.add(new RitualComponent(1, 0, -5, RitualComponent.FIRE)); - healingRitual.add(new RitualComponent(3, 0, 5, RitualComponent.WATER)); - healingRitual.add(new RitualComponent(5, 0, 3, RitualComponent.WATER)); - healingRitual.add(new RitualComponent(3, 0, -5, RitualComponent.WATER)); - healingRitual.add(new RitualComponent(5, 0, -3, RitualComponent.WATER)); - healingRitual.add(new RitualComponent(-3, 0, 5, RitualComponent.WATER)); - healingRitual.add(new RitualComponent(-5, 0, 3, RitualComponent.WATER)); - healingRitual.add(new RitualComponent(-3, 0, -5, RitualComponent.WATER)); - healingRitual.add(new RitualComponent(-5, 0, -3, RitualComponent.WATER)); - healingRitual.add(new RitualComponent(-3, 0, -3, RitualComponent.DUSK)); - healingRitual.add(new RitualComponent(-3, 0, 3, RitualComponent.DUSK)); - healingRitual.add(new RitualComponent(3, 0, -3, RitualComponent.DUSK)); - healingRitual.add(new RitualComponent(3, 0, 3, RitualComponent.DUSK)); - healingRitual.add(new RitualComponent(4, 0, 5, RitualComponent.EARTH)); - healingRitual.add(new RitualComponent(4, -1, 5, RitualComponent.EARTH)); - healingRitual.add(new RitualComponent(5, 0, 4, RitualComponent.EARTH)); - healingRitual.add(new RitualComponent(5, -1, 4, RitualComponent.EARTH)); - healingRitual.add(new RitualComponent(5, 0, 5, RitualComponent.EARTH)); - healingRitual.add(new RitualComponent(4, 0, -5, RitualComponent.EARTH)); - healingRitual.add(new RitualComponent(4, -1, -5, RitualComponent.EARTH)); - healingRitual.add(new RitualComponent(5, 0, -4, RitualComponent.EARTH)); - healingRitual.add(new RitualComponent(5, -1, -4, RitualComponent.EARTH)); - healingRitual.add(new RitualComponent(5, 0, -5, RitualComponent.EARTH)); - healingRitual.add(new RitualComponent(-4, 0, 5, RitualComponent.EARTH)); - healingRitual.add(new RitualComponent(-4, -1, 5, RitualComponent.EARTH)); - healingRitual.add(new RitualComponent(-5, 0, 4, RitualComponent.EARTH)); - healingRitual.add(new RitualComponent(-5, -1, 4, RitualComponent.EARTH)); - healingRitual.add(new RitualComponent(-5, 0, 5, RitualComponent.EARTH)); - healingRitual.add(new RitualComponent(-4, 0, -5, RitualComponent.EARTH)); - healingRitual.add(new RitualComponent(-4, -1, -5, RitualComponent.EARTH)); - healingRitual.add(new RitualComponent(-5, 0, -4, RitualComponent.EARTH)); - healingRitual.add(new RitualComponent(-5, -1, -4, RitualComponent.EARTH)); - healingRitual.add(new RitualComponent(-5, 0, -5, RitualComponent.EARTH)); - return healingRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectInterdiction.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectInterdiction.java deleted file mode 100644 index 6a6253dd..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectInterdiction.java +++ /dev/null @@ -1,137 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.List; - -public class RitualEffectInterdiction extends RitualEffect -{ - public static final int aetherDrain = 1; - public static final int magicalesDrain = 1; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (currentEssence < this.getCostPerRefresh()) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - int d0 = 5; - - List list = SpellHelper.getLivingEntitiesInRange(world, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, d0, d0); - boolean flag = false; - - boolean hasOffensa = this.canDrainReagent(ritualStone, ReagentRegistry.magicalesReagent, magicalesDrain, false); - boolean playerFlag = false; - - for (EntityLivingBase entityLiving : list) - { - if (!((!hasOffensa && entityLiving instanceof EntityPlayer) && (SpellHelper.getUsername((EntityPlayer) entityLiving).equals(owner)))) - { - double xDif = entityLiving.posX - (pos.getX() - 0.5); - double yDif = entityLiving.posY - ((pos.getY() - 0.5) + 1); - double zDif = entityLiving.posZ - (pos.getZ() - 0.5); - entityLiving.motionX = 0.1 * xDif; - entityLiving.motionY = 0.1 * yDif; - entityLiving.motionZ = 0.1 * zDif; - - if (hasOffensa && entityLiving instanceof EntityPlayer) - { - SpellHelper.setPlayerSpeedFromServer((EntityPlayer) entityLiving, 0.1 * xDif, 0.1 * yDif, 0.1 * zDif); - playerFlag = true; - } - entityLiving.fallDistance = 0; - flag = true; - } - } - - if (playerFlag) - { - this.canDrainReagent(ritualStone, ReagentRegistry.magicalesReagent, magicalesDrain, true); - } - - boolean hasAether = this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, false); - - if (hasAether) - { - int aetherDrainRate = 10; - - int horizontalRadius = 5; - int verticalRadius = 5; - List itemList = world.getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(pos, pos.add(1, 1, 1)).expand(horizontalRadius, verticalRadius, horizontalRadius)); - - if (itemList != null) - { - boolean itemFlag = false; - - for (EntityItem entity : itemList) - { - double xDif = entity.posX - (pos.getX() - 0.5); - double yDif = entity.posY - ((pos.getY() - 0.5) + 1); - double zDif = entity.posZ - (pos.getZ() - 0.5); - entity.motionX = 0.1 * xDif; - entity.motionY = 0.1 * yDif; - entity.motionZ = 0.1 * zDif; - - itemFlag = true; - } - - if (itemFlag) - { - flag = true; - if (world.getWorldTime() % aetherDrainRate == 0) - { - this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, true); - } - } - } - } - - - if (world.getWorldTime() % 2 == 0 && flag) - { - SoulNetworkHandler.syphonFromNetwork(owner, getCostPerRefresh()); - } - } - } - - @Override - public int getCostPerRefresh() - { - return 1; - } - - @Override - public List getRitualComponentList() - { - ArrayList interdictionRitual = new ArrayList(); - interdictionRitual.add(new RitualComponent(1, 0, 0, 4)); - interdictionRitual.add(new RitualComponent(-1, 0, 0, 4)); - interdictionRitual.add(new RitualComponent(0, 0, 1, 4)); - interdictionRitual.add(new RitualComponent(0, 0, -1, 4)); - interdictionRitual.add(new RitualComponent(-1, 0, 1, 4)); - interdictionRitual.add(new RitualComponent(1, 0, 1, 4)); - interdictionRitual.add(new RitualComponent(-1, 0, -1, 4)); - interdictionRitual.add(new RitualComponent(1, 0, -1, 4)); - return interdictionRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemRouting.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemRouting.java deleted file mode 100644 index ab737d9b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemRouting.java +++ /dev/null @@ -1,248 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.Int3; -import WayofTime.alchemicalWizardry.api.RoutingFocusParadigm; -import WayofTime.alchemicalWizardry.api.RoutingFocusPosAndFacing; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.common.items.routing.InputRoutingFocus; -import WayofTime.alchemicalWizardry.common.items.routing.OutputRoutingFocus; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RitualEffectItemRouting extends RitualEffect -{ - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (world.getWorldTime() % 20 != 0) - { - return; - } - - List outputList = new ArrayList(); - for(int i=0; i<4; i++) //Check output foci chests, return if none available - { - Int3 outputFocusChest = this.getOutputBufferChestLocation(i); - BlockPos newPos = pos.add(outputFocusChest.xCoord, outputFocusChest.yCoord, outputFocusChest.zCoord); - TileEntity outputFocusInv = world.getTileEntity(newPos); - if(outputFocusInv instanceof IInventory) - { - outputList.add((IInventory)outputFocusInv); - } - } - - if(outputList.isEmpty()) - { - return; - } - - for(IInventory outputFocusInventory : outputList) - { - { - OutputRoutingFocus outputFocus; - - RoutingFocusParadigm parad = new RoutingFocusParadigm(); - - TileEntity outputChest = null; //Destination - EnumFacing inputDirection; - - { - IInventory outputChestInventory = null; - - boolean lastItemWasFocus = true; - - for(int j=0; j getRitualComponentList() - { - ArrayList omegaRitual = new ArrayList(); - - this.addCornerRunes(omegaRitual, 1, 0, RitualComponent.BLANK); - this.addOffsetRunes(omegaRitual, 2, 1, 0, RitualComponent.FIRE); - this.addParallelRunes(omegaRitual, 4, 0, RitualComponent.WATER); - this.addParallelRunes(omegaRitual, 5, 0, RitualComponent.EARTH); - this.addCornerRunes(omegaRitual, 4, 0, RitualComponent.WATER); - - return omegaRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemSuction.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemSuction.java deleted file mode 100644 index 0e5112be..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemSuction.java +++ /dev/null @@ -1,126 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.item.EntityItem; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RitualEffectItemSuction extends RitualEffect -{ - public static final int reductusDrain = 1; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - TileEntity tile = world.getTileEntity(pos.offsetUp()); - IInventory tileEntity; - - if (tile instanceof IInventory) - { - tileEntity = (IInventory) tile; - } else - { - return; - } - - if (tileEntity.getSizeInventory() <= 0) - { - return; - } - - if (currentEssence < this.getCostPerRefresh() * 100) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - List itemDropList = SpellHelper.getItemsInRange(world, pos.getX() + 0.5f, pos.getY() + 0.5f, pos.getZ() + 0.5f, 10, 10); - - boolean hasReductus = this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); - - int count = 0; - - if (itemDropList != null) - { - for (EntityItem itemEntity : itemDropList) - { -// hasReductus = hasReductus && this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); -// if (hasReductus && itemEntity.age < this.timeDelayMin) -// { -// continue; -// } - ItemStack copyStack = itemEntity.getEntityItem().copy(); - - int pastAmount = copyStack.stackSize; - ItemStack newStack = SpellHelper.insertStackIntoInventory(copyStack, tileEntity, EnumFacing.DOWN); - - if (newStack != null && newStack.stackSize < pastAmount) - { - count++; - if (newStack.stackSize <= 0) - { - itemEntity.setDead(); - itemEntity.getEntityItem().stackSize = newStack.stackSize; - } - - if (newStack.stackSize > 0) - { - itemEntity.getEntityItem().stackSize = newStack.stackSize; - } - if (hasReductus) - { - this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, true); - } - } - } - } - - if (count > 0) - { - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh() * Math.min(count, 100)); - } - } - } - - @Override - public int getCostPerRefresh() - { - return 5; - } - - @Override - public List getRitualComponentList() - { - ArrayList suctionRitual = new ArrayList(); - suctionRitual.add(new RitualComponent(2, 0, 0, RitualComponent.AIR)); - suctionRitual.add(new RitualComponent(-2, 0, 0, RitualComponent.AIR)); - suctionRitual.add(new RitualComponent(0, 0, 2, RitualComponent.AIR)); - suctionRitual.add(new RitualComponent(0, 0, -2, RitualComponent.AIR)); - suctionRitual.add(new RitualComponent(1, 1, 1, RitualComponent.AIR)); - suctionRitual.add(new RitualComponent(1, 1, -1, RitualComponent.AIR)); - suctionRitual.add(new RitualComponent(-1, 1, 1, RitualComponent.AIR)); - suctionRitual.add(new RitualComponent(-1, 1, -1, RitualComponent.AIR)); - suctionRitual.add(new RitualComponent(1, -1, 0, RitualComponent.AIR)); - suctionRitual.add(new RitualComponent(-1, -1, 0, RitualComponent.AIR)); - suctionRitual.add(new RitualComponent(0, -1, 1, RitualComponent.AIR)); - suctionRitual.add(new RitualComponent(0, -1, -1, RitualComponent.AIR)); - return suctionRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectJumping.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectJumping.java deleted file mode 100644 index bd77b632..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectJumping.java +++ /dev/null @@ -1,112 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.List; - -public class RitualEffectJumping extends RitualEffect -{ - public final int aetherDrain = 10; - public final int terraeDrain = 10; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - double range = 0.5; - List livingList = SpellHelper.getLivingEntitiesInRange(world, pos.getX() + 0.5, pos.getY() + 1.5, pos.getZ() + 0.5, range, range); - - if (currentEssence < this.getCostPerRefresh() * livingList.size()) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - int flag = 0; - - boolean hasAether = this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, false); - boolean hasTerrae = this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, false); - - for (EntityLivingBase livingEntity : livingList) - { - if (livingEntity.isSneaking()) - { - continue; - } - - hasAether = hasAether && this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, false); - hasTerrae = hasTerrae && this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, false); - - double motionY = 1.5 * (hasAether ? 2 : 1); - - if (livingEntity instanceof EntityPlayer) - { - SpellHelper.setPlayerSpeedFromServer((EntityPlayer) livingEntity, livingEntity.motionX, motionY, livingEntity.motionZ); - livingEntity.motionY = motionY; - livingEntity.fallDistance = 0; - flag++; - } else - { - livingEntity.motionY = motionY; - livingEntity.fallDistance = 0; - flag++; - } - - if (hasAether) - { - this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, true); - } - if (hasTerrae) - { - if (!livingEntity.isPotionActive(AlchemicalWizardry.customPotionFeatherFall)) - { - livingEntity.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionFeatherFall.id, 5 * 20, 0)); - this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, true); - } - } - } - - if (flag > 0) - { - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh() * flag); - } - } - } - - @Override - public int getCostPerRefresh() - { - return 5; - } - - @Override - public List getRitualComponentList() - { - ArrayList jumpingRitual = new ArrayList(); - - for (int i = -1; i <= 1; i++) - { - jumpingRitual.add(new RitualComponent(1, i, 1, RitualComponent.AIR)); - jumpingRitual.add(new RitualComponent(-1, i, 1, RitualComponent.AIR)); - jumpingRitual.add(new RitualComponent(-1, i, -1, RitualComponent.AIR)); - jumpingRitual.add(new RitualComponent(1, i, -1, RitualComponent.AIR)); - } - return jumpingRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLava.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLava.java deleted file mode 100644 index 030ab73a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLava.java +++ /dev/null @@ -1,136 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidHandler; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.block.BlockSpectralContainer; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RitualEffectLava extends RitualEffect -{ - public static final int sanctusDrain = 20; - public static final int offensaDrain = 50; - public static final int reductusDrain = 5; - - public static final int fireFuseCost = 1000; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (this.canDrainReagent(ritualStone, ReagentRegistry.offensaReagent, offensaDrain, false) && SoulNetworkHandler.canSyphonFromOnlyNetwork(owner, fireFuseCost)) - { - boolean hasReductus = this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); - boolean drainReductus = world.getWorldTime() % 100 == 0; - - int range = 5; - List entityList = SpellHelper.getLivingEntitiesInRange(world, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, range, range); - EntityPlayer player = SpellHelper.getPlayerForUsername(owner); - - for (EntityLivingBase entity : entityList) - { - if (entity != player && this.canDrainReagent(ritualStone, ReagentRegistry.offensaReagent, offensaDrain, false) && SoulNetworkHandler.canSyphonFromOnlyNetwork(owner, fireFuseCost) && !entity.isPotionActive(AlchemicalWizardry.customPotionFireFuse)) - { - if (hasReductus && this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false)) - { - if (entity instanceof EntityPlayer) - { - if (drainReductus) - { - this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, true); - } - - continue; - } - } - - entity.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionFireFuse.id, 100, 0)); - this.canDrainReagent(ritualStone, ReagentRegistry.offensaReagent, offensaDrain, true); - SoulNetworkHandler.syphonFromNetwork(owner, fireFuseCost); - } - } - } - - BlockPos newPos = pos.offsetUp(); - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - - if (world.isAirBlock(newPos) && !(block instanceof BlockSpectralContainer)) - { - if (currentEssence < this.getCostPerRefresh()) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - for (int i = 0; i < 10; i++) - { - SpellHelper.sendIndexedParticleToAllAround(world, pos, 20, world.provider.getDimensionId(), 3, pos); - } - - world.setBlockState(newPos, Blocks.lava.getDefaultState()); - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); - } - } else - { - boolean hasSanctus = this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, false); - if (!hasSanctus) - { - return; - } - TileEntity tile = world.getTileEntity(newPos); - if (tile instanceof IFluidHandler) - { - int amount = ((IFluidHandler) tile).fill(EnumFacing.DOWN, new FluidStack(FluidRegistry.LAVA, 1000), false); - if (amount >= 1000) - { - ((IFluidHandler) tile).fill(EnumFacing.DOWN, new FluidStack(FluidRegistry.LAVA, 1000), true); - - this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, true); - - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); - } - } - } - } - - @Override - public int getCostPerRefresh() - { - return 500; - } - - @Override - public List getRitualComponentList() - { - ArrayList lavaRitual = new ArrayList(); - lavaRitual.add(new RitualComponent(1, 0, 0, 2)); - lavaRitual.add(new RitualComponent(-1, 0, 0, 2)); - lavaRitual.add(new RitualComponent(0, 0, 1, 2)); - lavaRitual.add(new RitualComponent(0, 0, -1, 2)); - return lavaRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLeap.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLeap.java deleted file mode 100644 index 2774c4fb..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLeap.java +++ /dev/null @@ -1,223 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.List; - -public class RitualEffectLeap extends RitualEffect -{ - public static final int aetherDrain = 10; - public static final int terraeDrain = 10; - public static final int reductusDrain = 10; - public static final int tenebraeDrain = 10; - public static final int sanctusDrain = 10; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - double range = 2.0; - - List livingList = SpellHelper.getLivingEntitiesInRange(world, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, range, range); - - if (livingList == null) - { - return; - } - - if (currentEssence < this.getCostPerRefresh() * livingList.size()) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - boolean hasAether = this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, false); - boolean hasTerrae = this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, false); - boolean hasReductus = this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); - boolean hasTenebrae = this.canDrainReagent(ritualStone, ReagentRegistry.tenebraeReagent, tenebraeDrain, false); - boolean hasSanctus = this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, false); - - int direction = ritualStone.getDirection(); - - int flag = 0; - - for (EntityLivingBase livingEntity : livingList) - { - if (livingEntity.isSneaking()) - { - continue; - } - - hasAether = hasAether && this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, false); - hasTerrae = hasTerrae && this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, false); - hasReductus = hasReductus && this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); - hasTenebrae = hasTenebrae && this.canDrainReagent(ritualStone, ReagentRegistry.tenebraeReagent, tenebraeDrain, false); - hasSanctus = hasSanctus && this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, false); - - double motionY = hasTerrae ? 0.6 : 1.2; - double speed = hasAether ? 6.0 : 3.0; - - if (!(hasTenebrae || hasSanctus) || livingEntity instanceof EntityPlayer) - { - livingEntity.motionY = motionY; - livingEntity.fallDistance = 0; - - if(livingEntity instanceof EntityPlayer) - { - switch (direction) - { - case 1: - SpellHelper.setPlayerSpeedFromServer((EntityPlayer) livingEntity, 0, motionY, -speed); - break; - - case 2: - SpellHelper.setPlayerSpeedFromServer((EntityPlayer) livingEntity, speed, motionY, 0); - break; - - case 3: - SpellHelper.setPlayerSpeedFromServer((EntityPlayer) livingEntity, 0, motionY, speed); - break; - - case 4: - SpellHelper.setPlayerSpeedFromServer((EntityPlayer) livingEntity, -speed, motionY, 0); - break; - } - }else - { - livingEntity.motionY = motionY; - - switch (direction) - { - case 1: - livingEntity.motionX = 0.0; - livingEntity.motionZ = -speed; - break; - - case 2: - livingEntity.motionX = speed; - livingEntity.motionZ = 0.0; - break; - - case 3: - livingEntity.motionX = 0.0; - livingEntity.motionZ = -speed; - break; - - case 4: - livingEntity.motionX = -speed; - livingEntity.motionZ = 0.0; - break; - } - } - - - flag++; - } else - { - if ((hasSanctus && !livingEntity.isChild()) || (hasTenebrae && livingEntity.isChild())) - { - continue; - } - - livingEntity.motionY = motionY; - - switch (direction) - { - case 1: - livingEntity.motionX = 0.0; - livingEntity.motionZ = -speed; - break; - - case 2: - livingEntity.motionX = speed; - livingEntity.motionZ = 0.0; - break; - - case 3: - livingEntity.motionX = 0.0; - livingEntity.motionZ = -speed; - break; - - case 4: - livingEntity.motionX = -speed; - livingEntity.motionZ = 0.0; - break; - } - - if (hasTenebrae) - { - this.canDrainReagent(ritualStone, ReagentRegistry.tenebraeReagent, tenebraeDrain, true); - } - if (hasSanctus) - { - this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, true); - } - - livingEntity.fallDistance = 0; - flag++; - } - - if (hasAether) - { - this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, true); - } - if (hasTerrae) - { - this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, true); - } - if (hasReductus) - { - if (!livingEntity.isPotionActive(AlchemicalWizardry.customPotionFeatherFall)) - { - livingEntity.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionFeatherFall.id, 3 * 20, 0)); - this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, true); - } - } - - } - - if (flag > 0) - { - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh() * flag); - } - } - } - - @Override - public int getCostPerRefresh() - { - return 5; - } - - @Override - public List getRitualComponentList() - { - ArrayList leapingRitual = new ArrayList(); - leapingRitual.add(new RitualComponent(0, 0, -2, RitualComponent.DUSK)); - leapingRitual.add(new RitualComponent(1, 0, -1, RitualComponent.AIR)); - leapingRitual.add(new RitualComponent(-1, 0, -1, RitualComponent.AIR)); - - for (int i = 0; i <= 2; i++) - { - leapingRitual.add(new RitualComponent(2, 0, i, RitualComponent.AIR)); - leapingRitual.add(new RitualComponent(-2, 0, i, RitualComponent.AIR)); - } - return leapingRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLifeConduit.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLifeConduit.java deleted file mode 100644 index da3b7397..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLifeConduit.java +++ /dev/null @@ -1,174 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidHandler; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.api.tile.IBloodAltar; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RitualEffectLifeConduit extends RitualEffect -{ - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - IBloodAltar tileAltar = null; - boolean testFlag = false; - - for (int i = -5; i <= 5; i++) - { - for (int j = -5; j <= 5; j++) - { - for (int k = -10; k <= 10; k++) - { - BlockPos newPos = pos.add(i, j, k); - if (world.getTileEntity(newPos) instanceof IBloodAltar) - { - tileAltar = (IBloodAltar) world.getTileEntity(newPos); - testFlag = true; - } - } - } - } - - if (!testFlag) - { - return; - } - - if(!(tileAltar instanceof IFluidHandler)) - { - return; - } - - int d0 = 15; - int vertRange = 20; - - EntityPlayer entityOwner = null; - List list = SpellHelper.getPlayersInRange(world, pos.getX(), pos.getY(), pos.getZ(), d0, vertRange); - - for (EntityPlayer player : list) - { - if (SpellHelper.getUsername(player).equals(owner)) - { - entityOwner = player; - } - } - - if (entityOwner == null) - { - return; - } - - int fillAmount = Math.min(currentEssence / 2, ((IFluidHandler)tileAltar).fill(EnumFacing.UP, new FluidStack(AlchemicalWizardry.lifeEssenceFluid, 10000), false)); - - { - ((IFluidHandler)tileAltar).fill(EnumFacing.UP, new FluidStack(AlchemicalWizardry.lifeEssenceFluid, fillAmount), true); - if (entityOwner.getHealth() > 2.0f && fillAmount != 0) - { - entityOwner.setHealth(2.0f); - } - SoulNetworkHandler.syphonFromNetwork(owner, fillAmount * 2); - } - } - - @Override - public int getCostPerRefresh() - { - return 0; - } - - @Override - public List getRitualComponentList() - { - ArrayList conduitRitual = new ArrayList(); - - conduitRitual.add(new RitualComponent(-1, 0, -1, RitualComponent.FIRE)); - conduitRitual.add(new RitualComponent(-1, 0, 1, RitualComponent.FIRE)); - conduitRitual.add(new RitualComponent(1, 0, 1, RitualComponent.FIRE)); - conduitRitual.add(new RitualComponent(1, 0, -1, RitualComponent.FIRE)); - - for (int i = 0; i < 4; i++) - { - conduitRitual.add(new RitualComponent(-2, i, -2, RitualComponent.AIR)); - conduitRitual.add(new RitualComponent(-2, i, 2, RitualComponent.AIR)); - conduitRitual.add(new RitualComponent(2, i, 2, RitualComponent.AIR)); - conduitRitual.add(new RitualComponent(2, i, -2, RitualComponent.AIR)); - } - - conduitRitual.add(new RitualComponent(4, 1, 4, RitualComponent.EARTH)); - conduitRitual.add(new RitualComponent(4, 1, -4, RitualComponent.EARTH)); - conduitRitual.add(new RitualComponent(-4, 1, -4, RitualComponent.EARTH)); - conduitRitual.add(new RitualComponent(-4, 1, 4, RitualComponent.EARTH)); - conduitRitual.add(new RitualComponent(3, 1, 4, RitualComponent.EARTH)); - conduitRitual.add(new RitualComponent(4, 1, 3, RitualComponent.EARTH)); - conduitRitual.add(new RitualComponent(-3, 1, 4, RitualComponent.EARTH)); - conduitRitual.add(new RitualComponent(-4, 1, 3, RitualComponent.EARTH)); - conduitRitual.add(new RitualComponent(3, 1, -4, RitualComponent.EARTH)); - conduitRitual.add(new RitualComponent(4, 1, -3, RitualComponent.EARTH)); - conduitRitual.add(new RitualComponent(-3, 1, -4, RitualComponent.EARTH)); - conduitRitual.add(new RitualComponent(-4, 1, -3, RitualComponent.EARTH)); - - - for (int i = 0; i < 2; i++) - { - conduitRitual.add(new RitualComponent(4, i + 2, 4, RitualComponent.WATER)); - conduitRitual.add(new RitualComponent(4, i + 2, -4, RitualComponent.WATER)); - conduitRitual.add(new RitualComponent(-4, i + 2, -4, RitualComponent.WATER)); - conduitRitual.add(new RitualComponent(-4, i + 2, 4, RitualComponent.WATER)); - } - - conduitRitual.add(new RitualComponent(4, 4, 4, RitualComponent.DUSK)); - conduitRitual.add(new RitualComponent(4, 4, -4, RitualComponent.DUSK)); - conduitRitual.add(new RitualComponent(-4, 4, -4, RitualComponent.DUSK)); - conduitRitual.add(new RitualComponent(-4, 4, 4, RitualComponent.DUSK)); - - conduitRitual.add(new RitualComponent(6, 0, 5, RitualComponent.FIRE)); - conduitRitual.add(new RitualComponent(5, 0, 6, RitualComponent.FIRE)); - conduitRitual.add(new RitualComponent(-6, 0, 5, RitualComponent.FIRE)); - conduitRitual.add(new RitualComponent(-5, 0, 6, RitualComponent.FIRE)); - conduitRitual.add(new RitualComponent(6, 0, -5, RitualComponent.FIRE)); - conduitRitual.add(new RitualComponent(5, 0, -6, RitualComponent.FIRE)); - conduitRitual.add(new RitualComponent(-6, 0, -5, RitualComponent.FIRE)); - conduitRitual.add(new RitualComponent(-5, 0, -6, RitualComponent.FIRE)); - - for (int i = 0; i < 2; i++) - { - conduitRitual.add(new RitualComponent(6, i, 6, RitualComponent.FIRE)); - conduitRitual.add(new RitualComponent(6, i, -6, RitualComponent.FIRE)); - conduitRitual.add(new RitualComponent(-6, i, 6, RitualComponent.FIRE)); - conduitRitual.add(new RitualComponent(-6, i, -6, RitualComponent.FIRE)); - } - - for (int i = 0; i < 3; i++) - { - conduitRitual.add(new RitualComponent(6, i + 2, 6, RitualComponent.BLANK)); - conduitRitual.add(new RitualComponent(6, i + 2, -6, RitualComponent.BLANK)); - conduitRitual.add(new RitualComponent(-6, i + 2, 6, RitualComponent.BLANK)); - conduitRitual.add(new RitualComponent(-6, i + 2, -6, RitualComponent.BLANK)); - } - - conduitRitual.add(new RitualComponent(6, 5, 6, RitualComponent.DUSK)); - conduitRitual.add(new RitualComponent(6, 5, -6, RitualComponent.DUSK)); - conduitRitual.add(new RitualComponent(-6, 5, 6, RitualComponent.DUSK)); - conduitRitual.add(new RitualComponent(-6, 5, -6, RitualComponent.DUSK)); - - return conduitRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectMagnetic.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectMagnetic.java deleted file mode 100644 index 8aed0a4c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectMagnetic.java +++ /dev/null @@ -1,248 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockOre; -import net.minecraft.block.BlockRedstoneOre; -import net.minecraft.block.state.IBlockState; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; -import WayofTime.alchemicalWizardry.api.Int3; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.ItemType; -import WayofTime.alchemicalWizardry.common.block.BlockTeleposer; - -public class RitualEffectMagnetic extends RitualEffect -{ - private static final int potentiaDrain = 10; - private static final int terraeDrain = 10; - private static final int orbisTerraeDrain = 10; - - private static final Map oreBlockCache = new HashMap(); - - public static boolean isBlockOre(Block block, int meta) - { - if (block == null || Item.getItemFromBlock(block) == null) - return false; - - if (block instanceof BlockOre || block instanceof BlockRedstoneOre) - return true; - - ItemType type = new ItemType(block, meta); - Boolean result = oreBlockCache.get(type); - if (result == null) - { - result = computeIsItemOre(type); - oreBlockCache.put(type, result); - } - return result; - } - - private static boolean computeIsItemOre(ItemType type) - { - ItemStack itemStack = type.createStack(1); - for (int id : OreDictionary.getOreIDs(itemStack)) - { - String oreName = OreDictionary.getOreName(id); - if (oreName.contains("ore")) - return true; - } - return false; - } - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - boolean hasPotentia = this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, false); - - if (world.getWorldTime() % (hasPotentia ? 10 : 40) != 0) - { - return; - } - - boolean hasTerrae = this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, false); - boolean hasOrbisTerrae = this.canDrainReagent(ritualStone, ReagentRegistry.orbisTerraeReagent, orbisTerraeDrain, false); - - int radius = this.getRadiusForReagents(hasTerrae, hasOrbisTerrae); - - if (currentEssence < this.getCostPerRefresh()) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - BlockPos posRep = null; - boolean replace = false; - - outer: - for (int j = 1; j <= 3; j++) - { - for (int i = -1; i <= 1; i++) - { - for (int k = -1; k <= 1; k++) - { - BlockPos newPos = pos.add(i, j, k); - if ((!replace) && world.isAirBlock(newPos)) - { - posRep = newPos; - replace = true; - break outer; - } - } - } - } - - if (replace) - { - Int3 lastPos = this.getLastPosition(ritualStone.getCustomRitualTag()); - - int j = pos.getY() - 1; - int i = 0; - int k = 0; - - if(lastPos != null) - { - j = lastPos.yCoord; - i = Math.min(radius, Math.max(-radius, lastPos.xCoord)); - k = Math.min(radius, Math.max(-radius, lastPos.zCoord)); - } - - while(j >= 0) - { - while(i <= radius) - { - while(k <= radius) - { - BlockPos newPos = new BlockPos(pos.getX() + i, j, pos.getZ() + k); - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - - if (isBlockOre(block, block.getMetaFromState(state))) - { - //Allow swapping code. This means the searched block is an ore. - BlockTeleposer.swapBlocks(this, world, world, newPos, posRep); - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); - - if (hasPotentia) - { - this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, true); - } - - if (hasTerrae) - { - this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, true); - } - - if (hasOrbisTerrae) - { - this.canDrainReagent(ritualStone, ReagentRegistry.orbisTerraeReagent, orbisTerraeDrain, true); - } - - this.setLastPosition(ritualStone.getCustomRitualTag(), new Int3(i, j, k)); - - return; - } - k++; - } - k = -radius; - i++; - } - i = -radius; - j--; - this.setLastPosition(ritualStone.getCustomRitualTag(), new Int3(i, j, k)); - return; - } - - j = pos.getY() - 1; - this.setLastPosition(ritualStone.getCustomRitualTag(), new Int3(i, j, k)); - } - } - } - - @Override - public int getCostPerRefresh() - { - return 50; - } - - public Int3 getLastPosition(NBTTagCompound tag) - { - if(tag != null) - { - return Int3.readFromNBT(tag); - } - - return new Int3(0, 0, 0); - } - - public void setLastPosition(NBTTagCompound tag, Int3 pos) - { - if(tag != null) - { - pos.writeToNBT(tag); - } - } - - @Override - public List getRitualComponentList() - { - ArrayList magneticRitual = new ArrayList(); - magneticRitual.add(new RitualComponent(1, 0, 1, RitualComponent.EARTH)); - magneticRitual.add(new RitualComponent(1, 0, -1, RitualComponent.EARTH)); - magneticRitual.add(new RitualComponent(-1, 0, 1, RitualComponent.EARTH)); - magneticRitual.add(new RitualComponent(-1, 0, -1, RitualComponent.EARTH)); - magneticRitual.add(new RitualComponent(2, 1, 0, RitualComponent.EARTH)); - magneticRitual.add(new RitualComponent(0, 1, 2, RitualComponent.EARTH)); - magneticRitual.add(new RitualComponent(-2, 1, 0, RitualComponent.EARTH)); - magneticRitual.add(new RitualComponent(0, 1, -2, RitualComponent.EARTH)); - magneticRitual.add(new RitualComponent(2, 1, 2, RitualComponent.AIR)); - magneticRitual.add(new RitualComponent(2, 1, -2, RitualComponent.AIR)); - magneticRitual.add(new RitualComponent(-2, 1, 2, RitualComponent.AIR)); - magneticRitual.add(new RitualComponent(-2, 1, -2, RitualComponent.AIR)); - magneticRitual.add(new RitualComponent(2, 2, 0, RitualComponent.FIRE)); - magneticRitual.add(new RitualComponent(0, 2, 2, RitualComponent.FIRE)); - magneticRitual.add(new RitualComponent(-2, 2, 0, RitualComponent.FIRE)); - magneticRitual.add(new RitualComponent(0, 2, -2, RitualComponent.FIRE)); - return magneticRitual; - } - - public int getRadiusForReagents(boolean hasTerrae, boolean hasOrbisTerrae) - { - if (hasTerrae) - { - if (hasOrbisTerrae) - { - return 31; - } else - { - return 7; - } - } else - { - if (hasOrbisTerrae) - { - return 12; - } else - { - return 3; - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectOmegaStalling.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectOmegaStalling.java deleted file mode 100644 index 363e5d6f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectOmegaStalling.java +++ /dev/null @@ -1,103 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityBeacon; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.api.spell.APISpellHelper; -import WayofTime.alchemicalWizardry.common.omega.OmegaParadigm; -import WayofTime.alchemicalWizardry.common.omega.OmegaRegistry; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RitualEffectOmegaStalling extends RitualEffect -{ - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (world.getWorldTime() % 20 != 0) - { - return; - } - - TileEntity tile = world.getTileEntity(pos.offsetUp(5)); - if(tile instanceof TileEntityBeacon) - { - int levels = ((TileEntityBeacon) tile).getField(0); - if(levels >= 4) - { - int horizontalRadius = 100; - int verticalRadius = 100; - - List playerList = SpellHelper.getPlayersInRange(world, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, horizontalRadius, verticalRadius); - - for(EntityPlayer player : playerList) - { - if(SoulNetworkHandler.canSyphonFromOnlyNetwork(owner, getCostPerRefresh())) - { - Reagent reagent = APISpellHelper.getPlayerReagentType(player); - OmegaParadigm parad = OmegaRegistry.getParadigmForReagent(reagent); - if(parad != null) - { - float costOffset = parad.getCostPerTickOfUse(player); - parad.setOmegaStalling(player, 100); - SoulNetworkHandler.syphonFromNetwork(owner, (int)(getCostPerRefresh() * Math.min(costOffset, 1))); - } - } - } - } - } - } - - @Override - public int getCostPerRefresh() - { - return 5000; - } - - @Override - public List getRitualComponentList() - { - ArrayList omegaRitual = new ArrayList(); - - this.addCornerRunes(omegaRitual, 1, 0, RitualComponent.FIRE); - this.addOffsetRunes(omegaRitual, 2, 1, 0, RitualComponent.DUSK); - this.addParallelRunes(omegaRitual, 4, 0, RitualComponent.WATER); - this.addParallelRunes(omegaRitual, 5, 0, RitualComponent.EARTH); - this.addCornerRunes(omegaRitual, 4, 0, RitualComponent.AIR); - this.addOffsetRunes(omegaRitual, 3, 4, 0, RitualComponent.AIR); - this.addParallelRunes(omegaRitual, 5, 1, RitualComponent.WATER); - this.addParallelRunes(omegaRitual, 5, 2, RitualComponent.EARTH); - this.addParallelRunes(omegaRitual, 4, 3, RitualComponent.WATER); - this.addParallelRunes(omegaRitual, 4, 4, RitualComponent.WATER); - this.addParallelRunes(omegaRitual, 3, 5, RitualComponent.BLANK); - this.addParallelRunes(omegaRitual, 2, 5, RitualComponent.FIRE); - this.addParallelRunes(omegaRitual, 1, 5, RitualComponent.DAWN); - this.addOffsetRunes(omegaRitual, 5, 3, 1, RitualComponent.WATER); - this.addOffsetRunes(omegaRitual, 6, 3, 1, RitualComponent.DUSK); - this.addOffsetRunes(omegaRitual, 6, 4, 1, RitualComponent.FIRE); - this.addOffsetRunes(omegaRitual, 6, 5, 1, RitualComponent.BLANK); - this.addCornerRunes(omegaRitual, 4, 2, RitualComponent.FIRE); - this.addCornerRunes(omegaRitual, 4, 3, RitualComponent.AIR); - this.addCornerRunes(omegaRitual, 4, 4, RitualComponent.AIR); - this.addOffsetRunes(omegaRitual, 4, 3, 2, RitualComponent.BLANK); - this.addCornerRunes(omegaRitual, 3, 5, RitualComponent.EARTH); - this.addOffsetRunes(omegaRitual, 2, 3, 5, RitualComponent.AIR); - - return omegaRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectOmegaTest.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectOmegaTest.java deleted file mode 100644 index 1092ad61..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectOmegaTest.java +++ /dev/null @@ -1,258 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.Int3; -import WayofTime.alchemicalWizardry.api.alchemy.energy.IReagentHandler; -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainerInfo; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.api.spell.APISpellHelper; -import WayofTime.alchemicalWizardry.common.NewPacketHandler; -import WayofTime.alchemicalWizardry.common.omega.OmegaParadigm; -import WayofTime.alchemicalWizardry.common.omega.OmegaRegistry; -import WayofTime.alchemicalWizardry.common.omega.OmegaStructureHandler; -import WayofTime.alchemicalWizardry.common.omega.OmegaStructureParameters; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RitualEffectOmegaTest extends RitualEffect -{ - public static final boolean isTesting = false; - public static final int drainTotal = 32 * 1000; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (world.getWorldTime() % 200 != 0) - { - return; - } - - OmegaStructureParameters param = OmegaStructureHandler.getStructureStabilityFactor(world, pos, 5, new Int3(0,1,0)); - int stab = param.stability; - int enchantability = param.enchantability; - int enchantmentLevel = param.enchantmentLevel; - - if(stab <= 0) - { - return; - } - -// System.out.println("Stability: " + stab + ", Enchantability: " + enchantability + ", Enchantment Level: " + enchantmentLevel); - - double range = 0.5; - - List playerList = SpellHelper.getPlayersInRange(world, pos.getX() + 0.5, pos.getY() + 1.5, pos.getZ() + 0.5, range, range); - - Reagent reagent = null; - - Map reagentMap = new HashMap(); - for(int i=0; i<4; i++) - { - Int3 jarLoc = this.getJarLocation(i); - BlockPos newPos = pos.add(jarLoc.xCoord, jarLoc.yCoord, jarLoc.zCoord); - TileEntity tile = world.getTileEntity(newPos); - if(tile instanceof IReagentHandler) - { - IReagentHandler container = (IReagentHandler)tile; - ReagentContainerInfo[] containerInfoArray = container.getContainerInfo(EnumFacing.UP); - if(containerInfoArray == null) - { - continue; - } - - for(ReagentContainerInfo containerInfo : containerInfoArray) - { - ReagentStack containedReagent = containerInfo.reagent; - if(containedReagent == null) - { - continue; - } - Reagent rea = containedReagent.reagent; - int amt = containedReagent.amount; - if(reagentMap.containsKey(rea)) - { - reagentMap.put(rea, reagentMap.get(rea) + amt); - }else - { - reagentMap.put(rea, amt); - } - } - } - } - - for(Entry entry : reagentMap.entrySet()) - { - if(entry.getValue() >= drainTotal) - { - reagent = entry.getKey(); - break; - } - } - - if(reagent == null) - { - return; - } - - int tickDuration = isTesting ? 20 * 30 : 15 * 20 * 60 + (int)((15 * 20 * 60) * Math.sqrt(stab / 700)); - - int affinity = 0; - - for(EntityPlayer player : playerList) - { - OmegaParadigm waterParadigm = OmegaRegistry.getParadigmForReagent(reagent); - if(waterParadigm != null && waterParadigm.convertPlayerArmour(player, pos.getX(), pos.getY(), pos.getZ(), stab, affinity, enchantability, enchantmentLevel)) - { - APISpellHelper.setPlayerCurrentReagentAmount(player, tickDuration); - APISpellHelper.setPlayerMaxReagentAmount(player, tickDuration); - APISpellHelper.setPlayerReagentType(player, reagent); - APISpellHelper.setCurrentAdditionalMaxHP(player, waterParadigm.getMaxAdditionalHealth()); - NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getReagentBarPacket(reagent, APISpellHelper.getPlayerCurrentReagentAmount(player), APISpellHelper.getPlayerMaxReagentAmount(player)), (EntityPlayerMP)player); - - if(!isTesting) - { - int drainLeft = drainTotal; - for(int i = 0; i < 4; i++) - { - if(drainLeft <= 0) - { - break; - } - Int3 jarLoc = this.getJarLocation(i); - BlockPos newPos = pos.add(jarLoc.xCoord, jarLoc.yCoord, jarLoc.zCoord); - TileEntity tile = world.getTileEntity(newPos); - if(tile instanceof IReagentHandler) - { - IReagentHandler container = (IReagentHandler)tile; - ReagentStack drained = container.drain(EnumFacing.UP, new ReagentStack(reagent, drainLeft), true); - if(drained != null) - { - drainLeft -= drained.amount; - world.markBlockForUpdate(newPos); - world.addWeatherEffect(new EntityLightningBolt(world, newPos.getX(), newPos.getY(), newPos.getZ())); - } - } - } - - ritualStone.setActive(false); - } - - break; - } - } - } - - @Override - public int getCostPerRefresh() - { - return 0; - } - - @Override - public List getRitualComponentList() - { - ArrayList omegaRitual = new ArrayList(); - this.addCornerRunes(omegaRitual, 1, 0, RitualComponent.DUSK); - this.addCornerRunes(omegaRitual, 2, 0, RitualComponent.DUSK); - this.addCornerRunes(omegaRitual, 3, 0, RitualComponent.BLANK); - this.addCornerRunes(omegaRitual, 4, 0, RitualComponent.DUSK); - this.addCornerRunes(omegaRitual, 5, 0, RitualComponent.BLANK); - this.addParallelRunes(omegaRitual, 1, 0, RitualComponent.DAWN); - this.addParallelRunes(omegaRitual, 2, 0, RitualComponent.BLANK); - this.addParallelRunes(omegaRitual, 4, 0, RitualComponent.BLANK); - this.addParallelRunes(omegaRitual, 5, 0, RitualComponent.DAWN); - this.addOffsetRunes(omegaRitual, 1, 3, 0, RitualComponent.DUSK); - this.addOffsetRunes(omegaRitual, 1, 5, 0, RitualComponent.DUSK); - - for(int i=2; i<=4; i++) - { - omegaRitual.add(new RitualComponent(-5, 0, i, RitualComponent.WATER)); - omegaRitual.add(new RitualComponent(-5, 0, -i, RitualComponent.WATER)); - omegaRitual.add(new RitualComponent(5, 0, i, RitualComponent.FIRE)); - omegaRitual.add(new RitualComponent(5, 0, -i, RitualComponent.FIRE)); - omegaRitual.add(new RitualComponent(i, 0, -5, RitualComponent.EARTH)); - omegaRitual.add(new RitualComponent(-i, 0, -5, RitualComponent.EARTH)); - omegaRitual.add(new RitualComponent(i, 0, 5, RitualComponent.AIR)); - omegaRitual.add(new RitualComponent(-i, 0, 5, RitualComponent.AIR)); - } - - for(int i=2; i<=3; i++) - { - omegaRitual.add(new RitualComponent(4, 0, i, RitualComponent.WATER)); - omegaRitual.add(new RitualComponent(4, 0, -i, RitualComponent.WATER)); - omegaRitual.add(new RitualComponent(-4, 0, i, RitualComponent.FIRE)); - omegaRitual.add(new RitualComponent(-4, 0, -i, RitualComponent.FIRE)); - omegaRitual.add(new RitualComponent(i, 0, 4, RitualComponent.EARTH)); - omegaRitual.add(new RitualComponent(-i, 0, 4, RitualComponent.EARTH)); - omegaRitual.add(new RitualComponent(i, 0, -4, RitualComponent.AIR)); - omegaRitual.add(new RitualComponent(-i, 0, -4, RitualComponent.AIR)); - } - - omegaRitual.add(new RitualComponent(-2, 0, 1, RitualComponent.AIR)); - omegaRitual.add(new RitualComponent(-2, 0, -1, RitualComponent.AIR)); - omegaRitual.add(new RitualComponent(-4, 0, 1, RitualComponent.AIR)); - omegaRitual.add(new RitualComponent(-4, 0, -1, RitualComponent.AIR)); - omegaRitual.add(new RitualComponent(2, 0, 1, RitualComponent.EARTH)); - omegaRitual.add(new RitualComponent(2, 0, -1, RitualComponent.EARTH)); - omegaRitual.add(new RitualComponent(4, 0, 1, RitualComponent.EARTH)); - omegaRitual.add(new RitualComponent(4, 0, -1, RitualComponent.EARTH)); - omegaRitual.add(new RitualComponent(1, 0, 2, RitualComponent.FIRE)); - omegaRitual.add(new RitualComponent(-1, 0, 2, RitualComponent.FIRE)); - omegaRitual.add(new RitualComponent(1, 0, 4, RitualComponent.FIRE)); - omegaRitual.add(new RitualComponent(-1, 0, 4, RitualComponent.FIRE)); - omegaRitual.add(new RitualComponent(1, 0, -2, RitualComponent.WATER)); - omegaRitual.add(new RitualComponent(-1, 0, -2, RitualComponent.WATER)); - omegaRitual.add(new RitualComponent(1, 0, -4, RitualComponent.WATER)); - omegaRitual.add(new RitualComponent(-1, 0, -4, RitualComponent.WATER)); - - omegaRitual.add(new RitualComponent(-3, 0, 2, RitualComponent.FIRE)); - omegaRitual.add(new RitualComponent(-3, 0, -2, RitualComponent.FIRE)); - omegaRitual.add(new RitualComponent(3, 0, 2, RitualComponent.WATER)); - omegaRitual.add(new RitualComponent(3, 0, -2, RitualComponent.WATER)); - omegaRitual.add(new RitualComponent(-2, 0, -3, RitualComponent.AIR)); - omegaRitual.add(new RitualComponent(2, 0, -3, RitualComponent.AIR)); - omegaRitual.add(new RitualComponent(-2, 0, 3, RitualComponent.EARTH)); - omegaRitual.add(new RitualComponent(2, 0, 3, RitualComponent.EARTH)); - - return omegaRitual; - } - - public Int3 getJarLocation(int i) - { - switch(i) - { - case 0: - return new Int3(-3,0,0); - case 1: - return new Int3(3,0,0); - case 2: - return new Int3(0,0,-3); - case 3: - return new Int3(0,0,3); - default: - return new Int3(0,0,0); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSpawnWard.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSpawnWard.java deleted file mode 100644 index 5cb2deda..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSpawnWard.java +++ /dev/null @@ -1,117 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; - -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.AlchemicalWizardryEventHooks; -import WayofTime.alchemicalWizardry.common.CoordAndRange; - -public class RitualEffectSpawnWard extends RitualEffect -{ - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (currentEssence < this.getCostPerRefresh()) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - int horizRange = 32; - int vertRange = 32; - - int dimension = world.provider.getDimensionId(); - - if (AlchemicalWizardryEventHooks.respawnMap.containsKey(dimension)) - { - List list = AlchemicalWizardryEventHooks.respawnMap.get(dimension); - if (list != null) - { - if (!list.contains(new CoordAndRange(pos, horizRange, vertRange))) - { - for (CoordAndRange coords : list) - { - BlockPos locationPos = coords.getPos(); - - if (locationPos.equals(pos)) - { - list.remove(coords); - break; - } - } - list.add(new CoordAndRange(pos, horizRange, vertRange)); - } - } else - { - list = new LinkedList(); - list.add(new CoordAndRange(pos, horizRange, vertRange)); - AlchemicalWizardryEventHooks.respawnMap.put(dimension, list); - } - } else - { - List list = new LinkedList(); - list.add(new CoordAndRange(pos, horizRange, vertRange)); - AlchemicalWizardryEventHooks.respawnMap.put(dimension, list); - } - - - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); - } - } - - @Override - public int getCostPerRefresh() - { - return 15; - } - - @Override - public List getRitualComponentList() - { - ArrayList wardRitualRitual = new ArrayList(); - - for (int i = 2; i <= 4; i++) - { - if (i <= 3) - { - wardRitualRitual.add(new RitualComponent(0, 0, i, RitualComponent.AIR)); - wardRitualRitual.add(new RitualComponent(0, 0, -i, RitualComponent.AIR)); - wardRitualRitual.add(new RitualComponent(i, 0, 0, RitualComponent.AIR)); - wardRitualRitual.add(new RitualComponent(-i, 0, 0, RitualComponent.AIR)); - } - - wardRitualRitual.add(new RitualComponent(i, 0, i, RitualComponent.FIRE)); - wardRitualRitual.add(new RitualComponent(i, 0, -i, RitualComponent.FIRE)); - wardRitualRitual.add(new RitualComponent(-i, 0, -i, RitualComponent.FIRE)); - wardRitualRitual.add(new RitualComponent(-i, 0, i, RitualComponent.FIRE)); - } - - wardRitualRitual.add(new RitualComponent(0, 0, 5, RitualComponent.DUSK)); - wardRitualRitual.add(new RitualComponent(0, 0, -5, RitualComponent.DUSK)); - wardRitualRitual.add(new RitualComponent(5, 0, 0, RitualComponent.DUSK)); - wardRitualRitual.add(new RitualComponent(-5, 0, 0, RitualComponent.DUSK)); - - wardRitualRitual.add(new RitualComponent(6, 0, 5, RitualComponent.WATER)); - wardRitualRitual.add(new RitualComponent(5, 0, 6, RitualComponent.WATER)); - wardRitualRitual.add(new RitualComponent(6, 0, -5, RitualComponent.WATER)); - wardRitualRitual.add(new RitualComponent(-5, 0, 6, RitualComponent.WATER)); - wardRitualRitual.add(new RitualComponent(-6, 0, 5, RitualComponent.WATER)); - wardRitualRitual.add(new RitualComponent(5, 0, -6, RitualComponent.WATER)); - wardRitualRitual.add(new RitualComponent(-6, 0, -5, RitualComponent.WATER)); - wardRitualRitual.add(new RitualComponent(-5, 0, -6, RitualComponent.WATER)); - - return wardRitualRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSphereCreator.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSphereCreator.java deleted file mode 100644 index 49d79db6..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSphereCreator.java +++ /dev/null @@ -1,223 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.Int3; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.block.BlockTeleposer; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RitualEffectSphereCreator extends RitualEffect -{ -// private static final int potentiaDrain = 10; - public static int MAX_RADIUS = 32; - private static final int terraeDrain = 1; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - -// boolean hasPotentia = this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, false); - - if (world.getWorldTime() % 1 != 0) - { - return; - } - - if (currentEssence < this.getCostPerRefresh()) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - TileEntity tile = world.getTileEntity(pos.offsetUp()); - if(!(tile instanceof IInventory)) - { - return; - } - - int negYOffset = 0; - int radius = 0; - IInventory inv = (IInventory)tile; - - int invSize = inv.getSizeInventory(); - if(invSize < 1) - { - return; - }else - { - if(invSize >= 2) - { - ItemStack invStack2 = inv.getStackInSlot(1); - if(invStack2 != null) - { - negYOffset = invStack2.stackSize; - } - } - - ItemStack invStack1 = inv.getStackInSlot(0); - if(invStack1 == null) - { - return; - } - - radius = invStack1.stackSize; - } - - if(radius <= 0) - { - return; - } - - radius = Math.min(radius, MAX_RADIUS); - - if(negYOffset < radius + 3) - { - negYOffset = radius + 3; - } - - Int3 lastPos = this.getLastPosition(ritualStone.getCustomRitualTag(), radius); - - int j = -radius; - int i = -radius; - int k = -radius; - - if(lastPos != null) - { - j = Math.min(radius, Math.max(-radius, lastPos.yCoord)); - i = Math.min(radius, Math.max(-radius, lastPos.xCoord)); - k = Math.min(radius, Math.max(-radius, lastPos.zCoord)); - } - - int yP = negYOffset; - int yN = -negYOffset; - - boolean incrementNext = false; - - - while(i <= radius) - { - while(j <= radius) - { - while(k <= radius) - { - if (i * i + j * j + k * k >= (radius + 0.50f) * (radius + 0.50f)) - { - k++; - continue; - } - - if(incrementNext) - { - this.setLastPosition(ritualStone.getCustomRitualTag(), new Int3(i, j, k)); - return; - } - - BlockPos pPos = pos.add(i, j + yP, k); - BlockPos nPos = pos.add(i, j + yN, k); - - IBlockState state = world.getBlockState(pPos); - Block blk = state.getBlock(); - - if (world.isAirBlock(nPos) || (!world.isAirBlock(pPos) && !SpellHelper.isBlockFluid(blk))) - { - - k++; - continue; - } - - if(BlockTeleposer.swapBlocks(this, world, world, nPos, pPos, false, 2)) - { - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); - if(this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, true)) - { - world.setBlockState(nPos, Blocks.dirt.getDefaultState(), 2); - } - } - - this.setLastPosition(ritualStone.getCustomRitualTag(), new Int3(i, j, k)); - - incrementNext = true; - - k++; - } - k = -radius; - j++; - } - j = -radius; - i++; -// this.setLastPosition(ritualStone.getCustomRitualTag(), new Int3(i, j, k)); -// return; - } - - ritualStone.setActive(false); - this.setLastPosition(ritualStone.getCustomRitualTag(), new Int3(i, j, k)); - } - } - - @Override - public int getCostPerRefresh() - { - return 0; - } - - public Int3 getLastPosition(NBTTagCompound tag, int radius) - { - if(tag != null && tag.getBoolean("hasWorked")) - { - return Int3.readFromNBT(tag); - } - - return new Int3(-radius, -radius, -radius); - } - - public void setLastPosition(NBTTagCompound tag, Int3 pos) - { - if(tag != null) - { - pos.writeToNBT(tag); - tag.setBoolean("hasWorked", true); - } - } - - @Override - public List getRitualComponentList() - { - ArrayList magneticRitual = new ArrayList(); - magneticRitual.add(new RitualComponent(1, 0, 1, RitualComponent.EARTH)); - magneticRitual.add(new RitualComponent(1, 0, -1, RitualComponent.EARTH)); - magneticRitual.add(new RitualComponent(-1, 0, 1, RitualComponent.EARTH)); - magneticRitual.add(new RitualComponent(-1, 0, -1, RitualComponent.EARTH)); - magneticRitual.add(new RitualComponent(2, 1, 0, RitualComponent.EARTH)); - magneticRitual.add(new RitualComponent(0, 1, 2, RitualComponent.EARTH)); - magneticRitual.add(new RitualComponent(-2, 1, 0, RitualComponent.EARTH)); - magneticRitual.add(new RitualComponent(0, 1, -2, RitualComponent.EARTH)); - magneticRitual.add(new RitualComponent(2, 1, 2, RitualComponent.AIR)); - magneticRitual.add(new RitualComponent(2, 1, -2, RitualComponent.AIR)); - magneticRitual.add(new RitualComponent(-2, 1, 2, RitualComponent.AIR)); - magneticRitual.add(new RitualComponent(-2, 1, -2, RitualComponent.AIR)); - magneticRitual.add(new RitualComponent(2, 2, 0, RitualComponent.FIRE)); - magneticRitual.add(new RitualComponent(0, 2, 2, RitualComponent.FIRE)); - magneticRitual.add(new RitualComponent(-2, 2, 0, RitualComponent.FIRE)); - magneticRitual.add(new RitualComponent(0, 2, -2, RitualComponent.DUSK)); - return magneticRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSummonMeteor.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSummonMeteor.java deleted file mode 100644 index 48969c77..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSummonMeteor.java +++ /dev/null @@ -1,211 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.entity.projectile.EntityMeteor; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import WayofTime.alchemicalWizardry.common.summoning.meteor.MeteorRegistry; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.List; - -public class RitualEffectSummonMeteor extends RitualEffect -{ - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (ritualStone.getCooldown() > 0) - { - ritualStone.setCooldown(0); - } - - if (currentEssence < this.getCostPerRefresh()) - { - EntityPlayer entityOwner = SpellHelper.getPlayerForUsername(owner); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); - } else - { - List entities = world.getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(pos.offsetUp(), pos.add(1, 2, 1))); - - if (entities == null) - { - return; - } - - for (EntityItem entityItem : entities) - { - if (entityItem != null && MeteorRegistry.isValidParadigmItem(entityItem.getEntityItem())) - { - int meteorID = MeteorRegistry.getParadigmIDForItem(entityItem.getEntityItem()); - EntityMeteor meteor = new EntityMeteor(world, pos.getX() + 0.5f, 257, pos.getZ() + 0.5f, meteorID); - meteor.motionY = -1.0f; - - if (this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, 1000, true)) - { - meteor.hasTerrae = true; - } - if (this.canDrainReagent(ritualStone, ReagentRegistry.orbisTerraeReagent, 1000, true)) - { - meteor.hasOrbisTerrae = true; - } - if (this.canDrainReagent(ritualStone, ReagentRegistry.crystallosReagent, 1000, true)) - { - meteor.hasCrystallos = true; - } - if (this.canDrainReagent(ritualStone, ReagentRegistry.incendiumReagent, 1000, true)) - { - meteor.hasIncendium = true; - } - if (this.canDrainReagent(ritualStone, ReagentRegistry.tenebraeReagent, 1000, true)) - { - meteor.hasTennebrae = true; - } - - entityItem.setDead(); - world.spawnEntityInWorld(meteor); - ritualStone.setActive(false); - break; - } - } - - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); - } - } - - @Override - public int getCostPerRefresh() - { - return 0; - } - - @Override - public List getRitualComponentList() - { - ArrayList meteorRitual = new ArrayList(); - meteorRitual.add(new RitualComponent(2, 0, 0, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(-2, 0, 0, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(0, 0, 2, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(0, 0, -2, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(3, 0, 1, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(3, 0, -1, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(-3, 0, 1, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(-3, 0, -1, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(1, 0, 3, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(-1, 0, 3, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(1, 0, -3, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(-1, 0, -3, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(4, 0, 2, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(4, 0, -2, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(-4, 0, 2, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(-4, 0, -2, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(2, 0, 4, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(-2, 0, 4, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(2, 0, -4, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(-2, 0, -4, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(5, 0, 3, RitualComponent.DUSK)); - meteorRitual.add(new RitualComponent(5, 0, -3, RitualComponent.DUSK)); - meteorRitual.add(new RitualComponent(-5, 0, 3, RitualComponent.DUSK)); - meteorRitual.add(new RitualComponent(-5, 0, -3, RitualComponent.DUSK)); - meteorRitual.add(new RitualComponent(3, 0, 5, RitualComponent.DUSK)); - meteorRitual.add(new RitualComponent(-3, 0, 5, RitualComponent.DUSK)); - meteorRitual.add(new RitualComponent(3, 0, -5, RitualComponent.DUSK)); - meteorRitual.add(new RitualComponent(-3, 0, -5, RitualComponent.DUSK)); - meteorRitual.add(new RitualComponent(-4, 0, -4, RitualComponent.DUSK)); - meteorRitual.add(new RitualComponent(-4, 0, 4, RitualComponent.DUSK)); - meteorRitual.add(new RitualComponent(4, 0, 4, RitualComponent.DUSK)); - meteorRitual.add(new RitualComponent(4, 0, -4, RitualComponent.DUSK)); - - for (int i = 4; i <= 6; i++) - { - meteorRitual.add(new RitualComponent(i, 0, 0, RitualComponent.EARTH)); - meteorRitual.add(new RitualComponent(-i, 0, 0, RitualComponent.EARTH)); - meteorRitual.add(new RitualComponent(0, 0, i, RitualComponent.EARTH)); - meteorRitual.add(new RitualComponent(0, 0, -i, RitualComponent.EARTH)); - } - - meteorRitual.add(new RitualComponent(8, 0, 0, RitualComponent.EARTH)); - meteorRitual.add(new RitualComponent(-8, 0, 0, RitualComponent.EARTH)); - meteorRitual.add(new RitualComponent(0, 0, 8, RitualComponent.EARTH)); - meteorRitual.add(new RitualComponent(0, 0, -8, RitualComponent.EARTH)); - meteorRitual.add(new RitualComponent(8, 1, 0, RitualComponent.EARTH)); - meteorRitual.add(new RitualComponent(-8, 1, 0, RitualComponent.EARTH)); - meteorRitual.add(new RitualComponent(0, 1, 8, RitualComponent.EARTH)); - meteorRitual.add(new RitualComponent(0, 1, -8, RitualComponent.EARTH)); - meteorRitual.add(new RitualComponent(7, 1, 0, RitualComponent.EARTH)); - meteorRitual.add(new RitualComponent(-7, 1, 0, RitualComponent.EARTH)); - meteorRitual.add(new RitualComponent(0, 1, 7, RitualComponent.EARTH)); - meteorRitual.add(new RitualComponent(0, 1, -7, RitualComponent.EARTH)); - meteorRitual.add(new RitualComponent(7, 2, 0, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(-7, 2, 0, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(0, 2, 7, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(0, 2, -7, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(6, 2, 0, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(-6, 2, 0, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(0, 2, 6, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(0, 2, -6, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(6, 3, 0, RitualComponent.WATER)); - meteorRitual.add(new RitualComponent(-6, 3, 0, RitualComponent.WATER)); - meteorRitual.add(new RitualComponent(0, 3, 6, RitualComponent.WATER)); - meteorRitual.add(new RitualComponent(0, 3, -6, RitualComponent.WATER)); - meteorRitual.add(new RitualComponent(5, 3, 0, RitualComponent.WATER)); - meteorRitual.add(new RitualComponent(-5, 3, 0, RitualComponent.WATER)); - meteorRitual.add(new RitualComponent(0, 3, 5, RitualComponent.WATER)); - meteorRitual.add(new RitualComponent(0, 3, -5, RitualComponent.WATER)); - meteorRitual.add(new RitualComponent(5, 4, 0, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(-5, 4, 0, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(0, 4, 5, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(0, 4, -5, RitualComponent.AIR)); - - for (int i = -1; i <= 1; i++) - { - meteorRitual.add(new RitualComponent(i, 4, 4, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(i, 4, -4, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(4, 4, i, RitualComponent.AIR)); - meteorRitual.add(new RitualComponent(-4, 4, i, RitualComponent.AIR)); - } - - meteorRitual.add(new RitualComponent(2, 4, 4, RitualComponent.WATER)); - meteorRitual.add(new RitualComponent(4, 4, 2, RitualComponent.WATER)); - meteorRitual.add(new RitualComponent(2, 4, -4, RitualComponent.WATER)); - meteorRitual.add(new RitualComponent(-4, 4, 2, RitualComponent.WATER)); - meteorRitual.add(new RitualComponent(-2, 4, 4, RitualComponent.WATER)); - meteorRitual.add(new RitualComponent(4, 4, -2, RitualComponent.WATER)); - meteorRitual.add(new RitualComponent(-2, 4, -4, RitualComponent.WATER)); - meteorRitual.add(new RitualComponent(-4, 4, -2, RitualComponent.WATER)); - meteorRitual.add(new RitualComponent(2, 4, 3, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(3, 4, 2, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(3, 4, 3, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(-2, 4, 3, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(3, 4, -2, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(3, 4, -3, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(2, 4, -3, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(-3, 4, 2, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(-3, 4, 3, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(-2, 4, -3, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(-3, 4, -2, RitualComponent.FIRE)); - meteorRitual.add(new RitualComponent(-3, 4, -3, RitualComponent.FIRE)); - return meteorRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSupression.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSupression.java deleted file mode 100644 index dc3150e8..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSupression.java +++ /dev/null @@ -1,169 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import WayofTime.alchemicalWizardry.common.tileEntity.TESpectralContainer; - -public class RitualEffectSupression extends RitualEffect -{ - public static final int aquasalusDrain = 15; - public static final int aetherDrain = 15; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - IBlockState stateish = world.getBlockState(pos.offsetDown()); - Block blockish = stateish.getBlock(); - - boolean hasAquasalus = this.canDrainReagent(ritualStone, ReagentRegistry.aquasalusReagent, aquasalusDrain, false); - boolean hasAether = this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, false); - - int costMod = this.getCostModifier(blockish); - int radius = this.getRadiusForReagents(hasAether, hasAquasalus); - int masterRadius = radius; - - int yIndex = (int) (world.getWorldTime() % (2 * radius + 1)) - radius; - boolean expansion = false; - - if (ritualStone.getVar1() < (radius + 1)) - { - expansion = true; - radius = ritualStone.getVar1(); - ritualStone.setVar1(ritualStone.getVar1() + 1); - } - - if (currentEssence < this.getCostPerRefresh() * costMod) - { - EntityPlayer entityOwner = SpellHelper.getPlayerForUsername(owner); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); - } else - { - for (int i = -radius; i <= radius; i++) - { - for (int j = (expansion ? -radius : yIndex); j <= (expansion ? radius : yIndex); j++) - { - for (int k = -radius; k <= radius; k++) - { - if (i * i + j * j + k * k >= (radius + 0.50f) * (radius + 0.50f)) - { - continue; - } - - BlockPos newPos = pos.add(i, j, k); - IBlockState state = world.getBlockState(newPos); - - Block block = state.getBlock(); - - - if (SpellHelper.isBlockFluid(block)) - { - TESpectralContainer.createSpectralBlockAtLocation(world, newPos, 3 * masterRadius); - } else - { - TileEntity tile = world.getTileEntity(newPos); - if (tile instanceof TESpectralContainer) - { - ((TESpectralContainer) tile).resetDuration(3 * masterRadius); - } - } - } - } - } - - - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh() * costMod); - - if (world.getWorldTime() % 100 == 0) - { - if (hasAquasalus) - { - this.canDrainReagent(ritualStone, ReagentRegistry.aquasalusReagent, aquasalusDrain, true); - } - if (hasAether) - { - this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, true); - } - } - } - } - - @Override - public int getCostPerRefresh() - { - return 2; - } - - @Override - public List getRitualComponentList() - { - ArrayList supressionRitual = new ArrayList(); - supressionRitual.add(new RitualComponent(2, 0, 2, RitualComponent.WATER)); - supressionRitual.add(new RitualComponent(2, 0, -2, RitualComponent.WATER)); - supressionRitual.add(new RitualComponent(-2, 0, 2, RitualComponent.WATER)); - supressionRitual.add(new RitualComponent(-2, 0, -2, RitualComponent.WATER)); - supressionRitual.add(new RitualComponent(-2, 0, -1, RitualComponent.AIR)); - supressionRitual.add(new RitualComponent(-1, 0, -2, RitualComponent.AIR)); - supressionRitual.add(new RitualComponent(-2, 0, 1, RitualComponent.AIR)); - supressionRitual.add(new RitualComponent(1, 0, -2, RitualComponent.AIR)); - supressionRitual.add(new RitualComponent(2, 0, 1, RitualComponent.AIR)); - supressionRitual.add(new RitualComponent(1, 0, 2, RitualComponent.AIR)); - supressionRitual.add(new RitualComponent(2, 0, -1, RitualComponent.AIR)); - supressionRitual.add(new RitualComponent(-1, 0, 2, RitualComponent.AIR)); - return supressionRitual; - } - - public int getCostModifier(Block block) - { - return 1; - } - - public int getRadiusForReagents(boolean hasAether, boolean hasAquasalus) - { - if (hasAether) - { - if (hasAquasalus) - { - return 30; - } else - { - return 20; - } - } else - { - if (hasAquasalus) - { - return 15; - } else - { - return 10; - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectUnbinding.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectUnbinding.java deleted file mode 100644 index 18badc5d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectUnbinding.java +++ /dev/null @@ -1,204 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.ModItems; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.bindingRegistry.UnbindingRegistry; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import WayofTime.alchemicalWizardry.common.items.armour.BoundArmour; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemStack; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -public class RitualEffectUnbinding extends RitualEffect -{ - public static final int sanctusDrain = 1000; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (currentEssence < this.getCostPerRefresh()) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - int d0 = 0; - AxisAlignedBB axisalignedbb = new AxisAlignedBB(pos, pos.add(1, 1, 1)).expand(d0, d0, d0); - List list = world.getEntitiesWithinAABB(EntityItem.class, axisalignedbb); - Iterator iterator = list.iterator(); - EntityItem item; - - boolean drain = false; - - int x = pos.getX(); - int y = pos.getY(); - int z = pos.getZ(); - - while (iterator.hasNext()) - { - item = (EntityItem) iterator.next(); - ItemStack itemStack = item.getEntityItem(); - - if (itemStack == null) - { - continue; - } - - boolean hasSanctus = this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, false); - if (hasSanctus) - { - if (itemStack.getItem() instanceof IBindable && !BindableItems.getOwnerName(itemStack).equals("")) - { - world.addWeatherEffect(new EntityLightningBolt(world, x, y + 1, z - 5)); - world.addWeatherEffect(new EntityLightningBolt(world, x, y + 1, z + 5)); - world.addWeatherEffect(new EntityLightningBolt(world, x - 5, y + 1, z)); - world.addWeatherEffect(new EntityLightningBolt(world, x + 5, y + 1, z)); - - BindableItems.setItemOwner(itemStack, ""); - this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, true); - drain = true; - ritualStone.setActive(false); - break; - } - } - - if (itemStack.getItem() == ModItems.boundHelmet) - { - ritualStone.setVar1(5); - } else if (itemStack.getItem() == ModItems.boundChestplate) - { - ritualStone.setVar1(8); - } else if (itemStack.getItem() == ModItems.boundLeggings) - { - ritualStone.setVar1(7); - } else if (itemStack.getItem() == ModItems.boundBoots) - { - ritualStone.setVar1(4); - } - else if (UnbindingRegistry.isRequiredItemValid(itemStack)) - { - ritualStone.setVar1(UnbindingRegistry.getIndexForItem(itemStack) + 9); - } - - if (ritualStone.getVar1() > 0 && ritualStone.getVar1() <= 8) - { - item.setDead(); - doLightning(world, x, y, z); - ItemStack[] inv = ((BoundArmour) itemStack.getItem()).getInternalInventory(itemStack); - - if (inv != null) - { - for (ItemStack internalItem : inv) - { - if (internalItem != null) - { - doLightning(world, x, y, z); - EntityItem newItem = new EntityItem(world, x + 0.5, y + 1, z + 0.5, internalItem.copy()); - world.spawnEntityInWorld(newItem); - } - } - } - - EntityItem newItem = new EntityItem(world, x + 0.5, y + 1, z + 0.5, new ItemStack(ModBlocks.bloodSocket, ritualStone.getVar1())); - world.spawnEntityInWorld(newItem); - ritualStone.setActive(false); - drain = true; - break; - } - else if (ritualStone.getVar1() >= 9) - { - item.setDead(); - doLightning(world, x, y, z); - ItemStack spawnedItem = UnbindingRegistry.getOutputForIndex(ritualStone.getVar1() - 9); - EntityItem newItem = new EntityItem(world, x + 0.5, y + 1, z + 0.5, spawnedItem.copy()); - world.spawnEntityInWorld(newItem); - ritualStone.setActive(false); - drain = true; - break; - } - - } - - if (drain) { - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); - } - } - - if (world.rand.nextInt(10) == 0) - { - SpellHelper.sendIndexedParticleToAllAround(world, pos, 20, world.provider.getDimensionId(), 1, pos); - } - } - - private void doLightning(World world, int x, int y, int z) - { - world.addWeatherEffect(new EntityLightningBolt(world, x, y + 1, z - 5)); - world.addWeatherEffect(new EntityLightningBolt(world, x, y + 1, z + 5)); - world.addWeatherEffect(new EntityLightningBolt(world, x - 5, y + 1, z)); - world.addWeatherEffect(new EntityLightningBolt(world, x + 5, y + 1, z)); - } - - @Override - public int getCostPerRefresh() - { - return 0; - } - - @Override - public List getRitualComponentList() - { - ArrayList unbindingRitual = new ArrayList(); - unbindingRitual.add(new RitualComponent(-2, 0, 0, 4)); - unbindingRitual.add(new RitualComponent(2, 0, 0, 4)); - unbindingRitual.add(new RitualComponent(0, 0, 2, 4)); - unbindingRitual.add(new RitualComponent(0, 0, -2, 4)); - unbindingRitual.add(new RitualComponent(-2, 0, -2, 3)); - unbindingRitual.add(new RitualComponent(-2, 0, -3, 3)); - unbindingRitual.add(new RitualComponent(-3, 0, -2, 3)); - unbindingRitual.add(new RitualComponent(2, 0, -2, 3)); - unbindingRitual.add(new RitualComponent(2, 0, -3, 3)); - unbindingRitual.add(new RitualComponent(3, 0, -2, 3)); - unbindingRitual.add(new RitualComponent(-2, 0, 2, 3)); - unbindingRitual.add(new RitualComponent(-2, 0, 3, 3)); - unbindingRitual.add(new RitualComponent(-3, 0, 2, 3)); - unbindingRitual.add(new RitualComponent(2, 0, 2, 3)); - unbindingRitual.add(new RitualComponent(2, 0, 3, 3)); - unbindingRitual.add(new RitualComponent(3, 0, 2, 3)); - unbindingRitual.add(new RitualComponent(3, 1, 3, 0)); - unbindingRitual.add(new RitualComponent(3, 1, -3, 0)); - unbindingRitual.add(new RitualComponent(-3, 1, -3, 0)); - unbindingRitual.add(new RitualComponent(-3, 1, 3, 0)); - unbindingRitual.add(new RitualComponent(3, 2, 3, 0)); - unbindingRitual.add(new RitualComponent(3, 2, -3, 0)); - unbindingRitual.add(new RitualComponent(-3, 2, -3, 0)); - unbindingRitual.add(new RitualComponent(-3, 2, 3, 0)); - unbindingRitual.add(new RitualComponent(3, 3, 3, 2)); - unbindingRitual.add(new RitualComponent(3, 3, -3, 2)); - unbindingRitual.add(new RitualComponent(-3, 3, -3, 2)); - unbindingRitual.add(new RitualComponent(-3, 3, 3, 2)); - unbindingRitual.add(new RitualComponent(-5, 0, 0, 2)); - unbindingRitual.add(new RitualComponent(5, 0, 0, 2)); - unbindingRitual.add(new RitualComponent(0, 0, 5, 2)); - unbindingRitual.add(new RitualComponent(0, 0, -5, 2)); - return unbindingRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectVeilOfEvil.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectVeilOfEvil.java deleted file mode 100644 index b1efd0e2..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectVeilOfEvil.java +++ /dev/null @@ -1,136 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.AlchemicalWizardryEventHooks; -import WayofTime.alchemicalWizardry.common.CoordAndRange; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; - -public class RitualEffectVeilOfEvil extends RitualEffect -{ - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (currentEssence < this.getCostPerRefresh()) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - int horizRange = 32; - int vertRange = 32; - - int dimension = world.provider.getDimensionId(); - - if (AlchemicalWizardryEventHooks.forceSpawnMap.containsKey(dimension)) - { - List list = AlchemicalWizardryEventHooks.forceSpawnMap.get(dimension); - if (list != null) - { - if (!list.contains(new CoordAndRange(pos, horizRange, vertRange))) - { - boolean hasFoundAndRemoved = false; - for (CoordAndRange coords : list) - { - BlockPos locationPos = coords.getPos(); - - if (locationPos.equals(pos)) - { - list.remove(coords); - hasFoundAndRemoved = true; - break; - } - } - list.add(new CoordAndRange(pos, horizRange, vertRange)); - } - } else - { - list = new LinkedList(); - list.add(new CoordAndRange(pos, horizRange, vertRange)); - AlchemicalWizardryEventHooks.forceSpawnMap.put(dimension, list); - } - } else - { - List list = new LinkedList(); - list.add(new CoordAndRange(pos, horizRange, vertRange)); - AlchemicalWizardryEventHooks.forceSpawnMap.put(dimension, list); - } - - - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); - } - } - - @Override - public int getCostPerRefresh() - { - return 20; - } - - @Override - public List getRitualComponentList() - { - ArrayList veilRitual = new ArrayList(); - - veilRitual.add(new RitualComponent(1, 0, 2, RitualComponent.DUSK)); - veilRitual.add(new RitualComponent(2, 0, 1, RitualComponent.DUSK)); - veilRitual.add(new RitualComponent(1, 0, -2, RitualComponent.DUSK)); - veilRitual.add(new RitualComponent(-2, 0, 1, RitualComponent.DUSK)); - veilRitual.add(new RitualComponent(-1, 0, 2, RitualComponent.DUSK)); - veilRitual.add(new RitualComponent(2, 0, -1, RitualComponent.DUSK)); - veilRitual.add(new RitualComponent(-1, 0, -2, RitualComponent.DUSK)); - veilRitual.add(new RitualComponent(-2, 0, -1, RitualComponent.DUSK)); - - veilRitual.add(new RitualComponent(3, 0, 3, RitualComponent.FIRE)); - veilRitual.add(new RitualComponent(-3, 0, 3, RitualComponent.FIRE)); - veilRitual.add(new RitualComponent(3, 0, -3, RitualComponent.FIRE)); - veilRitual.add(new RitualComponent(-3, 0, -3, RitualComponent.FIRE)); - - for (int i = 0; i <= 1; i++) - { - veilRitual.add(new RitualComponent((4 + i), i, 0, RitualComponent.DUSK)); - veilRitual.add(new RitualComponent((4 + i), i, -1, RitualComponent.BLANK)); - veilRitual.add(new RitualComponent((4 + i), i, 1, RitualComponent.BLANK)); - - veilRitual.add(new RitualComponent(-(4 + i), i, 0, RitualComponent.DUSK)); - veilRitual.add(new RitualComponent(-(4 + i), i, -1, RitualComponent.BLANK)); - veilRitual.add(new RitualComponent(-(4 + i), i, 1, RitualComponent.BLANK)); - - veilRitual.add(new RitualComponent(0, i, (4 + i), RitualComponent.DUSK)); - veilRitual.add(new RitualComponent(1, i, (4 + i), RitualComponent.BLANK)); - veilRitual.add(new RitualComponent(-1, i, (4 + i), RitualComponent.BLANK)); - - veilRitual.add(new RitualComponent(0, i, -(4 + i), RitualComponent.DUSK)); - veilRitual.add(new RitualComponent(1, i, -(4 + i), RitualComponent.BLANK)); - veilRitual.add(new RitualComponent(-1, i, -(4 + i), RitualComponent.BLANK)); - - veilRitual.add(new RitualComponent(4, i, 5, RitualComponent.EARTH)); - veilRitual.add(new RitualComponent(5, i, 4, RitualComponent.EARTH)); - veilRitual.add(new RitualComponent(4, i, -5, RitualComponent.EARTH)); - veilRitual.add(new RitualComponent(-5, i, 4, RitualComponent.EARTH)); - veilRitual.add(new RitualComponent(-4, i, 5, RitualComponent.EARTH)); - veilRitual.add(new RitualComponent(5, i, -4, RitualComponent.EARTH)); - veilRitual.add(new RitualComponent(-4, i, -5, RitualComponent.EARTH)); - veilRitual.add(new RitualComponent(-5, i, -4, RitualComponent.EARTH)); - } - - veilRitual.add(new RitualComponent(5, 1, 5, RitualComponent.BLANK)); - veilRitual.add(new RitualComponent(-5, 1, 5, RitualComponent.BLANK)); - veilRitual.add(new RitualComponent(5, 1, -5, RitualComponent.BLANK)); - veilRitual.add(new RitualComponent(-5, 1, -5, RitualComponent.BLANK)); - - return veilRitual; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWater.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWater.java deleted file mode 100644 index 87e19084..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWater.java +++ /dev/null @@ -1,203 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidHandler; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.block.BlockSpectralContainer; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class RitualEffectWater extends RitualEffect -{ - public static final int aquasalusDrain = 5; - public static final int offensaDrain = 20; - public static final int sanctusDrain = 5; - public static final int reductusDrain = 2; - public static final int crystallosDrain = 10; - - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - boolean hasCrystallos = this.canDrainReagent(ritualStone, ReagentRegistry.crystallosReagent, crystallosDrain, false); - boolean hasAquasalus = this.canDrainReagent(ritualStone, ReagentRegistry.aquasalusReagent, aquasalusDrain, false); - boolean hasOffensa = this.canDrainReagent(ritualStone, ReagentRegistry.offensaReagent, offensaDrain, false); - - if (hasAquasalus) - { - int hydrationRange = 4; - int vertRange = 3; - - for (int i = -hydrationRange; i <= hydrationRange; i++) - { - for (int j = -vertRange; j <= vertRange; j++) - { - for (int k = -hydrationRange; k <= hydrationRange; k++) - { - BlockPos newPos = pos.add(i, j, k); - if (SpellHelper.hydrateSoil(world, newPos)) - { - this.canDrainReagent(ritualStone, ReagentRegistry.aquasalusReagent, aquasalusDrain, true); - } - } - } - } - } - - if (hasOffensa) - { - boolean hasReductus = this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); - boolean drainReductus = world.getWorldTime() % 100 == 0; - - int range = 10; - List list = SpellHelper.getEntitiesInRange(world, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, range, range); - for (Entity entity : list) - { - if (entity instanceof EntityLivingBase) - { - EntityLivingBase livingEntity = (EntityLivingBase) entity; - - if (livingEntity == SpellHelper.getPlayerForUsername(owner)) - { - continue; - } - - if (hasReductus && this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false)) - { - if (livingEntity instanceof EntityPlayer) - { - if (drainReductus) - { - this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, true); - } - - continue; - } - } - - if (!livingEntity.isPotionActive(AlchemicalWizardry.customPotionDrowning)) - { - livingEntity.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionDrowning.id, 100, 0)); - this.canDrainReagent(ritualStone, ReagentRegistry.offensaReagent, offensaDrain, true); - } - } - } - } - - BlockPos newPos = pos.offsetUp(); - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - - if (world.isAirBlock(newPos) && !(block instanceof BlockSpectralContainer)) - { - if (currentEssence < this.getCostPerRefresh()) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - for (int i = 0; i < 10; i++) - { - SpellHelper.sendIndexedParticleToAllAround(world, pos, 20, world.provider.getDimensionId(), 3, pos); - } - - world.setBlockState(newPos, Blocks.water.getDefaultState()); - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); - } - } else - { - boolean hasSanctus = this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, false); - if (!hasSanctus) - { - return; - } - TileEntity tile = world.getTileEntity(newPos); - if (tile instanceof IFluidHandler) - { - int amount = ((IFluidHandler) tile).fill(EnumFacing.DOWN, new FluidStack(FluidRegistry.WATER, 1000), false); - if (amount >= 1000) - { - ((IFluidHandler) tile).fill(EnumFacing.DOWN, new FluidStack(FluidRegistry.WATER, 1000), true); - - this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, true); - - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); - } - } - } - - if (hasCrystallos) - { - int range = 2; - for (int i = -range; i <= range; i++) - { - for (int j = -range; j <= range; j++) - { - for (int k = -range; k <= range; k++) - { - hasCrystallos = hasCrystallos && this.canDrainReagent(ritualStone, ReagentRegistry.crystallosReagent, crystallosDrain, false); - - if (hasCrystallos) - { - boolean success = false; - newPos = pos.add(i, j, k); - if (!world.isAirBlock(newPos) && SpellHelper.freezeWaterBlock(world, newPos)) - { - success = true; - } else - { - if (world.rand.nextInt(100) == 0 && world.isSideSolid(newPos, EnumFacing.UP)) - { - success = true; - } - } - - if (success) - { - this.canDrainReagent(ritualStone, ReagentRegistry.crystallosReagent, crystallosDrain, true); - } - } - } - } - } - } - } - - public int getCostPerRefresh() - { - return 25; - } - - @Override - public List getRitualComponentList() - { - ArrayList waterRitual = new ArrayList(); - waterRitual.add(new RitualComponent(-1, 0, 1, 1)); - waterRitual.add(new RitualComponent(-1, 0, -1, 1)); - waterRitual.add(new RitualComponent(1, 0, -1, 1)); - waterRitual.add(new RitualComponent(1, 0, 1, 1)); - return waterRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWellOfSuffering.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWellOfSuffering.java deleted file mode 100644 index 365e40b7..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWellOfSuffering.java +++ /dev/null @@ -1,159 +0,0 @@ -package WayofTime.alchemicalWizardry.common.rituals; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; -import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.api.tile.IBloodAltar; - -public class RitualEffectWellOfSuffering extends RitualEffect -{ - public static final int timeDelay = 25; - public static final int amount = 10; - - private static final int tennebraeDrain = 5; - private static final int potentiaDrain = 10; - private static final int offensaDrain = 3; - - @Override - public void performEffect(IMasterRitualStone ritualStone) - { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = ritualStone.getWorldObj(); - BlockPos pos = ritualStone.getPosition(); - - if (world.getWorldTime() % timeDelay != 0) - { - return; - } - - IBloodAltar tileAltar = null; - boolean testFlag = false; - - for (int i = -5; i <= 5; i++) - { - for (int j = -5; j <= 5; j++) - { - for (int k = -10; k <= 10; k++) - { - BlockPos newPos = pos.add(i, j, k); - if (world.getTileEntity(newPos) instanceof IBloodAltar) - { - tileAltar = (IBloodAltar) world.getTileEntity(newPos); - testFlag = true; - } - } - } - } - - if (!testFlag) - { - return; - } - - boolean hasPotentia = this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, false); - - int d0 = 10; - int vertRange = hasPotentia ? 20 : 10; - AxisAlignedBB axisalignedbb = new AxisAlignedBB(pos, pos.add(1, 1, 1)).expand(d0, vertRange, d0); - List list = world.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb); - - int entityCount = 0; - boolean hasTennebrae = this.canDrainReagent(ritualStone, ReagentRegistry.tenebraeReagent, tennebraeDrain, false); - boolean hasOffensa = this.canDrainReagent(ritualStone, ReagentRegistry.offensaReagent, offensaDrain, false); - - if (currentEssence < this.getCostPerRefresh() * list.size()) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - for (EntityLivingBase livingEntity : list) - { - if (!livingEntity.isEntityAlive() || livingEntity instanceof EntityPlayer || AlchemicalWizardry.wellBlacklist.contains(livingEntity.getClass())) - { - continue; - } - - hasOffensa = hasOffensa && this.canDrainReagent(ritualStone, ReagentRegistry.offensaReagent, offensaDrain, true); - - if (livingEntity.attackEntityFrom(DamageSource.outOfWorld, hasOffensa ? 2 : 1)) - { - hasTennebrae = hasTennebrae && this.canDrainReagent(ritualStone, ReagentRegistry.tenebraeReagent, tennebraeDrain, true); - - - entityCount++; - tileAltar.sacrificialDaggerCall(amount * (hasTennebrae ? 2 : 1) * (hasOffensa ? 2 : 1), true); - } - } - - SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh() * entityCount); - - if(hasPotentia) - { - this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, true); - } - } - } - - @Override - public int getCostPerRefresh() - { - return 2; - } - - @Override - public List getRitualComponentList() - { - ArrayList wellOfSufferingRitual = new ArrayList(); - wellOfSufferingRitual.add(new RitualComponent(1, 0, 1, RitualComponent.FIRE)); - wellOfSufferingRitual.add(new RitualComponent(-1, 0, 1, RitualComponent.FIRE)); - wellOfSufferingRitual.add(new RitualComponent(1, 0, -1, RitualComponent.FIRE)); - wellOfSufferingRitual.add(new RitualComponent(-1, 0, -1, RitualComponent.FIRE)); - wellOfSufferingRitual.add(new RitualComponent(2, -1, 2, RitualComponent.FIRE)); - wellOfSufferingRitual.add(new RitualComponent(2, -1, -2, RitualComponent.FIRE)); - wellOfSufferingRitual.add(new RitualComponent(-2, -1, 2, RitualComponent.FIRE)); - wellOfSufferingRitual.add(new RitualComponent(-2, -1, -2, RitualComponent.FIRE)); - wellOfSufferingRitual.add(new RitualComponent(0, -1, 2, RitualComponent.EARTH)); - wellOfSufferingRitual.add(new RitualComponent(2, -1, 0, RitualComponent.EARTH)); - wellOfSufferingRitual.add(new RitualComponent(0, -1, -2, RitualComponent.EARTH)); - wellOfSufferingRitual.add(new RitualComponent(-2, -1, 0, RitualComponent.EARTH)); - wellOfSufferingRitual.add(new RitualComponent(-3, -1, -3, RitualComponent.DUSK)); - wellOfSufferingRitual.add(new RitualComponent(3, -1, -3, RitualComponent.DUSK)); - wellOfSufferingRitual.add(new RitualComponent(-3, -1, 3, RitualComponent.DUSK)); - wellOfSufferingRitual.add(new RitualComponent(3, -1, 3, RitualComponent.DUSK)); - wellOfSufferingRitual.add(new RitualComponent(2, -1, 4, RitualComponent.WATER)); - wellOfSufferingRitual.add(new RitualComponent(4, -1, 2, RitualComponent.WATER)); - wellOfSufferingRitual.add(new RitualComponent(-2, -1, 4, RitualComponent.WATER)); - wellOfSufferingRitual.add(new RitualComponent(4, -1, -2, RitualComponent.WATER)); - wellOfSufferingRitual.add(new RitualComponent(2, -1, -4, RitualComponent.WATER)); - wellOfSufferingRitual.add(new RitualComponent(-4, -1, 2, RitualComponent.WATER)); - wellOfSufferingRitual.add(new RitualComponent(-2, -1, -4, RitualComponent.WATER)); - wellOfSufferingRitual.add(new RitualComponent(-4, -1, -2, RitualComponent.WATER)); - wellOfSufferingRitual.add(new RitualComponent(1, 0, 4, RitualComponent.WATER)); - wellOfSufferingRitual.add(new RitualComponent(4, 0, 1, RitualComponent.WATER)); - wellOfSufferingRitual.add(new RitualComponent(1, 0, -4, RitualComponent.WATER)); - wellOfSufferingRitual.add(new RitualComponent(-4, 0, 1, RitualComponent.WATER)); - wellOfSufferingRitual.add(new RitualComponent(-1, 0, 4, RitualComponent.WATER)); - wellOfSufferingRitual.add(new RitualComponent(4, 0, -1, RitualComponent.WATER)); - wellOfSufferingRitual.add(new RitualComponent(-1, 0, -4, RitualComponent.WATER)); - wellOfSufferingRitual.add(new RitualComponent(-4, 0, -1, RitualComponent.WATER)); - wellOfSufferingRitual.add(new RitualComponent(4, 1, 0, RitualComponent.AIR)); - wellOfSufferingRitual.add(new RitualComponent(0, 1, 4, RitualComponent.AIR)); - wellOfSufferingRitual.add(new RitualComponent(-4, 1, 0, RitualComponent.AIR)); - wellOfSufferingRitual.add(new RitualComponent(0, 1, -4, RitualComponent.AIR)); - return wellOfSufferingRitual; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicIgnMeta.java b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicIgnMeta.java deleted file mode 100644 index 2dd2077b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicIgnMeta.java +++ /dev/null @@ -1,13 +0,0 @@ -package WayofTime.alchemicalWizardry.common.routing; - -import WayofTime.alchemicalWizardry.api.RoutingFocusLogic; -import net.minecraft.item.ItemStack; - -public class RoutingFocusLogicIgnMeta extends RoutingFocusLogic -{ - @Override - public boolean getDefaultMatch(ItemStack keyStack, ItemStack checkedStack) - { - return keyStack != null && checkedStack != null && keyStack.getItem() == checkedStack.getItem(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimit.java b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimit.java deleted file mode 100644 index ad1aed90..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimit.java +++ /dev/null @@ -1,13 +0,0 @@ -package WayofTime.alchemicalWizardry.common.routing; - -import WayofTime.alchemicalWizardry.api.ILimitingLogic; -import WayofTime.alchemicalWizardry.api.RoutingFocusLogic; - -public class RoutingFocusLogicLimit extends RoutingFocusLogic implements ILimitingLogic -{ - @Override - public int getRoutingLimit() - { - return 0; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitDefault.java b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitDefault.java deleted file mode 100644 index 7c485ef9..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitDefault.java +++ /dev/null @@ -1,26 +0,0 @@ -package WayofTime.alchemicalWizardry.common.routing; - -import net.minecraft.item.ItemStack; -import WayofTime.alchemicalWizardry.common.items.routing.ILimitedRoutingFocus; - -public class RoutingFocusLogicLimitDefault extends RoutingFocusLogicLimit -{ - public int limit = 0; - - public RoutingFocusLogicLimitDefault(ItemStack stack) - { - if(stack != null && stack.getItem() instanceof ILimitedRoutingFocus) - { - limit = ((ILimitedRoutingFocus)stack.getItem()).getRoutingFocusLimit(stack); - }else - { - limit = 0; - } - } - - @Override - public int getRoutingLimit() - { - return limit; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitGlobal.java b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitGlobal.java deleted file mode 100644 index 0e370db0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitGlobal.java +++ /dev/null @@ -1,32 +0,0 @@ -package WayofTime.alchemicalWizardry.common.routing; - -import net.minecraft.item.ItemStack; -import WayofTime.alchemicalWizardry.common.items.routing.ILimitedRoutingFocus; - -public class RoutingFocusLogicLimitGlobal extends RoutingFocusLogicLimit -{ - public int limit = 0; - - public RoutingFocusLogicLimitGlobal(ItemStack stack) - { - if(stack != null && stack.getItem() instanceof ILimitedRoutingFocus) - { - limit = ((ILimitedRoutingFocus)stack.getItem()).getRoutingFocusLimit(stack); - }else - { - limit = 0; - } - } - - @Override - public int getRoutingLimit() - { - return limit; - } - - @Override - public boolean getDefaultMatch(ItemStack keyStack, ItemStack checkedStack) - { - return true; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitIgnMeta.java b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitIgnMeta.java deleted file mode 100644 index 74124d9e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitIgnMeta.java +++ /dev/null @@ -1,27 +0,0 @@ -package WayofTime.alchemicalWizardry.common.routing; - -import net.minecraft.item.ItemStack; -import WayofTime.alchemicalWizardry.api.ILimitingLogic; -import WayofTime.alchemicalWizardry.common.items.routing.ILimitedRoutingFocus; - -public class RoutingFocusLogicLimitIgnMeta extends RoutingFocusLogicIgnMeta implements ILimitingLogic -{ - public int limit = 0; - - public RoutingFocusLogicLimitIgnMeta(ItemStack stack) - { - if(stack != null && stack.getItem() instanceof ILimitedRoutingFocus) - { - limit = ((ILimitedRoutingFocus)stack.getItem()).getRoutingFocusLimit(stack); - }else - { - limit = 0; - } - } - - @Override - public int getRoutingLimit() - { - return limit; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitMatchNBT.java b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitMatchNBT.java deleted file mode 100644 index f7887a01..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitMatchNBT.java +++ /dev/null @@ -1,27 +0,0 @@ -package WayofTime.alchemicalWizardry.common.routing; - -import net.minecraft.item.ItemStack; -import WayofTime.alchemicalWizardry.api.ILimitingLogic; -import WayofTime.alchemicalWizardry.common.items.routing.ILimitedRoutingFocus; - -public class RoutingFocusLogicLimitMatchNBT extends RoutingFocusLogicMatchNBT implements ILimitingLogic -{ - public int limit = 0; - - public RoutingFocusLogicLimitMatchNBT(ItemStack stack) - { - if(stack != null && stack.getItem() instanceof ILimitedRoutingFocus) - { - limit = ((ILimitedRoutingFocus)stack.getItem()).getRoutingFocusLimit(stack); - }else - { - limit = 0; - } - } - - @Override - public int getRoutingLimit() - { - return limit; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitModItems.java b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitModItems.java deleted file mode 100644 index 907e925c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitModItems.java +++ /dev/null @@ -1,27 +0,0 @@ -package WayofTime.alchemicalWizardry.common.routing; - -import net.minecraft.item.ItemStack; -import WayofTime.alchemicalWizardry.api.ILimitingLogic; -import WayofTime.alchemicalWizardry.common.items.routing.ILimitedRoutingFocus; - -public class RoutingFocusLogicLimitModItems extends RoutingFocusLogicModItems implements ILimitingLogic -{ - public int limit = 0; - - public RoutingFocusLogicLimitModItems(ItemStack stack) - { - if(stack != null && stack.getItem() instanceof ILimitedRoutingFocus) - { - limit = ((ILimitedRoutingFocus)stack.getItem()).getRoutingFocusLimit(stack); - }else - { - limit = 0; - } - } - - @Override - public int getRoutingLimit() - { - return limit; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicMatchNBT.java b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicMatchNBT.java deleted file mode 100644 index 382511b1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicMatchNBT.java +++ /dev/null @@ -1,18 +0,0 @@ -package WayofTime.alchemicalWizardry.common.routing; - -import WayofTime.alchemicalWizardry.api.RoutingFocusLogic; -import net.minecraft.item.ItemStack; - -public class RoutingFocusLogicMatchNBT extends RoutingFocusLogic -{ - public boolean getDefaultMatch(ItemStack keyStack, ItemStack checkedStack) - { - return (keyStack != null ? checkedStack != null && keyStack.getItem() == checkedStack.getItem() && (keyStack.getItem().getHasSubtypes() ? keyStack.getItemDamage() == checkedStack.getItemDamage() : true) && keyStack.areItemStackTagsEqual(keyStack, checkedStack) : false); - } - - @Override - public boolean doesItemMatch(boolean previous, ItemStack keyStack, ItemStack checkedStack) - { - return previous && this.getDefaultMatch(keyStack, checkedStack); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicModItems.java b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicModItems.java deleted file mode 100644 index c5f9d035..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicModItems.java +++ /dev/null @@ -1,37 +0,0 @@ -package WayofTime.alchemicalWizardry.common.routing; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.registry.GameData; -import WayofTime.alchemicalWizardry.api.RoutingFocusLogic; - -public class RoutingFocusLogicModItems extends RoutingFocusLogic -{ - @Override - public boolean getDefaultMatch(ItemStack keyStack, ItemStack checkedStack) - { - if(keyStack != null && checkedStack != null && keyStack.getItem() != null && checkedStack.getItem() != null) - { - String keyId = getModID(keyStack.getItem()); - String checkedId = getModID(checkedStack.getItem()); - return keyId.equals(checkedId); - } - - return false; - } - - public String getModID(Item itm) - { - String str = (String) GameData.getItemRegistry().getNameForObject(itm); - if(!str.isEmpty()) - { - String[] strs = str.split(":"); - if(strs != null && strs.length >= 1) - { - return strs[0]; - } - } - - return ""; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/SpellModifier.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/SpellModifier.java deleted file mode 100644 index 36754656..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/SpellModifier.java +++ /dev/null @@ -1,21 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex; - -public class SpellModifier -{ - public static final int DEFAULT = 0; - public static final int OFFENSIVE = 1; - public static final int DEFENSIVE = 2; - public static final int ENVIRONMENTAL = 3; - - private int modifier; - - protected SpellModifier(int modifier) - { - this.modifier = modifier; - } - - public int getModifier() - { - return this.modifier; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/SpellModifierDefault.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/SpellModifierDefault.java deleted file mode 100644 index 771ca1ce..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/SpellModifierDefault.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex; - -public class SpellModifierDefault extends SpellModifier -{ - public SpellModifierDefault() - { - super(SpellModifier.DEFAULT); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/SpellModifierDefensive.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/SpellModifierDefensive.java deleted file mode 100644 index 29d89007..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/SpellModifierDefensive.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex; - -public class SpellModifierDefensive extends SpellModifier -{ - public SpellModifierDefensive() - { - super(SpellModifier.DEFENSIVE); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/SpellModifierEnvironmental.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/SpellModifierEnvironmental.java deleted file mode 100644 index f805dfca..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/SpellModifierEnvironmental.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex; - -public class SpellModifierEnvironmental extends SpellModifier -{ - public SpellModifierEnvironmental() - { - super(SpellModifier.ENVIRONMENTAL); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/SpellModifierOffensive.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/SpellModifierOffensive.java deleted file mode 100644 index 5d956e3f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/SpellModifierOffensive.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex; - -public class SpellModifierOffensive extends SpellModifier -{ - public SpellModifierOffensive() - { - super(SpellModifier.OFFENSIVE); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/OutputRoutingFocusModItems.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/OutputRoutingFocusModItems.java deleted file mode 100644 index 334cd450..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/OutputRoutingFocusModItems.java +++ /dev/null @@ -1,19 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect; - -import WayofTime.alchemicalWizardry.api.RoutingFocusLogic; -import WayofTime.alchemicalWizardry.common.items.routing.OutputRoutingFocus; -import WayofTime.alchemicalWizardry.common.routing.RoutingFocusLogicModItems; - -public class OutputRoutingFocusModItems extends OutputRoutingFocus -{ - @Override - public String getFocusDescription() - { - return "Only accepts items that are the same modID"; - } - - public RoutingFocusLogic getLogic() - { - return new RoutingFocusLogicModItems(); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellHelper.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellHelper.java deleted file mode 100644 index 7e040efe..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellHelper.java +++ /dev/null @@ -1,967 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect; - -import java.util.Iterator; -import java.util.List; -import java.util.Random; -import java.util.regex.Pattern; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockLiquid; -import net.minecraft.block.state.IBlockState; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentProtection; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityList; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.FurnaceRecipes; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.network.play.server.S06PacketUpdateHealth; -import net.minecraft.network.play.server.S07PacketRespawn; -import net.minecraft.network.play.server.S1DPacketEntityEffect; -import net.minecraft.network.play.server.S1FPacketSetExperience; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.management.ServerConfigurationManager; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; -import net.minecraft.world.WorldServer; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.fluids.IFluidBlock; -import net.minecraftforge.fml.common.FMLCommonHandler; -import net.minecraftforge.oredict.OreDictionary; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.alchemy.energy.IAlchemyGoggles; -import WayofTime.alchemicalWizardry.api.items.interfaces.ILPGauge; -import WayofTime.alchemicalWizardry.api.items.interfaces.IReagentManipulator; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.api.spell.APISpellHelper; -import WayofTime.alchemicalWizardry.common.NewPacketHandler; -import WayofTime.alchemicalWizardry.common.items.sigil.SigilDivination; - -public class SpellHelper extends APISpellHelper -{ - public static Random rand = new Random(); - public static final double root2 = Math.sqrt(2); - - public static boolean canEntityBeSeen(Entity entity, Entity entity2) - { - return entity.worldObj.rayTraceBlocks(new Vec3(entity.posX, entity.posY, entity.posZ), new Vec3(entity2.posX, entity2.posY, entity2.posZ), false) == null; - } - - public static void smeltBlockInWorld(World world, BlockPos pos) - { - FurnaceRecipes recipes = FurnaceRecipes.instance(); - - IBlockState state = world.getBlockState(pos); - Block block = state.getBlock(); - if (block == null) - { - return; - } - - int meta = block.getMetaFromState(state); - - ItemStack smeltedStack = recipes.getSmeltingResult(new ItemStack(block, 1, meta)); - if (smeltedStack != null && smeltedStack.getItem() instanceof ItemBlock) - { - world.setBlockState(pos, ((ItemBlock) (smeltedStack.getItem())).block.getStateFromMeta(smeltedStack.getItemDamage()), 3); - } - } - - public static boolean canPlayerSeeAlchemy(EntityPlayer player) - { - if (player != null) - { - ItemStack stack = player.getCurrentArmor(3); - if (stack != null) - { - Item item = stack.getItem(); - if (item instanceof IAlchemyGoggles && ((IAlchemyGoggles) item).showIngameHUD(player.worldObj, stack, player)) - { - return true; - } - } - - ItemStack heldStack = player.getHeldItem(); - if (heldStack != null && heldStack.getItem() instanceof IReagentManipulator) - { - return true; - } - } - - return false; - } - - public static boolean canPlayerSeeLPBar(EntityPlayer player) - { - if (player != null) - { - for(int i=0; i<4; i++) - { - ItemStack stack = player.getCurrentArmor(i); - if (stack != null) - { - Item item = stack.getItem(); - if (item instanceof ILPGauge && ((ILPGauge) item).canSeeLPBar(stack)) - { - return true; - } - } - - } - - ItemStack heldStack = player.getHeldItem(); - - if (heldStack != null && heldStack.getItem() instanceof SigilDivination) - { - return true; - } - } - - return false; - } - - public static List getEntitiesInRange(World world, double posX, double posY, double posZ, double horizontalRadius, double verticalRadius) - { - return world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(posX - 0.5f, posY - 0.5f, posZ - 0.5f, posX + 0.5f, posY + 0.5f, posZ + 0.5f).expand(horizontalRadius, verticalRadius, horizontalRadius)); - } - - public static List getLivingEntitiesInRange(World world, double posX, double posY, double posZ, double horizontalRadius, double verticalRadius) - { - return world.getEntitiesWithinAABB(EntityLivingBase.class, new AxisAlignedBB(posX - 0.5f, posY - 0.5f, posZ - 0.5f, posX + 0.5f, posY + 0.5f, posZ + 0.5f).expand(horizontalRadius, verticalRadius, horizontalRadius)); - } - - public static List getItemsInRange(World world, double posX, double posY, double posZ, double horizontalRadius, double verticalRadius) - { - return world.getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(posX - 0.5f, posY - 0.5f, posZ - 0.5f, posX + 0.5f, posY + 0.5f, posZ + 0.5f).expand(horizontalRadius, verticalRadius, horizontalRadius)); - } - - public static List getPlayersInRange(World world, double posX, double posY, double posZ, double horizontalRadius, double verticalRadius) - { - return world.getEntitiesWithinAABB(EntityPlayer.class, new AxisAlignedBB(posX - 0.5f, posY - 0.5f, posZ - 0.5f, posX + 0.5f, posY + 0.5f, posZ + 0.5f).expand(horizontalRadius, verticalRadius, horizontalRadius)); - } - - public static double gaussian(double d) - { - return d * ((rand.nextFloat() - 0.5D)); - } - - public static EnumFacing getDirectionForLookVector(Vec3 lookVec) - { - double distance = lookVec.lengthVector(); - - if (lookVec.yCoord > distance * 0.9) - { - return EnumFacing.UP; - } - if (lookVec.yCoord < distance * -0.9) - { - return EnumFacing.DOWN; - } - - return getCompassDirectionForLookVector(lookVec); - } - - public static EnumFacing getCompassDirectionForLookVector(Vec3 lookVec) - { - double radius = Math.sqrt(Math.pow(lookVec.xCoord, 2) + Math.pow(lookVec.zCoord, 2)); - - if (lookVec.zCoord > radius * 1 / root2) - { - return EnumFacing.SOUTH; - } - if (lookVec.zCoord < -radius * 1 / root2) - { - return EnumFacing.NORTH; - } - if (lookVec.xCoord > radius * 1 / root2) - { - return EnumFacing.EAST; - } - if (lookVec.xCoord < -radius * 1 / root2) - { - return EnumFacing.WEST; - } - - return EnumFacing.EAST; - } - - public static boolean freezeWaterBlock(World world, BlockPos pos) - { - IBlockState state = world.getBlockState(pos); - Block block = state.getBlock(); - - if (block == Blocks.water || block == Blocks.flowing_water) - { - world.setBlockState(pos, Blocks.ice.getDefaultState()); - return true; - } - - return false; - } - - public static String getUsername(EntityPlayer player) - { - return SoulNetworkHandler.getUsername(player); - } - - public static EntityPlayer getPlayerForUsername(String str) - { - return SoulNetworkHandler.getPlayerForUsername(str); - } - - public static void sendParticleToPlayer(EntityPlayer player, EnumParticleTypes type, double xCoord, double yCoord, double zCoord, double xVel, double yVel, double zVel) - { - if (player instanceof EntityPlayerMP) - { - NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getParticlePacket(type, xCoord, yCoord, zCoord, xVel, yVel, zVel), (EntityPlayerMP) player); - } - } - - public static void sendIndexedParticleToPlayer(EntityPlayer player, int index, double xCoord, double yCoord, double zCoord) - { - switch (index) - { - case 1: - SpellHelper.sendParticleToPlayer(player, EnumParticleTypes.SPELL_MOB, xCoord + 0.5D + rand.nextGaussian() / 8, yCoord + 1.1D, zCoord + 0.5D + rand.nextGaussian() / 8, 0.5117D, 0.0117D, 0.0117D); - break; - case 2: - SpellHelper.sendParticleToPlayer(player, EnumParticleTypes.REDSTONE, xCoord + 0.5D + rand.nextGaussian() / 8, yCoord + 1.1D, zCoord + 0.5D + rand.nextGaussian() / 8, 0.82D, 0.941D, 0.91D); - break; - case 3: - SpellHelper.sendParticleToPlayer(player, EnumParticleTypes.SPELL_MOB, xCoord + 0.5D + rand.nextGaussian() / 8, yCoord + 1.1D, zCoord + 0.5D + rand.nextGaussian() / 8, 1.0D, 0.371D, 0.371D); - break; - case 4: - float f = 1.0F; - float f1 = f * 0.6F + 0.4F; - float f2 = f * f * 0.7F - 0.5F; - float f3 = f * f * 0.6F - 0.7F; - - for (int l = 0; l < 8; ++l) - { - SpellHelper.sendParticleToPlayer(player, EnumParticleTypes.REDSTONE, xCoord + Math.random() - Math.random(), yCoord + Math.random() - Math.random(), zCoord + Math.random() - Math.random(), f1, f2, f3); - } - break; - } - } - - public static void sendParticleToAllAround(World world, double xPos, double yPos, double zPos, int radius, int dimension, EnumParticleTypes type, double xCoord, double yCoord, double zCoord, double xVel, double yVel, double zVel) - { - List entities = SpellHelper.getPlayersInRange(world, xPos, yPos, zPos, radius, radius); - - if (entities == null) - { - return; - } - - for (EntityPlayer player : entities) - { - SpellHelper.sendParticleToPlayer(player, type, xCoord, yCoord, zCoord, xVel, yVel, zVel); - } - } - - public static void sendIndexedParticleToAllAround(World world, double xPos, double yPos, double zPos, int radius, int dimension, int index, double xCoord, double yCoord, double zCoord) - { - List entities = SpellHelper.getPlayersInRange(world, xPos, yPos, zPos, radius, radius); - - if (entities == null) - { - return; - } - - for (EntityPlayer player : entities) - { - SpellHelper.sendIndexedParticleToPlayer(player, index, xCoord, yCoord, zCoord); - } - } - - public static void sendIndexedParticleToAllAround(World world, BlockPos pos1, int radius, int dimension, int index, BlockPos coordPos) - { - sendIndexedParticleToAllAround(world, pos1.getX(), pos1.getY(), pos1.getZ(), radius, dimension, index, coordPos.getX(), coordPos.getY(), coordPos.getZ()); - } - - public static void setPlayerSpeedFromServer(EntityPlayer player, double motionX, double motionY, double motionZ) - { - if (player instanceof EntityPlayerMP) - { - NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getVelSettingPacket(motionX, motionY, motionZ), (EntityPlayerMP) player); - } - } - - public static boolean isFakePlayer(World world, EntityPlayer player) - { - return !world.isRemote && isFakePlayer(player); - } - - private static final Pattern FAKE_PLAYER_PATTERN = Pattern.compile("^(?:\\[.*\\])|(?:ComputerCraft)$"); - public static boolean isFakePlayer(EntityPlayer player) - { - return player instanceof FakePlayer || FAKE_PLAYER_PATTERN.matcher(SpellHelper.getUsername(player)).matches(); - } - - public static void smashBlock(World world, BlockPos pos) - { - IBlockState state = world.getBlockState(pos); - Block block = state.getBlock(); - - if (block == Blocks.stone) - { - world.setBlockState(pos, Blocks.cobblestone.getDefaultState()); - } else if (block == Blocks.cobblestone) - { - world.setBlockState(pos, Blocks.gravel.getDefaultState()); - } else if (block == Blocks.gravel) - { - world.setBlockState(pos, Blocks.sand.getDefaultState()); - } - } - - public static boolean isBlockFluid(Block block) - { - return block instanceof IFluidBlock || block instanceof BlockLiquid; - } - - public static void evaporateWaterBlock(World world, BlockPos pos) - { - IBlockState state = world.getBlockState(pos); - Block block = state.getBlock(); - - if (block == Blocks.water || block == Blocks.flowing_water) - { - world.setBlockToAir(pos); - } - } - - public static ItemStack getDustForOre(ItemStack item) - { - int [] oreIds = OreDictionary.getOreIDs(item); - - for(int id : oreIds) - { - String oreName = OreDictionary.getOreName(id); - - if (oreName.contains("ore")) - { - String lowercaseOre = oreName.toLowerCase(); - boolean isAllowed = false; - - for (String str : AlchemicalWizardry.allowedCrushedOresArray) - { - String testStr = str.toLowerCase(); - - if (lowercaseOre.contains(testStr)) - { - isAllowed = true; - break; - } - } - - if (!isAllowed) - { - return null; - } - - String dustName = oreName.replace("ore", "dust"); - - List items = OreDictionary.getOres(dustName); - - if (items != null && items.size() >= 1) - { - return (items.get(0).copy()); - } - } - } - - return null; - } - - public static String getNumeralForInt(int num) - { - switch (num) - { - case 1: - return "I"; - case 2: - return "II"; - case 3: - return "III"; - case 4: - return "IV"; - case 5: - return "V"; - case 6: - return "VI"; - case 7: - return "VII"; - case 8: - return "VIII"; - case 9: - return "IX"; - case 10: - return "X"; - default: - return ""; - } - } - - /** - * Used to determine if stack1 can be placed into stack2. If stack2 is null and stack1 isn't null, returns true. Ignores stack size - * - * @param stack1 Stack that is placed into a slot - * @param stack2 Slot content that stack1 is placed into - * @return True if they can be combined - */ - public static boolean canCombine(ItemStack stack1, ItemStack stack2) - { - if (stack1 == null) - { - return false; - } - - if (stack2 == null) - { - return true; - } - - if (stack1.isItemStackDamageable() ^ stack2.isItemStackDamageable()) - { - return false; - } - - return stack1.getItem() == stack2.getItem() && stack1.getItemDamage() == stack2.getItemDamage() && ItemStack.areItemStackTagsEqual(stack1, stack2); - } - - /** - * @param stack1 Stack that is placed into a slot - * @param stack2 Slot content that stack1 is placed into - * @return Stacks after stacking - */ - public static ItemStack[] combineStacks(ItemStack stack1, ItemStack stack2, int transferMax) - { - ItemStack[] returned = new ItemStack[2]; - - if (canCombine(stack1, stack2)) - { - int transferedAmount = Math.min(transferMax, stack2 == null ? stack1.stackSize : Math.min(stack2.getMaxStackSize() - stack2.stackSize, stack1.stackSize)); - if (transferedAmount > 0) - { - ItemStack copyStack = stack1.splitStack(transferedAmount); - if (stack2 == null) - { - stack2 = copyStack; - } else - { - stack2.stackSize += transferedAmount; - } - } - } - - returned[0] = stack1; - returned[1] = stack2; - - return returned; - } - - /** - * @param stack1 Stack that is placed into a slot - * @param stack2 Slot content that stack1 is placed into - * @return Stacks after stacking - */ - public static ItemStack[] combineStacks(ItemStack stack1, ItemStack stack2) - { - ItemStack[] returned = new ItemStack[2]; - - if (canCombine(stack1, stack2)) - { - int transferedAmount = stack2 == null ? stack1.stackSize : Math.min(stack2.getMaxStackSize() - stack2.stackSize, stack1.stackSize); - if (transferedAmount > 0) - { - ItemStack copyStack = stack1.splitStack(transferedAmount); - if (stack2 == null) - { - stack2 = copyStack; - } else - { - stack2.stackSize += transferedAmount; - } - } - } - - returned[0] = stack1; - returned[1] = stack2; - - return returned; - } - - public static ItemStack insertStackIntoInventory(ItemStack stack, IInventory inventory, EnumFacing dir) - { - if (stack == null) - { - return null; - } - - boolean[] canBeInserted = new boolean[inventory.getSizeInventory()]; - - if(inventory instanceof ISidedInventory) - { - int[] array = ((ISidedInventory)inventory).getSlotsForFace(dir); - for(int in : array) - { - canBeInserted[in] = inventory.isItemValidForSlot(in, stack) && ((ISidedInventory)inventory).canInsertItem(in, stack, dir); - } - }else - { - for(int i=0; i= limit) - { - return stack; - } - - int newLimit = limit - numberMatching; - - for (int i = 0; i < inventory.getSizeInventory(); i++) - { - if(!canBeInserted[i]) - { - continue; - } - - int prevStackSize = stack.stackSize; - - ItemStack[] combinedStacks = combineStacks(stack, inventory.getStackInSlot(i), newLimit); - stack = combinedStacks[0]; - inventory.setInventorySlotContents(i, combinedStacks[1]); - - newLimit -= (prevStackSize - stack.stackSize); - - if (newLimit <= 0 || stack.stackSize <= 0) - { - return stack; - } - } - - return stack; - } - - public static int getNumberOfItemsInInventory(IInventory inventory, EnumFacing dir) - { - boolean[] canBeInserted = new boolean[inventory.getSizeInventory()]; - - if(inventory instanceof ISidedInventory) - { - int[] array = ((ISidedInventory)inventory).getSlotsForFace(dir); - for(int in : array) - { - canBeInserted[in] = true; - } - }else - { - for(int i=0; i potion = player.getActivePotionEffects().iterator(); potion.hasNext(); ) - { - player.playerNetServerHandler.sendPacket(new S1DPacketEntityEffect(player.getEntityId(), potion.next())); - } - player.playerNetServerHandler.sendPacket(new S1FPacketSetExperience(player.experience, player.experienceTotal, player.experienceLevel)); - FMLCommonHandler.instance().firePlayerChangedDimensionEvent(player, oldWorldServer.provider.getDimensionId(), player.dimension); - player.timeUntilPortal = 150; - } - player.worldObj.theProfiler.endSection(); - newWorldServer.playSoundEffect(d, e, f, "mob.endermen.portal", 1.0F, 1.0F); - return player; - } else - { - NBTTagCompound tag = new NBTTagCompound(); - entity.writeToNBTOptional(tag); - entity.setDead(); - oldWorld.playSoundEffect(entity.posX, entity.posY, entity.posZ, "mob.endermen.portal", 1.0F, 1.0F); - Entity teleportedEntity = EntityList.createEntityFromNBT(tag, newWorldServer); - if (teleportedEntity != null) - { - teleportedEntity.setLocationAndAngles(d, e, f, entity.rotationYaw, entity.rotationPitch); - teleportedEntity.forceSpawn = true; - newWorldServer.spawnEntityInWorld(teleportedEntity); - teleportedEntity.setWorld(newWorldServer); - teleportedEntity.timeUntilPortal = 150; - } - oldWorldServer.resetUpdateEntityTick(); - newWorldServer.resetUpdateEntityTick(); - newWorldServer.playSoundEffect(d, e, f, "mob.endermen.portal", 1.0F, 1.0F); - return teleportedEntity; - } - } - } - return null; - } - - public static boolean areItemStacksEqual(ItemStack stack, ItemStack compressedStack) - { - return stack.isItemEqual(compressedStack) && (stack.getTagCompound() == null ? compressedStack.getTagCompound() == null : stack.getTagCompound().equals(compressedStack.getTagCompound())); - } - - /* - * Ripped from EntityLivingBase, since it decided to be a scrub and make the method protected. - */ - public static float applyPotionDamageCalculations(EntityLivingBase entity, DamageSource p_70672_1_, float p_70672_2_) - { -// if (p_70672_1_.isDamageAbsolute()) -// { -// return p_70672_2_; -// } -// else - { -// if (entity instanceof EntityZombie) - { - //par2 = par2; // Forge: Noop Warning - } - - int i; - int j; - float f1; - - if (entity.isPotionActive(Potion.resistance) && p_70672_1_ != DamageSource.outOfWorld) - { - i = (entity.getActivePotionEffect(Potion.resistance).getAmplifier() + 1) * 5; - j = 25 - i; - f1 = p_70672_2_ * (float)j; - p_70672_2_ = f1 / 25.0F; - } - - if (p_70672_2_ <= 0.0F) - { - return 0.0F; - } - else - { - return applySpecialProtection(entity, p_70672_1_, p_70672_2_); - } - } - } - - public static double protCoeff = 0.875; - public static double scalCoeff = 0.8; - - public static float applySpecialProtection(EntityLivingBase entity, DamageSource source, float damage) - { - ItemStack[] armour = entity.getInventory(); - - if(armour == null) - { - return damage; - } - - int total = 0; - for(int i = 0; i < armour.length; i++) - { - ItemStack stack = armour[i]; - if(stack != null) - { - NBTTagList nbttaglist = stack.getEnchantmentTagList(); - - if(nbttaglist != null) - { - for(int j = 0; j < nbttaglist.tagCount(); ++j) - { - short short1 = nbttaglist.getCompoundTagAt(i).getShort("id"); - short short2 = nbttaglist.getCompoundTagAt(i).getShort("lvl"); - - if (Enchantment.enchantmentsList[short1] != null) - { - Enchantment ench = Enchantment.enchantmentsList[short1]; - if(ench instanceof EnchantmentProtection) - { - total += ench.calcModifierDamage(short2, source); - } - } - } - } - } - } - - if(total > 0) - { - total = (total + 1 >> + 1) + rand.nextInt(total + 1 >> + 1); - if(total <= 20) - { - return damage * (25 - total) / 25; - }else - { - float factor = (float)(0.8 + 0.2 * (1 - Math.pow(protCoeff, Math.pow((total - 20), scalCoeff)))); - return damage * (1 - factor); - } - } - - return damage; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEMeleeDefaultEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEMeleeDefaultEarth.java deleted file mode 100644 index fca0705a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEMeleeDefaultEarth.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmMelee; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.MeleeDefaultEarth; - -public class CSEMeleeDefaultEarth extends ComplexSpellEffect -{ - public CSEMeleeDefaultEarth() - { - super(ComplexSpellType.EARTH, ComplexSpellModifier.DEFAULT); - } - - public CSEMeleeDefaultEarth(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmMelee) - { - ((SpellParadigmMelee)parad).addWorldEffect(new MeleeDefaultEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEMeleeDefaultEarth(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (50 * Math.pow(1.5 * this.potencyEnhancement + 1, 3) * (0.5 * this.powerEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEMeleeDefensiveEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEMeleeDefensiveEarth.java deleted file mode 100644 index c9e0954d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEMeleeDefensiveEarth.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmMelee; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.MeleeDefensiveEarth; - -public class CSEMeleeDefensiveEarth extends ComplexSpellEffect -{ - public CSEMeleeDefensiveEarth() - { - super(ComplexSpellType.EARTH, ComplexSpellModifier.DEFENSIVE); - } - - public CSEMeleeDefensiveEarth(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmMelee) - { - ((SpellParadigmMelee)parad).addWorldEffect(new MeleeDefensiveEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEMeleeDefensiveEarth(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (5 * (1.2 * this.powerEnhancement + 1) * (1.0f / 3.0f * Math.pow(this.potencyEnhancement, 2) + 2 + 1.0f / 2.0f * this.potencyEnhancement) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEMeleeEnvironmentalEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEMeleeEnvironmentalEarth.java deleted file mode 100644 index 35a00764..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEMeleeEnvironmentalEarth.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmMelee; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.MeleeEnvironmentalEarth; - -public class CSEMeleeEnvironmentalEarth extends ComplexSpellEffect -{ - public CSEMeleeEnvironmentalEarth() - { - super(ComplexSpellType.EARTH, ComplexSpellModifier.ENVIRONMENTAL); - } - - public CSEMeleeEnvironmentalEarth(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmMelee) - { - ((SpellParadigmMelee)parad).addWorldEffect(new MeleeEnvironmentalEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEMeleeEnvironmentalEarth(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (500 * Math.pow(2 * this.potencyEnhancement + 1, 3) * (0.25 * this.powerEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEMeleeOffensiveEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEMeleeOffensiveEarth.java deleted file mode 100644 index 9e294bb3..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEMeleeOffensiveEarth.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmMelee; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.MeleeOffensiveEarth; - -public class CSEMeleeOffensiveEarth extends ComplexSpellEffect -{ - public CSEMeleeOffensiveEarth() - { - super(ComplexSpellType.EARTH, ComplexSpellModifier.OFFENSIVE); - } - - public CSEMeleeOffensiveEarth(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmMelee) - { - ((SpellParadigmMelee)parad).addWorldEffect(new MeleeOffensiveEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEMeleeOffensiveEarth(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (20 * Math.pow(1.5 * this.powerEnhancement + 1, 3) * (0.25 * this.powerEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEProjectileDefaultEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEProjectileDefaultEarth.java deleted file mode 100644 index 3f99eea3..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEProjectileDefaultEarth.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmProjectile; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.ProjectileDefaultEarth; - -public class CSEProjectileDefaultEarth extends ComplexSpellEffect -{ - public CSEProjectileDefaultEarth() - { - super(ComplexSpellType.EARTH, ComplexSpellModifier.DEFAULT); - } - - public CSEProjectileDefaultEarth(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmProjectile) - { - ((SpellParadigmProjectile)parad).addImpactEffect(new ProjectileDefaultEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEProjectileDefaultEarth(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (10 * Math.pow((0.5 * (this.powerEnhancement) + 1) * 2 + 1, 3) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEProjectileDefensiveEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEProjectileDefensiveEarth.java deleted file mode 100644 index 503fdd2a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEProjectileDefensiveEarth.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmProjectile; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.ProjectileDefensiveEarth; - -public class CSEProjectileDefensiveEarth extends ComplexSpellEffect -{ - public CSEProjectileDefensiveEarth() - { - super(ComplexSpellType.EARTH, ComplexSpellModifier.DEFENSIVE); - } - - public CSEProjectileDefensiveEarth(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmProjectile) - { - ((SpellParadigmProjectile)parad).addImpactEffect(new ProjectileDefensiveEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEProjectileDefensiveEarth(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (3 * Math.pow((this.powerEnhancement * 2 + 1), 2) * (this.potencyEnhancement * 2 + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEProjectileEnvironmentalEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEProjectileEnvironmentalEarth.java deleted file mode 100644 index cec867cd..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEProjectileEnvironmentalEarth.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmProjectile; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.ProjectileEnvironmentalEarth; - -public class CSEProjectileEnvironmentalEarth extends ComplexSpellEffect -{ - public CSEProjectileEnvironmentalEarth() - { - super(ComplexSpellType.EARTH, ComplexSpellModifier.ENVIRONMENTAL); - } - - public CSEProjectileEnvironmentalEarth(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmProjectile) - { - ((SpellParadigmProjectile)parad).addUpdateEffect(new ProjectileEnvironmentalEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEProjectileEnvironmentalEarth(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (10 * 2 * (0.1d * (this.potencyEnhancement + 1)) * Math.pow(3.47, this.potencyEnhancement) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEProjectileOffensiveEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEProjectileOffensiveEarth.java deleted file mode 100644 index 139c88bb..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEProjectileOffensiveEarth.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmProjectile; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.ProjectileOffensiveEarth; - -public class CSEProjectileOffensiveEarth extends ComplexSpellEffect -{ - public CSEProjectileOffensiveEarth() - { - super(ComplexSpellType.EARTH, ComplexSpellModifier.OFFENSIVE); - } - - public CSEProjectileOffensiveEarth(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmProjectile) - { - ((SpellParadigmProjectile)parad).addImpactEffect(new ProjectileOffensiveEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEProjectileOffensiveEarth(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (10 * (1.5 * this.potencyEnhancement + 1) * (Math.pow(1 * this.powerEnhancement + 1, 2)) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSESelfDefaultEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSESelfDefaultEarth.java deleted file mode 100644 index fd767c1b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSESelfDefaultEarth.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmSelf; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.SelfDefaultEarth; - -public class CSESelfDefaultEarth extends ComplexSpellEffect -{ - public CSESelfDefaultEarth() - { - super(ComplexSpellType.EARTH, ComplexSpellModifier.DEFAULT); - } - - public CSESelfDefaultEarth(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmSelf) - { - ((SpellParadigmSelf)parad).addSelfSpellEffect(new SelfDefaultEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSESelfDefaultEarth(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (20 * Math.pow(1.5 * powerEnhancement + 1, 2) * (2 * this.potencyEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSESelfDefensiveEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSESelfDefensiveEarth.java deleted file mode 100644 index 64700185..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSESelfDefensiveEarth.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmSelf; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.SelfDefensiveEarth; - -public class CSESelfDefensiveEarth extends ComplexSpellEffect -{ - public CSESelfDefensiveEarth() - { - super(ComplexSpellType.EARTH, ComplexSpellModifier.DEFENSIVE); - } - - public CSESelfDefensiveEarth(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmSelf) - { - ((SpellParadigmSelf)parad).addSelfSpellEffect(new SelfDefensiveEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSESelfDefensiveEarth(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (750 * (1.1 * this.powerEnhancement + 1) * (0.5 * this.potencyEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSESelfEnvironmentalEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSESelfEnvironmentalEarth.java deleted file mode 100644 index 1c5daa18..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSESelfEnvironmentalEarth.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmSelf; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.SelfEnvironmentalEarth; - -public class CSESelfEnvironmentalEarth extends ComplexSpellEffect -{ - public CSESelfEnvironmentalEarth() - { - super(ComplexSpellType.EARTH, ComplexSpellModifier.ENVIRONMENTAL); - } - - public CSESelfEnvironmentalEarth(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmSelf) - { - ((SpellParadigmSelf)parad).addSelfSpellEffect(new SelfEnvironmentalEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSESelfEnvironmentalEarth(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (250 * (1.2 * this.potencyEnhancement + 1) * (3 * this.powerEnhancement + 2.5) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSESelfOffensiveEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSESelfOffensiveEarth.java deleted file mode 100644 index 3eb7bf79..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSESelfOffensiveEarth.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmSelf; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.SelfOffensiveEarth; - -public class CSESelfOffensiveEarth extends ComplexSpellEffect -{ - public CSESelfOffensiveEarth() - { - super(ComplexSpellType.EARTH, ComplexSpellModifier.OFFENSIVE); - } - - public CSESelfOffensiveEarth(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmSelf) - { - ((SpellParadigmSelf)parad).addSelfSpellEffect(new SelfOffensiveEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSESelfOffensiveEarth(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (10 * Math.pow(2 * this.powerEnhancement + 1, 2) * (this.potencyEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEToolDefaultEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEToolDefaultEarth.java deleted file mode 100644 index 0b38fa7b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEToolDefaultEarth.java +++ /dev/null @@ -1,75 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmTool; - -public class CSEToolDefaultEarth extends ComplexSpellEffect -{ - public CSEToolDefaultEarth() - { - super(ComplexSpellType.EARTH, ComplexSpellModifier.DEFAULT); - } - - public CSEToolDefaultEarth(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmTool) - { - String toolClass = "pickaxe"; - - - float digSpeed = 7.0f; - - - switch (this.powerEnhancement) - { - case 1: - digSpeed = 9.0f; - break; - case 2: - digSpeed = 12.0f; - break; - case 3: - digSpeed = 16.0f; - break; - case 4: - digSpeed = 21.0f; - break; - case 5: - digSpeed = 27.0f; - break; - } - - - ((SpellParadigmTool)parad).setDigSpeed(toolClass, digSpeed); - - - int hlvl = this.potencyEnhancement + 2; - ((SpellParadigmTool)parad).setHarvestLevel(toolClass, hlvl); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEToolDefaultEarth(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (1000 * (1 + this.potencyEnhancement * 0.1f) * (1 + this.powerEnhancement * 0.2f) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEToolDefensiveEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEToolDefensiveEarth.java deleted file mode 100644 index 98416506..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEToolDefensiveEarth.java +++ /dev/null @@ -1,75 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmTool; - -public class CSEToolDefensiveEarth extends ComplexSpellEffect -{ - public CSEToolDefensiveEarth() - { - super(ComplexSpellType.EARTH, ComplexSpellModifier.DEFENSIVE); - } - - public CSEToolDefensiveEarth(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmTool) - { - String toolClass = "shovel"; - - - float digSpeed = 7.0f; - - - switch (this.powerEnhancement) - { - case 1: - digSpeed = 9.0f; - break; - case 2: - digSpeed = 12.0f; - break; - case 3: - digSpeed = 16.0f; - break; - case 4: - digSpeed = 21.0f; - break; - case 5: - digSpeed = 27.0f; - break; - } - - - ((SpellParadigmTool)parad).setDigSpeed(toolClass, digSpeed); - - - int hlvl = this.potencyEnhancement + 2; - ((SpellParadigmTool)parad).setHarvestLevel(toolClass, hlvl); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEToolDefensiveEarth(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (1000 * (1 + this.potencyEnhancement * 0.1f) * (1 + this.powerEnhancement * 0.2f) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEToolEnvironmentalEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEToolEnvironmentalEarth.java deleted file mode 100644 index 376db588..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEToolEnvironmentalEarth.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmTool; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.ToolEnvironmentalEarth; - -public class CSEToolEnvironmentalEarth extends ComplexSpellEffect -{ - public CSEToolEnvironmentalEarth() - { - super(ComplexSpellType.EARTH, ComplexSpellModifier.ENVIRONMENTAL); - } - - public CSEToolEnvironmentalEarth(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmTool) - { - ((SpellParadigmTool)parad).addDigAreaEffect(new ToolEnvironmentalEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEToolEnvironmentalEarth(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (10 * (1 + this.potencyEnhancement * 0.8) * Math.pow(1.5 * this.powerEnhancement + 3, 2) * Math.pow(0.85, this.costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEToolOffensiveEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEToolOffensiveEarth.java deleted file mode 100644 index 02f1cf6b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/earth/CSEToolOffensiveEarth.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmTool; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.ToolOffensiveEarth; - -public class CSEToolOffensiveEarth extends ComplexSpellEffect -{ - public CSEToolOffensiveEarth() - { - super(ComplexSpellType.EARTH, ComplexSpellModifier.OFFENSIVE); - } - - public CSEToolOffensiveEarth(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmTool) - { - ((SpellParadigmTool)parad).addItemManipulatorEffect(new ToolOffensiveEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEToolOffensiveEarth(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return 1000; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEMeleeDefaultFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEMeleeDefaultFire.java deleted file mode 100644 index 7c4513aa..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEMeleeDefaultFire.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmMelee; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.MeleeDefaultFire; - -public class CSEMeleeDefaultFire extends ComplexSpellEffect -{ - public CSEMeleeDefaultFire() - { - super(ComplexSpellType.FIRE, ComplexSpellModifier.DEFAULT); - } - - public CSEMeleeDefaultFire(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmMelee) - { - ((SpellParadigmMelee) parad).addEntityEffect(new MeleeDefaultFire(powerEnhancement, potencyEnhancement, costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEMeleeDefaultFire(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (25 * (1.2 * this.potencyEnhancement + 1) * (2.5 * this.powerEnhancement + 2) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEMeleeDefensiveFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEMeleeDefensiveFire.java deleted file mode 100644 index 65915f0a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEMeleeDefensiveFire.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmMelee; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.MeleeDefensiveFire; - -public class CSEMeleeDefensiveFire extends ComplexSpellEffect -{ - public CSEMeleeDefensiveFire() - { - super(ComplexSpellType.FIRE, ComplexSpellModifier.DEFENSIVE); - } - - public CSEMeleeDefensiveFire(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmMelee) - { - ((SpellParadigmMelee) parad).addWorldEffect(new MeleeDefensiveFire(powerEnhancement, potencyEnhancement, costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEMeleeDefensiveFire(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (30 * (1.5 * potencyEnhancement + 1) * (3 * powerEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEMeleeEnvironmentalFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEMeleeEnvironmentalFire.java deleted file mode 100644 index f8851c7a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEMeleeEnvironmentalFire.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmMelee; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.MeleeEnvironmentalFire; - -public class CSEMeleeEnvironmentalFire extends ComplexSpellEffect -{ - public CSEMeleeEnvironmentalFire() - { - super(ComplexSpellType.FIRE, ComplexSpellModifier.ENVIRONMENTAL); - } - - public CSEMeleeEnvironmentalFire(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmMelee) - { - ((SpellParadigmMelee) parad).addWorldEffect(new MeleeEnvironmentalFire(powerEnhancement, potencyEnhancement, costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEMeleeEnvironmentalFire(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (25 * Math.pow(1.5 * this.powerEnhancement + 1, 3) * (0.25 * this.powerEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEMeleeOffensiveFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEMeleeOffensiveFire.java deleted file mode 100644 index e90b6a01..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEMeleeOffensiveFire.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmMelee; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.MeleeOffensiveFire; - -public class CSEMeleeOffensiveFire extends ComplexSpellEffect -{ - public CSEMeleeOffensiveFire() - { - super(ComplexSpellType.FIRE, ComplexSpellModifier.OFFENSIVE); - } - - public CSEMeleeOffensiveFire(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmMelee) - { - ((SpellParadigmMelee) parad).addEntityEffect(new MeleeOffensiveFire(powerEnhancement, potencyEnhancement, costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEMeleeOffensiveFire(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (500 * (1 + this.potencyEnhancement) * (this.powerEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEProjectileDefaultFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEProjectileDefaultFire.java deleted file mode 100644 index e87d633a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEProjectileDefaultFire.java +++ /dev/null @@ -1,47 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmProjectile; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.ProjectileDefaultFire; - -public class CSEProjectileDefaultFire extends ComplexSpellEffect -{ - public CSEProjectileDefaultFire() - { - super(ComplexSpellType.FIRE, ComplexSpellModifier.DEFAULT); - } - - public CSEProjectileDefaultFire(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmProjectile) - { - ((SpellParadigmProjectile) parad).addImpactEffect(new ProjectileDefaultFire(powerEnhancement, potencyEnhancement, costEnhancement)); - ((SpellParadigmProjectile) parad).damage += this.potencyEnhancement; - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEProjectileDefaultFire(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) ((5 * Math.pow(1.5 * this.powerEnhancement + 1, 2) * (1.5 * this.potencyEnhancement + 1) + this.potencyEnhancement * 15) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEProjectileDefensiveFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEProjectileDefensiveFire.java deleted file mode 100644 index 4739c7f0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEProjectileDefensiveFire.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmProjectile; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.ProjectileDefensiveFire; - -public class CSEProjectileDefensiveFire extends ComplexSpellEffect -{ - public CSEProjectileDefensiveFire() - { - super(ComplexSpellType.FIRE, ComplexSpellModifier.DEFENSIVE); - } - - public CSEProjectileDefensiveFire(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmProjectile) - { - ((SpellParadigmProjectile) parad).addImpactEffect(new ProjectileDefensiveFire(powerEnhancement, potencyEnhancement, costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEProjectileDefensiveFire(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (25 * Math.pow(1 * this.powerEnhancement + 1, 2) * (1 * this.potencyEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEProjectileEnvironmentalFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEProjectileEnvironmentalFire.java deleted file mode 100644 index be379e54..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEProjectileEnvironmentalFire.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmProjectile; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.ProjectileEnvironmentalFire; - -public class CSEProjectileEnvironmentalFire extends ComplexSpellEffect -{ - public CSEProjectileEnvironmentalFire() - { - super(ComplexSpellType.FIRE, ComplexSpellModifier.ENVIRONMENTAL); - } - - public CSEProjectileEnvironmentalFire(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmProjectile) - { - ((SpellParadigmProjectile) parad).addUpdateEffect(new ProjectileEnvironmentalFire(powerEnhancement, potencyEnhancement, costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEProjectileEnvironmentalFire(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (75 * (0.5 * this.powerEnhancement + 1) * (0.5 * this.potencyEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEProjectileOffensiveFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEProjectileOffensiveFire.java deleted file mode 100644 index 5637e353..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEProjectileOffensiveFire.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmProjectile; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.ProjectileOffensiveFire; - -public class CSEProjectileOffensiveFire extends ComplexSpellEffect -{ - public CSEProjectileOffensiveFire() - { - super(ComplexSpellType.FIRE, ComplexSpellModifier.OFFENSIVE); - } - - public CSEProjectileOffensiveFire(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmProjectile) - { - ((SpellParadigmProjectile) parad).addImpactEffect(new ProjectileOffensiveFire(powerEnhancement, potencyEnhancement, costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEProjectileOffensiveFire(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (10 * Math.pow((this.powerEnhancement) * 1.3 + 1, 2) * ((1.5 * this.potencyEnhancement + 1)) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSESelfDefaultFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSESelfDefaultFire.java deleted file mode 100644 index 8cfe7696..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSESelfDefaultFire.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmSelf; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.SelfDefaultFire; - -public class CSESelfDefaultFire extends ComplexSpellEffect -{ - public CSESelfDefaultFire() - { - super(ComplexSpellType.FIRE, ComplexSpellModifier.DEFAULT); - } - - public CSESelfDefaultFire(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmSelf) - { - ((SpellParadigmSelf) parad).addSelfSpellEffect(new SelfDefaultFire(powerEnhancement, potencyEnhancement, costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSESelfDefaultFire(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return 10 * (int) (10 * Math.pow(1.5, this.powerEnhancement + 1.5 * this.potencyEnhancement) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSESelfDefensiveFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSESelfDefensiveFire.java deleted file mode 100644 index 3bc43070..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSESelfDefensiveFire.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmSelf; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.SelfDefensiveFire; - -public class CSESelfDefensiveFire extends ComplexSpellEffect -{ - public CSESelfDefensiveFire() - { - super(ComplexSpellType.FIRE, ComplexSpellModifier.DEFENSIVE); - } - - public CSESelfDefensiveFire(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmSelf) - { - ((SpellParadigmSelf) parad).addSelfSpellEffect(new SelfDefensiveFire(powerEnhancement, potencyEnhancement, costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSESelfDefensiveFire(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (25 * (3 * this.potencyEnhancement + 1) * (2 * this.powerEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSESelfEnvironmentalFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSESelfEnvironmentalFire.java deleted file mode 100644 index 116ae6d0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSESelfEnvironmentalFire.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmSelf; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.SelfEnvironmentalFire; - -public class CSESelfEnvironmentalFire extends ComplexSpellEffect -{ - public CSESelfEnvironmentalFire() - { - super(ComplexSpellType.FIRE, ComplexSpellModifier.ENVIRONMENTAL); - } - - public CSESelfEnvironmentalFire(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmSelf) - { - ((SpellParadigmSelf) parad).addSelfSpellEffect(new SelfEnvironmentalFire(powerEnhancement, potencyEnhancement, costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSESelfEnvironmentalFire(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) ((15 * Math.pow(1.7, powerEnhancement) + 10 * Math.pow(potencyEnhancement, 1.8)) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSESelfOffensiveFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSESelfOffensiveFire.java deleted file mode 100644 index c63b8539..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSESelfOffensiveFire.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmSelf; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.SelfOffensiveFire; - -public class CSESelfOffensiveFire extends ComplexSpellEffect -{ - public CSESelfOffensiveFire() - { - super(ComplexSpellType.FIRE, ComplexSpellModifier.OFFENSIVE); - } - - public CSESelfOffensiveFire(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmSelf) - { - ((SpellParadigmSelf) parad).addSelfSpellEffect(new SelfOffensiveFire(powerEnhancement, potencyEnhancement, costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSESelfOffensiveFire(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (300 * (3 * powerEnhancement + 1) * (2 * potencyEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEToolDefaultFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEToolDefaultFire.java deleted file mode 100644 index 9885e23e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEToolDefaultFire.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmTool; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.ToolDefaultFire; - -public class CSEToolDefaultFire extends ComplexSpellEffect -{ - public CSEToolDefaultFire() - { - super(ComplexSpellType.FIRE, ComplexSpellModifier.DEFAULT); - } - - public CSEToolDefaultFire(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmTool) - { - ((SpellParadigmTool) parad).addItemManipulatorEffect(new ToolDefaultFire(powerEnhancement, potencyEnhancement, costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEToolDefaultFire(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return 1000; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEToolDefensiveFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEToolDefensiveFire.java deleted file mode 100644 index d6244e78..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEToolDefensiveFire.java +++ /dev/null @@ -1,50 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmTool; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class CSEToolDefensiveFire extends ComplexSpellEffect -{ - public CSEToolDefensiveFire() - { - super(ComplexSpellType.FIRE, ComplexSpellModifier.DEFENSIVE); - } - - public CSEToolDefensiveFire(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmTool) - { - ((SpellParadigmTool)parad).addCritChance("defFire", this.potencyEnhancement); - - ((SpellParadigmTool)parad).addDuration("defFire", 1200 * this.powerEnhancement); - - ((SpellParadigmTool)parad).addToolString("defFire", "Unbreaking" + " " + SpellHelper.getNumeralForInt(this.powerEnhancement + 1)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEToolDefensiveFire(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (500 * (1 + this.powerEnhancement * 0.5f) * (1 + this.potencyEnhancement) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEToolEnvironmentalFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEToolEnvironmentalFire.java deleted file mode 100644 index b60e1477..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEToolEnvironmentalFire.java +++ /dev/null @@ -1,49 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmTool; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.ToolEnvironmentalFire; - -public class CSEToolEnvironmentalFire extends ComplexSpellEffect -{ - public CSEToolEnvironmentalFire() - { - super(ComplexSpellType.FIRE, ComplexSpellModifier.ENVIRONMENTAL); - } - - public CSEToolEnvironmentalFire(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmTool) - { - ((SpellParadigmTool)parad).addBlockBreakEffect(new ToolEnvironmentalFire(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - - ((SpellParadigmTool)parad).addToolString("envFire", "Magma Plume" + " " + SpellHelper.getNumeralForInt(this.powerEnhancement + 1)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEToolEnvironmentalFire(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return 0; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEToolOffensiveFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEToolOffensiveFire.java deleted file mode 100644 index f8b5bab2..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/fire/CSEToolOffensiveFire.java +++ /dev/null @@ -1,49 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.fire; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmTool; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.ToolOffensiveFire; - -public class CSEToolOffensiveFire extends ComplexSpellEffect -{ - public CSEToolOffensiveFire() - { - super(ComplexSpellType.FIRE, ComplexSpellModifier.OFFENSIVE); - } - - public CSEToolOffensiveFire(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmTool) - { - ((SpellParadigmTool)parad).addLeftClickEffect(new ToolOffensiveFire(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - - ((SpellParadigmTool)parad).addToolString("offFire", "Fire Aspect" + " " + SpellHelper.getNumeralForInt(this.powerEnhancement + 1)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEToolOffensiveFire(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (1000 * (1 + this.powerEnhancement * 0.3f) * (1 + this.potencyEnhancement * 0.2f) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEMeleeDefaultIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEMeleeDefaultIce.java deleted file mode 100644 index fde18f3c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEMeleeDefaultIce.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmMelee; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice.MeleeDefaultIce; - -public class CSEMeleeDefaultIce extends ComplexSpellEffect -{ - public CSEMeleeDefaultIce() - { - super(ComplexSpellType.ICE, ComplexSpellModifier.DEFAULT); - } - - public CSEMeleeDefaultIce(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmMelee) - { - ((SpellParadigmMelee)parad).addEntityEffect(new MeleeDefaultIce(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEMeleeDefaultIce(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (250 * (potencyEnhancement + 1) * (1.5 * powerEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEMeleeDefensiveIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEMeleeDefensiveIce.java deleted file mode 100644 index 180e5c29..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEMeleeDefensiveIce.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmMelee; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice.MeleeDefensiveIce; - -public class CSEMeleeDefensiveIce extends ComplexSpellEffect -{ - public CSEMeleeDefensiveIce() - { - super(ComplexSpellType.ICE, ComplexSpellModifier.DEFENSIVE); - } - - public CSEMeleeDefensiveIce(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmMelee) - { - ((SpellParadigmMelee)parad).addWorldEffect(new MeleeDefensiveIce(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEMeleeDefensiveIce(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (50 * (0.5 * potencyEnhancement + 1) * (0.7 * powerEnhancement + 1) * (0.5 * powerEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEMeleeEnvironmentalIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEMeleeEnvironmentalIce.java deleted file mode 100644 index c1ff2fe0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEMeleeEnvironmentalIce.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmMelee; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice.MeleeEnvironmentalIce; - -public class CSEMeleeEnvironmentalIce extends ComplexSpellEffect -{ - public CSEMeleeEnvironmentalIce() - { - super(ComplexSpellType.ICE, ComplexSpellModifier.ENVIRONMENTAL); - } - - public CSEMeleeEnvironmentalIce(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmMelee) - { - ((SpellParadigmMelee)parad).addEntityEffect(new MeleeEnvironmentalIce(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEMeleeEnvironmentalIce(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (20 * (0.5 * potencyEnhancement + 1) * (0 * powerEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEMeleeOffensiveIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEMeleeOffensiveIce.java deleted file mode 100644 index 02da02af..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEMeleeOffensiveIce.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmMelee; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice.MeleeOffensiveIce; - -public class CSEMeleeOffensiveIce extends ComplexSpellEffect -{ - public CSEMeleeOffensiveIce() - { - super(ComplexSpellType.ICE, ComplexSpellModifier.OFFENSIVE); - } - - public CSEMeleeOffensiveIce(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmMelee) - { - ((SpellParadigmMelee)parad).addEntityEffect(new MeleeOffensiveIce(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEMeleeOffensiveIce(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (40 * (1.5 * potencyEnhancement + 1) * Math.pow(1.5, powerEnhancement) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEProjectileDefaultIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEProjectileDefaultIce.java deleted file mode 100644 index 469f4e76..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEProjectileDefaultIce.java +++ /dev/null @@ -1,47 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmProjectile; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice.ProjectileDefaultIce; - -public class CSEProjectileDefaultIce extends ComplexSpellEffect -{ - public CSEProjectileDefaultIce() - { - super(ComplexSpellType.ICE, ComplexSpellModifier.DEFAULT); - } - - public CSEProjectileDefaultIce(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmProjectile) - { - ((SpellParadigmProjectile)parad).damage += this.potencyEnhancement; - ((SpellParadigmProjectile)parad).addImpactEffect(new ProjectileDefaultIce(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEProjectileDefaultIce(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) ((30) * (this.potencyEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEProjectileDefensiveIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEProjectileDefensiveIce.java deleted file mode 100644 index e83e9071..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEProjectileDefensiveIce.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmProjectile; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice.ProjectileDefensiveIce; - -public class CSEProjectileDefensiveIce extends ComplexSpellEffect -{ - public CSEProjectileDefensiveIce() - { - super(ComplexSpellType.ICE, ComplexSpellModifier.DEFENSIVE); - } - - public CSEProjectileDefensiveIce(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmProjectile) - { - ((SpellParadigmProjectile)parad).addImpactEffect(new ProjectileDefensiveIce(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEProjectileDefensiveIce(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (75 * (2 * this.powerEnhancement + 1) * (this.potencyEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEProjectileEnvironmentalIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEProjectileEnvironmentalIce.java deleted file mode 100644 index 90b73e16..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEProjectileEnvironmentalIce.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmProjectile; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice.ProjectileEnvironmentalIce; - -public class CSEProjectileEnvironmentalIce extends ComplexSpellEffect -{ - public CSEProjectileEnvironmentalIce() - { - super(ComplexSpellType.ICE, ComplexSpellModifier.ENVIRONMENTAL); - } - - public CSEProjectileEnvironmentalIce(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmProjectile) - { - ((SpellParadigmProjectile)parad).addUpdateEffect(new ProjectileEnvironmentalIce(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEProjectileEnvironmentalIce(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (200 * (2 * this.powerEnhancement + 1) * (2 * this.potencyEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEProjectileOffensiveIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEProjectileOffensiveIce.java deleted file mode 100644 index a671096a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEProjectileOffensiveIce.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmProjectile; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice.ProjectileOffensiveIce; - -public class CSEProjectileOffensiveIce extends ComplexSpellEffect -{ - public CSEProjectileOffensiveIce() - { - super(ComplexSpellType.ICE, ComplexSpellModifier.OFFENSIVE); - } - - public CSEProjectileOffensiveIce(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmProjectile) - { - ((SpellParadigmProjectile)parad).addImpactEffect(new ProjectileOffensiveIce(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEProjectileOffensiveIce(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) ((60) * (this.powerEnhancement + 1) * (3 * this.potencyEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSESelfDefaultIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSESelfDefaultIce.java deleted file mode 100644 index 494f1559..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSESelfDefaultIce.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmSelf; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice.SelfDefaultIce; - -public class CSESelfDefaultIce extends ComplexSpellEffect -{ - public CSESelfDefaultIce() - { - super(ComplexSpellType.ICE, ComplexSpellModifier.DEFAULT); - } - - public CSESelfDefaultIce(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmSelf) - { - ((SpellParadigmSelf)parad).addSelfSpellEffect(new SelfDefaultIce(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSESelfDefaultIce(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (20 * (this.powerEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSESelfDefensiveIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSESelfDefensiveIce.java deleted file mode 100644 index 8ecf92eb..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSESelfDefensiveIce.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmSelf; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice.SelfDefensiveIce; - -public class CSESelfDefensiveIce extends ComplexSpellEffect -{ - public CSESelfDefensiveIce() - { - super(ComplexSpellType.ICE, ComplexSpellModifier.DEFENSIVE); - } - - public CSESelfDefensiveIce(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmSelf) - { - ((SpellParadigmSelf)parad).addSelfSpellEffect(new SelfDefensiveIce(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSESelfDefensiveIce(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (200 * (3 * powerEnhancement + 1) * (2 * potencyEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSESelfEnvironmentalIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSESelfEnvironmentalIce.java deleted file mode 100644 index 1e0b9b95..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSESelfEnvironmentalIce.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmSelf; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice.SelfEnvironmentalIce; - -public class CSESelfEnvironmentalIce extends ComplexSpellEffect -{ - public CSESelfEnvironmentalIce() - { - super(ComplexSpellType.ICE, ComplexSpellModifier.ENVIRONMENTAL); - } - - public CSESelfEnvironmentalIce(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmSelf) - { - ((SpellParadigmSelf)parad).addSelfSpellEffect(new SelfEnvironmentalIce(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSESelfEnvironmentalIce(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (10 * (1.5 * potencyEnhancement + 1) * (3 * powerEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSESelfOffensiveIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSESelfOffensiveIce.java deleted file mode 100644 index da5daafe..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSESelfOffensiveIce.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmSelf; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice.SelfOffensiveIce; - -public class CSESelfOffensiveIce extends ComplexSpellEffect -{ - public CSESelfOffensiveIce() - { - super(ComplexSpellType.ICE, ComplexSpellModifier.OFFENSIVE); - } - - public CSESelfOffensiveIce(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmSelf) - { - ((SpellParadigmSelf)parad).addSelfSpellEffect(new SelfOffensiveIce(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSESelfOffensiveIce(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (100 * (2 * this.powerEnhancement + 1) * (2 * this.potencyEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEToolDefaultIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEToolDefaultIce.java deleted file mode 100644 index 14fe0ea0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEToolDefaultIce.java +++ /dev/null @@ -1,51 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmTool; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice.ToolDefaultIce; - -public class CSEToolDefaultIce extends ComplexSpellEffect -{ - public CSEToolDefaultIce() - { - super(ComplexSpellType.ICE, ComplexSpellModifier.DEFAULT); - } - - public CSEToolDefaultIce(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmTool) - { - ((SpellParadigmTool)parad).addLeftClickEffect(new ToolDefaultIce(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - - ((SpellParadigmTool)parad).addToolString("FrostTouch", "FrostTouch" + " " + SpellHelper.getNumeralForInt((this.powerEnhancement + 1))); - - ((SpellParadigmTool)parad).addCritChance("FrostCrit", this.potencyEnhancement * 0.5f); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEToolDefaultIce(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (500 * (1 + this.powerEnhancement * 0.3f) * (1 + this.potencyEnhancement * 0.1f) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEToolDefensiveIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEToolDefensiveIce.java deleted file mode 100644 index 34ab2daf..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEToolDefensiveIce.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmTool; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice.ToolDefensiveIce; - -public class CSEToolDefensiveIce extends ComplexSpellEffect -{ - public CSEToolDefensiveIce() - { - super(ComplexSpellType.ICE, ComplexSpellModifier.DEFENSIVE); - } - - public CSEToolDefensiveIce(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmTool) - { - ((SpellParadigmTool)parad).addToolSummonEffect(new ToolDefensiveIce(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEToolDefensiveIce(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (500 * (1 + this.powerEnhancement * 0.2) * (1 + this.potencyEnhancement * 0.5) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEToolEnvironmentalIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEToolEnvironmentalIce.java deleted file mode 100644 index ac27a2a2..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEToolEnvironmentalIce.java +++ /dev/null @@ -1,48 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmTool; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class CSEToolEnvironmentalIce extends ComplexSpellEffect -{ - public CSEToolEnvironmentalIce() - { - super(ComplexSpellType.ICE, ComplexSpellModifier.ENVIRONMENTAL); - } - - public CSEToolEnvironmentalIce(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmTool) - { - ((SpellParadigmTool)parad).addToolString("SilkTouch", "Silk Touch" + " " + SpellHelper.getNumeralForInt((this.powerEnhancement + 1))); - - ((SpellParadigmTool)parad).setSilkTouch(true); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEToolEnvironmentalIce(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (1000 * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEToolOffensiveIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEToolOffensiveIce.java deleted file mode 100644 index 15b3fd72..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/ice/CSEToolOffensiveIce.java +++ /dev/null @@ -1,50 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.ice; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmTool; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class CSEToolOffensiveIce extends ComplexSpellEffect -{ - public CSEToolOffensiveIce() - { - super(ComplexSpellType.ICE, ComplexSpellModifier.OFFENSIVE); - } - - public CSEToolOffensiveIce(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmTool) - { - ((SpellParadigmTool)parad).addDamageToHash("Sharpness", (this.powerEnhancement + 1) * 1.5f); - - ((SpellParadigmTool)parad).addToolString("Sharpness", "Sharpness" + " " + SpellHelper.getNumeralForInt((this.powerEnhancement + 1))); - - ((SpellParadigmTool)parad).addCritChance("SharpCrit", this.potencyEnhancement); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEToolOffensiveIce(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (1000 * (1 + this.powerEnhancement * 0.3f) * (1 + this.potencyEnhancement * 0.2f) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEMeleeDefaultWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEMeleeDefaultWind.java deleted file mode 100644 index f47960e9..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEMeleeDefaultWind.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmMelee; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind.MeleeDefaultWind; - -public class CSEMeleeDefaultWind extends ComplexSpellEffect -{ - public CSEMeleeDefaultWind() - { - super(ComplexSpellType.WIND, ComplexSpellModifier.DEFAULT); - } - - public CSEMeleeDefaultWind(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmMelee) - { - ((SpellParadigmMelee)parad).addEntityEffect(new MeleeDefaultWind(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEMeleeDefaultWind(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (350 * (1.0 * this.potencyEnhancement + 1) * (1.2 * this.powerEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEMeleeDefensiveWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEMeleeDefensiveWind.java deleted file mode 100644 index c4a05d55..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEMeleeDefensiveWind.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmMelee; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind.MeleeDefensiveWind; - -public class CSEMeleeDefensiveWind extends ComplexSpellEffect -{ - public CSEMeleeDefensiveWind() - { - super(ComplexSpellType.WIND, ComplexSpellModifier.DEFENSIVE); - } - - public CSEMeleeDefensiveWind(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmMelee) - { - ((SpellParadigmMelee)parad).addEntityEffect(new MeleeDefensiveWind(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEMeleeDefensiveWind(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (150 * (1.0 * this.potencyEnhancement + 1) * (0.7 * this.powerEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEMeleeEnvironmentalWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEMeleeEnvironmentalWind.java deleted file mode 100644 index e47152f4..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEMeleeEnvironmentalWind.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmMelee; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind.MeleeEnvironmentalWind; - -public class CSEMeleeEnvironmentalWind extends ComplexSpellEffect -{ - public CSEMeleeEnvironmentalWind() - { - super(ComplexSpellType.WIND, ComplexSpellModifier.ENVIRONMENTAL); - } - - public CSEMeleeEnvironmentalWind(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmMelee) - { - ((SpellParadigmMelee)parad).addWorldEffect(new MeleeEnvironmentalWind(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEMeleeEnvironmentalWind(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (100 * (1.0 * this.potencyEnhancement + 1) * (0.7 * this.powerEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEMeleeOffensiveWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEMeleeOffensiveWind.java deleted file mode 100644 index 4af53a16..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEMeleeOffensiveWind.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmMelee; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind.MeleeOffensiveWind; - -public class CSEMeleeOffensiveWind extends ComplexSpellEffect -{ - public CSEMeleeOffensiveWind() - { - super(ComplexSpellType.WIND, ComplexSpellModifier.OFFENSIVE); - } - - public CSEMeleeOffensiveWind(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmMelee) - { - ((SpellParadigmMelee)parad).addEntityEffect(new MeleeOffensiveWind(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEMeleeOffensiveWind(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (250 * (1.0 * this.potencyEnhancement + 1) * (0.7 * this.powerEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEProjectileDefaultWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEProjectileDefaultWind.java deleted file mode 100644 index 387892bd..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEProjectileDefaultWind.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmProjectile; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind.ProjectileDefaultWind; - -public class CSEProjectileDefaultWind extends ComplexSpellEffect -{ - public CSEProjectileDefaultWind() - { - super(ComplexSpellType.WIND, ComplexSpellModifier.DEFAULT); - } - - public CSEProjectileDefaultWind(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmProjectile) - { - ((SpellParadigmProjectile)parad).addImpactEffect(new ProjectileDefaultWind(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEProjectileDefaultWind(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (100 * (this.potencyEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEProjectileDefensiveWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEProjectileDefensiveWind.java deleted file mode 100644 index 2381fda5..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEProjectileDefensiveWind.java +++ /dev/null @@ -1,45 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmProjectile; - -public class CSEProjectileDefensiveWind extends ComplexSpellEffect -{ - public CSEProjectileDefensiveWind() - { - super(ComplexSpellType.WIND, ComplexSpellModifier.DEFENSIVE); - } - - public CSEProjectileDefensiveWind(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmProjectile) - { - ((SpellParadigmProjectile)parad).isSilkTouch = true; - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEProjectileDefensiveWind(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (100 * (this.potencyEnhancement + 1)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEProjectileEnvironmentalWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEProjectileEnvironmentalWind.java deleted file mode 100644 index 154865f2..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEProjectileEnvironmentalWind.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmProjectile; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind.ProjectileEnvironmentalWind; - -public class CSEProjectileEnvironmentalWind extends ComplexSpellEffect -{ - public CSEProjectileEnvironmentalWind() - { - super(ComplexSpellType.WIND, ComplexSpellModifier.ENVIRONMENTAL); - } - - public CSEProjectileEnvironmentalWind(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmProjectile) - { - ((SpellParadigmProjectile)parad).addUpdateEffect(new ProjectileEnvironmentalWind(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEProjectileEnvironmentalWind(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (50 * (this.powerEnhancement + 1) * (this.potencyEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEProjectileOffensiveWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEProjectileOffensiveWind.java deleted file mode 100644 index b215b6be..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEProjectileOffensiveWind.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmProjectile; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind.ProjectileOffensiveWind; - -public class CSEProjectileOffensiveWind extends ComplexSpellEffect -{ - public CSEProjectileOffensiveWind() - { - super(ComplexSpellType.WIND, ComplexSpellModifier.OFFENSIVE); - } - - public CSEProjectileOffensiveWind(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmProjectile) - { - ((SpellParadigmProjectile)parad).addImpactEffect(new ProjectileOffensiveWind(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEProjectileOffensiveWind(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (100 * (0.5 * this.potencyEnhancement + 1) * (this.powerEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSESelfDefaultWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSESelfDefaultWind.java deleted file mode 100644 index 4641e662..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSESelfDefaultWind.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmSelf; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind.SelfDefaultWind; - -public class CSESelfDefaultWind extends ComplexSpellEffect -{ - public CSESelfDefaultWind() - { - super(ComplexSpellType.WIND, ComplexSpellModifier.DEFAULT); - } - - public CSESelfDefaultWind(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmSelf) - { - ((SpellParadigmSelf)parad).addSelfSpellEffect(new SelfDefaultWind(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSESelfDefaultWind(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (100 * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSESelfDefensiveWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSESelfDefensiveWind.java deleted file mode 100644 index 7538b1d8..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSESelfDefensiveWind.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmSelf; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind.SelfDefensiveWind; - -public class CSESelfDefensiveWind extends ComplexSpellEffect -{ - public CSESelfDefensiveWind() - { - super(ComplexSpellType.WIND, ComplexSpellModifier.DEFENSIVE); - } - - public CSESelfDefensiveWind(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmSelf) - { - ((SpellParadigmSelf)parad).addSelfSpellEffect(new SelfDefensiveWind(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSESelfDefensiveWind(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (500 * (0.7d * this.powerEnhancement + 1) * (0.8 * this.potencyEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSESelfEnvironmentalWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSESelfEnvironmentalWind.java deleted file mode 100644 index 46d3ae38..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSESelfEnvironmentalWind.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmSelf; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind.SelfEnvironmentalWind; - -public class CSESelfEnvironmentalWind extends ComplexSpellEffect -{ - public CSESelfEnvironmentalWind() - { - super(ComplexSpellType.WIND, ComplexSpellModifier.ENVIRONMENTAL); - } - - public CSESelfEnvironmentalWind(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmSelf) - { - ((SpellParadigmSelf)parad).addSelfSpellEffect(new SelfEnvironmentalWind(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSESelfEnvironmentalWind(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (500 * (0.7d * this.powerEnhancement + 1) * (0.2 * this.potencyEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSESelfOffensiveWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSESelfOffensiveWind.java deleted file mode 100644 index 78a5a021..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSESelfOffensiveWind.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmSelf; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind.SelfOffensiveWind; - -public class CSESelfOffensiveWind extends ComplexSpellEffect -{ - public CSESelfOffensiveWind() - { - super(ComplexSpellType.WIND, ComplexSpellModifier.OFFENSIVE); - } - - public CSESelfOffensiveWind(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmSelf) - { - ((SpellParadigmSelf)parad).addSelfSpellEffect(new SelfOffensiveWind(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSESelfOffensiveWind(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (100 * (0.5 * this.powerEnhancement + 1) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEToolDefaultWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEToolDefaultWind.java deleted file mode 100644 index 041e9b12..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEToolDefaultWind.java +++ /dev/null @@ -1,71 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmTool; - -public class CSEToolDefaultWind extends ComplexSpellEffect -{ - public CSEToolDefaultWind() - { - super(ComplexSpellType.WIND, ComplexSpellModifier.DEFAULT); - } - - public CSEToolDefaultWind(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmTool) - { - String toolClass = "axe"; - - float digSpeed = 7.0f; - - switch (this.powerEnhancement) - { - case 1: - digSpeed = 9.0f; - break; - case 2: - digSpeed = 12.0f; - break; - case 3: - digSpeed = 16.0f; - break; - case 4: - digSpeed = 21.0f; - break; - case 5: - digSpeed = 27.0f; - break; - } - - ((SpellParadigmTool)parad).setDigSpeed(toolClass, digSpeed); - - int hlvl = this.potencyEnhancement + 2; - ((SpellParadigmTool)parad).setHarvestLevel(toolClass, hlvl); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEToolDefaultWind(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (1000 * (1 + this.potencyEnhancement * 0.1f) * (1 + this.powerEnhancement * 0.2f) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEToolDefensiveWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEToolDefensiveWind.java deleted file mode 100644 index c0e6aa1f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEToolDefensiveWind.java +++ /dev/null @@ -1,48 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmTool; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind.ToolDefensiveWind; - -public class CSEToolDefensiveWind extends ComplexSpellEffect -{ - public CSEToolDefensiveWind() - { - super(ComplexSpellType.WIND, ComplexSpellModifier.DEFENSIVE); - } - - public CSEToolDefensiveWind(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmTool) - { - ((SpellParadigmTool)parad).addLeftClickEffect(new ToolDefensiveWind(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - ((SpellParadigmTool)parad).addToolString("DefWind", "Knockback" + " " + SpellHelper.getNumeralForInt(this.powerEnhancement + 1)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEToolDefensiveWind(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (150 * (1 + this.powerEnhancement * 0.4f) * (1 + this.potencyEnhancement * 0.3f) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEToolEnvironmentalWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEToolEnvironmentalWind.java deleted file mode 100644 index 06a63676..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEToolEnvironmentalWind.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmTool; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind.ToolEnvironmentalWind; - -public class CSEToolEnvironmentalWind extends ComplexSpellEffect -{ - public CSEToolEnvironmentalWind() - { - super(ComplexSpellType.WIND, ComplexSpellModifier.ENVIRONMENTAL); - } - - public CSEToolEnvironmentalWind(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmTool) - { - ((SpellParadigmTool)parad).addBlockBreakEffect(new ToolEnvironmentalWind(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEToolEnvironmentalWind(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return (int) (150 * (1 + this.powerEnhancement) * Math.pow(0.85, costEnhancement)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEToolOffensiveWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEToolOffensiveWind.java deleted file mode 100644 index b648c24f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/cse/wind/CSEToolOffensiveWind.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.wind; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellEffect; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmTool; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind.ToolOffensiveWind; - -public class CSEToolOffensiveWind extends ComplexSpellEffect -{ - public CSEToolOffensiveWind() - { - super(ComplexSpellType.WIND, ComplexSpellModifier.OFFENSIVE); - } - - public CSEToolOffensiveWind(int power, int cost, int potency) - { - this(); - - this.powerEnhancement = power; - this.costEnhancement = cost; - this.potencyEnhancement = potency; - } - - @Override - public void modifyParadigm(SpellParadigm parad) - { - if(parad instanceof SpellParadigmTool) - { - ((SpellParadigmTool)parad).addLeftClickEffect(new ToolOffensiveWind(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); - } - } - - @Override - public ComplexSpellEffect copy(int power, int cost, int potency) - { - return new CSEToolOffensiveWind(power, cost, potency); - } - - @Override - public int getCostOfEffect() - { - return 0; //Cost is on the attack method - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefaultEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefaultEarth.java deleted file mode 100644 index cf4ed985..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefaultEarth.java +++ /dev/null @@ -1,48 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.item.EntityFallingBlock; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.MeleeSpellCenteredWorldEffect; - -public class MeleeDefaultEarth extends MeleeSpellCenteredWorldEffect -{ - public MeleeDefaultEarth(int power, int potency, int cost) - { - super(power, potency, cost); - this.setRange(3 * power + 2); - } - - @Override - public void onCenteredWorldEffect(EntityPlayer player, World world, BlockPos pos) - { - int radius = this.potencyUpgrades; - - for (int i = -radius; i <= radius; i++) - { - for (int j = -radius; j <= radius; j++) - { - for (int k = -radius; k <= radius; k++) - { - BlockPos newPos = pos.add(i, j, k); - if (!world.isAirBlock(newPos) && world.getTileEntity(newPos) == null) - { - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - - if (block.getBlockHardness(world, newPos) == -1) - { - continue; - } - - EntityFallingBlock entity = new EntityFallingBlock(world, newPos.getX() + 0.5f, newPos.getY() + 0.5f, newPos.getZ() + 0.5f, state); - world.spawnEntityInWorld(entity); - } - } - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefensiveEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefensiveEarth.java deleted file mode 100644 index e470be7c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefensiveEarth.java +++ /dev/null @@ -1,38 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.MeleeSpellCenteredWorldEffect; -import WayofTime.alchemicalWizardry.common.block.BlockTeleposer; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class MeleeDefensiveEarth extends MeleeSpellCenteredWorldEffect -{ - public MeleeDefensiveEarth(int power, int potency, int cost) - { - super(power, potency, cost); - this.setRange(3 * power + 2); - } - - @Override - public void onCenteredWorldEffect(EntityPlayer player, World world, BlockPos pos) - { - EnumFacing dir = SpellHelper.getDirectionForLookVector(player.getLook(1)); - - int vertRadius = (int) (2 + 1.0f / 2.0f * Math.pow(this.potencyUpgrades, 2) + 1.0f / 2.0f * this.potencyUpgrades); - int horizRadius = this.potencyUpgrades + 1; - - int xOff = dir.getFrontOffsetX(); - int zOff = dir.getFrontOffsetZ(); - - for (int i = -horizRadius; i <= horizRadius; i++) - { - for (int j = 0; j < vertRadius; j++) - { - BlockTeleposer.swapBlocks(this, world, world, pos.add(i * zOff, j, i * xOff), pos.add(i * zOff, j - vertRadius, i * xOff)); - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeEnvironmentalEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeEnvironmentalEarth.java deleted file mode 100644 index f80a0e70..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeEnvironmentalEarth.java +++ /dev/null @@ -1,53 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.MeleeSpellCenteredWorldEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class MeleeEnvironmentalEarth extends MeleeSpellCenteredWorldEffect -{ - public MeleeEnvironmentalEarth(int power, int potency, int cost) - { - super(power, potency, cost); - this.setRange(3 * power + 2); - } - - @Override - public void onCenteredWorldEffect(EntityPlayer player, World world, BlockPos pos) - { - int radius = this.potencyUpgrades; - - for (int i = -radius; i <= radius; i++) - { - for (int j = -radius; j <= radius; j++) - { - for (int k = -radius; k <= radius; k++) - { - BlockPos newPos = pos.add(i, j, k); - if (!world.isAirBlock(newPos) && world.getTileEntity(newPos) == null) - { - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - ItemStack stack = new ItemStack(block, 1, block.getMetaFromState(state)); - - ItemStack dustStack = SpellHelper.getDustForOre(stack); - - if (dustStack != null) - { - dustStack.stackSize = 3; - world.spawnEntityInWorld(new EntityItem(world, newPos.getX() + 0.5, newPos.getY() + 0.5, newPos.getZ() + 0.5, dustStack)); - - world.setBlockToAir(newPos); - } - } - } - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeOffensiveEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeOffensiveEarth.java deleted file mode 100644 index 990a81fd..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeOffensiveEarth.java +++ /dev/null @@ -1,34 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.MeleeSpellCenteredWorldEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class MeleeOffensiveEarth extends MeleeSpellCenteredWorldEffect -{ - public MeleeOffensiveEarth(int power, int potency, int cost) - { - super(power, potency, cost); - this.setRange(3 * power + 2); - } - - @Override - public void onCenteredWorldEffect(EntityPlayer player, World world, BlockPos pos) - { - int radius = this.potencyUpgrades; - - for (int i = -radius; i <= radius; i++) - { - for (int j = -radius; j <= radius; j++) - { - for (int k = -radius; k <= radius; k++) - { - BlockPos newPos = pos.add(i, j, k); - SpellHelper.smashBlock(world, newPos); - } - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ProjectileDefaultEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ProjectileDefaultEarth.java deleted file mode 100644 index d28c5343..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ProjectileDefaultEarth.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.ProjectileImpactEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class ProjectileDefaultEarth extends ProjectileImpactEffect -{ - public ProjectileDefaultEarth(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onEntityImpact(Entity mop, Entity proj) - { - } - - @Override - public void onTileImpact(World world, MovingObjectPosition mop) - { - BlockPos pos = mop.func_178782_a(); - - int horizRange = (int) (0.5 * (this.powerUpgrades) + 1); - int vertRange = (int) (0.5 * (this.powerUpgrades) + 1); - - for (int i = -horizRange; i <= horizRange; i++) - { - for (int j = -vertRange; j <= vertRange; j++) - { - for (int k = -horizRange; k <= horizRange; k++) - { - BlockPos newPos = pos.add(i, j, k); - if (!world.isAirBlock(newPos)) - { - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - if (block == null || block.getBlockHardness(world, newPos) == -1 || SpellHelper.isBlockFluid(block)) - { - continue; - } - //block.breakBlock(world, posX+i, posY+j, posZ+k, block.blockID, world.getBlockMetadata(posX+i, posY+j, posZ+k)); - //world.destroyBlock(posX+i, posY+j, posZ+k, true); - world.destroyBlock(newPos, false); - } - } - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ProjectileDefensiveEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ProjectileDefensiveEarth.java deleted file mode 100644 index 1c888f85..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ProjectileDefensiveEarth.java +++ /dev/null @@ -1,60 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.ProjectileImpactEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class ProjectileDefensiveEarth extends ProjectileImpactEffect -{ - public ProjectileDefensiveEarth(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onEntityImpact(Entity mop, Entity proj) - { - } - - @Override - public void onTileImpact(World world, MovingObjectPosition mop) - { - BlockPos pos = mop.func_178782_a(); - - int horizRange = (int) (this.powerUpgrades); - int vertRange = (int) (this.potencyUpgrades); - - for (int i = -horizRange; i <= horizRange; i++) - { - for (int j = -vertRange; j <= vertRange; j++) - { - for (int k = -horizRange; k <= horizRange; k++) - { - BlockPos newPos = pos.add(i, j, k); - if (!world.isAirBlock(newPos)) - { - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - if (block == null || block.getBlockHardness(world, newPos) == -1) - { - continue; - } - //block.breakBlock(world, posX+i, posY+j, posZ+k, block.blockID, world.getBlockMetadata(posX+i, posY+j, posZ+k)); - //world.destroyBlock(posX+i, posY+j, posZ+k, true); - if (world.rand.nextFloat() < 0.6f) - { - SpellHelper.smashBlock(world, newPos); - } - } - } - } - } - - } - -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ProjectileEnvironmentalEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ProjectileEnvironmentalEarth.java deleted file mode 100644 index 7a28612c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ProjectileEnvironmentalEarth.java +++ /dev/null @@ -1,76 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.EntitySpellProjectile; -import WayofTime.alchemicalWizardry.api.spell.ProjectileUpdateEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class ProjectileEnvironmentalEarth extends ProjectileUpdateEffect -{ - public ProjectileEnvironmentalEarth(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onUpdateEffect(Entity projectile) - { - BlockPos pos = projectile.getPosition(); - - int horizRange = this.powerUpgrades + 1; - int vertRange = (int) (0.5 * (this.powerUpgrades + 1)); - int maxBlocks = (int) (2 * Math.pow(3.47, this.potencyUpgrades)); - - World worldObj = projectile.worldObj; - - if (projectile instanceof EntitySpellProjectile) - { - int blocksBroken = ((EntitySpellProjectile) projectile).getBlocksBroken(); - - if (blocksBroken >= maxBlocks) - { - return; - } - - for (int i = -horizRange; i <= horizRange; i++) - { - for (int j = -vertRange; j <= vertRange; j++) - { - for (int k = -horizRange; k <= horizRange; k++) - { - BlockPos newPos = pos.add(i, j, k); - if (!worldObj.isAirBlock(newPos) && blocksBroken < maxBlocks) - { - IBlockState state = worldObj.getBlockState(newPos); - Block block = state.getBlock(); - if (block == null || block.getBlockHardness(worldObj, newPos) == -1 || SpellHelper.isBlockFluid(block)) - { - continue; - } - - if (((EntitySpellProjectile) projectile).getIsSilkTouch() && block.canSilkHarvest(worldObj, newPos, state, ((EntitySpellProjectile) projectile).shootingEntity)) - { - ItemStack stack = new ItemStack(block, 1, block.getMetaFromState(state)); - EntityItem itemEntity = new EntityItem(worldObj, newPos.getX() + 0.5, newPos.getY() + 0.5, newPos.getZ() + 0.5, stack); - worldObj.spawnEntityInWorld(itemEntity); - worldObj.setBlockToAir(newPos); - } else - { - worldObj.destroyBlock(newPos, true); - } - blocksBroken++; - } - } - } - } - - ((EntitySpellProjectile) projectile).setBlocksBroken(blocksBroken); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ProjectileOffensiveEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ProjectileOffensiveEarth.java deleted file mode 100644 index 8693f628..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ProjectileOffensiveEarth.java +++ /dev/null @@ -1,58 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.ProjectileImpactEffect; - -public class ProjectileOffensiveEarth extends ProjectileImpactEffect -{ - public ProjectileOffensiveEarth(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onEntityImpact(Entity mop, Entity proj) - { - int horizRange = (int) (this.powerUpgrades); - int vertDepth = (int) (3 * this.potencyUpgrades + 1); - - BlockPos pos = proj.getPosition(); - - World world = mop.worldObj; - - for (int i = -horizRange; i <= horizRange; i++) - { - for (int j = -vertDepth; j < 0; j++) - { - for (int k = -horizRange; k <= horizRange; k++) - { - BlockPos newPos = pos.add(i, j, k); - if (!world.isAirBlock(newPos)) - { - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - if (block == null || block.getBlockHardness(world, newPos) == -1) - { - continue; - } - if (block == Blocks.stone || block == Blocks.cobblestone || block == Blocks.sand || block == Blocks.gravel || block == Blocks.grass || block == Blocks.dirt) - { - world.setBlockToAir(newPos); - } - } - } - } - } - } - - @Override - public void onTileImpact(World world, MovingObjectPosition mop) - { - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfDefaultEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfDefaultEarth.java deleted file mode 100644 index 78396edb..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfDefaultEarth.java +++ /dev/null @@ -1,49 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.SelfSpellEffect; -import WayofTime.alchemicalWizardry.common.block.BlockTeleposer; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class SelfDefaultEarth extends SelfSpellEffect -{ - - public SelfDefaultEarth(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onSelfUse(World world, EntityPlayer player) - { - int horizRadius = this.powerUpgrades; - int vertRange = 5 + 10 * this.potencyUpgrades; - - BlockPos pos = player.getPosition().offsetDown(); - - for (int i = -horizRadius; i <= horizRadius; i++) - { - for (int k = -horizRadius; k <= horizRadius; k++) - { - BlockPos newPos = pos.add(i, 0, k); - if (!world.isAirBlock(newPos)) - { - continue; - } - - for (int j = -1; j >= -vertRange; j--) - { - BlockPos newNewPos = newPos.add(0, j, 0); - if (!world.isAirBlock(newNewPos) && !SpellHelper.isBlockFluid(world.getBlockState(newNewPos).getBlock())) - { - BlockTeleposer.swapBlocks(this, world, world,newPos, newNewPos); - - break; - } - } - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfDefensiveEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfDefensiveEarth.java deleted file mode 100644 index 9b71bef4..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfDefensiveEarth.java +++ /dev/null @@ -1,27 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.spell.SelfSpellEffect; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -public class SelfDefensiveEarth extends SelfSpellEffect -{ - - public SelfDefensiveEarth(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onSelfUse(World world, EntityPlayer player) - { - int pot = 2 * this.potencyUpgrades + 1; - int duration = 20 * 60 * (this.powerUpgrades + 1); - - player.addPotionEffect(new PotionEffect(Potion.field_180152_w.id, duration, pot)); - player.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionHeavyHeart.id, duration, pot)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfEnvironmentalEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfEnvironmentalEarth.java deleted file mode 100644 index 803cf07a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfEnvironmentalEarth.java +++ /dev/null @@ -1,37 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; - -import java.util.List; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.SelfSpellEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class SelfEnvironmentalEarth extends SelfSpellEffect -{ - public SelfEnvironmentalEarth(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onSelfUse(World world, EntityPlayer player) - { - float radius = this.powerUpgrades * 2 + 1.5f; - int dur = this.powerUpgrades * 5 * 20 + 60; - - List entities = SpellHelper.getEntitiesInRange(world, player.posX, player.posY, player.posZ, radius, radius); - - for (Entity entity : entities) - { - if (entity instanceof EntityLivingBase) - { - ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(Potion.weakness.id, dur, this.potencyUpgrades)); - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfOffensiveEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfOffensiveEarth.java deleted file mode 100644 index fc3397d2..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfOffensiveEarth.java +++ /dev/null @@ -1,40 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.SelfSpellEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class SelfOffensiveEarth extends SelfSpellEffect -{ - - public SelfOffensiveEarth(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onSelfUse(World world, EntityPlayer player) - { - int horizRadius = this.powerUpgrades; - int vertRadius = this.potencyUpgrades + 1; - - BlockPos pos = player.getPosition(); - - for (int i = -horizRadius; i <= horizRadius; i++) - { - for (int j = -vertRadius; j < 0; j++) - { - for (int k = -horizRadius; k <= horizRadius; k++) - { - BlockPos newPos = pos.add(i, j, k); - if (world.rand.nextFloat() < 0.7f) - { - SpellHelper.smashBlock(world, newPos); - } - } - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ToolEnvironmentalEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ToolEnvironmentalEarth.java deleted file mode 100644 index e7a34b6b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ToolEnvironmentalEarth.java +++ /dev/null @@ -1,86 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.items.ItemSpellMultiTool; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.tool.DigAreaEffect; - -public class ToolEnvironmentalEarth extends DigAreaEffect -{ - public ToolEnvironmentalEarth(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public int digSurroundingArea(ItemStack container, World world, EntityPlayer player, MovingObjectPosition blockPos, String usedToolClass, float blockHardness, int harvestLvl, ItemSpellMultiTool itemTool) - { - if (!blockPos.typeOfHit.equals(MovingObjectPosition.MovingObjectType.BLOCK)) - { - return 0; - } - - BlockPos pos = blockPos.func_178782_a(); - EnumFacing sidehit = blockPos.field_178784_b; - - int radius = 2; - int depth = 5; - - depth--; - - int posX = radius; - int negX = radius; - int posY = radius; - int negY = radius; - int posZ = radius; - int negZ = radius; - - switch (sidehit) - { - case UP: - posY = 0; - negY = depth; - break; - case DOWN: - negY = 0; - posY = depth; - break; - case SOUTH: - posZ = 0; - negZ = depth; - break; - case NORTH: - negZ = 0; - posZ = depth; - break; - case WEST: - negX = 0; - posX = depth; - break; - case EAST: - posX = 0; - negX = depth; - break; - - default: - } - - for (int i = -negX; i <= posX; i++) - { - for (int j = -negY; j <= posY; j++) - { - for (int k = -negZ; k <= posZ; k++) - { - BlockPos newPos = pos.add(i, j, k); - itemTool.onBlockStartBreak(container, newPos, player); - } - } - } - - return 0; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ToolOffensiveEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ToolOffensiveEarth.java deleted file mode 100644 index 61130c47..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ToolOffensiveEarth.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; - - -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.tool.ItemManipulator; -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -import java.util.LinkedList; -import java.util.List; - - -public class ToolOffensiveEarth extends ItemManipulator -{ - public static Block[] mundaneList = new Block[]{Blocks.stone, Blocks.cobblestone, Blocks.sand, Blocks.gravel, Blocks.netherrack, Blocks.dirt}; - - - public ToolOffensiveEarth(int power, int potency, int cost) - { - super(power, potency, cost); - } - - - @Override - public List handleItemsOnBlockBroken(ItemStack toolStack, List itemList) - { - List newList = new LinkedList(); - - for (ItemStack stack : itemList) - { - if (stack != null && stack.getItem() instanceof ItemBlock && !this.isMundaneBlock(((ItemBlock) stack.getItem()).getBlock())) - { - newList.add(stack); - } - } - - return newList; - } - - - public boolean isMundaneBlock(Block block) - { - for (Block test : mundaneList) - { - if (test.equals(block)) - { - return true; - } - } - - - return false; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/MeleeDefaultFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/MeleeDefaultFire.java deleted file mode 100644 index b045a199..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/MeleeDefaultFire.java +++ /dev/null @@ -1,30 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire; - -import WayofTime.alchemicalWizardry.api.spell.ExtrapolatedMeleeEntityEffect; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; - -public class MeleeDefaultFire extends ExtrapolatedMeleeEntityEffect -{ - public MeleeDefaultFire(int power, int potency, int cost) - { - super(power, potency, cost); - this.setRange(3 + 0.3f * potency); - this.setRadius(2 + 0.3f * potency); - this.setMaxNumberHit(potency + 1); - } - - @Override - protected boolean entityEffect(World world, Entity entity, EntityPlayer entityPlayer) - { - if (entity instanceof EntityLiving) - { - entity.setFire(3 * this.powerUpgrades + 3); - return true; - } - - return false; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/MeleeDefensiveFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/MeleeDefensiveFire.java deleted file mode 100644 index 873c2998..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/MeleeDefensiveFire.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.MeleeSpellWorldEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class MeleeDefensiveFire extends MeleeSpellWorldEffect -{ - public MeleeDefensiveFire(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onWorldEffect(World world, EntityPlayer entityPlayer) - { - EnumFacing look = SpellHelper.getCompassDirectionForLookVector(entityPlayer.getLookVec()); - - int width = this.potencyUpgrades + 1; - int length = 5 * this.powerUpgrades + 3; - - int xOffset = look.getFrontOffsetX(); - int zOffset = look.getFrontOffsetZ(); - - BlockPos pos = entityPlayer.getPosition().add(look.getDirectionVec()); - - for (int i = -width; i <= width; i++) - { - for (int j = 0; j < length; j++) - { - for (int k = 0; k < 3; k++) - { - BlockPos newPos = pos.add(i * (zOffset) + j * (xOffset), k, i * (xOffset) + j * (zOffset)); - if (world.isAirBlock(newPos)) - { - world.setBlockState(newPos, Blocks.fire.getDefaultState()); - } - } - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/MeleeEnvironmentalFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/MeleeEnvironmentalFire.java deleted file mode 100644 index 865b33c1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/MeleeEnvironmentalFire.java +++ /dev/null @@ -1,34 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.MeleeSpellCenteredWorldEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class MeleeEnvironmentalFire extends MeleeSpellCenteredWorldEffect -{ - public MeleeEnvironmentalFire(int power, int potency, int cost) - { - super(power, potency, cost); - this.setRange(3 * power + 2); - } - - @Override - public void onCenteredWorldEffect(EntityPlayer player, World world, BlockPos pos) - { - int radius = this.potencyUpgrades; - - for (int i = -radius; i <= radius; i++) - { - for (int j = -radius; j <= radius; j++) - { - for (int k = -radius; k <= radius; k++) - { - BlockPos newPos = pos.add(i, j, k); - SpellHelper.evaporateWaterBlock(world, newPos); - } - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/MeleeOffensiveFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/MeleeOffensiveFire.java deleted file mode 100644 index af02b553..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/MeleeOffensiveFire.java +++ /dev/null @@ -1,32 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.spell.ExtrapolatedMeleeEntityEffect; - -public class MeleeOffensiveFire extends ExtrapolatedMeleeEntityEffect -{ - public MeleeOffensiveFire(int power, int potency, int cost) - { - super(power, potency, cost); - this.setRange(3 + 0.3f * potency); - this.setRadius(2 + 0.3f * potency); - this.setMaxNumberHit(1); - } - - @Override - protected boolean entityEffect(World world, Entity entity, EntityPlayer entityPlayer) - { - if (entity instanceof EntityLivingBase) - { - ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionFireFuse.id, 20 * (7 - this.powerUpgrades), this.potencyUpgrades)); - return true; - } - - return false; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ProjectileDefaultFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ProjectileDefaultFire.java deleted file mode 100644 index a9e6800d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ProjectileDefaultFire.java +++ /dev/null @@ -1,68 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire; - -import net.minecraft.entity.Entity; -import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.ProjectileImpactEffect; - -public class ProjectileDefaultFire extends ProjectileImpactEffect -{ - public ProjectileDefaultFire(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onEntityImpact(Entity mop, Entity proj) - { - BlockPos pos = proj.getPosition(); - - World world = mop.worldObj; - - int horizRange = 0; - int vertRange = 0; - - for (int i = -horizRange; i <= horizRange; i++) - { - for (int j = -vertRange; j <= vertRange; j++) - { - for (int k = -horizRange; k <= horizRange; k++) - { - BlockPos newPos = pos.add(i, j, k); - - if (world.isAirBlock(newPos)) - { - world.setBlockState(newPos, Blocks.fire.getDefaultState()); - } - } - } - } - } - - @Override - public void onTileImpact(World world, MovingObjectPosition mop) - { - BlockPos pos = mop.func_178782_a(); - - int horizRange = 0; - int vertRange = 0; - - for (int i = -horizRange; i <= horizRange; i++) - { - for (int j = -vertRange; j <= vertRange; j++) - { - for (int k = -horizRange; k <= horizRange; k++) - { - BlockPos newPos = pos.add(i, j, k); - - if (world.isAirBlock(newPos)) - { - world.setBlockState(newPos, Blocks.fire.getDefaultState()); - } - } - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ProjectileDefensiveFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ProjectileDefensiveFire.java deleted file mode 100644 index d727b1ac..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ProjectileDefensiveFire.java +++ /dev/null @@ -1,47 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire; - -import net.minecraft.entity.Entity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.ProjectileImpactEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class ProjectileDefensiveFire extends ProjectileImpactEffect -{ - public ProjectileDefensiveFire(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onEntityImpact(Entity mop, Entity proj) - { - mop.setFire(3 * (this.potencyUpgrades + 1)); - } - - @Override - public void onTileImpact(World world, MovingObjectPosition mop) - { - int horizRange = (int) ((this.powerUpgrades)); - int vertRange = (int) ((this.powerUpgrades)); - - BlockPos pos = mop.func_178782_a(); - - for (int i = -horizRange; i <= horizRange; i++) - { - for (int j = -vertRange; j <= vertRange; j++) - { - for (int k = -horizRange; k <= horizRange; k++) - { - BlockPos newPos = pos.add(i, j, k); - - if (!world.isAirBlock(newPos)) - { - SpellHelper.smeltBlockInWorld(world, newPos); - } - } - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ProjectileEnvironmentalFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ProjectileEnvironmentalFire.java deleted file mode 100644 index d4eb74d9..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ProjectileEnvironmentalFire.java +++ /dev/null @@ -1,42 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire; - -import net.minecraft.entity.Entity; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.ProjectileUpdateEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class ProjectileEnvironmentalFire extends ProjectileUpdateEffect -{ - public ProjectileEnvironmentalFire(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onUpdateEffect(Entity projectile) - { - BlockPos pos = projectile.getPosition(); - - int horizRange = this.powerUpgrades + 1; - int vertRange = (int) (0.5 * (this.powerUpgrades + 1)); - - World worldObj = projectile.worldObj; - - for (int i = -horizRange; i <= horizRange; i++) - { - for (int j = -vertRange; j <= vertRange; j++) - { - for (int k = -horizRange; k <= horizRange; k++) - { - BlockPos newPos = pos.add(i, j, k); - - if (!worldObj.isAirBlock(newPos)) - { - SpellHelper.evaporateWaterBlock(worldObj, newPos); - } - } - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ProjectileOffensiveFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ProjectileOffensiveFire.java deleted file mode 100644 index e3525364..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ProjectileOffensiveFire.java +++ /dev/null @@ -1,47 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire; - -import net.minecraft.entity.Entity; -import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.ProjectileImpactEffect; - -public class ProjectileOffensiveFire extends ProjectileImpactEffect -{ - public ProjectileOffensiveFire(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onEntityImpact(Entity mop, Entity proj) - { - int horizRange = (int) (this.powerUpgrades); - int vertDepth = (int) (3 * this.potencyUpgrades + 1); - - BlockPos pos = proj.getPosition(); - - World world = mop.worldObj; - - for (int i = -horizRange; i <= horizRange; i++) - { - for (int j = -vertDepth; j < 0; j++) - { - for (int k = -horizRange; k <= horizRange; k++) - { - BlockPos newPos = pos.add(i, j, k); - if (world.isAirBlock(newPos)) - { - world.setBlockState(newPos, Blocks.flowing_lava.getStateFromMeta(7)); - } - } - } - } - } - - @Override - public void onTileImpact(World world, MovingObjectPosition mop) - { - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/SelfDefaultFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/SelfDefaultFire.java deleted file mode 100644 index a5bc740b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/SelfDefaultFire.java +++ /dev/null @@ -1,19 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire; - -import WayofTime.alchemicalWizardry.api.spell.SelfSpellEffect; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; - -public class SelfDefaultFire extends SelfSpellEffect -{ - public SelfDefaultFire(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onSelfUse(World world, EntityPlayer player) - { - player.setFire((int) (10 * Math.pow(1.5, powerUpgrades + 1.5 * potencyUpgrades))); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/SelfDefensiveFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/SelfDefensiveFire.java deleted file mode 100644 index 4a10521d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/SelfDefensiveFire.java +++ /dev/null @@ -1,41 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.SelfSpellEffect; - -public class SelfDefensiveFire extends SelfSpellEffect -{ - - public SelfDefensiveFire(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onSelfUse(World world, EntityPlayer player) - { - int horizRange = (int) (this.powerUpgrades); - int vertDepth = (int) (3 * this.potencyUpgrades + 1); - - BlockPos pos = player.getPosition(); - - for (int i = -horizRange; i <= horizRange; i++) - { - for (int j = -vertDepth; j < 0; j++) - { - for (int k = -horizRange; k <= horizRange; k++) - { - BlockPos newPos = pos.add(i, j, k); - - if (world.isAirBlock(newPos)) - { - world.setBlockState(newPos, Blocks.flowing_lava.getStateFromMeta(7)); - } - } - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/SelfEnvironmentalFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/SelfEnvironmentalFire.java deleted file mode 100644 index 004548f8..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/SelfEnvironmentalFire.java +++ /dev/null @@ -1,59 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.SelfSpellEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class SelfEnvironmentalFire extends SelfSpellEffect -{ - public SelfEnvironmentalFire(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onSelfUse(World world, EntityPlayer player) - { - BlockPos pos = player.getPosition(); - - int powRadius = this.powerUpgrades; - int potRadius = this.potencyUpgrades - 1; - - for (int i = -powRadius; i <= powRadius; i++) - { - for (int j = -powRadius; j <= powRadius; j++) - { - for (int k = -powRadius; k <= powRadius; k++) - { - BlockPos newPos = pos.add(i, j, k); - - if (world.isAirBlock(newPos)) - { - world.setBlockState(newPos, Blocks.fire.getDefaultState()); - - } - } - } - } - - for (int i = -potRadius; i <= potRadius; i++) - { - for (int j = -potRadius; j <= potRadius; j++) - { - for (int k = -potRadius; k <= potRadius; k++) - { - BlockPos newPos = pos.add(i, j, k); - - if (!world.isAirBlock(newPos)) - { - SpellHelper.smeltBlockInWorld(world, newPos); - } - } - } - } - - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/SelfOffensiveFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/SelfOffensiveFire.java deleted file mode 100644 index 08641a38..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/SelfOffensiveFire.java +++ /dev/null @@ -1,21 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.spell.SelfSpellEffect; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -public class SelfOffensiveFire extends SelfSpellEffect -{ - public SelfOffensiveFire(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onSelfUse(World world, EntityPlayer player) - { - player.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionFlameCloak.id, 300 * (2 * this.powerUpgrades + 1), this.potencyUpgrades)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ToolDefaultFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ToolDefaultFire.java deleted file mode 100644 index fbae06d1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ToolDefaultFire.java +++ /dev/null @@ -1,35 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire; - -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.tool.ItemManipulator; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.FurnaceRecipes; - -import java.util.LinkedList; -import java.util.List; - -public class ToolDefaultFire extends ItemManipulator -{ - public ToolDefaultFire(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public List handleItemsOnBlockBroken(ItemStack toolStack, List itemList) - { - LinkedList newList = new LinkedList(); - for (ItemStack item : itemList) - { - ItemStack newItem = FurnaceRecipes.instance().getSmeltingResult(item); - if (newItem != null) - { - newList.add(newItem); - } else - { - newList.add(item); - } - } - - return newList; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ToolEnvironmentalFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ToolEnvironmentalFire.java deleted file mode 100644 index 68d1dd9c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ToolEnvironmentalFire.java +++ /dev/null @@ -1,51 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire; - -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.tool.OnBreakBlockEffect; - -public class ToolEnvironmentalFire extends OnBreakBlockEffect -{ - public ToolEnvironmentalFire(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public int onBlockBroken(ItemStack container, World world, EntityPlayer player, Block block, IBlockState state, BlockPos pos, EnumFacing sideBroken) - { - int amount = 0; - int cost = (int) (250 * (1 - 0.1f * powerUpgrades) * Math.pow(0.85, costUpgrades)); - int radius = this.powerUpgrades; - float chance = 0.35f + 0.15f * this.potencyUpgrades; - - for (int i = -radius; i <= radius; i++) - { - for (int j = -radius; j <= radius; j++) - { - for (int k = -radius; k <= radius; k++) - { - BlockPos newPos = pos.add(i - sideBroken.getFrontOffsetX(), j, k - sideBroken.getFrontOffsetZ()); - IBlockState newState = world.getBlockState(newPos); - Block blockAffected = newState.getBlock(); - - if ((new Random().nextFloat() <= chance) && (blockAffected == Blocks.gravel || blockAffected == Blocks.stone || blockAffected == Blocks.cobblestone)) - { - world.setBlockState(newPos, Blocks.lava.getDefaultState()); - amount += cost; - } - } - } - } - - return amount; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ToolOffensiveFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ToolOffensiveFire.java deleted file mode 100644 index c7a94579..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ToolOffensiveFire.java +++ /dev/null @@ -1,21 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire; - -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.tool.LeftClickEffect; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; - -public class ToolOffensiveFire extends LeftClickEffect -{ - public ToolOffensiveFire(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public int onLeftClickEntity(ItemStack stack, EntityLivingBase attacked, EntityLivingBase weilder) - { - attacked.setFire(3 + 4 * this.powerUpgrades); - - return (int) (10 * (1 + this.powerUpgrades) * Math.pow(0.85, this.costUpgrades)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/MeleeDefaultIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/MeleeDefaultIce.java deleted file mode 100644 index b375331a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/MeleeDefaultIce.java +++ /dev/null @@ -1,29 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice; - -import WayofTime.alchemicalWizardry.api.spell.ExtrapolatedMeleeEntityEffect; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; - -public class MeleeDefaultIce extends ExtrapolatedMeleeEntityEffect -{ - - public MeleeDefaultIce(int power, int potency, int cost) - { - super(power, potency, cost); - this.setRange(3 + 0.3f * potency); - this.setRadius(2 + 0.3f * potency); - this.setMaxNumberHit(potency + 1); - } - - @Override - protected boolean entityEffect(World world, Entity entity, EntityPlayer entityPlayer) - { - if (entity.hurtResistantTime > 0) - { - entity.hurtResistantTime = Math.max(0, -(potencyUpgrades + 1) + entity.hurtResistantTime); - } - - return true; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/MeleeDefensiveIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/MeleeDefensiveIce.java deleted file mode 100644 index a581cf56..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/MeleeDefensiveIce.java +++ /dev/null @@ -1,49 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.MeleeSpellWorldEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class MeleeDefensiveIce extends MeleeSpellWorldEffect -{ - public MeleeDefensiveIce(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onWorldEffect(World world, EntityPlayer entityPlayer) - { - EnumFacing look = SpellHelper.getCompassDirectionForLookVector(entityPlayer.getLookVec()); - - int width = this.powerUpgrades; - int height = this.powerUpgrades + 2; - - int xOffset = look.getFrontOffsetX(); - int zOffset = look.getFrontOffsetZ(); - - int range = this.potencyUpgrades + 1; - - BlockPos pos = entityPlayer.getPosition(); - - int xStart = pos.getX() + range * xOffset; - int zStart = pos.getZ() + range * zOffset; - int yStart = pos.getY(); - - for (int i = -width; i <= width; i++) - { - for (int j = 0; j < height; j++) - { - BlockPos newPos = new BlockPos(xStart + i * (zOffset), yStart + j, zStart + i * (xOffset)); - if (world.isAirBlock(newPos)) - { - world.setBlockState(newPos, Blocks.ice.getDefaultState()); - } - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/MeleeEnvironmentalIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/MeleeEnvironmentalIce.java deleted file mode 100644 index 1f735537..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/MeleeEnvironmentalIce.java +++ /dev/null @@ -1,40 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice; - -import WayofTime.alchemicalWizardry.api.spell.ExtrapolatedMeleeEntityEffect; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.projectile.EntitySnowball; -import net.minecraft.world.World; - -public class MeleeEnvironmentalIce extends ExtrapolatedMeleeEntityEffect -{ - public MeleeEnvironmentalIce(int power, int potency, int cost) - { - super(power, potency, cost); - this.setMaxNumberHit(1 + potency); - this.setRadius(2); - this.setRange(3); - } - - @Override - protected boolean entityEffect(World world, Entity entity, EntityPlayer entityPlayer) - { - //TODO Change to an Ice Cage - for (int i = 0; i <= this.powerUpgrades; i++) - { - double randX = (world.rand.nextDouble() - world.rand.nextDouble()) * 3; - double randY = -world.rand.nextDouble() * 3; - double randZ = (world.rand.nextDouble() - world.rand.nextDouble()) * 3; - - EntitySnowball snowball = new EntitySnowball(world, entity.posX - 3 * randX, entity.posY - 3 * randY, entity.posZ - 3 * randZ); - snowball.motionX = randX; - snowball.motionY = randY; - snowball.motionZ = randZ; - - world.spawnEntityInWorld(snowball); - } - - return true; - } - -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/MeleeOffensiveIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/MeleeOffensiveIce.java deleted file mode 100644 index c8e99587..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/MeleeOffensiveIce.java +++ /dev/null @@ -1,43 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.ExtrapolatedMeleeEntityEffect; - -public class MeleeOffensiveIce extends ExtrapolatedMeleeEntityEffect -{ - public MeleeOffensiveIce(int power, int potency, int cost) - { - super(power, potency, cost); - this.setMaxNumberHit(1 + potency); - this.setRadius(2); - this.setRange(3); - } - - @Override - protected boolean entityEffect(World world, Entity entity, EntityPlayer entityPlayer) - { - BlockPos pos = entityPlayer.getPosition(); - - - double yVel = 1 * (0.3 * this.powerUpgrades + 0.90); - - entity.motionY = yVel; - - for (int i = 0; i < 2; i++) - { - BlockPos newPos = pos.offsetUp(i); - if (world.isAirBlock(newPos)) - { - world.setBlockState(newPos, Blocks.ice.getDefaultState()); - } - } - - entity.fallDistance = 0.0f; - return true; - } - -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/ProjectileDefaultIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/ProjectileDefaultIce.java deleted file mode 100644 index cf730254..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/ProjectileDefaultIce.java +++ /dev/null @@ -1,38 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice; - -import net.minecraft.entity.Entity; -import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.ProjectileImpactEffect; - -public class ProjectileDefaultIce extends ProjectileImpactEffect -{ - public ProjectileDefaultIce(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onEntityImpact(Entity mop, Entity proj) - { - return; - } - - @Override - public void onTileImpact(World world, MovingObjectPosition mop) - { - int horizRadius = this.powerUpgrades + 1; - int vertRadius = this.potencyUpgrades; - - EnumFacing sideHit = mop.field_178784_b; - - BlockPos newPos = mop.func_178782_a().add(sideHit.getDirectionVec()); - if (world.isAirBlock(newPos)) - { - world.setBlockState(newPos, Blocks.ice.getDefaultState()); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/ProjectileDefensiveIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/ProjectileDefensiveIce.java deleted file mode 100644 index 5c51fe35..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/ProjectileDefensiveIce.java +++ /dev/null @@ -1,49 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice; - -import WayofTime.alchemicalWizardry.api.spell.ProjectileImpactEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.entity.Entity; -import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; - -public class ProjectileDefensiveIce extends ProjectileImpactEffect -{ - public ProjectileDefensiveIce(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onEntityImpact(Entity mop, Entity proj) - { - return; - } - - @Override - public void onTileImpact(World world, MovingObjectPosition mop) - { - int horizRadius = this.powerUpgrades + 1; - int vertRadius = this.potencyUpgrades; - - BlockPos pos = mop.func_178782_a(); - - for (int i = -horizRadius; i <= horizRadius; i++) - { - for (int k = -horizRadius; k <= horizRadius; k++) - { - for (int j = -vertRadius; j <= vertRadius; j++) - { - BlockPos newPos = pos.add(i, j, k); - SpellHelper.freezeWaterBlock(world, newPos); - - if (world.isAirBlock(newPos) && !world.isAirBlock(newPos.offsetDown())) - { - world.setBlockState(newPos, Blocks.snow.getDefaultState()); - } - } - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/ProjectileEnvironmentalIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/ProjectileEnvironmentalIce.java deleted file mode 100644 index 1b689f0b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/ProjectileEnvironmentalIce.java +++ /dev/null @@ -1,35 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice; - -import net.minecraft.entity.Entity; -import net.minecraft.util.BlockPos; -import WayofTime.alchemicalWizardry.api.spell.ProjectileUpdateEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class ProjectileEnvironmentalIce extends ProjectileUpdateEffect -{ - - public ProjectileEnvironmentalIce(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onUpdateEffect(Entity projectile) - { - BlockPos pos = projectile.getPosition(); - - int horizRange = this.powerUpgrades + 1; - int vertRange = this.potencyUpgrades + 1; - - for (int i = -horizRange; i <= horizRange; i++) - { - for (int j = -vertRange; j <= vertRange; j++) - { - for (int k = -horizRange; k <= horizRange; k++) - { - SpellHelper.freezeWaterBlock(projectile.worldObj, pos.add(i, j, k)); - } - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/ProjectileOffensiveIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/ProjectileOffensiveIce.java deleted file mode 100644 index 97d47967..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/ProjectileOffensiveIce.java +++ /dev/null @@ -1,32 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice; - -import WayofTime.alchemicalWizardry.api.spell.ProjectileImpactEffect; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; - -public class ProjectileOffensiveIce extends ProjectileImpactEffect -{ - public ProjectileOffensiveIce(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onEntityImpact(Entity mop, Entity proj) - { - if (mop instanceof EntityLivingBase) - { - ((EntityLivingBase) mop).addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 60 * (this.powerUpgrades + 1), this.potencyUpgrades)); - } - } - - @Override - public void onTileImpact(World world, MovingObjectPosition mop) - { - return; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/SelfDefaultIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/SelfDefaultIce.java deleted file mode 100644 index 7861cc43..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/SelfDefaultIce.java +++ /dev/null @@ -1,36 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.SelfSpellEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class SelfDefaultIce extends SelfSpellEffect -{ - public SelfDefaultIce(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onSelfUse(World world, EntityPlayer player) - { - BlockPos pos = player.getPosition(); - - double yVel = 1 * (0.4 * this.powerUpgrades + 0.75); - SpellHelper.setPlayerSpeedFromServer(player, player.motionX, yVel, player.motionZ); - - for (int i = 0; i < 2; i++) - { - BlockPos newPos = pos.add(0, i, 0); - if (world.isAirBlock(newPos)) - { - world.setBlockState(newPos, Blocks.ice.getDefaultState()); - } - } - - player.fallDistance = 0.0f; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/SelfDefensiveIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/SelfDefensiveIce.java deleted file mode 100644 index cc9ab9e3..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/SelfDefensiveIce.java +++ /dev/null @@ -1,21 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.spell.SelfSpellEffect; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -public class SelfDefensiveIce extends SelfSpellEffect -{ - public SelfDefensiveIce(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onSelfUse(World world, EntityPlayer player) - { - player.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionIceCloak.id, 300 * (2 * this.powerUpgrades + 1), this.potencyUpgrades)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/SelfEnvironmentalIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/SelfEnvironmentalIce.java deleted file mode 100644 index 2e73b07e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/SelfEnvironmentalIce.java +++ /dev/null @@ -1,43 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.SelfSpellEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class SelfEnvironmentalIce extends SelfSpellEffect -{ - public SelfEnvironmentalIce(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onSelfUse(World world, EntityPlayer player) - { - EnumFacing look = SpellHelper.getCompassDirectionForLookVector(player.getLookVec()); - - int width = this.potencyUpgrades + 1; - int length = 5 * this.powerUpgrades + 3; - - int xOffset = look.getFrontOffsetX(); - int zOffset = look.getFrontOffsetZ(); - - BlockPos pos = player.getPosition(); - - for (int i = -width; i <= width; i++) - { - for (int j = 0; j < length; j++) - { - BlockPos newPos = pos.add(i * (zOffset) + j * (xOffset), 0, i * (xOffset) + j * (zOffset)); - if (world.isAirBlock(newPos)) - { - world.setBlockState(newPos, Blocks.ice.getDefaultState()); - } - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/SelfOffensiveIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/SelfOffensiveIce.java deleted file mode 100644 index 95072ab6..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/SelfOffensiveIce.java +++ /dev/null @@ -1,52 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice; - -import WayofTime.alchemicalWizardry.api.spell.SelfSpellEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -import java.util.List; - -public class SelfOffensiveIce extends SelfSpellEffect -{ - public SelfOffensiveIce(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onSelfUse(World world, EntityPlayer player) - { - double horizRadius = this.powerUpgrades + 1; - double vertRadius = 0.5 * this.powerUpgrades + 1; - - List entities = SpellHelper.getEntitiesInRange(world, player.posX, player.posY, player.posZ, horizRadius, vertRadius); - - if (entities == null) - { - return; - } - - int i = 0; - int number = this.powerUpgrades + 1; - - for (Entity entity : entities) - { - if (i >= number) - { - continue; - } - - if (entity instanceof EntityLivingBase && !entity.equals(player)) - { - ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 60 * (1 + this.powerUpgrades), this.potencyUpgrades)); - - i++; - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/ToolDefaultIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/ToolDefaultIce.java deleted file mode 100644 index e9eeb811..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/ToolDefaultIce.java +++ /dev/null @@ -1,30 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice; - - -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.tool.LeftClickEffect; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; - - -public class ToolDefaultIce extends LeftClickEffect -{ - public ToolDefaultIce(int power, int potency, int cost) - { - super(power, potency, cost); - } - - - @Override - public int onLeftClickEntity(ItemStack stack, EntityLivingBase attacked, EntityLivingBase weilder) - { - int duration = 200; - - - attacked.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, duration, this.powerUpgrades)); - - - return 0; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/ToolDefensiveIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/ToolDefensiveIce.java deleted file mode 100644 index 7c4edbfe..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/ice/ToolDefensiveIce.java +++ /dev/null @@ -1,59 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.ice; - -import java.util.List; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.tool.SummonToolEffect; - -public class ToolDefensiveIce extends SummonToolEffect -{ - public ToolDefensiveIce(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public int onSummonTool(ItemStack toolStack, World world, Entity entity) - { - int horizRadius = this.powerUpgrades * 2 + 2; - int vertRadius = this.powerUpgrades * 3 + 2; - List entityList = SpellHelper.getEntitiesInRange(world, entity.posX, entity.posY, entity.posZ, horizRadius, vertRadius); - - for (Entity ent : entityList) - { - if (ent instanceof EntityLivingBase && !ent.equals(entity)) - { - ((EntityLivingBase) ent).addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 200, this.potencyUpgrades * 2)); - } - } - - BlockPos pos = entity.getPosition(); - - for (int x = -horizRadius; x <= horizRadius; x++) - { - for (int y = -vertRadius; y <= vertRadius; y++) - { - for (int z = -horizRadius; z <= horizRadius; z++) - { - BlockPos newPos = pos.add(x, y, z); - SpellHelper.freezeWaterBlock(world, newPos); - if (world.isSideSolid(newPos, EnumFacing.UP) && world.isAirBlock(newPos.offsetUp())) - { - world.setBlockState(newPos.offsetUp(), Blocks.snow_layer.getDefaultState()); - } - } - } - } - - return 0; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/DigAreaEffect.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/DigAreaEffect.java deleted file mode 100644 index 39f11169..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/DigAreaEffect.java +++ /dev/null @@ -1,58 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.tool; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.ModItems; -import WayofTime.alchemicalWizardry.api.items.ItemSpellMultiTool; -import WayofTime.alchemicalWizardry.api.spell.IDigAreaEffect; - -public class DigAreaEffect implements IDigAreaEffect -{ - protected int powerUpgrades; - protected int potencyUpgrades; - protected int costUpgrades; - - public DigAreaEffect(int power, int potency, int cost) - { - this.powerUpgrades = power; - this.potencyUpgrades = potency; - this.costUpgrades = cost; - } - - @Override - public int digSurroundingArea(ItemStack container, World world, EntityPlayer player, MovingObjectPosition blockPos, String usedToolClass, float blockHardness, int harvestLvl, ItemSpellMultiTool itemTool) - { - if (!blockPos.typeOfHit.equals(MovingObjectPosition.MovingObjectType.BLOCK)) - { - return 0; - } - - int x = blockPos.func_178782_a().getX(); //BlockPos - int y = blockPos.func_178782_a().getY(); - int z = blockPos.func_178782_a().getZ(); - EnumFacing sidehit = blockPos.field_178784_b; - - for (int xPos = x - 1; xPos <= x + 1; xPos++) - { - for (int yPos = y - 1; yPos <= y + 1; yPos++) - { - for (int zPos = z - 1; zPos <= z + 1; zPos++) - { - BlockPos newPos = new BlockPos(xPos, yPos, zPos); - ModItems.customTool.onBlockStartBreak(container, newPos, player); - } - } - } - - return 0; - } - - public float getHardnessDifference() - { - return 1.5f; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/DigAreaTunnel.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/DigAreaTunnel.java deleted file mode 100644 index a946d755..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/DigAreaTunnel.java +++ /dev/null @@ -1,169 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.tool; - -import java.util.LinkedList; -import java.util.List; -import java.util.Random; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.MathHelper; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.items.ItemSpellMultiTool; - -public class DigAreaTunnel extends DigAreaEffect -{ - Random rand = new Random(); - - public DigAreaTunnel(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public int digSurroundingArea(ItemStack container, World world, EntityPlayer player, MovingObjectPosition blockPos, String usedToolClass, float blockHardness, int harvestLvl, ItemSpellMultiTool itemTool) - { - if (!blockPos.typeOfHit.equals(MovingObjectPosition.MovingObjectType.BLOCK)) - { - return 0; - } - - List vectorLine = new LinkedList(); - - double initialX = blockPos.func_178782_a().getX(); - double initialY = blockPos.func_178782_a().getY(); - double initialZ = blockPos.func_178782_a().getZ(); - EnumFacing sidehit = blockPos.field_178784_b; - EnumFacing opposite = sidehit.getOpposite(); - - double initialLength = this.getRandomVectorLength(); - - Vec3 initialVector = new Vec3(opposite.getFrontOffsetX() * initialLength, opposite.getFrontOffsetY() * initialLength, opposite.getFrontOffsetZ() * initialLength); - - Vec3 lastVec = new Vec3(initialVector.xCoord, initialVector.yCoord, initialVector.zCoord); - vectorLine.add(initialVector); - - double currentLength = lastVec.lengthVector(); - double totalLength = this.totalLength(); - - while (currentLength < totalLength - 0.01) - { - Vec3 tempVec = lastVec.addVector(0, 0, 0); - - tempVec = tempVec.normalize(); - - double varr = this.varyRate(); - - tempVec = tempVec.addVector(varr * (rand.nextFloat() - rand.nextFloat()), varr * (rand.nextFloat() - rand.nextFloat()), varr * (rand.nextFloat() - rand.nextFloat())); - - tempVec = tempVec.normalize(); - - double length = Math.min(this.getRandomVectorLength(), totalLength - currentLength); - - tempVec = new Vec3(tempVec.xCoord * length, tempVec.yCoord * length, tempVec.zCoord * length); - - vectorLine.add(tempVec); - - lastVec = tempVec; - - currentLength += tempVec.lengthVector(); - } - - for (Vec3 testVec : vectorLine) - { - this.travelVector(testVec, world, initialX, initialY, initialZ); - - initialX += testVec.xCoord; - initialY += testVec.yCoord; - initialZ += testVec.zCoord; - } - - this.travelVector(lastVec, world, initialX, initialY, initialZ); - - return 0; - } - - public double totalLength() - { - return 100; - } - - public double getStepSize() - { - return 1; - } - - public double varyRate() - { - return 0.5; - } - - public double getRandomVectorLength() - { - return 10; - } - - public double getRandomStepLength() - { - return 0.5; - } - - public int getRandomRadius() - { - return 3; - } - - public void destroySphereOfMundane(World world, double x, double y, double z, int radius) - { - BlockPos pos = new BlockPos(MathHelper.floor_double(x), MathHelper.floor_double(y), MathHelper.floor_double(z)); - for (int i = -radius; i <= radius; i++) - { - for (int j = -radius; j <= radius; j++) - { - for (int k = -radius; k <= radius; k++) - { - if (i * i + j * j + k * k >= (radius + 0.50f) * (radius + 0.50f)) - { - continue; - } - - BlockPos newPos = pos.add(i, j, k); - - this.destroyMunadeAt(world, newPos); - } - } - } - } - - public void destroyMunadeAt(World world, BlockPos pos) - { - world.setBlockToAir(pos); - } - - public void travelVector(Vec3 vector, World world, double x, double y, double z) - { - double vecLength = vector.lengthVector(); - AlchemicalWizardry.logger.info(vecLength); - Vec3 normVec = new Vec3(vector.xCoord, vector.yCoord, vector.zCoord); - normVec = normVec.normalize(); - - Vec3 prevVec = new Vec3(0, 0, 0); - double distanceTravelled = 0; - - while (distanceTravelled < vecLength) - { - AlchemicalWizardry.logger.info(distanceTravelled); - double stepLength = this.getRandomStepLength(); - - prevVec = prevVec.addVector(stepLength * normVec.xCoord, stepLength * normVec.yCoord, normVec.zCoord); - - this.destroySphereOfMundane(world, prevVec.xCoord + x, prevVec.yCoord + y, prevVec.zCoord + z, this.getRandomRadius()); - - distanceTravelled = prevVec.lengthVector(); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/ItemManipulator.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/ItemManipulator.java deleted file mode 100644 index 4fe6295b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/ItemManipulator.java +++ /dev/null @@ -1,24 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.tool; - -import net.minecraft.item.ItemStack; - -import java.util.List; - -import WayofTime.alchemicalWizardry.api.spell.IItemManipulator; - -public abstract class ItemManipulator implements IItemManipulator -{ - protected int powerUpgrades; - protected int potencyUpgrades; - protected int costUpgrades; - - public ItemManipulator(int power, int potency, int cost) - { - this.powerUpgrades = power; - this.potencyUpgrades = potency; - this.costUpgrades = cost; - } - - @Override - public abstract List handleItemsOnBlockBroken(ItemStack toolStack, List itemList); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/LeftClickEffect.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/LeftClickEffect.java deleted file mode 100644 index 3cbfd2fc..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/LeftClickEffect.java +++ /dev/null @@ -1,22 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.tool; - -import WayofTime.alchemicalWizardry.api.spell.ILeftClickEffect; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; - -public abstract class LeftClickEffect implements ILeftClickEffect -{ - protected int powerUpgrades; - protected int potencyUpgrades; - protected int costUpgrades; - - public LeftClickEffect(int power, int potency, int cost) - { - this.powerUpgrades = power; - this.potencyUpgrades = potency; - this.costUpgrades = cost; - } - - @Override - public abstract int onLeftClickEntity(ItemStack stack, EntityLivingBase attacked, EntityLivingBase weilder); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/OnBreakBlockEffect.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/OnBreakBlockEffect.java deleted file mode 100644 index a6af2688..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/OnBreakBlockEffect.java +++ /dev/null @@ -1,17 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.tool; - -import WayofTime.alchemicalWizardry.api.spell.IOnBreakBlock; - -public abstract class OnBreakBlockEffect implements IOnBreakBlock -{ - protected int powerUpgrades; - protected int potencyUpgrades; - protected int costUpgrades; - - public OnBreakBlockEffect(int power, int potency, int cost) - { - this.powerUpgrades = power; - this.potencyUpgrades = potency; - this.costUpgrades = cost; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/RightClickEffect.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/RightClickEffect.java deleted file mode 100644 index 5eb7b5ae..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/RightClickEffect.java +++ /dev/null @@ -1,17 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.tool; - -import WayofTime.alchemicalWizardry.api.spell.IRightClickEffect; - -public abstract class RightClickEffect implements IRightClickEffect -{ - protected int powerUpgrades; - protected int potencyUpgrades; - protected int costUpgrades; - - public RightClickEffect(int power, int potency, int cost) - { - this.powerUpgrades = power; - this.potencyUpgrades = potency; - this.costUpgrades = cost; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/RightClickTunnel.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/RightClickTunnel.java deleted file mode 100644 index 8051d264..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/RightClickTunnel.java +++ /dev/null @@ -1,176 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.tool; - -import java.util.LinkedList; -import java.util.List; -import java.util.Random; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.MathHelper; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; - -public class RightClickTunnel extends RightClickEffect -{ - Random rand = new Random(); - - public RightClickTunnel(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public int onRightClickBlock(ItemStack stack, EntityLivingBase weilder, World world, MovingObjectPosition mop) - { - if (weilder.worldObj.isRemote) - { - return 0; - } - if (!mop.typeOfHit.equals(MovingObjectPosition.MovingObjectType.BLOCK)) - { - return 0; - } - - List vectorLine = new LinkedList(); - - double initialX = mop.func_178782_a().getX(); - double initialY = mop.func_178782_a().getY(); - double initialZ = mop.func_178782_a().getZ(); - EnumFacing sidehit = mop.field_178784_b; - EnumFacing opposite = sidehit.getOpposite(); - - double initialLength = this.getRandomVectorLength(); - - Vec3 initialVector = new Vec3(opposite.getFrontOffsetX() * initialLength, opposite.getFrontOffsetY() * initialLength, opposite.getFrontOffsetZ() * initialLength); - - Vec3 lastVec = new Vec3(initialVector.xCoord, initialVector.yCoord, initialVector.zCoord); - vectorLine.add(initialVector); - - double currentLength = lastVec.lengthVector(); - double totalLength = this.totalLength(); - - while (currentLength < totalLength - 0.01) - { - Vec3 tempVec = lastVec.addVector(0, 0, 0); - - tempVec = tempVec.normalize(); - - double varr = this.varyRate(); - - tempVec = tempVec.addVector(varr * (rand.nextFloat() - rand.nextFloat()), varr * (rand.nextFloat() - rand.nextFloat()), varr * (rand.nextFloat() - rand.nextFloat())); - - tempVec = tempVec.normalize(); - - double length = Math.min(this.getRandomVectorLength(), totalLength - currentLength); - - tempVec = new Vec3(tempVec.xCoord * length, tempVec.yCoord * length, tempVec.zCoord * length); - - vectorLine.add(tempVec); - - lastVec = tempVec; - - currentLength += tempVec.lengthVector(); - } - - for (Vec3 testVec : vectorLine) - { - this.travelVector(testVec, world, initialX, initialY, initialZ); - - initialX += testVec.xCoord; - initialY += testVec.yCoord; - initialZ += testVec.zCoord; - } - - this.travelVector(lastVec, world, initialX, initialY, initialZ); - - return 0; - } - - @Override - public int onRightClickAir(ItemStack stack, EntityLivingBase weilder) - { - return 0; - } - - public double totalLength() - { - return 100; - } - - public double getStepSize() - { - return 1; - } - - public double varyRate() - { - return 0.5; - } - - public double getRandomVectorLength() - { - return 10; - } - - public double getRandomStepLength() - { - return 0.5; - } - - public int getRandomRadius() - { - return 3; - } - - public void destroySphereOfMundane(World world, double x, double y, double z, int radius) - { - BlockPos pos = new BlockPos(MathHelper.floor_double(x), MathHelper.floor_double(y), MathHelper.floor_double(z)); - for (int i = -radius; i <= radius; i++) - { - for (int j = -radius; j <= radius; j++) - { - for (int k = -radius; k <= radius; k++) - { - if (i * i + j * j + k * k >= (radius + 0.50f) * (radius + 0.50f)) - { - continue; - } - - BlockPos newPos = pos.add(i, j, k); - - this.destroyMunadeAt(world, newPos); - } - } - } - } - - public void destroyMunadeAt(World world, BlockPos pos) - { - world.setBlockToAir(pos); - } - - public void travelVector(Vec3 vector, World world, double x, double y, double z) - { - double vecLength = vector.lengthVector(); - - Vec3 normVec = new Vec3(vector.xCoord, vector.yCoord, vector.zCoord); - normVec = normVec.normalize(); - - Vec3 prevVec = new Vec3(0, 0, 0); - double distanceTravelled = 0; - - while (distanceTravelled < vecLength) - { - double stepLength = this.getRandomStepLength(); - - prevVec = prevVec.addVector(stepLength * normVec.xCoord, stepLength * normVec.yCoord, normVec.zCoord); - - this.destroySphereOfMundane(world, prevVec.xCoord + x, prevVec.yCoord + y, prevVec.zCoord + z, this.getRandomRadius()); - - distanceTravelled = prevVec.lengthVector(); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/SummonToolEffect.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/SummonToolEffect.java deleted file mode 100644 index 8a14beb0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/tool/SummonToolEffect.java +++ /dev/null @@ -1,17 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.tool; - -import WayofTime.alchemicalWizardry.api.spell.IOnSummonTool; - -public abstract class SummonToolEffect implements IOnSummonTool -{ - protected int powerUpgrades; - protected int potencyUpgrades; - protected int costUpgrades; - - public SummonToolEffect(int power, int potency, int cost) - { - this.powerUpgrades = power; - this.potencyUpgrades = potency; - this.costUpgrades = cost; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/MeleeDefaultWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/MeleeDefaultWind.java deleted file mode 100644 index 803acb7e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/MeleeDefaultWind.java +++ /dev/null @@ -1,40 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.ExtrapolatedMeleeEntityEffect; - -public class MeleeDefaultWind extends ExtrapolatedMeleeEntityEffect -{ - public MeleeDefaultWind(int power, int potency, int cost) - { - super(power, potency, cost); - this.setRange(4 + 2.0f * potency); - this.setRadius(4 + 2.0f * potency); - this.setMaxNumberHit(potency + 1); - } - - @Override - protected boolean entityEffect(World world, Entity entity, EntityPlayer player) - { - double wantedVel = -(0.5d + 0.7d * this.powerUpgrades); - - if (entity instanceof EntityLivingBase) - { - double dist = Math.sqrt(entity.getDistanceToEntity(player)); - double xVel = wantedVel * (entity.posX - player.posX) / dist; - double yVel = wantedVel * (entity.posY - player.posY) / dist; - double zVel = wantedVel * (entity.posZ - player.posZ) / dist; - - entity.motionX = xVel; - entity.motionY = yVel; - entity.motionZ = zVel; - - return true; - } - - return false; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/MeleeDefensiveWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/MeleeDefensiveWind.java deleted file mode 100644 index 34aef636..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/MeleeDefensiveWind.java +++ /dev/null @@ -1,33 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind; - -import WayofTime.alchemicalWizardry.api.spell.ExtrapolatedMeleeEntityEffect; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; - -public class MeleeDefensiveWind extends ExtrapolatedMeleeEntityEffect -{ - public MeleeDefensiveWind(int power, int potency, int cost) - { - super(power, potency, cost); - this.setRange(3 + 0.3f * potency); - this.setRadius(2 + 0.3f * potency); - this.setMaxNumberHit(potency + 1); - } - - @Override - protected boolean entityEffect(World world, Entity entity, EntityPlayer player) - { - double wantedVel = 0.5d + 0.5d * this.powerUpgrades; - - if (entity instanceof EntityLiving) - { - entity.motionY = wantedVel; - - return true; - } - - return false; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/MeleeEnvironmentalWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/MeleeEnvironmentalWind.java deleted file mode 100644 index 36d9c5c6..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/MeleeEnvironmentalWind.java +++ /dev/null @@ -1,37 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind; - -import java.util.List; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.MeleeSpellCenteredWorldEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class MeleeEnvironmentalWind extends MeleeSpellCenteredWorldEffect -{ - public MeleeEnvironmentalWind(int power, int potency, int cost) - { - super(power, potency, cost); - this.setRange(5 * power + 5); - } - - @Override - public void onCenteredWorldEffect(EntityPlayer player, World world, BlockPos pos) - { - int radius = 5 * this.potencyUpgrades + 3; - - List entities = SpellHelper.getEntitiesInRange(world, pos.getX(), pos.getY(), pos.getZ(), radius, radius); - - for (Entity entity : entities) - { - if (entity instanceof EntityItem) - { - ((EntityItem) entity).setPickupDelay(0); - entity.onCollideWithPlayer((EntityPlayer) player); - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/MeleeOffensiveWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/MeleeOffensiveWind.java deleted file mode 100644 index 8dd15f71..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/MeleeOffensiveWind.java +++ /dev/null @@ -1,40 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.ExtrapolatedMeleeEntityEffect; - -public class MeleeOffensiveWind extends ExtrapolatedMeleeEntityEffect -{ - public MeleeOffensiveWind(int power, int potency, int cost) - { - super(power, potency, cost); - this.setRange(3 + 0.3f * potency); - this.setRadius(2 + 0.3f * potency); - this.setMaxNumberHit(potency + 1); - } - - @Override - protected boolean entityEffect(World world, Entity entity, EntityPlayer player) - { - double wantedVel = 1.0d + 1.0d * this.powerUpgrades; - - if (entity instanceof EntityLivingBase) - { - double dist = Math.sqrt(entity.getDistanceToEntity(player)); - double xVel = wantedVel * (entity.posX - player.posX) / dist; - double yVel = wantedVel * (entity.posY - player.posY + 0.5f) / dist; - double zVel = wantedVel * (entity.posZ - player.posZ) / dist; - - entity.motionX = xVel; - entity.motionY = yVel; - entity.motionZ = zVel; - - return true; - } - - return false; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/ProjectileDefaultWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/ProjectileDefaultWind.java deleted file mode 100644 index 862b7193..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/ProjectileDefaultWind.java +++ /dev/null @@ -1,30 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind; - -import WayofTime.alchemicalWizardry.api.spell.ProjectileImpactEffect; -import net.minecraft.entity.Entity; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; - -public class ProjectileDefaultWind extends ProjectileImpactEffect -{ - public ProjectileDefaultWind(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onEntityImpact(Entity mop, Entity proj) - { - float wantedYVel = (float) ((0.5) * (0.5 * this.potencyUpgrades + 1)); - - mop.motionX = proj.motionX; - mop.motionY = mop.motionY += wantedYVel; - mop.motionZ = proj.motionZ; - } - - @Override - public void onTileImpact(World world, MovingObjectPosition mop) - { - return; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/ProjectileEnvironmentalWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/ProjectileEnvironmentalWind.java deleted file mode 100644 index a647f34c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/ProjectileEnvironmentalWind.java +++ /dev/null @@ -1,48 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind; - -import java.util.List; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.EntitySpellProjectile; -import WayofTime.alchemicalWizardry.api.spell.ProjectileUpdateEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class ProjectileEnvironmentalWind extends ProjectileUpdateEffect -{ - public ProjectileEnvironmentalWind(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onUpdateEffect(Entity projectile) - { - int horizRange = this.powerUpgrades + 1; - int vertRange = 1 * this.potencyUpgrades + 1; - - World worldObj = projectile.worldObj; - - if (projectile instanceof EntitySpellProjectile) - { - Entity shooter = ((EntitySpellProjectile) projectile).shootingEntity; - if (shooter instanceof EntityPlayer) - { - List entitylist = SpellHelper.getEntitiesInRange(worldObj, projectile.posX, projectile.posY, projectile.posZ, horizRange, vertRange); - if (entitylist != null) - { - for (Entity entity : entitylist) - { - if (entity instanceof EntityItem) - { - ((EntityItem) entity).setPickupDelay(0); - entity.onCollideWithPlayer((EntityPlayer) shooter); - } - } - } - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/ProjectileOffensiveWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/ProjectileOffensiveWind.java deleted file mode 100644 index 35f1aaf4..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/ProjectileOffensiveWind.java +++ /dev/null @@ -1,33 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.spell.ProjectileImpactEffect; - -public class ProjectileOffensiveWind extends ProjectileImpactEffect -{ - - public ProjectileOffensiveWind(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onEntityImpact(Entity mop, Entity proj) - { - if (mop instanceof EntityLivingBase) - { - ((EntityLivingBase) mop).addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionHeavyHeart.id, (int) (100 * (2 * this.powerUpgrades + 1) * (1 / (this.potencyUpgrades + 1))), this.potencyUpgrades)); - } - } - - @Override - public void onTileImpact(World world, MovingObjectPosition mop) - { - return; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/SelfDefaultWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/SelfDefaultWind.java deleted file mode 100644 index 9c8dff52..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/SelfDefaultWind.java +++ /dev/null @@ -1,20 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind; - -import WayofTime.alchemicalWizardry.api.spell.SelfSpellEffect; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; - -public class SelfDefaultWind extends SelfSpellEffect -{ - public SelfDefaultWind(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onSelfUse(World world, EntityPlayer player) - { - player.extinguish(); - player.fallDistance = 0; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/SelfDefensiveWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/SelfDefensiveWind.java deleted file mode 100644 index 819fdcd2..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/SelfDefensiveWind.java +++ /dev/null @@ -1,39 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.spell.SelfSpellEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -import java.util.List; - -public class SelfDefensiveWind extends SelfSpellEffect -{ - public SelfDefensiveWind(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onSelfUse(World world, EntityPlayer player) - { - double radius = 1.5d * this.powerUpgrades + 1.5d; - double posX = player.posX; - double posY = player.posY; - double posZ = player.posZ; - - List entities = SpellHelper.getEntitiesInRange(world, posX, posY, posZ, radius, radius); - - for (Entity entity : entities) - { - if ((!entity.equals(player)) && entity instanceof EntityLiving) - { - ((EntityLiving) entity).addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionHeavyHeart.id, 200, this.potencyUpgrades)); - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/SelfEnvironmentalWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/SelfEnvironmentalWind.java deleted file mode 100644 index efbe60ea..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/SelfEnvironmentalWind.java +++ /dev/null @@ -1,45 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind; - -import java.util.List; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.SelfSpellEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class SelfEnvironmentalWind extends SelfSpellEffect -{ - public SelfEnvironmentalWind(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onSelfUse(World world, EntityPlayer player) - { - double radius = 1.5d * this.potencyUpgrades + 1; - double posX = player.posX; - double posY = player.posY - 0.7d; - double posZ = player.posZ; - double wantedVel = 0.7d + 0.7d * this.powerUpgrades; - - List entities = SpellHelper.getEntitiesInRange(world, posX, posY, posZ, radius, radius); - - for (Entity entity : entities) - { - if ((!entity.equals(player)) && entity instanceof EntityLivingBase) - { - double dist = Math.sqrt(entity.getDistanceToEntity(player)); - double xVel = wantedVel * (entity.posX - posX) / dist; - double yVel = wantedVel * (entity.posY - posY) / dist; - double zVel = wantedVel * (entity.posZ - posZ) / dist; - - entity.motionX = xVel; - entity.motionY = yVel; - entity.motionZ = zVel; - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/SelfOffensiveWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/SelfOffensiveWind.java deleted file mode 100644 index 6fafe165..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/SelfOffensiveWind.java +++ /dev/null @@ -1,26 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind; - -import WayofTime.alchemicalWizardry.api.spell.SelfSpellEffect; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; - -public class SelfOffensiveWind extends SelfSpellEffect -{ - public SelfOffensiveWind(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public void onSelfUse(World world, EntityPlayer player) - { - Vec3 vec = player.getLookVec(); - double wantedVelocity = 1.5 + this.powerUpgrades * 0.4; - - SpellHelper.setPlayerSpeedFromServer(player, vec.xCoord * wantedVelocity, vec.yCoord * wantedVelocity, vec.zCoord * wantedVelocity); - - player.fallDistance = 0; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/ToolDefensiveWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/ToolDefensiveWind.java deleted file mode 100644 index 15745deb..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/ToolDefensiveWind.java +++ /dev/null @@ -1,32 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind; - -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.tool.LeftClickEffect; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.Vec3; - -public class ToolDefensiveWind extends LeftClickEffect -{ - - public ToolDefensiveWind(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public int onLeftClickEntity(ItemStack stack, EntityLivingBase attacked, EntityLivingBase weilder) - { - Vec3 vec = weilder.getLookVec(); - vec = vec.subtract(0, vec.yCoord, 0); - vec = vec.normalize(); - - float velocity = 0.5f * (1 + this.powerUpgrades * 0.8f); - float ratio = 0.1f + 0.3f * this.potencyUpgrades; - - attacked.motionX += vec.xCoord * velocity; - attacked.motionY += velocity * ratio; - attacked.motionZ += vec.zCoord * velocity; - - return 0; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/ToolEnvironmentalWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/ToolEnvironmentalWind.java deleted file mode 100644 index 7a1d461a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/ToolEnvironmentalWind.java +++ /dev/null @@ -1,43 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.tool.OnBreakBlockEffect; - -public class ToolEnvironmentalWind extends OnBreakBlockEffect -{ - public ToolEnvironmentalWind(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public int onBlockBroken(ItemStack container, World world, EntityPlayer player, Block block, IBlockState state, BlockPos pos, EnumFacing sideBroken) - { - double vertRange = 0.5 + (this.powerUpgrades * this.powerUpgrades + this.powerUpgrades) / 2; - double horizRange = vertRange; - - List itemList = SpellHelper.getItemsInRange(world, pos.getX() + 0.5f, pos.getY() + 0.5f, pos.getZ() + 0.5f, horizRange, vertRange); - - for (EntityItem entity : itemList) - { - if (!world.isRemote) - { - entity.setPickupDelay(0); - entity.onCollideWithPlayer(player); - } - } - - return 0; - } - -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/ToolOffensiveWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/ToolOffensiveWind.java deleted file mode 100644 index 07be3f79..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/ToolOffensiveWind.java +++ /dev/null @@ -1,23 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind; - -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.tool.LeftClickEffect; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; - -public class ToolOffensiveWind extends LeftClickEffect -{ - public ToolOffensiveWind(int power, int potency, int cost) - { - super(power, potency, cost); - } - - @Override - public int onLeftClickEntity(ItemStack stack, EntityLivingBase attacked, EntityLivingBase weilder) - { - attacked.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionHeavyHeart.id, (int) (100 * (2 * this.powerUpgrades + 1) * (1 / (this.potencyUpgrades + 1))), this.potencyUpgrades)); - - return (int) (100 * (0.5 * this.potencyUpgrades + 1) * (this.powerUpgrades + 1) * Math.pow(0.85, costUpgrades)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/HomSpell.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/HomSpell.java deleted file mode 100644 index 30f3849b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/HomSpell.java +++ /dev/null @@ -1,141 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.simple; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -public abstract class HomSpell implements ISimpleSpell -{ - private int offensiveRangedEnergy; - private int offensiveMeleeEnergy; - private int defensiveEnergy; - private int environmentalEnergy; - - public HomSpell() - { - //super(id); - //this.setMaxStackSize(1); - // TODO Auto-generated constructor stub - } - - @Override - public abstract ItemStack onOffensiveRangedRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer); - - @Override - public abstract ItemStack onOffensiveMeleeRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer); - - @Override - public abstract ItemStack onDefensiveRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer); - - @Override - public abstract ItemStack onEnvironmentalRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer); - - public int getOffensiveRangedEnergy() - { - return offensiveRangedEnergy; - } - - public int getOffensiveMeleeEnergy() - { - return offensiveMeleeEnergy; - } - - public int getDefensiveEnergy() - { - return defensiveEnergy; - } - - public int getEnvironmentalEnergy() - { - return environmentalEnergy; - } - - public void setEnergies(int offensiveRanged, int offensiveMelee, int defensive, int environmental) - { - this.offensiveRangedEnergy = offensiveRanged; - this.offensiveMeleeEnergy = offensiveMelee; - this.defensiveEnergy = defensive; - this.environmentalEnergy = environmental; - } - - public void setSpellParadigm(ItemStack itemStack, int paradigm) - { - if (itemStack.getTagCompound() == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - itemStack.getTagCompound().setInteger("paradigm", paradigm); - } - - public int getSpellParadigm(ItemStack itemStack) - { - if (itemStack.getTagCompound() == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - return (itemStack.getTagCompound().getInteger("paradigm")); - } - - //@Override - public ItemStack useSpell(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - int paradigm = getSpellParadigm(par1ItemStack); - - if (par3EntityPlayer.isSneaking()) - { - if (paradigm < 3) - { - this.setSpellParadigm(par1ItemStack, paradigm + 1); - } else - { - this.setSpellParadigm(par1ItemStack, 0); - } - - return par1ItemStack; - } - - switch (paradigm) - { - case 0: - return this.onOffensiveRangedRightClick(par1ItemStack, par2World, par3EntityPlayer); - - case 1: - return this.onOffensiveMeleeRightClick(par1ItemStack, par2World, par3EntityPlayer); - - case 2: - return this.onDefensiveRightClick(par1ItemStack, par2World, par3EntityPlayer); - - case 3: - return this.onEnvironmentalRightClick(par1ItemStack, par2World, par3EntityPlayer); - } - - return par1ItemStack; - } - -// @Override -// public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) -// { -// if (!(par1ItemStack.getTagCompound() == null)) -// { -// if (!par1ItemStack.getTagCompound().getString("ownerName").equals("")) -// { -// par3List.add("Current owner: " + par1ItemStack.getTagCompound().getString("ownerName")); -// } -// -// par3List.add("Current paradigm: " + this.getSpellParadigm(par1ItemStack)); -// } -// } - - public int getDimensionID(ItemStack itemStack) - { - if (itemStack.getTagCompound() == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - return itemStack.getTagCompound().getInteger("dimensionId"); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/HomSpellComponent.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/HomSpellComponent.java deleted file mode 100644 index 41cfcaab..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/HomSpellComponent.java +++ /dev/null @@ -1,26 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.simple; - -import net.minecraft.item.ItemStack; - -public class HomSpellComponent -{ - public HomSpell spell; - public ItemStack item; - public int blockID; - - public HomSpellComponent(ItemStack item, HomSpell spell) - { - this.item = item; - this.spell = spell; - } - - public HomSpell getSpell() - { - return spell; - } - - public ItemStack getItemStack() - { - return this.item; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/HomSpellRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/HomSpellRegistry.java deleted file mode 100644 index c4f5ac28..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/HomSpellRegistry.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.simple; - -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -import java.util.ArrayList; -import java.util.List; - -public class HomSpellRegistry -{ - public static List spellList = new ArrayList(); - - public static void registerBasicSpell(ItemStack item, HomSpell spell) - { - spellList.add(new HomSpellComponent(item, spell)); - } - - public static HomSpell getSpellForItemStack(ItemStack testItem) - { - if (testItem == null) - { - return null; - } - - for (HomSpellComponent hsc : spellList) - { - ItemStack item = hsc.getItemStack(); - - if (item != null) - { - if (item.getItem() instanceof ItemBlock) - { - if (testItem.getItem() instanceof ItemBlock) - { - if (testItem.getItem() == item.getItem()) - { - return hsc.getSpell(); - } - } - } else - { - if (!(testItem.getItem() instanceof ItemBlock)) - { - if (testItem.getItem() == item.getItem()) - { - return hsc.getSpell(); - } - } - } - } - } - - return null; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/ISimpleSpell.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/ISimpleSpell.java deleted file mode 100644 index 77a8799d..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/ISimpleSpell.java +++ /dev/null @@ -1,16 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.simple; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public interface ISimpleSpell -{ - public abstract ItemStack onOffensiveRangedRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer); - - public abstract ItemStack onOffensiveMeleeRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer); - - public abstract ItemStack onDefensiveRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer); - - public abstract ItemStack onEnvironmentalRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer); -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellEarthBender.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellEarthBender.java deleted file mode 100644 index e4c6f282..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellEarthBender.java +++ /dev/null @@ -1,190 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.simple; - -import java.util.Random; - -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.common.entity.projectile.MudProjectile; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class SpellEarthBender extends HomSpell -{ - Random itemRand = new Random(); - - public SpellEarthBender() - { - super(); - this.setEnergies(100, 150, 350, 200); - } - - @Override - public ItemStack onOffensiveRangedRightClick(ItemStack stack, World world, EntityPlayer player) - { - if (!BindableItems.checkAndSetItemOwner(stack, player) || player.isSneaking()) - { - return stack; - } - - if (!player.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(stack, player, this.getOffensiveRangedEnergy()); - } - - world.spawnEntityInWorld(new MudProjectile(world, player, 8, false)); - world.playSoundAtEntity(player, "random.fizz", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); - return stack; - } - - @Override - public ItemStack onOffensiveMeleeRightClick(ItemStack stack, World world, EntityPlayer player) - { - if (!BindableItems.checkAndSetItemOwner(stack, player) || player.isSneaking()) - { - return stack; - } - - if (!player.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(stack, player, this.getOffensiveMeleeEnergy()); - } - - if (!world.isRemote) - { - for (int i = -1; i <= 1; i++) - { - for (int j = -1; j <= 1; j++) - { - world.spawnEntityInWorld(new MudProjectile(world, player, 3, 3, player.posX, player.posY + player.getEyeHeight(), player.posZ, player.rotationYaw + i * 10F, player.rotationPitch + j * 5F, true)); - } - } - } - - return stack; - } - - @Override - public ItemStack onDefensiveRightClick(ItemStack stack, World world, EntityPlayer player) - { - if (!BindableItems.checkAndSetItemOwner(stack, player) || player.isSneaking()) - { - return stack; - } - - if (!player.capabilities.isCreativeMode) - { - SoulNetworkHandler.syphonAndDamageFromNetwork(stack, player, this.getDefensiveEnergy()); - } - - double xCoord = player.posX; - double yCoord = player.posY; - double zCoord = player.posZ; - int posX = (int) xCoord; - int posY = (int) yCoord; - int posZ = (int) zCoord; - BlockPos pos = player.getPosition(); - IBlockState blockID = Blocks.stone.getDefaultState(); - - if (world.isAirBlock(pos.offsetUp(3))) - { - world.setBlockState(pos.offsetUp(3), Blocks.glass.getDefaultState()); - } - - for (int i = 0; i < 4; i++) - { - for (int j = 0; j < 4; j++) - { - if (world.isAirBlock(new BlockPos(posX + i - 1, posY + j, posZ - 2))) - { - world.setBlockState(new BlockPos(posX + i - 1, posY + j, posZ - 2), blockID); - } - - if (world.isAirBlock(new BlockPos(posX + 2, posY + j, posZ - 1 + i))) - { - world.setBlockState(new BlockPos(posX + 2, posY + j, posZ - 1 + i), blockID); - } - - if (world.isAirBlock(new BlockPos(posX - i + 1, posY + j, posZ + 2))) - { - world.setBlockState(new BlockPos(posX - i + 1, posY + j, posZ + 2), blockID); - } - - if (world.isAirBlock(new BlockPos(posX - 2, posY + j, posZ + 1 - i))) - { - world.setBlockState(new BlockPos(posX - 2, posY + j, posZ + 1 - i), blockID); - } - - if (world.isAirBlock(new BlockPos(posX - 1 + i, posY + 3, posZ - 1 + j))) - { - world.setBlockState(new BlockPos(posX - 1 + i, posY + 3, posZ - 1 + j), blockID); - } - } - } - - for (int i = 0; i < 20; i++) - { - SpellHelper.sendParticleToAllAround(world, xCoord, yCoord, zCoord, 30, world.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB, xCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, yCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, zCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, 0.0F, 0.410F, 1.0F); - } - - return stack; - } - - @Override - public ItemStack onEnvironmentalRightClick(ItemStack stack, World world, EntityPlayer player) - { - if (!BindableItems.checkAndSetItemOwner(stack, player) || player.isSneaking()) - { - return stack; - } - - if (!player.capabilities.isCreativeMode) - { - SoulNetworkHandler.syphonAndDamageFromNetwork(stack, player, this.getEnvironmentalEnergy()); - } - - int range = 3; - - if (!world.isRemote) - { - for (int i = -range; i <= range; i++) - { - for (int j = -1; j <= 1; j++) - { - for (int k = -range; k <= range; k++) - { - BlockPos pos = player.getPosition().add(i, j, k); - if (world.getBlockState(pos).getBlock() == Blocks.water || world.getBlockState(pos).getBlock() == Blocks.flowing_water) - { - int x = world.rand.nextInt(2); - - if (x == 0) - { - world.setBlockState(pos, Blocks.sand.getDefaultState()); - } else - { - world.setBlockState(pos, Blocks.dirt.getDefaultState()); - } - } - } - } - } - } - - double xCoord = player.posX; - double yCoord = player.posY; - double zCoord = player.posZ; - - for (int i = 0; i < 16; i++) - { - SpellHelper.sendParticleToAllAround(world, xCoord, yCoord, zCoord, 30, world.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB, xCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, yCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, zCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, 0.0F, 0.410F, 1.0F); - } - - return stack; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellExplosions.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellExplosions.java deleted file mode 100644 index e5c4a333..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellExplosions.java +++ /dev/null @@ -1,104 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.simple; - -import WayofTime.alchemicalWizardry.common.entity.projectile.ExplosionProjectile; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -import java.util.Random; - -public class SpellExplosions extends HomSpell -{ - Random itemRand = new Random(); - - public SpellExplosions() - { - super(); - this.setEnergies(400, 500, 1900, 1500); - } - - @Override - public ItemStack onOffensiveRangedRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getOffensiveRangedEnergy()); - } - - par2World.playSoundAtEntity(par3EntityPlayer, "random.fizz", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); - - if (!par2World.isRemote) - { - par2World.spawnEntityInWorld(new ExplosionProjectile(par2World, par3EntityPlayer, 6, true)); - } - - return par1ItemStack; - } - - @Override - public ItemStack onOffensiveMeleeRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getOffensiveMeleeEnergy()); - } - - int distance = 4; - double yaw = par3EntityPlayer.rotationYaw / 180 * Math.PI; - double pitch = par3EntityPlayer.rotationPitch / 180 * Math.PI; - par2World.createExplosion(par3EntityPlayer, par3EntityPlayer.posX + Math.sin(yaw) * Math.cos(pitch) * (-distance), par3EntityPlayer.posY + par3EntityPlayer.getEyeHeight() + Math.sin(-pitch) * distance, par3EntityPlayer.posZ + Math.cos(yaw) * Math.cos(pitch) * distance, (float) (3), true); - return par1ItemStack; - } - - @Override - public ItemStack onDefensiveRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getDefensiveEnergy()); - } - - int distance = 4; - par2World.createExplosion(par3EntityPlayer, par3EntityPlayer.posX, par3EntityPlayer.posY + par3EntityPlayer.getEyeHeight(), par3EntityPlayer.posZ, (float) (distance), false); - return par1ItemStack; - } - - @Override - public ItemStack onEnvironmentalRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getEnvironmentalEnergy()); - } - - int radius = 3; - - for (int i = 0; i < 360; i += 36) - { - par2World.createExplosion(par3EntityPlayer, par3EntityPlayer.posX + Math.cos(i) * radius, par3EntityPlayer.posY, par3EntityPlayer.posZ + Math.sin(i) * radius, (float) (2), true); - } - - return null; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellFireBurst.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellFireBurst.java deleted file mode 100644 index f8b23fdc..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellFireBurst.java +++ /dev/null @@ -1,154 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.simple; - -import java.util.Iterator; -import java.util.List; -import java.util.Random; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.common.entity.projectile.FireProjectile; -import WayofTime.alchemicalWizardry.common.items.BindableItems; - -public class SpellFireBurst extends HomSpell -{ - public Random itemRand = new Random(); - - public SpellFireBurst() - { - super(); - this.setEnergies(100, 300, 400, 100); - } - - @Override - public ItemStack onOffensiveRangedRightClick(ItemStack stack, World world, EntityPlayer player) - { - if (!BindableItems.checkAndSetItemOwner(stack, player) || player.isSneaking()) - { - return stack; - } - - if (!player.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(stack, player, this.getOffensiveRangedEnergy()); - } - - world.playSoundAtEntity(player, "random.fizz", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); - - if (!world.isRemote) - { - FireProjectile proj = new FireProjectile(world, player, 7); - world.spawnEntityInWorld(proj); - } - - return stack; - } - - @Override - public ItemStack onOffensiveMeleeRightClick(ItemStack stack, World world, EntityPlayer player) - { - if (!BindableItems.checkAndSetItemOwner(stack, player) || player.isSneaking()) - { - return stack; - } - - if (!player.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(stack, player, this.getOffensiveMeleeEnergy()); - } - - world.playSoundAtEntity(player, "random.fizz", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); - - if (!world.isRemote) - { - for (int i = -1; i <= 1; i++) - { - for (int j = -1; j <= 1; j++) - { - world.spawnEntityInWorld(new FireProjectile(world, player, 8, 2, player.posX, player.posY + player.getEyeHeight(), player.posZ, player.rotationYaw + i * 10F, player.rotationPitch + j * 10F)); - } - } - } - - return stack; - } - - @Override - public ItemStack onDefensiveRightClick(ItemStack stack, World world, EntityPlayer player) - { - if (!BindableItems.checkAndSetItemOwner(stack, player) || player.isSneaking()) - { - return stack; - } - - if (!player.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(stack, player, this.getDefensiveEnergy()); - } - - world.playSoundAtEntity(player, "random.fizz", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); - int d0 = 2; - AxisAlignedBB axisalignedbb = new AxisAlignedBB((double) player.posX, (double) player.posY, (double) player.posZ, (double) (player.posX + 1), (double) (player.posY + 2), (double) (player.posZ + 1)).expand(d0, d0, d0); - List list = player.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb); - Iterator iterator = list.iterator(); - - while (iterator.hasNext()) - { - EntityLivingBase entityLiving = (EntityLivingBase) iterator.next(); - - if (entityLiving instanceof EntityPlayer) - { - if (entityLiving.equals(player)) - { - continue; - } - } - - entityLiving.setFire(100); - entityLiving.attackEntityFrom(DamageSource.inFire, 2); - } - return stack; - } - - @Override - public ItemStack onEnvironmentalRightClick(ItemStack stack, World world, EntityPlayer player) - { - if (!BindableItems.checkAndSetItemOwner(stack, player) || player.isSneaking()) - { - return stack; - } - - if (!player.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(stack, player, this.getEnvironmentalEnergy()); - } - - world.playSoundAtEntity(player, "random.fizz", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); - World worldObj = world; - - for (int i = -1; i <= 1; i++) - { - for (int j = -1; j <= 1; j++) - { - for (int k = -1; k <= 1; k++) - { - BlockPos pos = player.getPosition().add(i, k, k); - if (worldObj.isAirBlock(pos)) - { - if (worldObj.rand.nextFloat() < 0.8F) - { - worldObj.setBlockState(pos, Blocks.fire.getDefaultState()); - } - } - } - } - } - - return stack; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellFrozenWater.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellFrozenWater.java deleted file mode 100644 index 10cf5ccb..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellFrozenWater.java +++ /dev/null @@ -1,209 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.simple; - -import java.util.Random; - -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.common.entity.projectile.IceProjectile; -import WayofTime.alchemicalWizardry.common.items.BindableItems; - -public class SpellFrozenWater extends HomSpell -{ - public Random itemRand = new Random(); - - public SpellFrozenWater() - { - super(); - this.setEnergies(100, 200, 150, 100); - } - - @Override - public ItemStack onOffensiveRangedRightClick(ItemStack stack, World world, EntityPlayer player) - { - if (!BindableItems.checkAndSetItemOwner(stack, player) || player.isSneaking()) - { - return stack; - } - - if (!player.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(stack, player, this.getOffensiveRangedEnergy()); - } - - world.playSoundAtEntity(player, "random.fizz", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); - - if (!world.isRemote) - { - world.spawnEntityInWorld(new IceProjectile(world, player, 6)); - } - - return stack; - } - - @Override - public ItemStack onOffensiveMeleeRightClick(ItemStack stack, World world, EntityPlayer player) - { - if (!BindableItems.checkAndSetItemOwner(stack, player) || player.isSneaking()) - { - return stack; - } - - if (!player.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(stack, player, this.getOffensiveMeleeEnergy()); - } - - for (int i = -2; i <= 2; i++) - { - world.spawnEntityInWorld(new IceProjectile(world, player, 6, 2, player.posX, player.posY + player.getEyeHeight(), player.posZ, player.rotationYaw + i * 5F, player.rotationPitch)); - } - - return stack; - } - - @Override - public ItemStack onDefensiveRightClick(ItemStack stack, World world, EntityPlayer player) - { - if (!player.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(stack, player, getDefensiveEnergy()); - } - - float yaw = player.rotationYaw; - float pitch = player.rotationPitch; - int range = 2; - - BlockPos pos = player.getPosition(); - BlockPos newPos = pos; - - if (pitch > 40F) - { - for (int i = -range; i <= range; i++) - { - for (int j = -range; j <= range; j++) - { - newPos = pos.add(i, -1, j); - - if (world.isAirBlock(newPos)) - { - world.setBlockState(newPos, Blocks.ice.getDefaultState()); - } - } - } - - return stack; - } else if (pitch < -40F) - { - for (int i = -range; i <= range; i++) - { - for (int j = -range; j <= range; j++) - { - newPos = pos.add(i, 3, j); - - if (world.isAirBlock(newPos)) - { - world.setBlockState(newPos, Blocks.ice.getDefaultState()); - } - } - } - - return stack; - } - - if ((yaw >= 315 && yaw < 360) || (yaw >= 0 && yaw < 45)) - { - for (int i = -range; i <= range; i++) - { - for (int j = 0; j < range * 2 + 1; j++) - { - newPos = pos.add(i, j, 2); - - if (world.isAirBlock(newPos)) - { - world.setBlockState(newPos, Blocks.ice.getDefaultState()); - } - } - } - } else if (yaw >= 45 && yaw < 135) - { - for (int i = -range; i <= range; i++) - { - for (int j = 0; j < range * 2 + 1; j++) - { - newPos = pos.add(-2, j, i); - - if (world.isAirBlock(newPos)) - { - world.setBlockState(newPos, Blocks.ice.getDefaultState()); - } - } - } - } else if (yaw >= 135 && yaw < 225) - { - for (int i = -range; i <= range; i++) - { - for (int j = 0; j < range * 2 + 1; j++) - { - newPos = pos.add(i, j, -2); - - if (world.isAirBlock(newPos)) - { - world.setBlockState(newPos, Blocks.ice.getDefaultState()); - } - } - } - } else - { - for (int i = -range; i <= range; i++) - { - for (int j = 0; j < range * 2 + 1; j++) - { - newPos = pos.add(2, j, i); - - if (world.isAirBlock(newPos)) - { - world.setBlockState(newPos, Blocks.ice.getDefaultState()); - } - } - } - } - - return stack; - } - - @Override - public ItemStack onEnvironmentalRightClick(ItemStack stack, World world, EntityPlayer player) - { - if (!BindableItems.checkAndSetItemOwner(stack, player) || player.isSneaking()) - { - return stack; - } - - int radius = 3; - int posX = (int) player.posX; - int posY = (int) player.posY; - int posZ = (int) player.posZ; - - for (int i = -radius; i <= radius; i++) - { - for (int j = -radius; j <= radius; j++) - { - for (int k = -radius; k <= radius; k++) - { - BlockPos pos = player.getPosition().add(i, j, k); - - IBlockState state = world.getBlockState(pos); - if (state.getBlock() == Blocks.water || state.getBlock() == Blocks.flowing_water) - { - world.setBlockState(pos, Blocks.ice.getDefaultState()); - } - } - } - } - return stack; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellHolyBlast.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellHolyBlast.java deleted file mode 100644 index f837d538..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellHolyBlast.java +++ /dev/null @@ -1,181 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.simple; - -import WayofTime.alchemicalWizardry.common.entity.projectile.HolyProjectile; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.world.World; - -import java.util.Iterator; -import java.util.List; -import java.util.Random; - -public class SpellHolyBlast extends HomSpell -{ - Random itemRand = new Random(); - - public SpellHolyBlast() - { - super(); - this.setEnergies(100, 300, 500, 400); - } - - @Override - public ItemStack onOffensiveRangedRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getOffensiveRangedEnergy()); - } - - par2World.playSoundAtEntity(par3EntityPlayer, "random.fizz", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); - - if (!par2World.isRemote) - { - par2World.spawnEntityInWorld(new HolyProjectile(par2World, par3EntityPlayer, 8)); - } - - return par1ItemStack; - } - - @Override - public ItemStack onOffensiveMeleeRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getOffensiveMeleeEnergy()); - } - - int distance = 2; - double yaw = par3EntityPlayer.rotationYaw / 180 * Math.PI; - double pitch = par3EntityPlayer.rotationPitch / 180 * Math.PI; - double xCoord = par3EntityPlayer.posX + Math.sin(yaw) * Math.cos(pitch) * (-distance); - double yCoord = par3EntityPlayer.posY + par3EntityPlayer.getEyeHeight() + Math.sin(-pitch) * distance; - double zCoord = par3EntityPlayer.posZ + Math.cos(yaw) * Math.cos(pitch) * distance; - float d0 = 0.5f; - AxisAlignedBB axisalignedbb = new AxisAlignedBB(par3EntityPlayer.posX - 0.5 + Math.sin(yaw) * Math.cos(pitch) * (-distance), par3EntityPlayer.posY + par3EntityPlayer.getEyeHeight() + Math.sin(-pitch) * distance, par3EntityPlayer.posZ - 0.5 + Math.cos(yaw) * Math.cos(pitch) * distance, par3EntityPlayer.posX + Math.sin(yaw) * Math.cos(pitch) * (-distance) + 0.5, par3EntityPlayer.posY + par3EntityPlayer.getEyeHeight() + Math.sin(-pitch) * distance + 1, par3EntityPlayer.posZ + Math.cos(yaw) * Math.cos(pitch) * distance + 0.5).expand(d0, d0, d0); - List list = par3EntityPlayer.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb); - Iterator iterator = list.iterator(); - - while (iterator.hasNext()) - { - EntityLivingBase entityLiving = (EntityLivingBase) iterator.next(); - - if (entityLiving instanceof EntityPlayer) - { - if (entityLiving.equals(par3EntityPlayer)) - { - continue; - } - } - - int i = 1; - - if (entityLiving.isEntityUndead()) - { - i = 3; - } - entityLiving.attackEntityFrom(DamageSource.causePlayerDamage(par3EntityPlayer), 5 * i); - } - - par2World.createExplosion(par3EntityPlayer, xCoord, yCoord, zCoord, (float) (1), false); - - for (int i = 0; i < 5; i++) - { - SpellHelper.sendParticleToAllAround(par2World, xCoord, yCoord, zCoord, 30, par2World.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB, xCoord + itemRand.nextFloat() - itemRand.nextFloat(), yCoord + itemRand.nextFloat() - itemRand.nextFloat(), zCoord + itemRand.nextFloat() - itemRand.nextFloat(), 1.0F, 1.0F, 1.0F); - } - - return par1ItemStack; - } - - @Override - public ItemStack onDefensiveRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getDefensiveEnergy()); - } - - if (!par2World.isRemote) - { - for (int i = 0; i < 360; i += 18) - { - par2World.spawnEntityInWorld(new HolyProjectile(par2World, par3EntityPlayer, 8, 3, par3EntityPlayer.posX, par3EntityPlayer.posY + (par3EntityPlayer.height / 2), par3EntityPlayer.posZ, i, 0)); - } - } - - return par1ItemStack; - } - - @Override - public ItemStack onEnvironmentalRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getEnvironmentalEnergy()); - } - - int d0 = 3; - AxisAlignedBB axisalignedbb = new AxisAlignedBB((double) par3EntityPlayer.posX, (double) par3EntityPlayer.posY, (double) par3EntityPlayer.posZ, (double) (par3EntityPlayer.posX + 1), (double) (par3EntityPlayer.posY + 2), (double) (par3EntityPlayer.posZ + 1)).expand(d0, d0, d0); - List list = par3EntityPlayer.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb); - Iterator iterator = list.iterator(); - - while (iterator.hasNext()) - { - EntityLivingBase entityLiving = (EntityLivingBase) iterator.next(); - - if (entityLiving instanceof EntityPlayer) - { - if (entityLiving.equals(par3EntityPlayer)) - { - continue; - } - } - - int i = 1; - - if (entityLiving.isEntityUndead()) - { - i = 3; - } - entityLiving.attackEntityFrom(DamageSource.causePlayerDamage(par3EntityPlayer), 5 * i); - } - - par2World.createExplosion(par3EntityPlayer, par3EntityPlayer.posX, par3EntityPlayer.posY, par3EntityPlayer.posZ, (float) (2), false); - double xCoord = par3EntityPlayer.posX; - double yCoord = par3EntityPlayer.posY; - double zCoord = par3EntityPlayer.posZ; - - for (int i = 0; i < 20; i++) - { - SpellHelper.sendParticleToAllAround(par2World, xCoord, yCoord, zCoord, 30, par2World.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB, xCoord + itemRand.nextFloat() - itemRand.nextFloat(), yCoord + itemRand.nextFloat() - itemRand.nextFloat(), zCoord + itemRand.nextFloat() - itemRand.nextFloat(), 1.0F, 1.0F, 1.0F); - } - - return par1ItemStack; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellLightningBolt.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellLightningBolt.java deleted file mode 100644 index e2f4cb5c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellLightningBolt.java +++ /dev/null @@ -1,132 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.simple; - -import WayofTime.alchemicalWizardry.common.entity.projectile.LightningBoltProjectile; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.world.World; - -import java.util.Random; - -public class SpellLightningBolt extends HomSpell -{ - Random itemRand = new Random(); - - public SpellLightningBolt() - { - super(); - this.setEnergies(75, 200, 700, 700); - } - - @Override - public ItemStack onOffensiveRangedRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getOffensiveRangedEnergy()); - } - - par2World.playSoundAtEntity(par3EntityPlayer, "random.fizz", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); - - if (!par2World.isRemote) - { - par2World.spawnEntityInWorld(new LightningBoltProjectile(par2World, par3EntityPlayer, 8, false)); - } - - return par1ItemStack; - } - - @Override - public ItemStack onOffensiveMeleeRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - //TODO Make it work better...? - if (BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getOffensiveMeleeEnergy()); - } - - double xCoord = par3EntityPlayer.posX; - double yCoord = par3EntityPlayer.posY; - double zCoord = par3EntityPlayer.posZ; - par2World.getWorldInfo().setRaining(true); - if(par2World.isRemote) - { - par2World.setRainStrength(1.0f); - par2World.setThunderStrength(1.0f); - } - - par2World.getWorldInfo().setThunderTime(0); - par2World.getWorldInfo().setThundering(true); - - for (int i = 0; i < 5; i++) - { - SpellHelper.sendParticleToAllAround(par2World, xCoord, yCoord, zCoord, 30, par2World.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB, xCoord + itemRand.nextFloat() - itemRand.nextFloat(), yCoord + itemRand.nextFloat() - itemRand.nextFloat(), zCoord + itemRand.nextFloat() - itemRand.nextFloat(), 1.0F, 1.0F, 1.0F); - } - - return par1ItemStack; - } - - @Override - public ItemStack onDefensiveRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getDefensiveEnergy()); - } - - double xCoord = par3EntityPlayer.posX; - double yCoord = par3EntityPlayer.posY; - double zCoord = par3EntityPlayer.posZ; - - for (int i = 0; i < 5; i++) - { - par2World.addWeatherEffect(new EntityLightningBolt(par2World, xCoord + itemRand.nextInt(64) - 32, yCoord + itemRand.nextInt(8) - 8, zCoord + itemRand.nextInt(64) - 32)); - } - - for (int i = 0; i < 8; i++) - { - SpellHelper.sendParticleToAllAround(par2World, xCoord, yCoord, zCoord, 30, par2World.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB, xCoord + itemRand.nextFloat() - itemRand.nextFloat(), yCoord + itemRand.nextFloat() - itemRand.nextFloat(), zCoord + itemRand.nextFloat() - itemRand.nextFloat(), 1.0F, 1.0F, 1.0F); - } - - return par1ItemStack; - } - - @Override - public ItemStack onEnvironmentalRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getEnvironmentalEnergy()); - } - - if (!par2World.isRemote) - { - par2World.spawnEntityInWorld(new LightningBoltProjectile(par2World, par3EntityPlayer, 8, true)); - } - - return par1ItemStack; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellTeleport.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellTeleport.java deleted file mode 100644 index a4158eaf..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellTeleport.java +++ /dev/null @@ -1,267 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.simple; - -import java.util.Iterator; -import java.util.List; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.monster.EntityEnderman; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.living.EnderTeleportEvent; -import WayofTime.alchemicalWizardry.common.entity.projectile.TeleportProjectile; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class SpellTeleport extends HomSpell -{ - public static Random itemRand = new Random(); - - public SpellTeleport() - { - super(); - this.setEnergies(500, 300, 500, 1000); - } - - @Override - public ItemStack onOffensiveRangedRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getOffensiveRangedEnergy()); - } - - par2World.spawnEntityInWorld(new TeleportProjectile(par2World, par3EntityPlayer, 8, true)); - par2World.playSoundAtEntity(par3EntityPlayer, "random.fizz", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); - EntityEnderman g; - return par1ItemStack; - } - - @Override - public ItemStack onOffensiveMeleeRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getOffensiveMeleeEnergy()); - } - - par2World.spawnEntityInWorld(new TeleportProjectile(par2World, par3EntityPlayer, 8, false)); - return par1ItemStack; - } - - @Override - public ItemStack onDefensiveRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getDefensiveEnergy()); - } - - double xCoord = par3EntityPlayer.posX; - double yCoord = par3EntityPlayer.posY; - double zCoord = par3EntityPlayer.posZ; - SpellTeleport.teleportRandomly(par3EntityPlayer, 128); - - for (int i = 0; i < 20; i++) - { - SpellHelper.sendParticleToAllAround(par2World, xCoord, yCoord, zCoord, 30, par2World.provider.getDimensionId(), EnumParticleTypes.PORTAL, xCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 2, yCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 2, zCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 2, itemRand.nextFloat(), itemRand.nextFloat(), itemRand.nextFloat()); - } - - return par1ItemStack; - } - - @Override - public ItemStack onEnvironmentalRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getEnvironmentalEnergy()); - } - - if (!par2World.isRemote) - { - int d0 = 3; - AxisAlignedBB axisalignedbb = new AxisAlignedBB((double) par3EntityPlayer.posX, (double) par3EntityPlayer.posY, (double) par3EntityPlayer.posZ, (double) (par3EntityPlayer.posX + 1), (double) (par3EntityPlayer.posY + 2), (double) (par3EntityPlayer.posZ + 1)).expand(d0, d0, d0); - List list = par3EntityPlayer.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb); - Iterator iterator = list.iterator(); - - while (iterator.hasNext()) - { - EntityLivingBase entityLiving = (EntityLivingBase) iterator.next(); - - if (entityLiving instanceof EntityPlayer) - { - if (entityLiving.equals(par3EntityPlayer)) - { - continue; - } - } - SpellTeleport.teleportRandomly(entityLiving, 128); - } - } - - double xCoord = par3EntityPlayer.posX; - double yCoord = par3EntityPlayer.posY; - double zCoord = par3EntityPlayer.posZ; - - for (int i = 0; i < 32; i++) - { - SpellHelper.sendParticleToAllAround(par2World, xCoord, yCoord, zCoord, 30, par2World.provider.getDimensionId(), EnumParticleTypes.PORTAL, xCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 2, yCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 2, zCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 2, itemRand.nextFloat(), itemRand.nextFloat(), itemRand.nextFloat()); - } - - return par1ItemStack; - } - - public static boolean teleportRandomly(EntityLivingBase entityLiving, double distance) - { - double x = entityLiving.posX; - double y = entityLiving.posY; - double z = entityLiving.posZ; - Random rand = new Random(); - double d0 = x + (rand.nextDouble() - 0.5D) * distance; - double d1 = y + (double) (rand.nextInt((int) distance) - (distance) / 2); - double d2 = z + (rand.nextDouble() - 0.5D) * distance; - int i = 0; - - while (!SpellTeleport.teleportTo(entityLiving, d0, d1, d2, x, y, z) && i < 100) - { - d0 = x + (rand.nextDouble() - 0.5D) * distance; - d1 = y + (double) (rand.nextInt((int) distance) - (distance) / 2); - d2 = z + (rand.nextDouble() - 0.5D) * distance; - i++; - } - - if (i >= 100) - { - return false; - } - - return true; - } - - private static boolean teleportTo(EntityLivingBase entityLiving, double par1, double par3, double par5, double lastX, double lastY, double lastZ) - { - net.minecraftforge.event.entity.living.EnderTeleportEvent event = new net.minecraftforge.event.entity.living.EnderTeleportEvent(entityLiving, par1, par3, par5, 0); - if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) return false; - double d3 = entityLiving.posX; - double d4 = entityLiving.posY; - double d5 = entityLiving.posZ; - entityLiving.posX = event.targetX; - entityLiving.posY = event.targetY; - entityLiving.posZ = event.targetZ; - boolean flag = false; - BlockPos blockpos = new BlockPos(entityLiving.posX, entityLiving.posY, entityLiving.posZ); - - if (entityLiving.worldObj.isBlockLoaded(blockpos)) - { - boolean flag1 = false; - - while (!flag1 && blockpos.getY() > 0) - { - BlockPos blockpos1 = blockpos.offsetDown(); - Block block = entityLiving.worldObj.getBlockState(blockpos1).getBlock(); - - if (block.getMaterial().blocksMovement()) - { - flag1 = true; - } - else - { - --entityLiving.posY; - blockpos = blockpos1; - } - } - - if (flag1) - { - entityLiving.setPositionAndUpdate(entityLiving.posX, entityLiving.posY, entityLiving.posZ); - - if (entityLiving.worldObj.getCollidingBoundingBoxes(entityLiving, entityLiving.getEntityBoundingBox()).isEmpty() && !entityLiving.worldObj.isAnyLiquid(entityLiving.getEntityBoundingBox())) - { - flag = true; - } - } - } - - if (!flag) - { - entityLiving.setPosition(d3, d4, d5); - return false; - } - else - { - short short1 = 128; - - for (int i = 0; i < short1; ++i) - { - double d9 = (double)i / ((double)short1 - 1.0D); - float f = (itemRand.nextFloat() - 0.5F) * 0.2F; - float f1 = (itemRand.nextFloat() - 0.5F) * 0.2F; - float f2 = (itemRand.nextFloat() - 0.5F) * 0.2F; - double d6 = d3 + (entityLiving.posX - d3) * d9 + (itemRand.nextDouble() - 0.5D) * (double)entityLiving.width * 2.0D; - double d7 = d4 + (entityLiving.posY - d4) * d9 + itemRand.nextDouble() * (double)entityLiving.height; - double d8 = d5 + (entityLiving.posZ - d5) * d9 + (itemRand.nextDouble() - 0.5D) * (double)entityLiving.width * 2.0D; - entityLiving.worldObj.spawnParticle(EnumParticleTypes.PORTAL, d6, d7, d8, (double)f, (double)f1, (double)f2, new int[0]); - } - - entityLiving.worldObj.playSoundEffect(d3, d4, d5, "mob.endermen.portal", 1.0F, 1.0F); - entityLiving.playSound("mob.endermen.portal", 1.0F, 1.0F); - return true; - } - } - - public static void moveEntityViaTeleport(EntityLivingBase entityLiving, double x, double y, double z) - { - if (entityLiving instanceof EntityPlayer) - { - if (entityLiving != null && entityLiving instanceof EntityPlayerMP) - { - EntityPlayerMP entityplayermp = (EntityPlayerMP) entityLiving; - if (entityplayermp.worldObj == entityLiving.worldObj) - { - EnderTeleportEvent event = new EnderTeleportEvent(entityplayermp, x, y, z, 5.0F); - - if (!MinecraftForge.EVENT_BUS.post(event)) - { - if (entityLiving.isRiding()) - { - entityLiving.mountEntity((Entity) null); - } - entityLiving.setPositionAndUpdate(event.targetX, event.targetY, event.targetZ); - } - } - } - } else if (entityLiving != null) - { - entityLiving.setPosition(x, y, z); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellWateryGrave.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellWateryGrave.java deleted file mode 100644 index 054538fe..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellWateryGrave.java +++ /dev/null @@ -1,171 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.simple; - -import java.util.Iterator; -import java.util.List; -import java.util.Random; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.common.entity.projectile.WaterProjectile; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class SpellWateryGrave extends HomSpell -{ - Random itemRand = new Random(); - - public SpellWateryGrave() - { - super(); - this.setEnergies(250, 350, 500, 750); - } - - @Override - public ItemStack onOffensiveRangedRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getOffensiveRangedEnergy()); - } - - par2World.spawnEntityInWorld(new WaterProjectile(par2World, par3EntityPlayer, 8)); - par2World.playSoundAtEntity(par3EntityPlayer, "random.fizz", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); - return par1ItemStack; - } - - @Override - public ItemStack onOffensiveMeleeRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getOffensiveMeleeEnergy()); - } - - if (!par2World.isRemote) - { - for (int i = -1; i <= 1; i++) - { - for (int j = -1; j <= 1; j++) - { - par2World.spawnEntityInWorld(new WaterProjectile(par2World, par3EntityPlayer, 3, 3, par3EntityPlayer.posX, par3EntityPlayer.posY + par3EntityPlayer.getEyeHeight(), par3EntityPlayer.posZ, par3EntityPlayer.rotationYaw + i * 10F, par3EntityPlayer.rotationPitch + j * 5F)); - } - } - } - - return par1ItemStack; - } - - @Override - public ItemStack onDefensiveRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getDefensiveEnergy()); - } - - int d0 = 3; - AxisAlignedBB axisalignedbb = new AxisAlignedBB((double) par3EntityPlayer.posX, (double) par3EntityPlayer.posY, (double) par3EntityPlayer.posZ, (double) (par3EntityPlayer.posX + 1), (double) (par3EntityPlayer.posY + 2), (double) (par3EntityPlayer.posZ + 1)).expand(d0, d0, d0); - List list = par3EntityPlayer.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb); - Iterator iterator = list.iterator(); - - while (iterator.hasNext()) - { - EntityLivingBase entityLiving = (EntityLivingBase) iterator.next(); - - if (entityLiving instanceof EntityPlayer) - { - if (entityLiving.equals(par3EntityPlayer)) - { - continue; - } - } - - int x = 1; - - if (entityLiving.isImmuneToFire()) - { - x = 2; - } - - entityLiving.attackEntityFrom(DamageSource.drown, 2 * x); - entityLiving.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionDrowning.id, 100, x - 1)); - } - - double xCoord = par3EntityPlayer.posX; - double yCoord = par3EntityPlayer.posY; - double zCoord = par3EntityPlayer.posZ; - - for (int i = 0; i < 20; i++) - { - SpellHelper.sendParticleToAllAround(par2World, xCoord, yCoord, zCoord, 30, par2World.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB, xCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, yCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, zCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, 0.0F, 0.410F, 1.0F); - } - - return par1ItemStack; - } - - @Override - public ItemStack onEnvironmentalRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getEnvironmentalEnergy()); - } - - int range = 2; - - if (!par2World.isRemote) - { - for (int i = -range; i <= range; i++) - { - for (int j = -range; j <= range; j++) - { - BlockPos newPos = new BlockPos((int) par3EntityPlayer.posX + i, (int) par3EntityPlayer.posY, (int) par3EntityPlayer.posZ + j); - if (par2World.isAirBlock(newPos)) - { - par2World.setBlockState(newPos, Blocks.water.getDefaultState()); - } - } - } - } - - double xCoord = par3EntityPlayer.posX; - double yCoord = par3EntityPlayer.posY; - double zCoord = par3EntityPlayer.posZ; - - for (int i = 0; i < 16; i++) - { - SpellHelper.sendParticleToAllAround(par2World, xCoord, yCoord, zCoord, 30, par2World.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB, xCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, yCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, zCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, 0.0F, 0.410F, 1.0F); - } - - return par1ItemStack; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellWindGust.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellWindGust.java deleted file mode 100644 index 2bbfd322..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/simple/SpellWindGust.java +++ /dev/null @@ -1,187 +0,0 @@ -package WayofTime.alchemicalWizardry.common.spell.simple; - -import WayofTime.alchemicalWizardry.common.entity.projectile.WindGustProjectile; -import WayofTime.alchemicalWizardry.common.items.BindableItems; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; - -import java.util.Iterator; -import java.util.List; -import java.util.Random; - -public class SpellWindGust extends HomSpell -{ - Random itemRand = new Random(); - - public SpellWindGust() - { - super(); - this.setEnergies(300, 400, 300, 500); - } - - @Override - public ItemStack onOffensiveRangedRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getOffensiveRangedEnergy()); - } - - par2World.playSoundAtEntity(par3EntityPlayer, "random.fizz", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); - - if (!par2World.isRemote) - { - par2World.spawnEntityInWorld(new WindGustProjectile(par2World, par3EntityPlayer, 8)); - } - - return par1ItemStack; - } - - @Override - public ItemStack onOffensiveMeleeRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getOffensiveMeleeEnergy()); - } - - int distance = 3; - double yaw = par3EntityPlayer.rotationYaw / 180 * Math.PI; - double pitch = par3EntityPlayer.rotationPitch / 180 * Math.PI; - double xCoord = par3EntityPlayer.posX + Math.sin(yaw) * Math.cos(pitch) * (-distance); - double yCoord = par3EntityPlayer.posY + par3EntityPlayer.getEyeHeight() + Math.sin(-pitch) * distance; - double zCoord = par3EntityPlayer.posZ + Math.cos(yaw) * Math.cos(pitch) * distance; - float d0 = 0.5f; - AxisAlignedBB axisalignedbb = new AxisAlignedBB(par3EntityPlayer.posX - 0.5 + Math.sin(yaw) * Math.cos(pitch) * (-distance), par3EntityPlayer.posY + par3EntityPlayer.getEyeHeight() + Math.sin(-pitch) * distance, par3EntityPlayer.posZ - 0.5 + Math.cos(yaw) * Math.cos(pitch) * distance, par3EntityPlayer.posX + Math.sin(yaw) * Math.cos(pitch) * (-distance) + 0.5, par3EntityPlayer.posY + par3EntityPlayer.getEyeHeight() + Math.sin(-pitch) * distance + 1, par3EntityPlayer.posZ + Math.cos(yaw) * Math.cos(pitch) * distance + 0.5).expand(d0, d0, d0); - List list = par3EntityPlayer.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb); - Iterator iterator = list.iterator(); - - while (iterator.hasNext()) - { - EntityLivingBase entityLiving = (EntityLivingBase) iterator.next(); - - if (entityLiving instanceof EntityPlayer) - { - if (entityLiving.equals(par3EntityPlayer)) - { - continue; - } - } - entityLiving.motionX = Math.sin(-yaw) * 2; - entityLiving.motionY = 2; - entityLiving.motionZ = Math.cos(yaw) * 2; - } - for (int i = 0; i < 5; i++) - { - SpellHelper.sendParticleToAllAround(par2World, xCoord, yCoord, zCoord, 30, par2World.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB, xCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, yCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, zCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, 0.0F, 0.410F, 1.0F); - - } - return par1ItemStack; - } - - @Override - public ItemStack onDefensiveRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getDefensiveEnergy()); - } - - int distance = 3; - double yaw = par3EntityPlayer.rotationYaw / 180 * Math.PI; - double pitch = par3EntityPlayer.rotationPitch / 180 * Math.PI; - double wantedVelocity = 5; - double xVel = Math.sin(yaw) * Math.cos(pitch) * (-wantedVelocity); - double yVel = Math.sin(-pitch) * wantedVelocity; - double zVel = Math.cos(yaw) * Math.cos(pitch) * wantedVelocity; - Vec3 vec = par3EntityPlayer.getLookVec(); - par3EntityPlayer.motionX = vec.xCoord * wantedVelocity; - par3EntityPlayer.motionY = vec.yCoord * wantedVelocity; - par3EntityPlayer.motionZ = vec.zCoord * wantedVelocity; - SpellHelper.setPlayerSpeedFromServer(par3EntityPlayer, xVel, yVel, zVel); - par2World.playSoundEffect((double) ((float) par3EntityPlayer.posX + 0.5F), (double) ((float) par3EntityPlayer.posY + 0.5F), (double) ((float) par3EntityPlayer.posZ + 0.5F), "random.fizz", 0.5F, 2.6F + (par2World.rand.nextFloat() - par2World.rand.nextFloat()) * 0.8F); - par3EntityPlayer.fallDistance = 0; - double xCoord = par3EntityPlayer.posX; - double yCoord = par3EntityPlayer.posY; - double zCoord = par3EntityPlayer.posZ; - - for (int i = 0; i < 8; i++) - { - SpellHelper.sendParticleToAllAround(par2World, xCoord, yCoord, zCoord, 30, par2World.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB, xCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, yCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, zCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, 0.0F, 0.410F, 1.0F); - } - - return par1ItemStack; - } - - @Override - public ItemStack onEnvironmentalRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - if (!BindableItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) - { - return par1ItemStack; - } - - if (!par3EntityPlayer.capabilities.isCreativeMode) - { - BindableItems.syphonAndDamageWhileInContainer(par1ItemStack, par3EntityPlayer, this.getEnvironmentalEnergy()); - } - - int d0 = 3; - AxisAlignedBB axisalignedbb = new AxisAlignedBB((double) par3EntityPlayer.posX, (double) par3EntityPlayer.posY, (double) par3EntityPlayer.posZ, (double) (par3EntityPlayer.posX + 1), (double) (par3EntityPlayer.posY + 2), (double) (par3EntityPlayer.posZ + 1)).expand(d0, d0, d0); - List list = par3EntityPlayer.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb); - Iterator iterator = list.iterator(); - double xCoord = par3EntityPlayer.posX; - double yCoord = par3EntityPlayer.posY; - double zCoord = par3EntityPlayer.posZ; - double wantedVel = 2; - - while (iterator.hasNext()) - { - EntityLivingBase entityLiving = (EntityLivingBase) iterator.next(); - - if (entityLiving instanceof EntityPlayer) - { - if (entityLiving.equals(par3EntityPlayer)) - { - continue; - } - } - - double posXDif = entityLiving.posX - par3EntityPlayer.posX; - double posYDif = entityLiving.posY - par3EntityPlayer.posY + 1; - double posZDif = entityLiving.posZ - par3EntityPlayer.posZ; - double distance2 = Math.pow(posXDif, 2) + Math.pow(posYDif, 2) + Math.pow(posZDif, 2); - double distance = Math.sqrt(distance2); - entityLiving.motionX = posXDif * wantedVel / distance; - entityLiving.motionY = posYDif * wantedVel / distance; - entityLiving.motionZ = posZDif * wantedVel / distance; - } - for (int i = 0; i < 20; i++) - { - SpellHelper.sendParticleToAllAround(par2World, xCoord, yCoord, zCoord, 30, par2World.provider.getDimensionId(), EnumParticleTypes.SPELL_MOB, xCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, yCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, zCoord + (itemRand.nextFloat() - itemRand.nextFloat()) * 3, 0.0F, 0.410F, 1.0F); - } - - return par1ItemStack; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/summoning/SummoningFallenAngel.java b/src/main/java/WayofTime/alchemicalWizardry/common/summoning/SummoningFallenAngel.java deleted file mode 100644 index 1375c7ff..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/summoning/SummoningFallenAngel.java +++ /dev/null @@ -1,19 +0,0 @@ -package WayofTime.alchemicalWizardry.common.summoning; - -import WayofTime.alchemicalWizardry.api.summoningRegistry.SummoningHelper; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityFallenAngel; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.world.World; - -public class SummoningFallenAngel extends SummoningHelper -{ - public SummoningFallenAngel(String id) - { - super(id); - } - - public EntityLivingBase getEntity(World worldObj) - { - return new EntityFallenAngel(worldObj); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/summoning/SummoningHelperAW.java b/src/main/java/WayofTime/alchemicalWizardry/common/summoning/SummoningHelperAW.java deleted file mode 100644 index c2df04ad..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/summoning/SummoningHelperAW.java +++ /dev/null @@ -1,139 +0,0 @@ -package WayofTime.alchemicalWizardry.common.summoning; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.passive.EntityPig; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.summoningRegistry.SummoningHelper; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGrunt; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntEarth; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntFire; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntIce; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntWind; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityAirElemental; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityBileDemon; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityBoulderFist; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityEarthElemental; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityFallenAngel; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityFireElemental; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityHolyElemental; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityIceDemon; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityLowerGuardian; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityShade; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityShadeElemental; -import WayofTime.alchemicalWizardry.common.entity.mob.EntitySmallEarthGolem; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityWaterElemental; -import WayofTime.alchemicalWizardry.common.entity.mob.EntityWingedFireDemon; - -public class SummoningHelperAW extends SummoningHelper -{ - public SummoningHelperAW(String id) - { - super(id); - } - - public EntityLivingBase getEntity(World worldObj) - { - if (this.id.equals(AlchemicalWizardry.entityFallenAngelID)) - { - return new EntityFallenAngel(worldObj); - } - - if (this.id.equals(AlchemicalWizardry.entityLowerGuardianID)) - { - return new EntityLowerGuardian(worldObj); - } - - if (this.id.equals(AlchemicalWizardry.entityBileDemonID)) - { - return new EntityBileDemon(worldObj); - } - - if (this.id.equals(AlchemicalWizardry.entityWingedFireDemonID)) - { - return new EntityWingedFireDemon(worldObj); - } - - if (this.id.equals(AlchemicalWizardry.entitySmallEarthGolemID)) - { - return new EntitySmallEarthGolem(worldObj); - } - - if (this.id.equals(AlchemicalWizardry.entityIceDemonID)) - { - return new EntityIceDemon(worldObj); - } - - if (this.id.equals(AlchemicalWizardry.entityBoulderFistID)) - { - return new EntityBoulderFist(worldObj); - } - - if (this.id.equals(AlchemicalWizardry.entityShadeID)) - { - return new EntityShade(worldObj); - } - - if (this.id.equals(AlchemicalWizardry.entityAirElementalID)) - { - return new EntityAirElemental(worldObj); - } - - if (this.id.equals(AlchemicalWizardry.entityWaterElementalID)) - { - return new EntityWaterElemental(worldObj); - } - - if (this.id.equals(AlchemicalWizardry.entityEarthElementalID)) - { - return new EntityEarthElemental(worldObj); - } - - if (this.id.equals(AlchemicalWizardry.entityFireElementalID)) - { - return new EntityFireElemental(worldObj); - } - - if (this.id.equals(AlchemicalWizardry.entityShadeElementalID)) - { - return new EntityShadeElemental(worldObj); - } - - if (this.id.equals(AlchemicalWizardry.entityHolyElementalID)) - { - return new EntityHolyElemental(worldObj); - } - - if(this.id.equals(AlchemicalWizardry.entityMinorDemonGruntID)) - { - return new EntityMinorDemonGrunt(worldObj); - } - - if(this.id.equals(AlchemicalWizardry.entityMinorDemonGruntFireID)) - { - return new EntityMinorDemonGruntFire(worldObj); - } - - if(this.id.equals(AlchemicalWizardry.entityMinorDemonGruntEarthID)) - { - return new EntityMinorDemonGruntEarth(worldObj); - } - - if(this.id.equals(AlchemicalWizardry.entityMinorDemonGruntWindID)) - { - return new EntityMinorDemonGruntWind(worldObj); - } - - if(this.id.equals(AlchemicalWizardry.entityMinorDemonGruntIceID)) - { - return new EntityMinorDemonGruntIce(worldObj); - } - - return new EntityPig(worldObj); - } - - public String getSummoningHelperID() - { - return id; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/summoning/meteor/MeteorParadigm.java b/src/main/java/WayofTime/alchemicalWizardry/common/summoning/meteor/MeteorParadigm.java deleted file mode 100644 index 65423c95..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/summoning/meteor/MeteorParadigm.java +++ /dev/null @@ -1,170 +0,0 @@ -package WayofTime.alchemicalWizardry.common.summoning.meteor; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; - -public class MeteorParadigm -{ - public List componentList = new ArrayList(); - public ItemStack focusStack; - public int radius; - public static int maxChance = 1000; - - public static Random rand = new Random(); - - public MeteorParadigm(ItemStack focusStack, int radius) - { - this.focusStack = focusStack; - this.radius = radius; - } - - public void parseStringArray(String[] oreArray) - { - for (int i = 0; i + 1 < oreArray.length; i += 2) - { - String oreName = oreArray[i]; - int oreChance = Integer.parseInt(oreArray[i + 1]); - MeteorParadigmComponent mpc = new MeteorParadigmComponent(oreName, oreChance); - componentList.add(mpc); - } - } - - public void createMeteorImpact(World world, BlockPos pos, boolean[] flags) - { - boolean hasTerrae = false; - boolean hasOrbisTerrae = false; - boolean hasCrystallos = false; - boolean hasIncendium = false; - boolean hasTennebrae = false; - - if (flags != null && flags.length >= 5) - { - hasTerrae = flags[0]; - hasOrbisTerrae = flags[1]; - hasCrystallos = flags[2]; - hasIncendium = flags[3]; - hasTennebrae = flags[4]; - } - - int newRadius = radius; - int chance = maxChance; - - if (hasOrbisTerrae) - { - newRadius += 2; - chance += 200; - } else if (hasTerrae) - { - newRadius += 1; - chance += 100; - } - - world.createExplosion(null, pos.getX(), pos.getY(), pos.getZ(), newRadius * 4, AlchemicalWizardry.doMeteorsDestroyBlocks); - - float iceChance = hasCrystallos ? 1 : 0; - float soulChance = hasIncendium ? 1 : 0; - float obsidChance = hasTennebrae ? 1 : 0; - - float totalChance = iceChance + soulChance + obsidChance; - - for (int i = -newRadius; i <= newRadius; i++) - { - for (int j = -newRadius; j <= newRadius; j++) - { - for (int k = -newRadius; k <= newRadius; k++) - { - if (i * i + j * j + k * k >= (newRadius + 0.50f) * (newRadius + 0.50f)) - { - continue; - } - - BlockPos newPos = pos.add(i, j, k); - - if (!world.isAirBlock(newPos)) - { - continue; - } - - int randNum = world.rand.nextInt(chance); - boolean hasPlacedBlock = false; - - for (MeteorParadigmComponent mpc : componentList) - { - if (mpc == null || !mpc.isValidBlockParadigm()) - { - continue; - } - - randNum -= mpc.getChance(); - - if (randNum < 0) - { - ItemStack blockStack = mpc.getValidBlockParadigm(); - if(blockStack != null && blockStack.getItem() instanceof ItemBlock) - { - ((ItemBlock)blockStack.getItem()).placeBlockAt(blockStack, null, world, newPos, EnumFacing.DOWN, 0, 0, 0, ((ItemBlock)blockStack.getItem()).block.getStateFromMeta(blockStack.getItemDamage())); - world.markBlockForUpdate(newPos); - hasPlacedBlock = true; - break; - } -// world.setBlock(newPos, Block.getBlockById(Item.getIdFromItem(blockStack.getItem())), blockStack.getItemDamage(), 3); -// hasPlacedBlock = true; -// break; - } - } - - if (!hasPlacedBlock) - { - float randChance = rand.nextFloat() * totalChance; - - if (randChance < iceChance) - { - world.setBlockState(newPos, Blocks.ice.getDefaultState(), 3); - } else - { - randChance -= iceChance; - - if (randChance < soulChance) - { - switch (rand.nextInt(3)) - { - case 0: - world.setBlockState(newPos, Blocks.soul_sand.getDefaultState(), 3); - break; - case 1: - world.setBlockState(newPos, Blocks.glowstone.getDefaultState(), 3); - break; - case 2: - world.setBlockState(newPos, Blocks.netherrack.getDefaultState(), 3); - break; - } - } else - { - randChance -= soulChance; - - if (randChance < obsidChance) - { - world.setBlockState(newPos, Blocks.obsidian.getDefaultState(), 3); - } else - { - randChance -= obsidChance; - - world.setBlockState(newPos, Blocks.stone.getDefaultState(), 3); - } - } - } - } - } - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/summoning/meteor/MeteorParadigmComponent.java b/src/main/java/WayofTime/alchemicalWizardry/common/summoning/meteor/MeteorParadigmComponent.java deleted file mode 100644 index 0daa43a1..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/summoning/meteor/MeteorParadigmComponent.java +++ /dev/null @@ -1,54 +0,0 @@ -package WayofTime.alchemicalWizardry.common.summoning.meteor; - -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; - -import java.util.List; - -public class MeteorParadigmComponent -{ - public String oreDictName; - public int chance; - - public MeteorParadigmComponent(String dictName, int chance) - { - this.oreDictName = dictName; - this.chance = chance; - } - - public boolean isValidBlockParadigm() - { - if (this.getValidBlockParadigm() != null) - { - return true; - } - - return false; - } - - public String getOreDictName() - { - return this.oreDictName; - } - - public int getChance() - { - return this.chance; - } - - public ItemStack getValidBlockParadigm() - { - List list = OreDictionary.getOres(getOreDictName()); - - for (ItemStack stack : list) - { - if (stack != null && stack.getItem() instanceof ItemBlock) - { - return stack; - } - } - - return null; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/summoning/meteor/MeteorRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/common/summoning/meteor/MeteorRegistry.java deleted file mode 100644 index 1ed03f73..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/summoning/meteor/MeteorRegistry.java +++ /dev/null @@ -1,62 +0,0 @@ -package WayofTime.alchemicalWizardry.common.summoning.meteor; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; - -public class MeteorRegistry -{ - public static List paradigmList = new ArrayList(); - - public static void registerMeteorParadigm(MeteorParadigm paradigm) - { - paradigmList.add(paradigm); - } - - public static void registerMeteorParadigm(ItemStack stack, String[] oreList, int radius) - { - if (stack != null && oreList != null) - { - MeteorParadigm meteor = new MeteorParadigm(stack, radius); - meteor.parseStringArray(oreList); - paradigmList.add(meteor); - } - } - - public static void createMeteorImpact(World world, BlockPos pos, int paradigmID, boolean[] flags) - { - if (paradigmID < paradigmList.size()) - { - paradigmList.get(paradigmID).createMeteorImpact(world, pos, flags); - } - } - - public static int getParadigmIDForItem(ItemStack stack) - { - if (stack == null) - { - return -1; - } - - for (int i = 0; i < paradigmList.size(); i++) - { - ItemStack focusStack = paradigmList.get(i).focusStack; - - if (focusStack != null && focusStack.getItem() == stack.getItem() && (focusStack.getItemDamage() == OreDictionary.WILDCARD_VALUE || focusStack.getItemDamage() == stack.getItemDamage())) - { - return i; - } - } - - return -1; - } - - public static boolean isValidParadigmItem(ItemStack stack) - { - return getParadigmIDForItem(stack) != -1; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/thread/CommandDownloadGAPI.java b/src/main/java/WayofTime/alchemicalWizardry/common/thread/CommandDownloadGAPI.java deleted file mode 100644 index 0c57dc79..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/thread/CommandDownloadGAPI.java +++ /dev/null @@ -1,38 +0,0 @@ -package WayofTime.alchemicalWizardry.common.thread; - -import net.minecraft.command.CommandBase; -import net.minecraft.command.ICommandSender; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.ChatStyle; -import net.minecraft.util.EnumChatFormatting; - -public class CommandDownloadGAPI extends CommandBase -{ - private static final boolean ENABLED = true; - - @Override - public String getCommandName() - { - return "bloodmagic-download-g-api"; - } - - @Override - public String getCommandUsage(ICommandSender var1) - { - return "/bloodmagic-download-g-api"; - } - - @Override - public void processCommand(ICommandSender var1, String[] var2) - { - if (!ENABLED) - var1.addChatMessage(new ChatComponentTranslation("bm.versioning.disabled").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED))); - - else - if (GAPIChecker.downloadedFile) - var1.addChatMessage(new ChatComponentTranslation("bm.versioning.downloadedAlready").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED))); - else if (GAPIChecker.startedDownload) - var1.addChatMessage(new ChatComponentTranslation("bm.versioning.downloadingAlready").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED))); - else new ThreadDownloadGAPI("Guide-API-1.7.10-" + GAPIChecker.onlineVersion + ".jar"); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/thread/GAPIChecker.java b/src/main/java/WayofTime/alchemicalWizardry/common/thread/GAPIChecker.java deleted file mode 100644 index fa7bda35..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/thread/GAPIChecker.java +++ /dev/null @@ -1,119 +0,0 @@ -package WayofTime.alchemicalWizardry.common.thread; - -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.IChatComponent; -import net.minecraft.util.StatCollector; -import net.minecraftforge.fml.common.FMLCommonHandler; -import net.minecraftforge.fml.common.Loader; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; -import net.minecraftforge.fml.relauncher.FMLInjectionData; - -public class GAPIChecker -{ - public static boolean doneChecking = false; - public static String onlineVersion = "@VERSION@"; - public static boolean triedToWarnPlayer = false; - - public static boolean startedDownload = false; - public static boolean downloadedFile = false; - - private File modsDir; - - public void init() - { - FMLCommonHandler.instance().bus().register(this); - File mcDir = (File)FMLInjectionData.data()[6]; - - this.modsDir = new File(mcDir, "mods"); - - scanDepInfos(); - } - - private void scanDepInfos() - { - for (File file : modFiles()) - { - if ((file.getName().endsWith(".jar")) && file.getName().contains("BloodMagic")) - { - scanDepInfo(file); - } - } - } - - private void scanDepInfo(File file) - { - try - { - ZipFile zip = new ZipFile(file); - ZipEntry e = zip.getEntry("Guide-API-Version.info"); - if (e == null) - { - e = zip.getEntry("Guide-API-Version.info"); - } - if (e != null) - { - readConfigFile(zip.getInputStream(e)); - } - zip.close(); - } - catch (Exception e) - { - System.err.println("Failed to load dependencies.info from " + file.getName() + " as JSON"); - e.printStackTrace(); - } - } - - private List modFiles() - { - List list = new LinkedList(); - list.addAll(Arrays.asList(this.modsDir.listFiles())); - return list; - } - - private void readConfigFile(InputStream inputStream) throws IOException - { - if (inputStream != null) - { - try - { - BufferedReader r = new BufferedReader(new InputStreamReader(inputStream)); - onlineVersion = r.readLine(); - doneChecking = true; - r.close(); - } - catch (Exception e) - { - e.printStackTrace(); - } - } - } - - @SubscribeEvent - public void onTick(TickEvent.ClientTickEvent event) - { - if (!Loader.isModLoaded("guideapi")) - { - if (event.phase == TickEvent.Phase.END && Minecraft.getMinecraft().thePlayer != null && !triedToWarnPlayer) - { - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - IChatComponent component = IChatComponent.Serializer.jsonToComponent(StatCollector.translateToLocal("bm.versioning.getGAPI")); - player.addChatComponentMessage(component); - } - - triedToWarnPlayer = true; - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/thread/ThreadDownloadGAPI.java b/src/main/java/WayofTime/alchemicalWizardry/common/thread/ThreadDownloadGAPI.java deleted file mode 100644 index 67965eeb..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/thread/ThreadDownloadGAPI.java +++ /dev/null @@ -1,96 +0,0 @@ -package WayofTime.alchemicalWizardry.common.thread; - -import net.minecraft.client.Minecraft; -import net.minecraft.util.*; -import net.minecraftforge.common.MinecraftForge; - -import java.awt.*; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; - -public class ThreadDownloadGAPI extends Thread -{ - String fileName; - - byte[] buffer = new byte[10240]; - - int totalBytesDownloaded; - int bytesJustDownloaded; - - InputStream webReader; - - public ThreadDownloadGAPI(String fileName) - { - setName("Blood Magic Download Guide-API Thread"); - this.fileName = fileName; - setDaemon(true); - start(); - } - - @Override - public void run() - { - try - { - IChatComponent component = IChatComponent.Serializer.jsonToComponent(String.format(StatCollector.translateToLocal("bm.versioning.startingDownload"), fileName)); - - if (Minecraft.getMinecraft().thePlayer != null) - { - Minecraft.getMinecraft().thePlayer.addChatMessage(component); - } - - GAPIChecker.startedDownload = true; - - String base = "http://minecraft.curseforge.com/mc-mods/228832-guide-api"; - URL url = new URL(base + "/files/latest"); - - try - { - url.openStream().close(); // Add to DL Counter - } - catch(IOException e) {} - - webReader = url.openStream(); - - File dir = new File(".", "mods"); - File f = new File(dir, "Guide-API-" + MinecraftForge.MC_VERSION + "-" + GAPIChecker.onlineVersion + ".jar"); - f.createNewFile(); - - FileOutputStream outputStream = new FileOutputStream(f.getAbsolutePath()); - - while ((bytesJustDownloaded = webReader.read(buffer)) > 0) - { - outputStream.write(buffer, 0, bytesJustDownloaded); - buffer = new byte[10240]; - totalBytesDownloaded += bytesJustDownloaded; - } - - if (Minecraft.getMinecraft().thePlayer != null) - { - Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentTranslation("bm.versioning.doneDownloading", fileName).setChatStyle(new ChatStyle().setColor(EnumChatFormatting.GREEN))); - } - - Desktop.getDesktop().open(dir); - GAPIChecker.downloadedFile = true; - - outputStream.close(); - webReader.close(); - finalize(); - } - catch (Throwable e) - { - e.printStackTrace(); - } - } - - private void sendError() - { - if (Minecraft.getMinecraft().thePlayer != null) - { - Minecraft.getMinecraft().thePlayer.addChatComponentMessage(new ChatComponentTranslation("bm.versioning.error").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED))); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEAlchemicalCalcinator.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEAlchemicalCalcinator.java deleted file mode 100644 index b406f3dc..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEAlchemicalCalcinator.java +++ /dev/null @@ -1,400 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; -import net.minecraft.network.play.server.S35PacketUpdateTileEntity; -import net.minecraft.server.gui.IUpdatePlayerListBox; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.IChatComponent; -import net.minecraftforge.common.util.Constants; -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainer; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBloodOrb; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class TEAlchemicalCalcinator extends TEReagentConduit implements IInventory, IUpdatePlayerListBox -{ - protected ItemStack[] inv; - protected ReagentContainer bufferTank = new ReagentContainer(Reagent.REAGENT_SIZE * 2); - - protected int bufferTransferRate = 20; - - private int progress; - - public TEAlchemicalCalcinator() - { - super(1, Reagent.REAGENT_SIZE * 4); - this.inv = new ItemStack[2]; - this.tickRate = 20; - this.maxConnextions = 1; - this.progress = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) - { - super.readFromNBT(tag); - bufferTransferRate = tag.getInteger("bufferTransferRate"); - progress = tag.getInteger("progress"); - - NBTTagCompound bufferTankTag = tag.getCompoundTag("bufferTank"); - - this.bufferTank = ReagentContainer.readFromNBT(bufferTankTag); - - NBTTagList tagList = tag.getTagList("Inventory", Constants.NBT.TAG_COMPOUND); - - for (int i = 0; i < tagList.tagCount(); i++) - { - NBTTagCompound savedTag = tagList.getCompoundTagAt(i); - - if (savedTag.getBoolean("Empty")) - { - inv[i] = null; - } else - { - inv[i] = ItemStack.loadItemStackFromNBT(savedTag); - } - } - } - - @Override - public void writeToNBT(NBTTagCompound tag) - { - super.writeToNBT(tag); - tag.setInteger("bufferTransferRate", bufferTransferRate); - tag.setInteger("progress", progress); - - NBTTagCompound bufferTankTag = new NBTTagCompound(); - - this.bufferTank.writeToNBT(bufferTankTag); - - tag.setTag("bufferTank", bufferTankTag); - - NBTTagList itemList = new NBTTagList(); - - for (int i = 0; i < inv.length; i++) - { - NBTTagCompound savedTag = new NBTTagCompound(); - - if (inv[i] != null) - { - inv[i].writeToNBT(savedTag); - } else - { - savedTag.setBoolean("Empty", true); - } - - itemList.appendTag(savedTag); - } - - tag.setTag("Inventory", itemList); - } - - @Override - public void update() - { - super.update(); - - if (!worldObj.isRemote) - { - moveBufferToMain(); - tickProgress(); - } - } - - public void moveBufferToMain() - { - ReagentStack amountStack = this.bufferTank.drain(bufferTransferRate, false); - int drainAmount = this.fill(EnumFacing.UP, amountStack, false); - - if (drainAmount > 0) - { - ReagentStack drainedStack = this.bufferTank.drain(drainAmount, true); - this.fill(EnumFacing.UP, drainedStack, true); - } - } - - public void tickProgress() - { - int lpPerTick = 10; - int ticksPerReagent = 200; - ItemStack reagentItemStack = this.getStackInSlot(1); - - if (reagentItemStack == null) - { - progress = 0; - return; - } - - ReagentStack possibleReagent = ReagentRegistry.getReagentStackForItem(reagentItemStack); - if (possibleReagent == null || !this.canReagentFitBuffer(possibleReagent)) - { - return; - } - - ItemStack orbStack = this.getStackInSlot(0); - if (orbStack == null || !(orbStack.getItem() instanceof IBloodOrb)) - { - return; - } - - if (!SoulNetworkHandler.canSyphonFromOnlyNetwork(orbStack, lpPerTick)) - { - SoulNetworkHandler.causeNauseaToPlayer(orbStack); - return; - } - - if(!SoulNetworkHandler.syphonFromNetworkWhileInContainer(orbStack, lpPerTick)) - { - return; - } - - progress++; - - if (worldObj.getWorldTime() % 4 == 0) - { - SpellHelper.sendIndexedParticleToAllAround(worldObj, pos, 20, worldObj.provider.getDimensionId(), 1, pos); - } - - if (progress >= ticksPerReagent) - { - progress = 0; - this.bufferTank.fill(possibleReagent, true); - this.decrStackSize(1, 1); - } - } - - public boolean canReagentFitBuffer(ReagentStack stack) - { - int amount = this.bufferTank.fill(stack, false); - - return amount >= stack.amount; - } - - @Override - public void readClientNBT(NBTTagCompound tag) - { - super.readClientNBT(tag); - - NBTTagList tagList = tag.getTagList("reagentTanks", Constants.NBT.TAG_COMPOUND); - - int size = tagList.tagCount(); - this.tanks = new ReagentContainer[size]; - - for (int i = 0; i < size; i++) - { - NBTTagCompound savedTag = tagList.getCompoundTagAt(i); - this.tanks[i] = ReagentContainer.readFromNBT(savedTag); - } - - NBTTagList invTagList = tag.getTagList("Inventory", Constants.NBT.TAG_COMPOUND); - - for (int i = 0; i < invTagList.tagCount(); i++) - { - NBTTagCompound savedTag = invTagList.getCompoundTagAt(i); - - if (savedTag.getBoolean("Empty")) - { - inv[i] = null; - } else - { - inv[i] = ItemStack.loadItemStackFromNBT(savedTag); - } - } - } - - @Override - public void writeClientNBT(NBTTagCompound tag) - { - super.writeClientNBT(tag); - - NBTTagList tagList = new NBTTagList(); - - for (int i = 0; i < this.tanks.length; i++) - { - NBTTagCompound savedTag = new NBTTagCompound(); - if (this.tanks[i] != null) - { - this.tanks[i].writeToNBT(savedTag); - } - tagList.appendTag(savedTag); - } - - tag.setTag("reagentTanks", tagList); - - NBTTagList itemList = new NBTTagList(); - - for (int i = 0; i < inv.length; i++) - { - NBTTagCompound savedTag = new NBTTagCompound(); - - if (inv[i] != null) - { - inv[i].writeToNBT(savedTag); - } else - { - savedTag.setBoolean("Empty", true); - } - - itemList.appendTag(savedTag); - } - - tag.setTag("Inventory", itemList); - } - - @Override - public Packet getDescriptionPacket() - { - NBTTagCompound nbttagcompound = new NBTTagCompound(); - writeClientNBT(nbttagcompound); - return new S35PacketUpdateTileEntity(pos, -999, nbttagcompound); - } - - @Override - public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) - { - super.onDataPacket(net, packet); - readClientNBT(packet.getNbtCompound()); - } - - @Override - public int getSizeInventory() - { - return inv.length; - } - - @Override - public ItemStack getStackInSlot(int slot) - { - return inv[slot]; - } - - @Override - public void setInventorySlotContents(int slot, ItemStack stack) - { - inv[slot] = stack; - - if (stack != null && stack.stackSize > getInventoryStackLimit()) - { - stack.stackSize = getInventoryStackLimit(); - } - - worldObj.markBlockForUpdate(pos); - } - - @Override - public ItemStack decrStackSize(int slot, int amt) - { - ItemStack stack = getStackInSlot(slot); - - if (stack != null) - { - if (stack.stackSize <= amt) - { - setInventorySlotContents(slot, null); - } else - { - stack = stack.splitStack(amt); - - if (stack.stackSize == 0) - { - setInventorySlotContents(slot, null); - } - } - } - - return stack; - } - - @Override - public ItemStack getStackInSlotOnClosing(int slot) - { - ItemStack stack = getStackInSlot(slot); - - if (stack != null) - { - setInventorySlotContents(slot, null); - } - - return stack; - } - - @Override - public int getInventoryStackLimit() - { - return 64; - } - - @Override - public boolean isUseableByPlayer(EntityPlayer player) - { - return worldObj.getTileEntity(pos) == this && pos.distanceSqToCenter(player.posX, player.posY, player.posZ) < 64; - } - - @Override - public void openInventory(EntityPlayer player) {} - - @Override - public void closeInventory(EntityPlayer player) {} - - @Override - public String getName() - { - return "AlchemicCalcinator"; - } - - @Override - public boolean hasCustomName() - { - return false; - } - - @Override - public boolean isItemValidForSlot(int slot, ItemStack itemStack) - { - return true; - } - - @Override - public int fill(EnumFacing from, ReagentStack resource, boolean doFill) - { - if (doFill && !worldObj.isRemote) - { - worldObj.markBlockForUpdate(pos); - } - - return super.fill(from, resource, doFill); - } - - @Override - public IChatComponent getDisplayName() - { - return null; - } - - @Override - public int getField(int id) - { - return 0; - } - - @Override - public void setField(int id, int value) {} - - @Override - public int getFieldCount() - { - return 0; - } - - @Override - public void clear() {} -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEAltar.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEAltar.java deleted file mode 100644 index ff3cc550..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEAltar.java +++ /dev/null @@ -1,954 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.Packet; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.server.gui.IUpdatePlayerListBox; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.StatCollector; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidEvent; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTank; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidHandler; -import net.minecraftforge.fluids.IFluidTank; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.altarRecipeRegistry.AltarRecipe; -import WayofTime.alchemicalWizardry.api.altarRecipeRegistry.AltarRecipeRegistry; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBloodOrb; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.api.tile.IBloodAltar; -import WayofTime.alchemicalWizardry.common.NewPacketHandler; -import WayofTime.alchemicalWizardry.common.bloodAltarUpgrade.AltarUpgradeComponent; -import WayofTime.alchemicalWizardry.common.bloodAltarUpgrade.UpgradedAltars; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class TEAltar extends TEInventory implements IFluidTank, IFluidHandler, IBloodAltar, IUpdatePlayerListBox -{ - public static final int sizeInv = 1; - - private int resultID; - private int resultDamage; - private int upgradeLevel; - protected FluidStack fluid; - public int capacity; - private boolean isActive; - private int liquidRequired; //mB - private boolean canBeFilled; - private int consumptionRate; - private int drainRate; - private float consumptionMultiplier; - private float efficiencyMultiplier; - private float sacrificeEfficiencyMultiplier; - private float selfSacrificeEfficiencyMultiplier; - private float capacityMultiplier; - private float orbCapacityMultiplier; - private float dislocationMultiplier; - private int accelerationUpgrades; - private boolean isUpgraded; - private boolean isResultBlock; - private int bufferCapacity; - protected FluidStack fluidOutput; - protected FluidStack fluidInput; - private int progress; - - private int lockdownDuration; - private int demonBloodDuration; - - private int cooldownAfterCrafting = 500; - - public TEAltar() - { - super(sizeInv); - resultID = 0; - resultDamage = 0; - this.capacity = FluidContainerRegistry.BUCKET_VOLUME * 10; - fluid = new FluidStack(AlchemicalWizardry.lifeEssenceFluid, 0); - fluidOutput = new FluidStack(AlchemicalWizardry.lifeEssenceFluid, 0); - fluidInput = new FluidStack(AlchemicalWizardry.lifeEssenceFluid, 0); - bufferCapacity = FluidContainerRegistry.BUCKET_VOLUME; - isActive = false; - consumptionRate = 0; - drainRate = 0; - consumptionMultiplier = 0; - efficiencyMultiplier = 0; - capacityMultiplier = 1; - isUpgraded = false; - upgradeLevel = 0; - isResultBlock = false; - progress = 0; - this.lockdownDuration = 0; - this.demonBloodDuration = 0; - } - - /** - * - * @return Amount filled - */ - public int fillMainTank(int amount) //TODO - { - int filledAmount = Math.min(capacity - fluid.amount, amount); - fluid.amount += filledAmount; - - return filledAmount; - } - - public void addToDemonBloodDuration(int dur) - { - this.demonBloodDuration += dur; - } - - public boolean hasDemonBlood() - { - return this.demonBloodDuration > 0; - } - - public void decrementDemonBlood() - { - this.demonBloodDuration = Math.max(0, this.demonBloodDuration - 1); - } - - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - - resultID = par1NBTTagCompound.getInteger("resultID"); - resultDamage = par1NBTTagCompound.getInteger("resultDamage"); - - if (!par1NBTTagCompound.hasKey("Empty")) - { - FluidStack fluid = this.fluid.loadFluidStackFromNBT(par1NBTTagCompound); - - if (fluid != null) - { - setMainFluid(fluid); - } - - FluidStack fluidOut = new FluidStack(AlchemicalWizardry.lifeEssenceFluid, par1NBTTagCompound.getInteger("outputAmount")); - - if (fluidOut != null) - { - setOutputFluid(fluidOut); - } - - FluidStack fluidIn = new FluidStack(AlchemicalWizardry.lifeEssenceFluid, par1NBTTagCompound.getInteger("inputAmount")); - - if (fluidIn != null) - { - setInputFluid(fluidIn); - } - } - - upgradeLevel = par1NBTTagCompound.getInteger("upgradeLevel"); - isActive = par1NBTTagCompound.getBoolean("isActive"); - liquidRequired = par1NBTTagCompound.getInteger("liquidRequired"); - canBeFilled = par1NBTTagCompound.getBoolean("canBeFilled"); - isUpgraded = par1NBTTagCompound.getBoolean("isUpgraded"); - consumptionRate = par1NBTTagCompound.getInteger("consumptionRate"); - drainRate = par1NBTTagCompound.getInteger("drainRate"); - consumptionMultiplier = par1NBTTagCompound.getFloat("consumptionMultiplier"); - efficiencyMultiplier = par1NBTTagCompound.getFloat("efficiencyMultiplier"); - selfSacrificeEfficiencyMultiplier = par1NBTTagCompound.getFloat("selfSacrificeEfficiencyMultiplier"); - sacrificeEfficiencyMultiplier = par1NBTTagCompound.getFloat("sacrificeEfficiencyMultiplier"); - capacityMultiplier = par1NBTTagCompound.getFloat("capacityMultiplier"); - orbCapacityMultiplier = par1NBTTagCompound.getFloat("orbCapacityMultiplier"); - dislocationMultiplier = par1NBTTagCompound.getFloat("dislocationMultiplier"); - capacity = par1NBTTagCompound.getInteger("capacity"); - bufferCapacity = par1NBTTagCompound.getInteger("bufferCapacity"); - progress = par1NBTTagCompound.getInteger("progress"); - isResultBlock = par1NBTTagCompound.getBoolean("isResultBlock"); - lockdownDuration = par1NBTTagCompound.getInteger("lockdownDuration"); - accelerationUpgrades = par1NBTTagCompound.getInteger("accelerationUpgrades"); - demonBloodDuration = par1NBTTagCompound.getInteger("demonBloodDuration"); - cooldownAfterCrafting = par1NBTTagCompound.getInteger("cooldownAfterCrafting"); - } - - public void setMainFluid(FluidStack fluid) - { - this.fluid = fluid; - } - - public void setOutputFluid(FluidStack fluid) - { - this.fluidOutput = fluid; - } - - public void setInputFluid(FluidStack fluid) - { - this.fluidInput = fluid; - } - - @Override - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - - par1NBTTagCompound.setInteger("resultID", resultID); - par1NBTTagCompound.setInteger("resultDamage", resultDamage); - - if (fluid != null) - { - fluid.writeToNBT(par1NBTTagCompound); - } else - { - par1NBTTagCompound.setString("Empty", ""); - } - - if (fluidOutput != null) - { - par1NBTTagCompound.setInteger("outputAmount", fluidOutput.amount); - } - - if (fluidInput != null) - { - par1NBTTagCompound.setInteger("inputAmount", fluidInput.amount); - } - - par1NBTTagCompound.setInteger("upgradeLevel", upgradeLevel); - par1NBTTagCompound.setBoolean("isActive", isActive); - par1NBTTagCompound.setInteger("liquidRequired", liquidRequired); - par1NBTTagCompound.setBoolean("canBeFilled", canBeFilled); - par1NBTTagCompound.setBoolean("isUpgraded", isUpgraded); - par1NBTTagCompound.setInteger("consumptionRate", consumptionRate); - par1NBTTagCompound.setInteger("drainRate", drainRate); - par1NBTTagCompound.setFloat("consumptionMultiplier", consumptionMultiplier); - par1NBTTagCompound.setFloat("efficiencyMultiplier", efficiencyMultiplier); - par1NBTTagCompound.setFloat("sacrificeEfficiencyMultiplier", sacrificeEfficiencyMultiplier); - par1NBTTagCompound.setFloat("selfSacrificeEfficiencyMultiplier", selfSacrificeEfficiencyMultiplier); - par1NBTTagCompound.setBoolean("isResultBlock", isResultBlock); - par1NBTTagCompound.setFloat("capacityMultiplier", capacityMultiplier); - par1NBTTagCompound.setFloat("orbCapacityMultiplier", orbCapacityMultiplier); - par1NBTTagCompound.setFloat("dislocationMultiplier", dislocationMultiplier); - par1NBTTagCompound.setInteger("capacity", capacity); - par1NBTTagCompound.setInteger("progress", progress); - par1NBTTagCompound.setInteger("bufferCapacity", bufferCapacity); - par1NBTTagCompound.setInteger("lockdownDuration", lockdownDuration); - par1NBTTagCompound.setInteger("accelerationUpgrades", this.accelerationUpgrades); - par1NBTTagCompound.setInteger("demonBloodDuration", demonBloodDuration); - par1NBTTagCompound.setInteger("cooldownAfterCrafting", cooldownAfterCrafting); - } - - @Override - public String getName() - { - return "TEAltar"; - } - - //IFluidTank methods - @Override - public FluidStack getFluid() - { - return fluid; - } - - @Override - public int getFluidAmount() - { - if (fluid == null) - { - return 0; - } - - return fluid.amount; - } - - @Override - public int getCapacity() - { - return capacity; - } - - @Override - public int getCurrentBlood() - { - return getFluidAmount(); - } - - @Override - public int getTier() - { - return upgradeLevel; - } - - @Override - public int getProgress() - { - return progress; - } - - @Override - public float getSacrificeMultiplier() - { - return sacrificeEfficiencyMultiplier; - } - - @Override - public float getSelfSacrificeMultiplier() - { - return selfSacrificeEfficiencyMultiplier; - } - - @Override - public float getOrbMultiplier() - { - return orbCapacityMultiplier; - } - - @Override - public float getDislocationMultiplier() - { - return dislocationMultiplier; - } - - @Override - public int getBufferCapacity() - { - return bufferCapacity; - } - - @Override - public FluidTankInfo getInfo() - { - return new FluidTankInfo(this); - } - - @Override - public int fill(FluidStack resource, boolean doFill) - { - TileEntity tile = this; - - if (resource == null) - { - return 0; - } - - if (resource.getFluid() != (new FluidStack(AlchemicalWizardry.lifeEssenceFluid, 1)).getFluid()) - { - return 0; - } - - if (!doFill) - { - if (fluidInput == null) - { - return Math.min(bufferCapacity, resource.amount); - } - - if (!fluidInput.isFluidEqual(resource)) - { - return 0; - } - - return Math.min(bufferCapacity - fluidInput.amount, resource.amount); - } - - if (fluidInput == null) - { - fluidInput = new FluidStack(resource, Math.min(bufferCapacity, resource.amount)); - if (tile != null) - { - FluidEvent.fireEvent(new FluidEvent.FluidFillingEvent(fluidInput, tile.getWorld(), tile.getPos(), this, fluidInput.amount)); - } - - return fluidInput.amount; - } - - if (!fluidInput.isFluidEqual(resource)) - { - return 0; - } - - int filled = bufferCapacity - fluidInput.amount; - - if (resource.amount < filled) - { - fluidInput.amount += resource.amount; - filled = resource.amount; - } else - { - fluidInput.amount = bufferCapacity; - } - - if (tile != null) - { - FluidEvent.fireEvent(new FluidEvent.FluidFillingEvent(fluidInput, tile.getWorld(), tile.getPos(), this, fluidInput.amount)); - } - - return filled; - } - - @Override - public FluidStack drain(int maxDrain, boolean doDrain) - { - if (fluidOutput == null) - { - return null; - } - - int drained = maxDrain; - - if (fluidOutput.amount < drained) - { - drained = fluidOutput.amount; - } - - FluidStack stack = new FluidStack(fluidOutput, drained); - - if (doDrain) - { - fluidOutput.amount -= drained; - - if (fluidOutput.amount <= 0) - { - fluidOutput = null; - } - - if (this != null) - { - FluidEvent.fireEvent(new FluidEvent.FluidDrainingEvent(fluidOutput, this.worldObj, this.pos, this, fluidOutput.amount)); - } - } - - if (fluidOutput == null) - { - fluidOutput = new FluidStack(AlchemicalWizardry.lifeEssenceFluid, 0); - } - - if (worldObj != null) - { - worldObj.markBlockForUpdate(pos); - } - - return stack; - } - - //Logic for the actual block is under here - @Override - public void update() - { - this.decrementDemonBlood(); - - if(this.hasDemonBlood() && !worldObj.isRemote) - { - SpellHelper.sendIndexedParticleToAllAround(worldObj, pos, 20, worldObj.provider.getDimensionId(), 1, pos); - } - - if (this.lockdownDuration > 0) - { - this.lockdownDuration--; - } - - if(worldObj.isRemote) - { - return; - } - - if (!worldObj.isRemote && worldObj.getWorldTime() % 20 == 0) - { - { - for(EnumFacing facing : EnumFacing.VALUES) - { - BlockPos newPos = pos.offset(facing); - IBlockState state = worldObj.getBlockState(newPos); - Block block = state.getBlock(); - block.onNeighborBlockChange(worldObj, newPos, state, this.getBlockType()); - } - } - - if (AlchemicalWizardry.lockdownAltar) - { - List list = SpellHelper.getPlayersInRange(worldObj, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 15, 15); - for (EntityPlayer player : list) - { - PotionEffect regenEffect = player.getActivePotionEffect(Potion.regeneration); - if (regenEffect != null && regenEffect.getAmplifier() >= 2) - { - this.lockdownDuration += 20; - } - } - } - -// if (AlchemicalWizardry.causeHungerWithRegen) -// { -// List list = SpellHelper.getPlayersInRange(worldObj, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, 15, 15); -// for (EntityPlayer player : list) -// { -// PotionEffect regenEffect = player.getActivePotionEffect(Potion.regeneration); -// if (regenEffect != null && regenEffect.getAmplifier() > 0) -// { -// if(AlchemicalWizardry.causeHungerChatMessage && !player.isPotionActive(Potion.hunger.id)) -// { -// player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("message.altar.hunger"))); -// } -// player.addPotionEffect(new PotionEffect(Potion.hunger.id, 40, regenEffect.getAmplifier() * 2 - 2)); -// } -// } -// } - } - - if(worldObj.getWorldTime() % Math.max(20 - this.accelerationUpgrades, 1) == 0) - { - int syphonMax = (int) (20 * this.dislocationMultiplier); - int fluidInputted; - int fluidOutputted; - fluidInputted = Math.min(syphonMax, -this.fluid.amount + capacity); - fluidInputted = Math.min(this.fluidInput.amount, fluidInputted); - this.fluid.amount += fluidInputted; - this.fluidInput.amount -= fluidInputted; - fluidOutputted = Math.min(syphonMax, this.bufferCapacity - this.fluidOutput.amount); - fluidOutputted = Math.min(this.fluid.amount, fluidOutputted); - this.fluidOutput.amount += fluidOutputted; - this.fluid.amount -= fluidOutputted; - } - - if (worldObj.getWorldTime() % 100 == 0 && (this.isActive || this.cooldownAfterCrafting <= 0)) - { - startCycle(); - } - - if (!isActive) - { - if(cooldownAfterCrafting > 0) - { - cooldownAfterCrafting--; - } - return; - } - - if (getStackInSlot(0) == null) - { - return; - } - - int worldTime = (int) (worldObj.getWorldTime() % 24000); - - if (worldObj.isRemote) - { - return; - } - - if (!canBeFilled) - { - if (fluid != null && fluid.amount >= 1) - { - int stackSize = getStackInSlot(0).stackSize; - int liquidDrained = Math.min((int) (upgradeLevel >= 2 ? consumptionRate * (1 + consumptionMultiplier) : consumptionRate), fluid.amount); - - if (liquidDrained > (liquidRequired * stackSize - progress)) - { - liquidDrained = liquidRequired * stackSize - progress; - } - - fluid.amount = fluid.amount - liquidDrained; - progress += liquidDrained; - - if (worldTime % 4 == 0) - { - SpellHelper.sendIndexedParticleToAllAround(worldObj, pos, 20, worldObj.provider.getDimensionId(), 1, pos); - } - - if (progress >= liquidRequired * stackSize) - { - ItemStack result; - result = AltarRecipeRegistry.getItemForItemAndTier(this.getStackInSlot(0), this.upgradeLevel); - if (result != null) - { - result.stackSize *= stackSize; - } - - setInventorySlotContents(0, result); - progress = 0; - - for (int i = 0; i < 8; i++) - { - SpellHelper.sendIndexedParticleToAllAround(worldObj, pos.getX(), pos.getY(), pos.getZ(), 20, worldObj.provider.getDimensionId(), 4, pos.getX() + 0.5f, pos.getY() + 1.0f, pos.getZ() + 0.5f); - } - this.isActive = false; - } - } else if (progress > 0) - { - progress -= (int) (efficiencyMultiplier * drainRate); - - if (worldTime % 2 == 0) - { - SpellHelper.sendIndexedParticleToAllAround(worldObj, pos, 20, worldObj.provider.getDimensionId(), 2, pos); - } - } - } else - { - ItemStack returnedItem = getStackInSlot(0); - - if (!(returnedItem.getItem() instanceof IBloodOrb)) - { - return; - } - - IBloodOrb item = (IBloodOrb) (returnedItem.getItem()); - NBTTagCompound itemTag = returnedItem.getTagCompound(); - - if (itemTag == null) - { - return; - } - - String ownerName = itemTag.getString("ownerName"); - - if (ownerName.equals("")) - { - return; - } - - if (fluid != null && fluid.amount >= 1) - { - int liquidDrained = Math.min((int) (upgradeLevel >= 2 ? consumptionRate * (1 + consumptionMultiplier) : consumptionRate), fluid.amount); - - int drain = SoulNetworkHandler.addCurrentEssenceToMaximum(ownerName, liquidDrained, (int) (item.getMaxEssence() * this.orbCapacityMultiplier)); - - fluid.amount = fluid.amount - drain; - - if (worldTime % 4 == 0) - { - SpellHelper.sendIndexedParticleToAllAround(worldObj, pos, 20, worldObj.provider.getDimensionId(), 3, pos); - } - } - } - if (worldObj != null) - { - worldObj.markBlockForUpdate(pos); - } - } - - public void setActive() - { - isActive = false; - } - - public boolean isActive() - { - return isActive; - } - - public void sacrificialDaggerCall(int amount, boolean isSacrifice) - { - if (!isSacrifice && this.lockdownDuration > 0) - { - int amt = (int) Math.min(bufferCapacity - fluidInput.amount, (isSacrifice ? 1 + sacrificeEfficiencyMultiplier : 1 + selfSacrificeEfficiencyMultiplier) * amount); - fluidInput.amount += amt; - } else - { - fluid.amount += Math.min(capacity - fluid.amount, (isSacrifice ? 1 + sacrificeEfficiencyMultiplier : 1 + selfSacrificeEfficiencyMultiplier) * amount); - } - } - - @Override - public Packet getDescriptionPacket() - { - return NewPacketHandler.getPacket(this); - } - - public void handlePacketData(int[] intData, int[] fluidData, int capacity) - { - if (intData == null) - { - return; - } - - if (intData.length == 3) - { - for (int i = 0; i < 1; i++) - { - if (intData[i * 3 + 2] != 0) - { - ItemStack is = new ItemStack(Item.getItemById(intData[i * 3]), intData[i * 3 + 2], intData[i * 3 + 1]); - inv[i] = is; - } else - { - inv[i] = null; - } - } - } - - FluidStack flMain = new FluidStack(AlchemicalWizardry.lifeEssenceFluid, fluidData[1]); //First parameter was fluidData[0] --Checking to see if this will cause issues or not - FluidStack flIn = new FluidStack(AlchemicalWizardry.lifeEssenceFluid, fluidData[3]); //" " - FluidStack flOut = new FluidStack(AlchemicalWizardry.lifeEssenceFluid, fluidData[5]); //" " - - this.setMainFluid(flMain); - this.setInputFluid(flIn); - this.setOutputFluid(flOut); - - this.capacity = capacity; - } - - public int[] buildIntDataList() - { - int[] sortList = new int[3]; //1 * 3 - int pos = 0; - - for (ItemStack is : inv) - { - if (is != null) - { - sortList[pos++] = Item.getIdFromItem(is.getItem()); - sortList[pos++] = is.getItemDamage(); - sortList[pos++] = is.stackSize; - } else - { - sortList[pos++] = 0; - sortList[pos++] = 0; - sortList[pos++] = 0; - } - } - - return sortList; - } - - public void startCycle() - { - if (worldObj != null) - { - worldObj.markBlockForUpdate(pos); - } - - this.checkAndSetAltar(); - - if (fluid == null || fluid.amount <= 0) - { - return; - } - - if (!isActive) - { - progress = 0; - } - - if (AltarRecipeRegistry.isRequiredItemValid(getStackInSlot(0), upgradeLevel)) - { - AltarRecipe recipe = AltarRecipeRegistry.getAltarRecipeForItemAndTier(getStackInSlot(0), upgradeLevel); - this.isActive = true; - this.liquidRequired = recipe.getLiquidRequired(); - this.canBeFilled = recipe.getCanBeFilled(); - this.consumptionRate = recipe.getConsumptionRate(); - this.drainRate = recipe.drainRate; - return; - } - - isActive = false; - } - - public void checkAndSetAltar() - { - boolean checkUpgrade = true; - int upgradeState = UpgradedAltars.isAltarValid(worldObj, pos); - - if (upgradeState <= 1) - { - upgradeLevel = 1; - isUpgraded = false; - this.consumptionMultiplier = 0; - this.efficiencyMultiplier = 1; - this.sacrificeEfficiencyMultiplier = 0; - this.selfSacrificeEfficiencyMultiplier = 0; - this.capacityMultiplier = 1; - this.orbCapacityMultiplier = 1; - this.dislocationMultiplier = 1; - this.accelerationUpgrades = 0; - return; - } - - AltarUpgradeComponent upgrades = UpgradedAltars.getUpgrades(worldObj, pos, upgradeState); - - if (upgrades == null) - { - upgradeLevel = 1; - isUpgraded = false; - this.consumptionMultiplier = 0; - this.efficiencyMultiplier = 1; - this.sacrificeEfficiencyMultiplier = 0; - this.selfSacrificeEfficiencyMultiplier = 0; - this.capacityMultiplier = 1; - this.orbCapacityMultiplier = 1; - this.dislocationMultiplier = 1; - this.upgradeLevel = upgradeState; - this.accelerationUpgrades = 0; - return; - } - - this.isUpgraded = checkUpgrade; - this.upgradeLevel = upgradeState; - this.consumptionMultiplier = (float) (0.20 * upgrades.getSpeedUpgrades()); - this.efficiencyMultiplier = (float) Math.pow(0.85, upgrades.getSpeedUpgrades()); - this.sacrificeEfficiencyMultiplier = (float) (0.10 * upgrades.getSacrificeUpgrades()); - this.selfSacrificeEfficiencyMultiplier = (float) (0.10 * upgrades.getSelfSacrificeUpgrades()); - this.capacityMultiplier = (float) ((1 * Math.pow(1.10, upgrades.getBetterCapacitiveUpgrades()) + 0.20 * upgrades.getAltarCapacitiveUpgrades())); - this.dislocationMultiplier = (float) (Math.pow(1.2, upgrades.getDisplacementUpgrades())); - this.orbCapacityMultiplier = (float) (1 + 0.02 * upgrades.getOrbCapacitiveUpgrades()); - this.capacity = (int) (FluidContainerRegistry.BUCKET_VOLUME * 10 * capacityMultiplier); - this.bufferCapacity = (int) (FluidContainerRegistry.BUCKET_VOLUME * 1 * capacityMultiplier); - this.accelerationUpgrades = upgrades.getAccelerationUpgrades(); - - if (this.fluid.amount > this.capacity) - { - this.fluid.amount = this.capacity; - } - - if (this.fluidOutput.amount > this.bufferCapacity) - { - this.fluidOutput.amount = this.bufferCapacity; - } - - if (this.fluidInput.amount > this.bufferCapacity) - { - this.fluidInput.amount = this.bufferCapacity; - } - - worldObj.markBlockForUpdate(pos); - } - - @Override - public boolean isItemValidForSlot(int slot, ItemStack itemstack) - { - return slot == 0; - } - - @Override - public int fill(EnumFacing from, FluidStack resource, boolean doFill) - { - //TODO - if (resource == null) - { - return 0; - } - - resource = resource.copy(); - int totalUsed = 0; - int used = this.fill(resource, doFill); - resource.amount -= used; - totalUsed += used; - this.startCycle(); - return totalUsed; - } - - @Override - public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) - { - if (resource == null) - { - return null; - } - - if (!resource.isFluidEqual(fluidOutput)) - { - return null; - } - - return drain(from, resource.amount, doDrain); - } - - @Override - public FluidStack drain(EnumFacing from, int maxEmpty, boolean doDrain) - { - return this.drain(maxEmpty, doDrain); - } - - @Override - public boolean canFill(EnumFacing from, Fluid fluid) - { - //I changed this, since fluidstack != fluid... :p dunno if it was a accident? so you might wanna check this - return this.fluidInput != null && this.fluid.getFluid().equals(fluidInput.getFluid()); - } - - @Override - public boolean canDrain(EnumFacing from, Fluid fluid) - { - return true; - } - - @Override - public FluidTankInfo[] getTankInfo(EnumFacing from) - { - FluidTank compositeTank = new FluidTank(capacity); - compositeTank.setFluid(fluid); - return new FluidTankInfo[]{compositeTank.getInfo()}; - } - - public int[] buildFluidList() - { - int[] sortList = new int[6]; - - if (this.fluid == null) - { - sortList[0] = AlchemicalWizardry.lifeEssenceFluid.getID(); - sortList[1] = 0; - } else - { - sortList[0] = this.fluid.getFluidID(); - sortList[1] = this.fluid.amount; - } - - if (this.fluidInput == null) - { - sortList[2] = AlchemicalWizardry.lifeEssenceFluid.getID(); - sortList[3] = 0; - } else - { - sortList[2] = this.fluidInput.getFluidID(); - sortList[3] = this.fluidInput.amount; - } - - if (this.fluidOutput == null) - { - sortList[4] = AlchemicalWizardry.lifeEssenceFluid.getID(); - sortList[5] = 0; - } else - { - sortList[4] = this.fluidOutput.getFluidID(); - sortList[5] = this.fluidOutput.amount; - } - - return sortList; - } - - public void sendChatInfoToPlayer(EntityPlayer player) - { - player.addChatMessage(new ChatComponentTranslation(String.format("message.altar.currentessence"), this.fluid.amount)); - player.addChatMessage(new ChatComponentTranslation(String.format("message.altar.currenttier"), UpgradedAltars.isAltarValid(worldObj, pos))); - player.addChatMessage(new ChatComponentTranslation(String.format("message.altar.capacity"), this.getCapacity())); - } - - public void sendMoreChatInfoToPlayer(EntityPlayer player) - { - if (getStackInSlot(0) != null) - { - int stackSize = getStackInSlot(0).stackSize; - player.addChatMessage(new ChatComponentText(StatCollector.translateToLocal("message.altar.progress") + " " + progress + "LP/" + liquidRequired * stackSize + "LP")); - player.addChatMessage(new ChatComponentText(StatCollector.translateToLocal("message.altar.consumptionrate") + " " + (int) (consumptionRate * (1 + consumptionMultiplier)) + "LP/t")); - } - player.addChatMessage(new ChatComponentTranslation(String.format("message.altar.currentessence"), this.fluid.amount)); - player.addChatMessage(new ChatComponentTranslation(String.format("message.altar.inputtank"), this.fluidInput.amount)); - player.addChatMessage(new ChatComponentTranslation(String.format("message.altar.outputtank"), this.fluidOutput.amount)); - } - - @Override - public void requestPauseAfterCrafting(int amount) - { - if(this.isActive) - { - this.cooldownAfterCrafting = amount; - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEBelljar.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEBelljar.java deleted file mode 100644 index fe0767a0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEBelljar.java +++ /dev/null @@ -1,119 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraftforge.common.util.Constants; -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainer; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainerInfo; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; - -public class TEBelljar extends TEReagentConduit -{ - public TEBelljar() - { - super(1, 16000); - this.maxConnextions = 1; - this.affectedByRedstone = false; - } - - public int getRSPowerOutput() - { - ReagentContainer thisTank = this.tanks[0]; - if (thisTank != null) - { - ReagentStack stack = thisTank.getReagent(); - if (stack != null) - { - return (15 * stack.amount / thisTank.getCapacity()); - } - } - return 0; - } - - public static ReagentContainerInfo[] getContainerInfoFromItem(ItemStack stack) - { - if (stack != null && stack.getItem() instanceof ItemBlock && ModBlocks.blockCrystalBelljar == ((ItemBlock) stack.getItem()).getBlock()) - { - NBTTagCompound tag = stack.getTagCompound(); - if (tag != null) - { - NBTTagList tagList = tag.getTagList("reagentTanks", Constants.NBT.TAG_COMPOUND); - - int size = tagList.tagCount(); - ReagentContainer[] tanks = new ReagentContainer[size]; - - ReagentContainerInfo[] infos = new ReagentContainerInfo[size]; - - for (int i = 0; i < size; i++) - { - NBTTagCompound savedTag = tagList.getCompoundTagAt(i); - tanks[i] = ReagentContainer.readFromNBT(savedTag); - - if (tanks[i] != null) - { - infos[i] = tanks[i].getInfo(); - } - } - - return infos; - } - } - - return new ReagentContainerInfo[0]; - } - - public void readTankNBTOnPlace(NBTTagCompound tag) - { - NBTTagList tagList = tag.getTagList("reagentTanks", Constants.NBT.TAG_COMPOUND); - - int size = tagList.tagCount(); - this.tanks = new ReagentContainer[size]; - - for (int i = 0; i < size; i++) - { - NBTTagCompound savedTag = tagList.getCompoundTagAt(i); - this.tanks[i] = ReagentContainer.readFromNBT(savedTag); - } - } - - public void writeTankNBT(NBTTagCompound tag) - { - NBTTagList tagList = new NBTTagList(); - - for (int i = 0; i < this.tanks.length; i++) - { - NBTTagCompound savedTag = new NBTTagCompound(); - if (this.tanks[i] != null) - { - this.tanks[i].writeToNBT(savedTag); - } - tagList.appendTag(savedTag); - } - - tag.setTag("reagentTanks", tagList); - } - - @Override - public void update() - { - super.update(); - - if (hasChanged == 1) - { - for(EnumFacing facing : EnumFacing.VALUES) - { - BlockPos newPos = pos.offset(facing); - IBlockState state = worldObj.getBlockState(newPos); - Block block = state.getBlock(); - block.onNeighborBlockChange(worldObj, newPos, state, this.getBlockType()); - } - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEChemistrySet.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEChemistrySet.java deleted file mode 100644 index 502c3f75..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEChemistrySet.java +++ /dev/null @@ -1,757 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.server.gui.IUpdatePlayerListBox; -import net.minecraft.util.EnumFacing; -import net.minecraftforge.oredict.OreDictionary; -import WayofTime.alchemicalWizardry.ModItems; -import WayofTime.alchemicalWizardry.api.alchemy.AlchemicalPotionCreationHandler; -import WayofTime.alchemicalWizardry.api.alchemy.AlchemyRecipe; -import WayofTime.alchemicalWizardry.api.alchemy.AlchemyRecipeRegistry; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBloodOrb; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.IBindingAgent; -import WayofTime.alchemicalWizardry.common.ICatalyst; -import WayofTime.alchemicalWizardry.common.IFillingAgent; -import WayofTime.alchemicalWizardry.common.NewPacketHandler; -import WayofTime.alchemicalWizardry.common.alchemy.CombinedPotionRegistry; -import WayofTime.alchemicalWizardry.common.alchemy.ICombinationalCatalyst; -import WayofTime.alchemicalWizardry.common.items.potion.AlchemyFlask; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class TEChemistrySet extends TEInventory implements ISidedInventory, IUpdatePlayerListBox -{ - public static final int sizeInv = 7; - - private int progress; - private int amountUsed; - - private int accelerationTime; - - public TEChemistrySet() - { - super(sizeInv); - } - - @Override - public void readFromNBT(NBTTagCompound tagCompound) - { - super.readFromNBT(tagCompound); - - progress = tagCompound.getInteger("progress"); - amountUsed = tagCompound.getInteger("amountUsed"); - - accelerationTime = tagCompound.getInteger("accelerationTime"); - } - - @Override - public void writeToNBT(NBTTagCompound tagCompound) - { - super.writeToNBT(tagCompound); - - tagCompound.setInteger("progress", progress); - tagCompound.setInteger("amountUsed", amountUsed); - - tagCompound.setInteger("accelerationTime", accelerationTime); - } - - @Override - public String getName() - { - return "aw.TEWritingTable"; - } - - @Override - public boolean isItemValidForSlot(int i, ItemStack itemstack) - { - switch(i) - { - case 0: - if(itemstack != null) - { - return itemstack.getItem() instanceof IBloodOrb; - } - } - return i != 6; - } - - @Override - public net.minecraft.network.Packet getDescriptionPacket() - { - return NewPacketHandler.getPacket(this); - } - - public void handlePacketData(int[] intData) - { - if (intData == null) - { - return; - } - - if (intData.length == 3 * 7) - { - for (int i = 0; i < 7; i++) - { - if (intData[i * 3 + 2] != 0) - { - ItemStack is = new ItemStack(Item.getItemById(intData[i * 3]), intData[i * 3 + 2], intData[i * 3 + 1]); - inv[i] = is; - } else - { - inv[i] = null; - } - } - } - } - - public int[] buildIntDataList() - { - int[] sortList = new int[7 * 3]; - int pos = 0; - - for (ItemStack is : inv) - { - if (is != null) - { - sortList[pos++] = Item.getIdFromItem(is.getItem()); - sortList[pos++] = is.getItemDamage(); - sortList[pos++] = is.stackSize; - } else - { - sortList[pos++] = 0; - sortList[pos++] = 0; - sortList[pos++] = 0; - } - } - - return sortList; - } - - public ItemStack getResultingItemStack() - { - ItemStack[] composedRecipe = new ItemStack[5]; - - for (int i = 0; i < 5; i++) - { - composedRecipe[i] = inv[i + 1]; - } - - return AlchemyRecipeRegistry.getResult(composedRecipe, inv[0]); - } - - public boolean isRecipeValid() - { - return (getResultingItemStack() != null); - } - - public int getAmountNeeded(ItemStack bloodOrb) - { - ItemStack[] composedRecipe = new ItemStack[5]; - - for (int i = 0; i < 5; i++) - { - composedRecipe[i] = inv[i + 1]; - } - - return AlchemyRecipeRegistry.getAmountNeeded(composedRecipe, bloodOrb); - } - - public boolean containsPotionFlask() - { - return getPotionFlaskPosition() != -1; - } - - public int getPotionFlaskPosition() - { - for (int i = 1; i <= 5; i++) - { - if (inv[i] != null && !(inv[i].getItem() instanceof ItemBlock) && inv[i].getItem() == ModItems.alchemyFlask) - { - return i; - } - } - - return -1; - } - - public boolean containsCombinationCatalyst() - { - return getCombinationCatalystPosition() != -1; - } - - public int getCombinationCatalystPosition() - { - for (int i = 1; i <= 5; i++) - { - if (inv[i] != null && inv[i].getItem() instanceof ICombinationalCatalyst) - { - return i; - } - } - - return -1; - } - - public boolean containsRegisteredPotionIngredient() - { - return getRegisteredPotionIngredientPosition() != -1; - } - - public int getRegisteredPotionIngredientPosition() - { - ItemStack[] composedRecipe = new ItemStack[5]; - - for (int i = 0; i < 5; i++) - { - composedRecipe[i] = inv[i + 1]; - } - - int location = AlchemicalPotionCreationHandler.getRegisteredPotionIngredientPosition(composedRecipe); - - if (location != -1) - { - return location + 1; - } - - return -1; - } - - public boolean containsCatalyst() - { - return getCatalystPosition() != -1; - } - - public int getCatalystPosition() - { - for (int i = 0; i < 5; i++) - { - if (inv[i + 1] != null && inv[i + 1].getItem() instanceof ICatalyst) - { - return i + 1; - } - } - - return -1; - } - - public boolean containsBindingAgent() - { - return getBindingAgentPosition() != -1; - } - - public int getBindingAgentPosition() - { - for (int i = 0; i < 5; i++) - { - if (inv[i + 1] != null && inv[i + 1].getItem() instanceof IBindingAgent) - { - return i + 1; - } - } - - return -1; - } - - public boolean containsFillingAgent() - { - return getFillingAgentPosition() != -1; - } - - public int getFillingAgentPosition() - { - for (int i = 0; i < 5; i++) - { - if (inv[i + 1] != null && inv[i + 1].getItem() instanceof IFillingAgent) - { - return i + 1; - } - } - - return -1; - } - - public boolean containsBlankSlate() - { - return getBlankSlatePosition() != -1; - } - - public int getBlankSlatePosition() - { - for (int i = 0; i < 5; i++) - { - if (inv[i + 1] != null && inv[i + 1].getItem() == ModItems.blankSlate) - { - return i + 1; - } - } - - return -1; - } - - @Override - public void update() - { - int progressNeeded = 100; - long worldTime = worldObj.getWorldTime(); - - if (worldObj.isRemote) - { - return; - } - if (accelerationTime > 0) - { - accelerationTime--; - } - - if (containsPotionFlask() && containsRegisteredPotionIngredient()) - { - if (containsCatalyst()) - { - if (getStackInSlot(6) == null) - { - progress++; - - if (worldTime % 4 == 0) - { - SpellHelper.sendIndexedParticleToAllAround(worldObj, pos, 20, worldObj.provider.getDimensionId(), 1, pos); - } - - if (progress >= progressNeeded) - { - ItemStack flaskStack = inv[this.getPotionFlaskPosition()]; - ItemStack ingredientStack = inv[this.getRegisteredPotionIngredientPosition()]; - ItemStack catalystStack = inv[this.getCatalystPosition()]; - - if (flaskStack == null || ingredientStack == null || catalystStack == null) - { - progress = 0; - - if (worldObj != null) - { - worldObj.markBlockForUpdate(pos); - } - - return; - } - - int potionID = AlchemicalPotionCreationHandler.getPotionIDForStack(ingredientStack); - int catalystLevel = ((ICatalyst) catalystStack.getItem()).getCatalystLevel(); - boolean isConcentration = ((ICatalyst) catalystStack.getItem()).isConcentration(); - - if (potionID == -1 || catalystLevel < 0) - { - progress = 0; - - if (worldObj != null) - { - worldObj.markBlockForUpdate(pos); - } - - return; - } - - if (isConcentration) - { - ((AlchemyFlask) flaskStack.getItem()).setConcentrationOfPotion(flaskStack, potionID, catalystLevel); - } else - { - ((AlchemyFlask) flaskStack.getItem()).setDurationFactorOfPotion(flaskStack, potionID, catalystLevel); - } - this.setInventorySlotContents(6, flaskStack); - this.decrStackSize(this.getPotionFlaskPosition(), 1); - this.decrStackSize(this.getCatalystPosition(), 1); - this.decrStackSize(this.getRegisteredPotionIngredientPosition(), 1); - progress = 0; - - if (worldObj != null) - { - worldObj.markBlockForUpdate(pos); - } - } - } - } else if (containsBindingAgent()) - { - if (getStackInSlot(6) == null) - { - progress++; - - if (worldTime % 4 == 0) - { - SpellHelper.sendIndexedParticleToAllAround(worldObj, pos, 20, worldObj.provider.getDimensionId(), 1, pos); - } - - if (progress >= progressNeeded) - { - ItemStack flaskStack = inv[this.getPotionFlaskPosition()]; - ItemStack ingredientStack = inv[this.getRegisteredPotionIngredientPosition()]; - ItemStack agentStack = inv[this.getBindingAgentPosition()]; - - if (flaskStack == null || ingredientStack == null || agentStack == null) - { - progress = 0; - - if (worldObj != null) - { - worldObj.markBlockForUpdate(pos); - } - - return; - } - - int potionEffectNumber = ((AlchemyFlask) flaskStack.getItem()).getNumberOfPotionEffects(flaskStack); - int potionID = AlchemicalPotionCreationHandler.getPotionIDForStack(ingredientStack); - int tickDuration = AlchemicalPotionCreationHandler.getPotionTickDurationForStack(ingredientStack); - float successChance = ((IBindingAgent) agentStack.getItem()).getSuccessRateForPotionNumber(potionEffectNumber); - if (potionID == -1) - { - progress = 0; - - if (worldObj != null) - { - worldObj.markBlockForUpdate(pos); - } - - return; - } - - ((AlchemyFlask) flaskStack.getItem()).addPotionEffect(flaskStack, potionID, tickDuration); - if (successChance > worldObj.rand.nextFloat()) - { - this.setInventorySlotContents(6, flaskStack); - } else - { - worldObj.createExplosion(null, pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5, 2, false); - } - - this.decrStackSize(this.getPotionFlaskPosition(), 1); - this.decrStackSize(this.getBindingAgentPosition(), 1); - this.decrStackSize(this.getRegisteredPotionIngredientPosition(), 1); - progress = 0; - - if (worldObj != null) - { - worldObj.markBlockForUpdate(pos); - } - } - } - } - } else if (this.containsBlankSlate() && this.containsPotionFlask()) - { - if (getStackInSlot(6) == null) - { - progress++; - - if (worldTime % 4 == 0) - { - SpellHelper.sendIndexedParticleToAllAround(worldObj, pos, 20, worldObj.provider.getDimensionId(), 1, pos); - } - - if (progress >= progressNeeded) - { - ItemStack flaskStack = inv[this.getPotionFlaskPosition()]; - ItemStack blankSlate = inv[this.getBlankSlatePosition()]; - - if (flaskStack == null || blankSlate == null) - { - progress = 0; - - if (worldObj != null) - { - worldObj.markBlockForUpdate(pos); - } - - return; - } - ((AlchemyFlask) flaskStack.getItem()).setIsPotionThrowable(true, flaskStack); - this.setInventorySlotContents(6, flaskStack); - this.decrStackSize(this.getPotionFlaskPosition(), 1); - this.decrStackSize(this.getBlankSlatePosition(), 1); - progress = 0; - - if (worldObj != null) - { - worldObj.markBlockForUpdate(pos); - } - } - } - } else if (this.containsFillingAgent() && this.containsPotionFlask()) - { - if (getStackInSlot(6) == null) - { - progress++; - - if (worldTime % 4 == 0) - { - SpellHelper.sendIndexedParticleToAllAround(worldObj, pos, 20, worldObj.provider.getDimensionId(), 1, pos); - } - - if (progress >= progressNeeded) - { - ItemStack flaskStack = inv[this.getPotionFlaskPosition()]; - ItemStack fillingAgent = inv[this.getFillingAgentPosition()]; - - if (flaskStack == null || fillingAgent == null) - { - progress = 0; - - if (worldObj != null) - { - worldObj.markBlockForUpdate(pos); - } - - return; - } - int potionEffects = ((AlchemyFlask) flaskStack.getItem()).getNumberOfPotionEffects(flaskStack); - int potionFillAmount = ((IFillingAgent) fillingAgent.getItem()).getFilledAmountForPotionNumber(potionEffects); - flaskStack.setItemDamage(Math.max(0, flaskStack.getItemDamage() - potionFillAmount)); - this.setInventorySlotContents(6, flaskStack); - this.decrStackSize(this.getPotionFlaskPosition(), 1); - this.decrStackSize(this.getFillingAgentPosition(), 1); - progress = 0; - - if (worldObj != null) - { - worldObj.markBlockForUpdate(pos); - } - } - } - } else if (this.containsPotionFlask() && this.containsCombinationCatalyst()) - { - //TODO - if (getStackInSlot(6) == null && CombinedPotionRegistry.hasCombinablePotionEffect(inv[this.getPotionFlaskPosition()])) - { - progress++; - - if (worldTime % 4 == 0) - { - SpellHelper.sendIndexedParticleToAllAround(worldObj, pos, 20, worldObj.provider.getDimensionId(), 1, pos); - } - - if (progress >= progressNeeded) - { - ItemStack flaskStack = inv[this.getPotionFlaskPosition()]; - ItemStack combinationCatalyst = inv[this.getCombinationCatalystPosition()]; - - if (flaskStack == null || combinationCatalyst == null) - { - progress = 0; - - if (worldObj != null) - { - worldObj.markBlockForUpdate(pos); - } - - return; - } - - ItemStack newFlask = CombinedPotionRegistry.applyPotionEffect(flaskStack); - if (newFlask != null) - { - this.setInventorySlotContents(6, newFlask); - this.decrStackSize(this.getPotionFlaskPosition(), 1); - this.decrStackSize(this.getCombinationCatalystPosition(), 1); - - progress = 0; - - if (worldObj != null) - { - worldObj.markBlockForUpdate(pos); - } - } - } - } - } else - { - if (!isRecipeValid()) - { - progress = 0; - return; - } - - if (progress <= 0) - { - progress = 0; - amountUsed = this.getAmountNeeded(getStackInSlot(0)); - - if (worldObj != null) - { - worldObj.markBlockForUpdate(pos); - } - } - - int acceleration = this.getSpeedIncrease(); - - if (getStackInSlot(6) == null) - { - if (!SoulNetworkHandler.syphonFromNetworkWhileInContainer(getStackInSlot(0), amountUsed * acceleration)) - { - return; - } - - if (worldTime % 4 == 0) - { - SpellHelper.sendIndexedParticleToAllAround(worldObj, pos, 20, worldObj.provider.getDimensionId(), 1, pos); - } - - progress += acceleration; - - if (progress >= progressNeeded) - { - progress = 0; - this.setInventorySlotContents(6, getResultingItemStack()); - - ItemStack[] composedRecipe = new ItemStack[5]; - - for (int i = 0; i < 5; i++) - { - composedRecipe[i] = inv[i + 1]; - } - - this.decrementSlots(this.getRecipeForItems(composedRecipe, inv[0])); - - if (worldObj != null) - { - worldObj.markBlockForUpdate(pos); - } - } - } else if (getStackInSlot(6).getItem() == getResultingItemStack().getItem() && getResultingItemStack().stackSize <= (getStackInSlot(6).getMaxStackSize() - getStackInSlot(6).stackSize)) - { - if (worldTime % 4 == 0) - { - SpellHelper.sendIndexedParticleToAllAround(worldObj, pos, 20, worldObj.provider.getDimensionId(), 1, pos); - } - - if (!SoulNetworkHandler.syphonFromNetworkWhileInContainer(getStackInSlot(0), amountUsed * acceleration)) - { - return; - } - - progress += acceleration; - - if (progress >= progressNeeded) - { - progress = 0; - ItemStack result = getResultingItemStack().copy(); - result.stackSize += getStackInSlot(6).stackSize; - this.setInventorySlotContents(6, result); - - ItemStack[] composedRecipe = new ItemStack[5]; - - for (int i = 0; i < 5; i++) - { - composedRecipe[i] = inv[i + 1]; - } - - this.decrementSlots(this.getRecipeForItems(composedRecipe, inv[0])); - - if (worldObj != null) - { - worldObj.markBlockForUpdate(pos); - } - } - } - } - } - - public void decrementSlots(ItemStack[] recipe) //TODO Fix this. This doesn't work. - { - boolean[] decrementedList = new boolean[]{false, false, false, false, false}; - - for (int i = 0; i < (Math.min(recipe.length, 5)); i++) - { - ItemStack decStack = recipe[i]; - - if (decStack == null) - { - continue; - } - - for (int j = 0; j < 5; j++) - { - ItemStack testStack = this.getStackInSlot(j + 1); - - if (testStack != null && (testStack.isItemEqual(decStack) || (testStack.getItem() == decStack.getItem() && decStack.getItemDamage() == OreDictionary.WILDCARD_VALUE)) && !(decrementedList[j])) - { - if (testStack.getItem().hasContainerItem(testStack)) - { - this.inv[j + 1] = testStack.getItem().getContainerItem(testStack); - } else - { - this.decrStackSize(j + 1, 1); - } - - decrementedList[j] = true; - break; - } - } - } - } - - public ItemStack[] getRecipeForItems(ItemStack[] recipe, ItemStack bloodOrb) - { - if (bloodOrb == null) - { - return null; - } - - if (!(bloodOrb.getItem() instanceof IBloodOrb)) - { - return null; - } - - int bloodOrbLevel = ((IBloodOrb) bloodOrb.getItem()).getOrbLevel(); - - for (AlchemyRecipe ar : AlchemyRecipeRegistry.recipes) - { - if (ar.doesRecipeMatch(recipe, bloodOrbLevel)) - { - return ar.getRecipe(); - } - } - - return null; - } - - public int getSpeedIncrease() - { - return accelerationTime > 0 ? 5 : 1; - } - - public boolean isWorking() - { - return this.progress > 0; - } - - public void setAccelerationTime(int accelerationTime) - { - this.accelerationTime = accelerationTime; - } - - @Override - public int[] getSlotsForFace(EnumFacing facing) - { - switch(facing) - { - case DOWN: - return new int[]{6}; - default: - return new int[]{0, 1, 2, 3, 4, 5}; - } - } - - @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing facing) - { - return slot != 6; - } - - @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing facing) - { - return slot == 6; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEConduit.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEConduit.java deleted file mode 100644 index ed90c954..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEConduit.java +++ /dev/null @@ -1,25 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import net.minecraft.nbt.NBTTagCompound; - -public class TEConduit extends TESpellBlock -{ - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - } - - @Override - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - } - - @Override - protected void applySpellChange(SpellParadigm parad) - { - - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TECrucible.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TECrucible.java deleted file mode 100644 index 1b4f449c..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TECrucible.java +++ /dev/null @@ -1,276 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import java.util.List; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; -import net.minecraft.network.play.server.S35PacketUpdateTileEntity; -import net.minecraft.server.gui.IUpdatePlayerListBox; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.world.World; -import net.minecraftforge.common.util.Constants; -import WayofTime.alchemicalWizardry.api.sacrifice.IIncense; -import WayofTime.alchemicalWizardry.api.sacrifice.PlayerSacrificeHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class TECrucible extends TEInventory implements IUpdatePlayerListBox -{ - private float rColour; - private float gColour; - private float bColour; - - private int ticksRemaining = 0; - private int minValue = 0; - private int maxValue = 0; - private float incrementValue = 0; - - private int state = 0; //0 is when it gives off gray particles, 1 is when it gives off white particles (player can't use this incense anymore), 2 is the normal colour of the incense, 3 means no particles (it is out) - - public TECrucible() - { - super(1); - float f = 1.0F; - float f1 = f * 0.6F + 0.4F; - float f2 = f * f * 0.7F - 0.5F; - float f3 = f * f * 0.6F - 0.7F; - rColour = f1; - gColour = f2; - bColour = f3; - } - - @Override - public void update() - { - int radius = 5; - - if (worldObj.isRemote) return; - - boolean stateChanged = false; - - if (ticksRemaining <= 0) - { - ItemStack stack = this.getStackInSlot(0); - if (stack != null && stack.getItem() instanceof IIncense) - { - IIncense incense = (IIncense)stack.getItem(); - - rColour = incense.getRedColour(stack); - gColour = incense.getGreenColour(stack); - bColour = incense.getBlueColour(stack); - ticksRemaining = incense.getIncenseDuration(stack); - - minValue = incense.getMinLevel(stack); - maxValue = incense.getMaxLevel(stack); - - incrementValue = incense.getTickRate(stack); - - stack.stackSize--; - if(stack.stackSize <= 0) - { - this.setInventorySlotContents(0, null); - } - - stateChanged = true; - } - } - - if(ticksRemaining > 0) - { - List playerList = SpellHelper.getPlayersInRange(worldObj, pos.getX(), pos.getY(), pos.getZ(), radius, radius); - - if(playerList != null && !playerList.isEmpty()) - { - boolean allAreGood = true; - - for(EntityPlayer player : playerList) - { - if(ticksRemaining > 0 && PlayerSacrificeHandler.incrementIncense(player, minValue, maxValue, incrementValue)) - { - ticksRemaining--; - if(state != 2) - { - state = 2; - stateChanged = true; - } - - allAreGood = false; - } - } - - if(allAreGood && state != 1) - { - state = 1; - stateChanged = true; - } - - - }else - { - if(state != 0) - { - state = 0; - worldObj.markBlockForUpdate(pos); - updateNeighbors(); - } - } - }else - { - if(state != 0) - { - state = 0; - worldObj.markBlockForUpdate(pos); - updateNeighbors(); - } - } - - if(stateChanged) - { - worldObj.markBlockForUpdate(pos); - - updateNeighbors(); - } - } - - private void updateNeighbors() - { - for(EnumFacing facing : EnumFacing.VALUES) - { - BlockPos newPos = pos.offset(facing); - IBlockState state = worldObj.getBlockState(newPos); - Block block = state.getBlock(); - block.onNeighborBlockChange(worldObj, newPos, state, this.getBlockType()); - } - } - - public void spawnClientParticle(World world, BlockPos blockPos, Random rand) - { - switch(state) - { - case 0: - world.spawnParticle(EnumParticleTypes.REDSTONE, blockPos.getX() + 0.5D + rand.nextGaussian() / 8, blockPos.getY() + 0.7D, blockPos.getZ() + 0.5D + rand.nextGaussian() / 8, 0.15, 0.15, 0.15); - break; - - case 1: - world.spawnParticle(EnumParticleTypes.REDSTONE, blockPos.getX() + 0.5D + rand.nextGaussian() / 8, blockPos.getY() + 0.7D, blockPos.getZ() + 0.5D + rand.nextGaussian() / 8, 1.0, 1.0, 1.0); - break; - - case 2: - world.spawnParticle(EnumParticleTypes.REDSTONE, blockPos.getX() + 0.5D + rand.nextGaussian() / 8, blockPos.getY() + 0.7D, blockPos.getZ() + 0.5D + rand.nextGaussian() / 8, rColour, gColour, bColour); - world.spawnParticle(EnumParticleTypes.FLAME, blockPos.getX() + 0.5D + rand.nextGaussian() / 32, blockPos.getY() + 0.7D, blockPos.getZ() + 0.5D + rand.nextGaussian() / 32, 0, 0.02, 0); - break; - - case 3: - //No particles - it is out - break; - } - } - - @Override - public void writeToNBT(NBTTagCompound tag) - { - super.writeToNBT(tag); - - tag.setInteger("ticksRemaining", ticksRemaining); - tag.setInteger("minValue", minValue); - tag.setInteger("maxValue", maxValue); - tag.setFloat("increment", this.incrementValue); - - this.writeClientNBT(tag); - } - - @Override - public void readFromNBT(NBTTagCompound tag) - { - super.readFromNBT(tag); - - ticksRemaining = tag.getInteger("ticksRemaining"); - minValue = tag.getInteger("minValue"); - maxValue = tag.getInteger("maxValue"); - incrementValue = tag.getFloat("increment"); - - this.readClientNBT(tag); - } - - public void writeClientNBT(NBTTagCompound tag) - { - tag.setFloat("rColour", rColour); - tag.setFloat("gColour", gColour); - tag.setFloat("bColour", bColour); - tag.setInteger("state", state); - - NBTTagList invList = new NBTTagList(); - for (int i = 0; i < inv.length; i++) - { - if (inv[i] != null) - { - NBTTagCompound stackTag = new NBTTagCompound(); - stackTag.setByte("Slot", (byte) i); - inv[i].writeToNBT(stackTag); - invList.appendTag(stackTag); - } - } - - tag.setTag("Inventory", invList); - } - - public void readClientNBT(NBTTagCompound tag) - { - rColour = tag.getFloat("rColour"); - gColour = tag.getFloat("gColour"); - bColour = tag.getFloat("bColour"); - state = tag.getInteger("state"); - - NBTTagList invList = tag.getTagList("Inventory", - Constants.NBT.TAG_COMPOUND); - for (int i = 0; i < invList.tagCount(); i++) - { - NBTTagCompound stackTag = invList.getCompoundTagAt(i); - int slot = stackTag.getByte("Slot"); - - if (slot >= 0 && slot < inv.length) - inv[slot] = ItemStack.loadItemStackFromNBT(stackTag); - } - } - - - @Override - public Packet getDescriptionPacket() - { - NBTTagCompound nbttagcompound = new NBTTagCompound(); - writeClientNBT(nbttagcompound); - return new S35PacketUpdateTileEntity(pos, 90210, nbttagcompound); - } - - @Override - public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) - { - super.onDataPacket(net, packet); - readClientNBT(packet.getNbtCompound()); - } - - @Override - public String getName() - { - return "TECrucible"; - } - - @Override - public boolean isItemValidForSlot(int slot, ItemStack stack) - { - return stack != null && stack.getItem() instanceof IIncense; - } - - public int getRSPowerOutput() - { - return (state == 1 || state == 0) ? 0 : 15; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEInventory.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEInventory.java deleted file mode 100644 index ec5ccc86..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEInventory.java +++ /dev/null @@ -1,175 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IChatComponent; -import net.minecraftforge.common.util.Constants; - -/** - * Base class for tile entities with inventory - * - * @author ljfa-ag - */ -public abstract class TEInventory extends TileEntity implements IInventory -{ - protected ItemStack[] inv; - - public TEInventory(int size) - { - inv = new ItemStack[size]; - } - - @Override - public int getSizeInventory() - { - return inv.length; - } - - @Override - public ItemStack getStackInSlot(int slot) - { - return inv[slot]; - } - - @Override - public ItemStack decrStackSize(int slot, int amt) - { - ItemStack stack = getStackInSlot(slot); - if (stack != null) - { - if (stack.stackSize <= amt) - setInventorySlotContents(slot, null); - else - { - stack = stack.splitStack(amt); - if (stack.stackSize == 0) - setInventorySlotContents(slot, null); - } - } - return stack; - } - - @Override - public ItemStack getStackInSlotOnClosing(int slot) - { - ItemStack stack = getStackInSlot(slot); - if (stack != null) - setInventorySlotContents(slot, null); - return stack; - } - - @Override - public void setInventorySlotContents(int slot, ItemStack stack) - { - inv[slot] = stack; - worldObj.markBlockForUpdate(pos); - if (stack != null && stack.stackSize > getInventoryStackLimit()) - stack.stackSize = getInventoryStackLimit(); - } - - @Override - public abstract String getName(); - - @Override - public boolean hasCustomName() - { - return false; - } - - @Override - public int getInventoryStackLimit() - { - return 64; - } - - @Override - public boolean isUseableByPlayer(EntityPlayer player) - { - return worldObj.getTileEntity(this.pos) == this - && player.getDistanceSqToCenter(pos) < 64; - } - - @Override - public void openInventory(EntityPlayer player) - { - } - - @Override - public void closeInventory(EntityPlayer player) - { - } - - @Override - public boolean isItemValidForSlot(int slot, ItemStack stack) - { - return true; - } - - @Override - public void writeToNBT(NBTTagCompound tag) - { - super.writeToNBT(tag); - NBTTagList invList = new NBTTagList(); - for (int i = 0; i < inv.length; i++) - { - if (inv[i] != null) - { - NBTTagCompound stackTag = new NBTTagCompound(); - stackTag.setByte("Slot", (byte) i); - inv[i].writeToNBT(stackTag); - invList.appendTag(stackTag); - } - } - - tag.setTag("Inventory", invList); - } - - @Override - public void readFromNBT(NBTTagCompound tag) - { - super.readFromNBT(tag); - NBTTagList invList = tag.getTagList("Inventory", - Constants.NBT.TAG_COMPOUND); - for (int i = 0; i < invList.tagCount(); i++) - { - NBTTagCompound stackTag = invList.getCompoundTagAt(i); - int slot = stackTag.getByte("Slot"); - - if (slot >= 0 && slot < inv.length) - inv[slot] = ItemStack.loadItemStackFromNBT(stackTag); - } - } - - public void clear() - { - inv = new ItemStack[inv.length]; - } - - @Override - public int getField(int id) { - // TODO Auto-generated method stub - return 0; - } - - @Override - public void setField(int id, int value) { - // TODO Auto-generated method stub - - } - - @Override - public int getFieldCount() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public IChatComponent getDisplayName() { - // TODO Auto-generated method stub - return null; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEMasterStone.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEMasterStone.java deleted file mode 100644 index 01d78af0..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEMasterStone.java +++ /dev/null @@ -1,690 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; -import net.minecraft.network.play.server.S35PacketUpdateTileEntity; -import net.minecraft.server.gui.IUpdatePlayerListBox; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.fml.common.eventhandler.Event; -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainer; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainerInfo; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; -import WayofTime.alchemicalWizardry.api.event.RitualActivatedEvent; -import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; -import WayofTime.alchemicalWizardry.api.rituals.LocalRitualStorage; -import WayofTime.alchemicalWizardry.api.rituals.RitualBreakMethod; -import WayofTime.alchemicalWizardry.api.rituals.Rituals; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class TEMasterStone extends TileEntity implements IMasterRitualStone, IUpdatePlayerListBox -{ - private String currentRitualString; - private boolean isActive; - private String owner; - private String varString1; - private int cooldown; - private int var1; - private int direction; - public boolean isRunning; - public int runningTime; - - public LocalRitualStorage storage; - - private NBTTagCompound customRitualTag; - - protected ReagentContainer[] tanks; - protected Map attunedTankMap; - - public TEMasterStone() - { - tanks = new ReagentContainer[]{new ReagentContainer(1000), new ReagentContainer(1000), new ReagentContainer(1000)}; - this.attunedTankMap = new HashMap(); - - isActive = false; - owner = ""; - cooldown = 0; - var1 = 0; - direction = 0; - varString1 = ""; - currentRitualString = ""; - isRunning = false; - runningTime = 0; - - this.customRitualTag = new NBTTagCompound(); - } - - public void readClientNBT(NBTTagCompound tag) - { - currentRitualString = tag.getString("currentRitualString"); - isRunning = tag.getBoolean("isRunning"); - runningTime = tag.getInteger("runningTime"); - - NBTTagList tagList = tag.getTagList("reagentTanks", Constants.NBT.TAG_COMPOUND); - - int size = tagList.tagCount(); - this.tanks = new ReagentContainer[size]; - - for (int i = 0; i < size; i++) - { - NBTTagCompound savedTag = tagList.getCompoundTagAt(i); - this.tanks[i] = ReagentContainer.readFromNBT(savedTag); - } - } - - public void writeClientNBT(NBTTagCompound tag) - { - tag.setString("currentRitualString", currentRitualString); - tag.setBoolean("isRunning", isRunning); - tag.setInteger("runningTime", runningTime); - - NBTTagList tagList = new NBTTagList(); - - for (int i = 0; i < this.tanks.length; i++) - { - NBTTagCompound savedTag = new NBTTagCompound(); - if (this.tanks[i] != null) - { - this.tanks[i].writeToNBT(savedTag); - } - tagList.appendTag(savedTag); - } - - tag.setTag("reagentTanks", tagList); - } - - @Override - public void readFromNBT(NBTTagCompound tag) - { - super.readFromNBT(tag); - isActive = tag.getBoolean("isActive"); - owner = tag.getString("owner"); - cooldown = tag.getInteger("cooldown"); - var1 = tag.getInteger("var1"); - direction = tag.getInteger("direction"); - currentRitualString = tag.getString("currentRitualString"); - isRunning = tag.getBoolean("isRunning"); - runningTime = tag.getInteger("runningTime"); - - NBTTagList tagList = tag.getTagList("reagentTanks", Constants.NBT.TAG_COMPOUND); - - int size = tagList.tagCount(); - this.tanks = new ReagentContainer[size]; - - for (int i = 0; i < size; i++) - { - NBTTagCompound savedTag = tagList.getCompoundTagAt(i); - this.tanks[i] = ReagentContainer.readFromNBT(savedTag); - } - - NBTTagList attunedTagList = tag.getTagList("attunedTankMap", Constants.NBT.TAG_COMPOUND); - - for (int i = 0; i < attunedTagList.tagCount(); i++) - { - NBTTagCompound savedTag = attunedTagList.getCompoundTagAt(i); - Reagent reagent = ReagentRegistry.getReagentForKey(savedTag.getString("reagent")); - this.attunedTankMap.put(reagent, savedTag.getInteger("amount")); - } - - customRitualTag = tag.getCompoundTag("customRitualTag"); - - LocalRitualStorage newStorage = Rituals.getLocalStorage(currentRitualString); - - NBTTagCompound localStorageTag = tag.getCompoundTag("localStorage"); - if(newStorage != null) - { - newStorage.readFromNBT(localStorageTag); - storage = newStorage; - storage.setLocation(pos); - } - } - - @Override - public void writeToNBT(NBTTagCompound tag) - { - super.writeToNBT(tag); - tag.setBoolean("isActive", isActive); - tag.setString("owner", owner); - tag.setInteger("cooldown", cooldown); - tag.setInteger("var1", var1); - tag.setInteger("direction", direction); - tag.setString("currentRitualString", currentRitualString); - tag.setBoolean("isRunning", isRunning); - tag.setInteger("runningTime", runningTime); - - NBTTagList tagList = new NBTTagList(); - - for (int i = 0; i < this.tanks.length; i++) - { - NBTTagCompound savedTag = new NBTTagCompound(); - if (this.tanks[i] != null) - { - this.tanks[i].writeToNBT(savedTag); - } - tagList.appendTag(savedTag); - } - - tag.setTag("reagentTanks", tagList); - - NBTTagList attunedTagList = new NBTTagList(); - - for (Entry entry : this.attunedTankMap.entrySet()) - { - NBTTagCompound savedTag = new NBTTagCompound(); - savedTag.setString("reagent", ReagentRegistry.getKeyForReagent(entry.getKey())); - savedTag.setInteger("amount", entry.getValue()); - attunedTagList.appendTag(savedTag); - } - - tag.setTag("attunedTankMap", attunedTagList); - - tag.setTag("customRitualTag", customRitualTag); - - if(storage != null) - { - NBTTagCompound localStorageTag = new NBTTagCompound(); - - storage.writeToNBT(localStorageTag); - tag.setTag("localStorage", localStorageTag); - } - - } - - public void activateRitual(World world, int crystalLevel, ItemStack activationCrystal, EntityPlayer player, String crystalOwner) - { - if (world.isRemote) - { - return; - } - - String testRitual = Rituals.checkValidRitual(world, pos); - - if (testRitual.equals("")) - { - player.addChatMessage(new ChatComponentTranslation("message.masterstone.nothinghappened")); - return; - } - - //TODO - RitualActivatedEvent event = new RitualActivatedEvent(this, crystalOwner, testRitual, player, activationCrystal, crystalLevel); - if(MinecraftForge.EVENT_BUS.post(event) || event.getResult() == Event.Result.DENY) - { - player.addChatMessage(new ChatComponentTranslation("message.masterstone.somethingstoppedyou")); - - return; - } - - int eventCrystalTier = event.crystalTier; - String eventRitualKey = event.ritualKey; - String eventOwnerKey = event.ownerKey; - - boolean testLevel = Rituals.canCrystalActivate(eventRitualKey, eventCrystalTier); - - if (!testLevel) - { - player.addChatMessage(new ChatComponentTranslation("message.masterstone.crystalvibrates")); - - return; - } - - int currentEssence = SoulNetworkHandler.getCurrentEssence(eventOwnerKey); - - if (currentEssence < Rituals.getCostForActivation(testRitual)) - { - player.addChatMessage(new ChatComponentTranslation("message.masterstone.youfeelapull")); - - return; - } - - if (!world.isRemote) - { - if (!Rituals.startRitual(this, testRitual, player)) - { - player.addChatMessage(new ChatComponentTranslation("message.masterstone.ritualresistyou")); - - return; - } else - { - int drain = SoulNetworkHandler.syphonFromNetwork(eventOwnerKey, Rituals.getCostForActivation(testRitual)); - - if(drain > 0) - { - player.addChatMessage(new ChatComponentTranslation("message.masterstone.energyflows")); - - for (int i = 0; i < 12; i++) - { - SpellHelper.sendIndexedParticleToAllAround(world, pos, 20, worldObj.provider.getDimensionId(), 1, pos); - } - }else - { - player.addChatMessage(new ChatComponentTranslation("message.masterstone.somethingstoppedyou")); - - return; - } - } - } - - if(!this.currentRitualString.equals("")) - { - Rituals.onRitualBroken(this, this.currentRitualString, RitualBreakMethod.ACTIVATE); - } - this.setOwner(eventOwnerKey); - cooldown = Rituals.getInitialCooldown(testRitual); - var1 = 0; - currentRitualString = testRitual; - storage = Rituals.getLocalStorage(currentRitualString); - storage.setLocation(pos); - isActive = true; - isRunning = true; - direction = Rituals.getDirectionOfRitual(world, pos, testRitual); - worldObj.markBlockForUpdate(pos); - } - - public void setOwner(String owner) - { - this.owner = owner; - } - - public void useOnRitualBroken() - { - Rituals.onRitualBroken(this, this.currentRitualString, RitualBreakMethod.BREAK_MRS); - } - - public void useOnRitualBrokenExplosion() - { - Rituals.onRitualBroken(this, this.currentRitualString, RitualBreakMethod.EXPLOSION); - } - - @Override - public void update() - { - if (isRunning && runningTime < 100) - { - runningTime++; - } else if (!isRunning && runningTime > 0) - { - runningTime--; - } - - if (!isActive) - { - return; - } - - int worldTime = (int) (worldObj.getWorldTime() % 24000); - - if (worldObj.isRemote) - { - return; - } - - if (worldTime % 100 == 0) - { - boolean testRunes = Rituals.checkDirectionOfRitualValid(worldObj, pos, currentRitualString, direction); - SpellHelper.sendIndexedParticleToAllAround(worldObj, pos, 20, worldObj.provider.getDimensionId(), 1, pos); - - if (!testRunes) - { - Rituals.onRitualBroken(this, currentRitualString, RitualBreakMethod.BREAK_STONE); - isActive = false; - currentRitualString = ""; - worldObj.markBlockForUpdate(pos); - return; - } - } - - if (worldObj.getStrongPower(pos) > 0) - { - if (isRunning) - { - Rituals.onRitualBroken(this, this.currentRitualString, RitualBreakMethod.REDSTONE); - isRunning = false; - worldObj.markBlockForUpdate(pos); - } - - return; - } else - { - if (!isRunning) - { - isRunning = true; - worldObj.markBlockForUpdate(pos); - } - } - - performRitual(worldObj, pos, currentRitualString); - } - - public void performRitual(World world, BlockPos pos, String currentRitualString) - { - Rituals.performEffect(this, currentRitualString); - } - - public String getOwner() - { - return owner; - } - - public void setCooldown(int newCooldown) - { - this.cooldown = newCooldown; - } - - public int getCooldown() - { - return this.cooldown; - } - - public void setVar1(int newVar1) - { - this.var1 = newVar1; - } - - public int getVar1() - { - return this.var1; - } - - public void setActive(boolean active) - { - Rituals.onRitualBroken(this, this.currentRitualString, RitualBreakMethod.DEACTIVATE); - this.isActive = active; - this.isRunning = active; - worldObj.markBlockForUpdate(pos); - } - - public int getDirection() - { - return this.direction; - } - - @Override - public World getWorldObj() - { - return this.getWorld(); - } - - @Override - public BlockPos getPosition() - { - return this.getPos(); - } - - public String getCurrentRitual() - { - return this.currentRitualString; - } - - public void setCurrentRitual(String str) - { - this.currentRitualString = str; - } - - @Override - public Packet getDescriptionPacket() - { - NBTTagCompound nbttagcompound = new NBTTagCompound(); - writeClientNBT(nbttagcompound); - return new S35PacketUpdateTileEntity(pos, -999, nbttagcompound); - } - - @Override - public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) - { - super.onDataPacket(net, packet); - readClientNBT(packet.getNbtCompound()); - } - - public AxisAlignedBB getRenderBoundingBox() - { - double renderExtension = 1.0d; - return new AxisAlignedBB(pos.add(-renderExtension, -renderExtension, -renderExtension), pos.add(1 + renderExtension, 1 + renderExtension, 1 + renderExtension)); - } - - /* ISegmentedReagentHandler */ - @Override - public int fill(EnumFacing from, ReagentStack resource, boolean doFill) - { - if (doFill) - { - worldObj.markBlockForUpdate(pos); - } - - int totalFill = 0; - - boolean useTankLimit = !this.attunedTankMap.isEmpty(); - - if (resource != null) - { - int totalTanksFillable = useTankLimit ? this.getTanksTunedToReagent(resource.reagent) : this.tanks.length; - int tanksFilled = 0; - - int maxFill = resource.amount; - - for (int i = this.tanks.length - 1; i >= 0; i--) - { - ReagentStack remainingStack = resource.copy(); - remainingStack.amount = maxFill - totalFill; - - boolean doesReagentMatch = tanks[i].getReagent() != null && tanks[i].getReagent().isReagentEqual(remainingStack); - - if (doesReagentMatch) - { - totalFill += tanks[i].fill(remainingStack, doFill); - tanksFilled++; - } else - { - continue; - } - - if (totalFill >= maxFill || tanksFilled >= totalTanksFillable) - { - return totalFill; - } - } - - if (tanksFilled >= totalTanksFillable) - { - return totalFill; - } - - for (int i = this.tanks.length - 1; i >= 0; i--) - { - ReagentStack remainingStack = resource.copy(); - remainingStack.amount = maxFill - totalFill; - - boolean isTankEmpty = tanks[i].getReagent() == null; - - if (isTankEmpty) - { - totalFill += tanks[i].fill(remainingStack, doFill); - tanksFilled++; - } else - { - continue; - } - - if (totalFill >= maxFill || tanksFilled >= totalTanksFillable) - { - return totalFill; - } - } - } - return totalFill; - } - - @Override - public ReagentStack drain(EnumFacing from, ReagentStack resource, boolean doDrain) - { - if (resource == null) - { - return null; - } - - if (doDrain) - { - worldObj.markBlockForUpdate(pos); - } - - int maxDrain = resource.amount; - Reagent reagent = resource.reagent; - int drained = 0; - - for (int i = 0; i < tanks.length; i++) - { - if (drained >= maxDrain) - { - break; - } - - if (resource.isReagentEqual(tanks[i].getReagent())) - { - ReagentStack drainStack = tanks[i].drain(maxDrain - drained, doDrain); - if (drainStack != null) - { - drained += drainStack.amount; - } - } - } - - return new ReagentStack(reagent, drained); - } - - /* Only returns the amount from the first available tank */ - @Override - public ReagentStack drain(EnumFacing from, int maxDrain, boolean doDrain) - { - for (int i = 0; i < tanks.length; i++) - { - ReagentStack stack = tanks[i].drain(maxDrain, doDrain); - if (stack != null) - { - if (doDrain) - { - worldObj.markBlockForUpdate(pos); - } - - return stack; - } - } - - return null; - } - - @Override - public boolean canFill(EnumFacing from, Reagent reagent) - { - return true; - } - - @Override - public boolean canDrain(EnumFacing from, Reagent reagent) - { - return true; - } - - @Override - public ReagentContainerInfo[] getContainerInfo(EnumFacing from) - { - ReagentContainerInfo[] info = new ReagentContainerInfo[this.getNumberOfTanks()]; - for (int i = 0; i < this.getNumberOfTanks(); i++) - { - info[i] = tanks[i].getInfo(); - } - return info; - } - - @Override - public int getNumberOfTanks() - { - return tanks.length; - } - - @Override - public int getTanksTunedToReagent(Reagent reagent) - { - if (this.attunedTankMap.containsKey(reagent) && this.attunedTankMap.get(reagent) != null) - { - return this.attunedTankMap.get(reagent); - } - return 0; - } - - @Override - public void setTanksTunedToReagent(Reagent reagent, int total) - { - if (total == 0 && this.attunedTankMap.containsKey(reagent)) - { - this.attunedTankMap.remove(reagent); - return; - } - - this.attunedTankMap.put(reagent, total); - } - - @Override - public Map getAttunedTankMap() - { - return this.attunedTankMap; - } - - public boolean areTanksEmpty() - { - for (int i = 0; i < this.tanks.length; i++) - { - if (tanks[i] != null && tanks[i].getReagent() != null) - { - return false; - } - } - - return true; - } - - @Override - public NBTTagCompound getCustomRitualTag() - { - return this.customRitualTag; - } - - @Override - public void setCustomRitualTag(NBTTagCompound tag) - { - this.customRitualTag = tag; - } - - @Override - public int getRunningTime() - { - return this.runningTime; - } - - @Override - public LocalRitualStorage getLocalStorage() - { - return storage; - } - - @Override - public void setLocalStorage(LocalRitualStorage storage) - { - this.storage = storage; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEMimicBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEMimicBlock.java deleted file mode 100644 index d059a92e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEMimicBlock.java +++ /dev/null @@ -1,239 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; -import net.minecraft.network.play.server.S35PacketUpdateTileEntity; -import net.minecraft.server.gui.IUpdatePlayerListBox; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.util.Constants; -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.common.omega.OmegaParadigm; -import WayofTime.alchemicalWizardry.common.omega.OmegaRegistry; - -public class TEMimicBlock extends TileEntity implements IUpdatePlayerListBox -{ - private ItemStack[] inv; - public Reagent reagent; - - private int ticksRemaining; - - public TEMimicBlock() - { - this.inv = new ItemStack[1]; - - ticksRemaining = 0; - } - - @Override - public Packet getDescriptionPacket() - { - NBTTagCompound nbttagcompound = new NBTTagCompound(); - writeToNBT(nbttagcompound); - return new S35PacketUpdateTileEntity(pos, -999, nbttagcompound); - } - - @Override - public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) - { - super.onDataPacket(net, packet); - readFromNBT(packet.getNbtCompound()); - } - - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - NBTTagList tagList = par1NBTTagCompound.getTagList("Inventory", Constants.NBT.TAG_COMPOUND); - - for (int i = 0; i < tagList.tagCount(); i++) - { - NBTTagCompound tag = tagList.getCompoundTagAt(i); - int slot = tag.getByte("Slot"); - - if (slot >= 0 && slot < inv.length) - { - inv[slot] = ItemStack.loadItemStackFromNBT(tag); - } - } - - ticksRemaining = par1NBTTagCompound.getInteger("ticksRemaining"); - reagent = ReagentRegistry.getReagentForKey(par1NBTTagCompound.getString("reagent")); - } - - @Override - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - NBTTagList itemList = new NBTTagList(); - - for (int i = 0; i < inv.length; i++) - { - if (inv[i] != null) - { - NBTTagCompound tag = new NBTTagCompound(); - tag.setByte("Slot", (byte) i); - inv[i].writeToNBT(tag); - itemList.appendTag(tag); - } - } - - par1NBTTagCompound.setTag("Inventory", itemList); - par1NBTTagCompound.setInteger("ticksRemaining", ticksRemaining); - par1NBTTagCompound.setString("reagent", ReagentRegistry.getKeyForReagent(reagent)); - } - - @Override - public void update() - { - this.ticksRemaining--; - - if (this.ticksRemaining <= 0) - { - this.returnContainedBlock(); - } - } - - public static boolean createMimicBlockAtLocation(World world, BlockPos pos, int duration, IBlockState state, Reagent reagent) - { - Block block = state.getBlock(); - if (block == null) - { - return false; - } - - TileEntity tileEntity = world.getTileEntity(pos); - - if (tileEntity == null && world.isAirBlock(pos)) - { - ItemStack item = new ItemStack(block, 1, block.getMetaFromState(state)); - - world.setBlockState(pos, ModBlocks.blockMimic.getDefaultState()); - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TEMimicBlock) - { - ((TEMimicBlock) tile).setContainedItem(item); - ((TEMimicBlock) tile).setDuration(duration); - ((TEMimicBlock) tile).reagent = reagent; - world.markBlockForUpdate(pos); - return true; - } - }else - { - if(tileEntity instanceof TEMimicBlock) - { - if(((TEMimicBlock) tileEntity).getBlock() == block) - { - ((TEMimicBlock) tileEntity).ticksRemaining = Math.max(duration, ((TEMimicBlock) tileEntity).ticksRemaining); - } - } - } - - return false; - } - - public static boolean createMimicBlockAtLocation(World world, int x, int y, int z, int duration, Block block, int meta) - { - return createMimicBlockAtLocation(world, x, y, z, duration, block, meta); - } - - public void setDuration(int dur) - { - this.ticksRemaining = dur; - } - - public void resetDuration(int dur) - { - if (this.ticksRemaining < dur) - { - this.ticksRemaining = dur; - } - } - - public void setContainedItem(ItemStack item) - { - this.inv[0] = item; - } - - public void returnContainedBlock() - { -// ItemStack item = this.inv[0]; -// if (item != null) -// { -// if (item.getItem() instanceof ItemBlock) -// { -// Block block = ((ItemBlock) item.getItem()).field_150939_a; -// int meta = item.getItemDamage(); -// -// if (block != null) -// { -// this.worldObj.setBlock(xCoord, yCoord, zCoord, block, meta, 6); -// } -// } -// -// } else - { - this.worldObj.setBlockToAir(pos); - } - } - - public Block getBlock() - { - ItemStack item = this.inv[0]; - if(item != null) - { - if (item.getItem() instanceof ItemBlock) - { - Block block = ((ItemBlock) item.getItem()).getBlock(); - return block; - } - } - return null; - } - - public int getMetaOfMimic() - { - ItemStack item = this.inv[0]; - if(item != null) - { - return item.getItemDamage(); - } - - return 0; - } - - public IBlockState getStateOfMimic() - { - Block block = this.getBlock(); - if(block == null) - { - return null; - } - - return block.getStateFromMeta(getMetaOfMimic()); - } - - public boolean getBlockEffectWhileInside(Entity entity, BlockPos blockPos) - { - if(reagent != null) - { - OmegaParadigm paradigm = OmegaRegistry.getParadigmForReagent(reagent); - if(paradigm != null) - { - return paradigm.getBlockEffectWhileInside(entity, blockPos); - } - } - - return false; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEOrientable.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEOrientable.java deleted file mode 100644 index 160bf6a7..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEOrientable.java +++ /dev/null @@ -1,108 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.Packet; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import WayofTime.alchemicalWizardry.common.NewPacketHandler; -import WayofTime.alchemicalWizardry.common.block.IOrientable; - -public class TEOrientable extends TileEntity implements IOrientable -{ - protected EnumFacing inputFace; - protected EnumFacing outputFace; - - public TEOrientable() - { - this.inputFace = EnumFacing.DOWN; - this.outputFace = EnumFacing.UP; - } - - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.setInputDirection(EnumFacing.getFront(par1NBTTagCompound.getInteger("inputFace"))); - this.setOutputDirection(EnumFacing.getFront(par1NBTTagCompound.getInteger("outputFace"))); - } - - @Override - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("inputFace", TEOrientable.getIntForEnumFacing(this.getInputDirection())); - par1NBTTagCompound.setInteger("outputFace", TEOrientable.getIntForEnumFacing(this.getOutputDirection())); - } - - @Override - public EnumFacing getInputDirection() - { - return this.inputFace; - } - - @Override - public EnumFacing getOutputDirection() - { - return this.outputFace; - } - - @Override - public void setInputDirection(EnumFacing direction) - { - this.inputFace = direction; - } - - @Override - public void setOutputDirection(EnumFacing direction) - { - this.outputFace = direction; - } - - public static int getIntForEnumFacing(EnumFacing direction) - { - switch (direction) - { - case DOWN: - return 0; - - case UP: - return 1; - - case NORTH: - return 2; - - case SOUTH: - return 3; - - case WEST: - return 4; - - case EAST: - return 5; - - default: - return 0; - } - } - - @Override - public Packet getDescriptionPacket() - { - return NewPacketHandler.getPacket(this); - } - - - public boolean isSideRendered(EnumFacing side) - { - if (side.equals(this.getInputDirection()) || side.equals(this.getOutputDirection())) - { - return true; - } - return false; - } - - public String getResourceLocationForMeta(int meta) - { - return ""; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPedestal.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPedestal.java deleted file mode 100644 index 7b664d7f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPedestal.java +++ /dev/null @@ -1,138 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.Packet; -import WayofTime.alchemicalWizardry.common.NewPacketHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class TEPedestal extends TEInventory -{ - public static final int sizeInv = 1; - - private int resultID; - private int resultDamage; - - private boolean isActive; - - public TEPedestal() - { - super(sizeInv); - resultID = 0; - resultDamage = 0; - isActive = false; - } - - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - - resultID = par1NBTTagCompound.getInteger("resultID"); - resultDamage = par1NBTTagCompound.getInteger("resultDamage"); - isActive = par1NBTTagCompound.getBoolean("isActive"); - } - - @Override - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - - par1NBTTagCompound.setInteger("resultID", resultID); - par1NBTTagCompound.setInteger("resultDamage", resultDamage); - par1NBTTagCompound.setBoolean("isActive", isActive); - } - - @Override - public String getName() - { - return "TEPedestal"; - } - - @Override - public int getInventoryStackLimit() - { - return 1; - } - - public void setActive() - { - isActive = false; - } - - public boolean isActive() - { - return isActive; - } - - @Override - public Packet getDescriptionPacket() - { - return NewPacketHandler.getPacket(this); - } - - public void handlePacketData(int[] intData) - { - if (intData == null) - { - return; - } - - if (intData.length == 3) - { - for (int i = 0; i < 1; i++) - { - if (intData[i * 3 + 2] != 0) - { - ItemStack is = new ItemStack(Item.getItemById(intData[i * 3]), intData[i * 3 + 2], intData[i * 3 + 1]); - inv[i] = is; - } else - { - inv[i] = null; - } - } - } - } - - public int[] buildIntDataList() - { - int[] sortList = new int[3]; //1 * 3 - int pos = 0; - - for (ItemStack is : inv) - { - if (is != null) - { - sortList[pos++] = Item.getIdFromItem(is.getItem()); - sortList[pos++] = is.getItemDamage(); - sortList[pos++] = is.stackSize; - } else - { - sortList[pos++] = 0; - sortList[pos++] = 0; - sortList[pos++] = 0; - } - } - - return sortList; - } - - @Override - public boolean isItemValidForSlot(int slot, ItemStack itemstack) - { - return slot == 0; - } - - public void onItemDeletion() - { - worldObj.addWeatherEffect(new EntityLightningBolt(worldObj, pos.getX(), pos.getY(), pos.getZ())); - worldObj.markBlockForUpdate(pos); - - for (int i = 0; i < 16; i++) - { - SpellHelper.sendIndexedParticleToAllAround(worldObj, pos, 20, worldObj.provider.getDimensionId(), 2, pos); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPlinth.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPlinth.java deleted file mode 100644 index 05be629f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPlinth.java +++ /dev/null @@ -1,568 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.network.Packet; -import net.minecraft.server.gui.IUpdatePlayerListBox; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.oredict.OreDictionary; -import WayofTime.alchemicalWizardry.api.summoningRegistry.SummoningRegistry; -import WayofTime.alchemicalWizardry.api.summoningRegistry.SummoningRegistryComponent; -import WayofTime.alchemicalWizardry.common.IDemon; -import WayofTime.alchemicalWizardry.common.NewPacketHandler; -import WayofTime.alchemicalWizardry.common.PlinthComponent; -import WayofTime.alchemicalWizardry.common.items.Orb; - -public class TEPlinth extends TEInventory implements IUpdatePlayerListBox -{ - public static final int sizeInv = 1; - - private boolean isActive; - private boolean paradigm; - - private ItemStack[] ring1Inv; - private ItemStack[] ring2Inv; - private ItemStack[] ring3Inv; - - private int progressInterval; - private int progress; - - public static List pedestalPositions = new ArrayList(); - - public TEPlinth() - { - super(sizeInv); - this.ring1Inv = new ItemStack[6]; - this.ring2Inv = new ItemStack[6]; - this.ring3Inv = new ItemStack[6]; - isActive = false; - progress = 0; - progressInterval = 50; - } - - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - - NBTTagList ring1TagList = par1NBTTagCompound.getTagList("ring1Inv", Constants.NBT.TAG_COMPOUND); - - for (int i = 0; i < ring1TagList.tagCount(); i++) - { - NBTTagCompound tag = ring1TagList.getCompoundTagAt(i); - int slot = tag.getByte("Slot"); - - if (slot >= 0 && slot < inv.length) - { - ring1Inv[slot] = ItemStack.loadItemStackFromNBT(tag); - } - } - - NBTTagList ring2TagList = par1NBTTagCompound.getTagList("ring2Inv", Constants.NBT.TAG_COMPOUND); - - for (int i = 0; i < ring2TagList.tagCount(); i++) - { - NBTTagCompound tag = ring2TagList.getCompoundTagAt(i); - int slot = tag.getByte("Slot"); - - if (slot >= 0 && slot < inv.length) - { - ring2Inv[slot] = ItemStack.loadItemStackFromNBT(tag); - } - } - - NBTTagList ring3TagList = par1NBTTagCompound.getTagList("ring3Inv", Constants.NBT.TAG_COMPOUND); - - for (int i = 0; i < ring3TagList.tagCount(); i++) - { - NBTTagCompound tag = ring3TagList.getCompoundTagAt(i); - int slot = tag.getByte("Slot"); - - if (slot >= 0 && slot < inv.length) - { - ring3Inv[slot] = ItemStack.loadItemStackFromNBT(tag); - } - } - - progress = par1NBTTagCompound.getInteger("progress"); - progressInterval = par1NBTTagCompound.getInteger("progressInterval"); - isActive = par1NBTTagCompound.getBoolean("isActive"); - } - - @Override - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - - NBTTagList ring1ItemList = new NBTTagList(); - - for (int i = 0; i < ring1Inv.length; i++) - { - if (ring1Inv[i] != null) - { - NBTTagCompound tag = new NBTTagCompound(); - tag.setByte("Slot", (byte) i); - ring1Inv[i].writeToNBT(tag); - ring1ItemList.appendTag(tag); - } - } - - par1NBTTagCompound.setTag("ring1Inv", ring1ItemList); - NBTTagList ring2ItemList = new NBTTagList(); - - for (int i = 0; i < ring2Inv.length; i++) - { - if (ring2Inv[i] != null) - { - NBTTagCompound tag = new NBTTagCompound(); - tag.setByte("Slot", (byte) i); - ring2Inv[i].writeToNBT(tag); - ring2ItemList.appendTag(tag); - } - } - - par1NBTTagCompound.setTag("ring2Inv", ring1ItemList); - NBTTagList ring3ItemList = new NBTTagList(); - - for (int i = 0; i < ring3Inv.length; i++) - { - if (ring3Inv[i] != null) - { - NBTTagCompound tag = new NBTTagCompound(); - tag.setByte("Slot", (byte) i); - ring3Inv[i].writeToNBT(tag); - ring3ItemList.appendTag(tag); - } - } - - par1NBTTagCompound.setTag("ring3Inv", ring1ItemList); - par1NBTTagCompound.setInteger("progress", progress); - par1NBTTagCompound.setInteger("progressInterval", progressInterval); - par1NBTTagCompound.setBoolean("isActive", isActive); - } - - @Override - public String getName() - { - return "TEPlinth"; - } - - @Override - public int getInventoryStackLimit() - { - return 1; - } - - //Logic for the actual block is under here - @Override - public void update() - { - if (worldObj.isRemote) - { - return; - } - - if (!isActive()) - { - if (getStackInSlot(0) != null && getStackInSlot(0).getItem() instanceof Orb) - { - int bloodOrbLevel = ((Orb) getStackInSlot(0).getItem()).getOrbLevel(); - - if (SummoningRegistry.isRecipeValid(bloodOrbLevel, composeItemsForRingAndParadigm(1, true), composeItemsForRingAndParadigm(2, true), composeItemsForRingAndParadigm(3, true))) - { - SummoningRegistryComponent src = SummoningRegistry.getRegistryComponent(bloodOrbLevel, composeItemsForRingAndParadigm(1, true), composeItemsForRingAndParadigm(2, true), composeItemsForRingAndParadigm(3, true)); - isActive = true; - paradigm = true; - progress = 0; - ring1Inv = src.getRingRecipeForRing(1); - ring2Inv = src.getRingRecipeForRing(2); - ring3Inv = src.getRingRecipeForRing(3); - } else if (SummoningRegistry.isRecipeValid(bloodOrbLevel, composeItemsForRingAndParadigm(1, false), composeItemsForRingAndParadigm(2, false), composeItemsForRingAndParadigm(3, false))) - { - SummoningRegistryComponent src = SummoningRegistry.getRegistryComponent(bloodOrbLevel, composeItemsForRingAndParadigm(1, false), composeItemsForRingAndParadigm(2, false), composeItemsForRingAndParadigm(3, false)); - isActive = true; - paradigm = false; - progress = 0; - ring1Inv = src.getRingRecipeForRing(1); - ring2Inv = src.getRingRecipeForRing(2); - ring3Inv = src.getRingRecipeForRing(3); - } else - { - isActive = false; - progress = 0; - } - } - } else - { - if (getStackInSlot(0) != null && getStackInSlot(0).getItem() instanceof Orb) - { - if (progress % progressInterval == 0) - { - int ring = (progress / progressInterval) / 6 + 1; - int slot = (progress / progressInterval) % 6; - ItemStack itemStack; - - switch (ring) - { - case 1: - itemStack = this.ring1Inv[slot]; - break; - - case 2: - itemStack = this.ring2Inv[slot]; - break; - - case 3: - itemStack = this.ring3Inv[slot]; - break; - - default: - itemStack = null; - } - - if (itemStack == null) - { - progress += progressInterval; - } else - { - if (this.deleteItemStackInRing(ring, itemStack)) - { - progress++; - } - } - } else - { - progress++; - } - - if (progress >= progressInterval * 18) - { - int bloodOrbLevel = ((Orb) getStackInSlot(0).getItem()).getOrbLevel(); - EntityLivingBase entity = SummoningRegistry.getEntity(worldObj, bloodOrbLevel, ring1Inv, ring2Inv, ring3Inv); - - if (entity != null) - { - entity.setPosition(pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5); - worldObj.spawnEntityInWorld(entity); - - if (entity instanceof IDemon) - { - ((IDemon) entity).setSummonedConditions(); - } - - worldObj.createExplosion(entity, entity.posX, entity.posY, entity.posZ, 3, false); - //deleteItemsInRing(1); - isActive = false; - progress = 0; - - if (worldObj != null) - { - worldObj.markBlockForUpdate(pos); - } - } - } - } - } - } - - public void deleteItemsInRing(int ring) - { - if (paradigm) - { - int i = 0; - - for (PlinthComponent pc : pedestalPositions) - { - if (i < 6 && pc.getRing() == ring) - { - BlockPos newPos = pos.add(pc.xOffset, pc.yOffset, pc.zOffset); - TileEntity tileEntity = worldObj.getTileEntity(newPos); - - if (tileEntity instanceof TEPedestal) - { - ((TEPedestal) tileEntity).setInventorySlotContents(0, null); - worldObj.markBlockForUpdate(newPos); - i++; - } - } - } - } else - { - int i = 0; - - for (PlinthComponent pc : pedestalPositions) - { - if (i < 6 && pc.getRing() == ring) - { - BlockPos newPos = pos.add(pc.zOffset, pc.yOffset, pc.xOffset); - TileEntity tileEntity = worldObj.getTileEntity(newPos); - - if (tileEntity instanceof TEPedestal) - { - ((TEPedestal) tileEntity).setInventorySlotContents(0, null); - worldObj.markBlockForUpdate(newPos); - i++; - } - } - } - } - } - - public boolean deleteItemStackInRing(int ring, ItemStack itemStack) - { - if (itemStack == null) - { - return true; - } - - if (paradigm) - { - int i = 0; - - for (PlinthComponent pc : pedestalPositions) - { - if (i < 6 && pc.getRing() == ring) - { - BlockPos newPos = pos.add(pc.xOffset, pc.yOffset, pc.zOffset); - TileEntity tileEntity = worldObj.getTileEntity(newPos); - - if (tileEntity instanceof TEPedestal) - { - ItemStack possibleItem = ((TEPedestal) tileEntity).getStackInSlot(0); - - if (possibleItem == null) - { - i++; - continue; - } - - boolean test = false; - - if (possibleItem.getItem() instanceof ItemBlock) - { - if (itemStack.getItem() instanceof ItemBlock) - { - test = true; - } - } else if (!(itemStack.getItem() instanceof ItemBlock)) - { - test = true; - } - - if (test) - { - if (itemStack.getItem() == possibleItem.getItem() && (itemStack.getItemDamage() == possibleItem.getItemDamage() || itemStack.getItemDamage() == OreDictionary.WILDCARD_VALUE)) - { - ((TEPedestal) tileEntity).decrStackSize(0, 1); - if (((TEPedestal) tileEntity).getStackInSlot(0) != null && ((TEPedestal) tileEntity).getStackInSlot(0).stackSize == 0) - { - ((TEPedestal) tileEntity).setInventorySlotContents(0, null); - } - ((TEPedestal) tileEntity).onItemDeletion(); - worldObj.markBlockForUpdate(newPos); - return true; - } - } - - i++; - } - } - } - } else - { - int i = 0; - - for (PlinthComponent pc : pedestalPositions) - { - if (i < 6 && pc.getRing() == ring) - { - BlockPos newPos = pos.add(pc.zOffset, pc.yOffset, pc.xOffset); - TileEntity tileEntity = worldObj.getTileEntity(newPos); - - if (tileEntity instanceof TEPedestal) - { - ItemStack possibleItem = ((TEPedestal) tileEntity).getStackInSlot(0); - - if (possibleItem == null) - { - i++; - continue; - } - - boolean test = false; - - if (possibleItem.getItem() instanceof ItemBlock) - { - if (itemStack.getItem() instanceof ItemBlock) - { - test = true; - } - } else if (!(itemStack.getItem() instanceof ItemBlock)) - { - test = true; - } - - if (test) - { - if (itemStack.getItem() == possibleItem.getItem() && (itemStack.getItemDamage() == possibleItem.getItemDamage() || itemStack.getItemDamage() == OreDictionary.WILDCARD_VALUE)) - { - ((TEPedestal) tileEntity).decrStackSize(0, 1); - ((TEPedestal) tileEntity).onItemDeletion(); - worldObj.markBlockForUpdate(newPos); - return true; - } - } - - i++; - } - } - } - } - - return false; - } - - public ItemStack[] composeItemsForRingAndParadigm(int ring, boolean paradigm) - { - ItemStack[] composed = new ItemStack[6]; - - if (paradigm) - { - int i = 0; - - for (PlinthComponent pc : pedestalPositions) - { - if (i < 6 && pc.getRing() == ring) - { - BlockPos newPos = pos.add(pc.xOffset, pc.yOffset, pc.zOffset); - TileEntity tileEntity = worldObj.getTileEntity(newPos); - - if (tileEntity instanceof TEPedestal) - { - composed[i] = ((TEPedestal) tileEntity).getStackInSlot(0); - i++; - } - } - } - } else - { - int i = 0; - - for (PlinthComponent pc : pedestalPositions) - { - if (i < 6 && pc.getRing() == ring) - { - BlockPos newPos = pos.add(pc.zOffset, pc.yOffset, pc.xOffset); - TileEntity tileEntity = worldObj.getTileEntity(newPos); - - if (tileEntity instanceof TEPedestal) - { - composed[i] = ((TEPedestal) tileEntity).getStackInSlot(0); - i++; - } - } - } - } - - return composed; - } - - public void setActive() - { - isActive = false; - } - - public boolean isActive() - { - return isActive; - } - - @Override - public Packet getDescriptionPacket() - { - return NewPacketHandler.getPacket(this); - } - - public void handlePacketData(int[] intData) - { - if (intData == null) - { - return; - } - - if (intData.length == 3) - { - for (int i = 0; i < 1; i++) - { - if (intData[i * 3 + 2] != 0) - { - ItemStack is = new ItemStack(Item.getItemById(intData[i * 3]), intData[i * 3 + 2], intData[i * 3 + 1]); - inv[i] = is; - } else - { - inv[i] = null; - } - } - } - } - - public int[] buildIntDataList() - { - int[] sortList = new int[3]; //1 * 3 - int pos = 0; - - for (ItemStack is : inv) - { - if (is != null) - { - sortList[pos++] = Item.getIdFromItem(is.getItem()); - sortList[pos++] = is.getItemDamage(); - sortList[pos++] = is.stackSize; - } else - { - sortList[pos++] = 0; - sortList[pos++] = 0; - sortList[pos++] = 0; - } - } - - return sortList; - } - - @Override - public boolean isItemValidForSlot(int slot, ItemStack itemstack) - { - return slot == 0; - } - - public static void initialize() - { - pedestalPositions.add(new PlinthComponent(1, 0, -2, 1)); - pedestalPositions.add(new PlinthComponent(2, 0, 0, 1)); - pedestalPositions.add(new PlinthComponent(1, 0, +2, 1)); - pedestalPositions.add(new PlinthComponent(-1, 0, -2, 1)); - pedestalPositions.add(new PlinthComponent(-2, 0, 0, 1)); - pedestalPositions.add(new PlinthComponent(-1, 0, +2, 1)); - pedestalPositions.add(new PlinthComponent(3, 1, -5, 2)); - pedestalPositions.add(new PlinthComponent(6, 1, 0, 2)); - pedestalPositions.add(new PlinthComponent(3, 1, +5, 2)); - pedestalPositions.add(new PlinthComponent(-3, 1, -5, 2)); - pedestalPositions.add(new PlinthComponent(-6, 1, 0, 2)); - pedestalPositions.add(new PlinthComponent(-3, 1, +5, 2)); - pedestalPositions.add(new PlinthComponent(0, 2, -9, 3)); - pedestalPositions.add(new PlinthComponent(7, 2, -4, 3)); - pedestalPositions.add(new PlinthComponent(7, 2, +4, 3)); - pedestalPositions.add(new PlinthComponent(0, 2, +9, 3)); - pedestalPositions.add(new PlinthComponent(-7, 2, -4, 3)); - pedestalPositions.add(new PlinthComponent(-7, 2, 4, 3)); - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEReagentConduit.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEReagentConduit.java deleted file mode 100644 index fc59f70b..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEReagentConduit.java +++ /dev/null @@ -1,551 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; -import net.minecraft.network.play.server.S35PacketUpdateTileEntity; -import net.minecraft.server.gui.IUpdatePlayerListBox; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.alchemicalWizardry.api.ColourAndCoords; -import WayofTime.alchemicalWizardry.api.Int3; -import WayofTime.alchemicalWizardry.api.alchemy.energy.IReagentHandler; -import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainer; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; -import WayofTime.alchemicalWizardry.api.alchemy.energy.TileSegmentedReagentHandler; -import WayofTime.alchemicalWizardry.common.entity.projectile.EntityParticleBeam; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class TEReagentConduit extends TileSegmentedReagentHandler implements IUpdatePlayerListBox -{ - public List destinationList; //These are offsets - public Map> reagentTargetList; - public Map reagentTankDesignationList; - public int tickRate = 20; //Rate that the reagents are sent - - int hasChanged = 0; - public boolean affectedByRedstone = true; - - public int maxConnextions = 5; - - public int renderCount = 0; - - public TEReagentConduit() - { - this(2, 2000); - } - - public TEReagentConduit(int numberOfTanks, int size) - { - super(numberOfTanks, size); - - destinationList = new LinkedList(); - reagentTargetList = new HashMap>(); - reagentTankDesignationList = new HashMap(); - } - - public Int3 getColour() - { - int[] redMap = new int[this.tanks.length]; - int[] greenMap = new int[this.tanks.length]; - int[] blueMap = new int[this.tanks.length]; - - for (int i = 0; i < this.tanks.length; i++) - { - ReagentContainer container = this.tanks[i]; - if (container != null && container.getReagent() != null) - { - Reagent reagent = container.getReagent().reagent; - - redMap[i] = reagent.getColourRed(); - greenMap[i] = reagent.getColourGreen(); - blueMap[i] = reagent.getColourBlue(); - } - } - - int red = 0; - int green = 0; - int blue = 0; - - for (int i = 0; i < this.tanks.length; i++) - { - red += redMap[i]; - green += greenMap[i]; - blue += blueMap[i]; - } - - red /= this.tanks.length; - green /= this.tanks.length; - blue /= this.tanks.length; - - return new Int3(red, green, blue); - } - - @Override - public void writeToNBT(NBTTagCompound tag) - { - super.writeToNBT(tag); - - tag.setInteger("hasChanged", hasChanged); - - NBTTagList tagList = new NBTTagList(); - - for (int i = 0; i < destinationList.size(); i++) - { - NBTTagCompound savedTag = new NBTTagCompound(); - tagList.appendTag(destinationList.get(i).writeToNBT(savedTag)); - } - - tag.setTag("destinationList", tagList); - - NBTTagList reagentTagList = new NBTTagList(); //TODO - - for (Entry> entry : reagentTargetList.entrySet()) - { - NBTTagCompound savedTag = new NBTTagCompound(); - savedTag.setString("reagent", ReagentRegistry.getKeyForReagent(entry.getKey())); - - NBTTagList coordinateTagList = new NBTTagList(); - - for (Int3 coord : entry.getValue()) - { - NBTTagCompound coordinateTag = new NBTTagCompound(); - - coord.writeToNBT(coordinateTag); - - coordinateTagList.appendTag(coordinateTag); - } - - savedTag.setTag("coordinateList", coordinateTagList); - - reagentTagList.appendTag(savedTag); - } - - tag.setTag("reagentTargetList", reagentTagList); - - NBTTagList tankDesignationList = new NBTTagList(); - - for (Entry entry : this.reagentTankDesignationList.entrySet()) - { - NBTTagCompound savedTag = new NBTTagCompound(); - - savedTag.setString("reagent", ReagentRegistry.getKeyForReagent(entry.getKey())); - savedTag.setInteger("integer", entry.getValue()); - - tankDesignationList.appendTag(savedTag); - } - - tag.setTag("tankDesignationList", tankDesignationList); - - } - - @Override - public void readFromNBT(NBTTagCompound tag) - { - super.readFromNBT(tag); - - hasChanged = tag.getInteger("hasChanged"); - - NBTTagList tagList = tag.getTagList("destinationList", Constants.NBT.TAG_COMPOUND); - - destinationList = new LinkedList(); - - for (int i = 0; i < tagList.tagCount(); i++) - { - NBTTagCompound savedTag = tagList.getCompoundTagAt(i); - - destinationList.add(ColourAndCoords.readFromNBT(savedTag)); - } - - reagentTargetList = new HashMap>(); - - NBTTagList reagentTagList = tag.getTagList("reagentTargetList", Constants.NBT.TAG_COMPOUND); - - for (int i = 0; i < reagentTagList.tagCount(); i++) - { - NBTTagCompound savedTag = reagentTagList.getCompoundTagAt(i); - - Reagent reagent = ReagentRegistry.getReagentForKey(savedTag.getString("reagent")); - - List coordList = new LinkedList(); - - NBTTagList coordinateList = savedTag.getTagList("coordinateList", Constants.NBT.TAG_COMPOUND); - - for (int j = 0; j < coordinateList.tagCount(); j++) - { - coordList.add(Int3.readFromNBT(coordinateList.getCompoundTagAt(j))); - } - - reagentTargetList.put(reagent, coordList); - } - - reagentTankDesignationList = new HashMap(); - - NBTTagList tankDesignationList = tag.getTagList("tankDesignationList", Constants.NBT.TAG_COMPOUND); - - for (int i = 0; i < tankDesignationList.tagCount(); i++) - { - NBTTagCompound savedTag = tankDesignationList.getCompoundTagAt(i); - - this.reagentTankDesignationList.put(ReagentRegistry.getReagentForKey(savedTag.getString("reagent")), savedTag.getInteger("integer")); - } - } - - public void readClientNBT(NBTTagCompound tag) - { - NBTTagList tagList = tag.getTagList("destinationList", Constants.NBT.TAG_COMPOUND); - - destinationList = new LinkedList(); - - for (int i = 0; i < tagList.tagCount(); i++) - { - NBTTagCompound savedTag = tagList.getCompoundTagAt(i); - - destinationList.add(ColourAndCoords.readFromNBT(savedTag)); - } - - NBTTagList reagentTagList = tag.getTagList("reagentTanks", Constants.NBT.TAG_COMPOUND); - - int size = reagentTagList.tagCount(); - this.tanks = new ReagentContainer[size]; - - for (int i = 0; i < size; i++) - { - NBTTagCompound savedTag = reagentTagList.getCompoundTagAt(i); - this.tanks[i] = ReagentContainer.readFromNBT(savedTag); - } - } - - public void writeClientNBT(NBTTagCompound tag) - { - NBTTagList tagList = new NBTTagList(); - - for (int i = 0; i < destinationList.size(); i++) - { - NBTTagCompound savedTag = new NBTTagCompound(); - tagList.appendTag(destinationList.get(i).writeToNBT(savedTag)); - } - - tag.setTag("destinationList", tagList); - - NBTTagList reagentTagList = new NBTTagList(); - - for (int i = 0; i < this.tanks.length; i++) - { - NBTTagCompound savedTag = new NBTTagCompound(); - if (this.tanks[i] != null) - { - this.tanks[i].writeToNBT(savedTag); - } - reagentTagList.appendTag(savedTag); - } - - tag.setTag("reagentTanks", reagentTagList); - } - - @Override - public void update() - { - if (!worldObj.isRemote) - { - if (hasChanged > 1) - { - hasChanged = 1; - } else if (hasChanged == 1) - { - hasChanged = 0; - } - - if (worldObj.getWorldTime() % 100 == 99) - { - this.updateColourList(); - } - - if (affectedByRedstone && worldObj.isBlockPowered(pos)) //isBlockBeingIndirectlyPowered() - { - return; - } - - int totalTransfered = 0; - - for (Entry> entry : this.reagentTargetList.entrySet()) - { - for (Int3 coord : entry.getValue()) - { - if (totalTransfered >= this.tickRate) - { - break; - } - - ReagentStack maxDrainAmount = this.drain(EnumFacing.UP, new ReagentStack(entry.getKey(), this.tickRate - totalTransfered), false); - - if (maxDrainAmount == null) - { - continue; - } - - int amountLeft = maxDrainAmount.amount; - - if (amountLeft <= 0) - { - continue; - } - - BlockPos newPos = pos.add(coord.xCoord, coord.yCoord, coord.zCoord); - - TileEntity tile = worldObj.getTileEntity(newPos); - if (tile instanceof IReagentHandler) - { - int amount = Math.min(((IReagentHandler) tile).fill(EnumFacing.UP, maxDrainAmount, false), amountLeft); - if (amount > 0) - { - totalTransfered += amount; - - ReagentStack stack = this.drain(EnumFacing.UP, new ReagentStack(entry.getKey(), amount), true); - ((IReagentHandler) tile).fill(EnumFacing.UP, stack, true); - } - } - } - } - } else - { - if (affectedByRedstone && worldObj.isBlockPowered(pos)) - { - return; - } - - renderCount++; - - if (worldObj.getWorldTime() % 100 != 0) - { - return; - } - - this.sendPlayerStuffs(); - } - } - - @SideOnly(Side.CLIENT) - public void sendPlayerStuffs() - { - Minecraft mc = Minecraft.getMinecraft(); - EntityPlayer player = mc.thePlayer; - if (SpellHelper.canPlayerSeeAlchemy(player)) - { - for (ColourAndCoords colourSet : this.destinationList) - { - BlockPos newPos = pos.add(colourSet.xCoord, colourSet.yCoord, colourSet.zCoord); - if (!(worldObj.getTileEntity(newPos) instanceof IReagentHandler)) - { - continue; - } - EntityParticleBeam beam = new EntityParticleBeam(worldObj, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); - double velocity = Math.sqrt(Math.pow(colourSet.xCoord, 2) + Math.pow(colourSet.yCoord, 2) + Math.pow(colourSet.zCoord, 2)); - double wantedVel = 0.3d; - beam.setVelocity(wantedVel * colourSet.xCoord / velocity, wantedVel * colourSet.yCoord / velocity, wantedVel * colourSet.zCoord / velocity); - beam.setColour(colourSet.colourRed / 255f, colourSet.colourGreen / 255f, colourSet.colourBlue / 255f); - beam.setDestination(pos.getX() + colourSet.xCoord, pos.getY() + colourSet.yCoord, pos.getZ() + colourSet.zCoord); - worldObj.spawnEntityInWorld(beam); - } - } - } - - public void updateColourList() - { - if (worldObj.isRemote) - { - return; - } - - List newList = this.compileListForReagentTargets(this.reagentTargetList); - - if (newList != null && !newList.equals(destinationList)) - { - this.destinationList = newList; - worldObj.markBlockForUpdate(pos); - } - } - - public List compileListForReagentTargets(Map> map) - { - List list = new LinkedList(); - - for (Entry> entry : map.entrySet()) - { - if (entry.getValue() != null) - { - Reagent reagent = entry.getKey(); - if (reagent == null) - { - continue; - } - List coords = entry.getValue(); - for (Int3 coord : coords) - { - if (coord == null) - { - continue; - } - list.add(new ColourAndCoords(reagent.getColourRed(), reagent.getColourGreen(), reagent.getColourBlue(), reagent.getColourIntensity(), coord.xCoord, coord.yCoord, coord.zCoord)); - } - } - } - - return list; - } - - public boolean addDestinationViaOffset(int red, int green, int blue, int intensity, int xOffset, int yOffset, int zOffset) - { - if (xOffset == 0 && yOffset == 0 && zOffset == 0) - { - return false; - } - - this.destinationList.add(new ColourAndCoords(red, green, blue, intensity, xOffset, yOffset, zOffset)); - - return true; - } - - public boolean addDestinationViaActual(int red, int green, int blue, int intensity, int x, int y, int z) - { - return this.addDestinationViaOffset(red, green, blue, intensity, x - pos.getX(), y - pos.getY(), z - pos.getZ()); - } - - @Override - public Packet getDescriptionPacket() - { - NBTTagCompound nbttagcompound = new NBTTagCompound(); - writeClientNBT(nbttagcompound); - return new S35PacketUpdateTileEntity(pos, 90210, nbttagcompound); - } - - @Override - public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) - { - super.onDataPacket(net, packet); - readClientNBT(packet.getNbtCompound()); - } - - public boolean addReagentDestinationViaOffset(Reagent reagent, int xOffset, int yOffset, int zOffset) - { - int totalConnections = 0; - - for (Entry> entry : this.reagentTargetList.entrySet()) - { - if (entry.getValue() != null) - { - totalConnections += entry.getValue().size(); - } - } - - if (totalConnections >= this.maxConnextions) - { - //Send message that it cannot be done? Maybe add a Player instance - return false; - } - - if (xOffset == 0 && yOffset == 0 && zOffset == 0) - { - return false; - } - - Int3 newCoord = new Int3(xOffset, yOffset, zOffset); - - if (this.reagentTargetList.containsKey(reagent)) - { - List coordList = this.reagentTargetList.get(reagent); - if (coordList == null) - { - List newCoordList = new LinkedList(); - newCoordList.add(newCoord); - this.reagentTargetList.put(reagent, newCoordList); - } else - { - coordList.add(newCoord); - } - - return true; - } else - { - List newCoordList = new LinkedList(); - newCoordList.add(newCoord); - this.reagentTargetList.put(reagent, newCoordList); - - return true; - } - } - - public boolean addReagentDestinationViaActual(Reagent reagent, int x, int y, int z) - { - return (this.addReagentDestinationViaOffset(reagent, x - pos.getX(), y - pos.getY(), z - pos.getZ())); - } - - public boolean removeReagentDestinationViaOffset(Reagent reagent, int xOffset, int yOffset, int zOffset) - { - if (this.reagentTargetList.containsKey(reagent)) - { - List coords = this.reagentTargetList.get(reagent); - if (coords != null) - { - Int3 reference = new Int3(xOffset, yOffset, zOffset); - - return coords.remove(reference); - } - } - return false; - } - - public boolean removeReagentDestinationViaActual(Reagent reagent, int x, int y, int z) - { - return this.removeReagentDestinationViaOffset(reagent, x - pos.getX(), y - pos.getY(), z - pos.getZ()); - } - - @Override - public int fill(EnumFacing from, ReagentStack resource, boolean doFill) - { - if (doFill && !worldObj.isRemote) - { - worldObj.markBlockForUpdate(pos); - hasChanged = 2; - } - - return super.fill(from, resource, doFill); - } - - @Override - public ReagentStack drain(EnumFacing from, ReagentStack resource, boolean doDrain) - { - if (doDrain && !worldObj.isRemote) - { - worldObj.markBlockForUpdate(pos); - hasChanged = 2; - } - - return super.drain(from, resource, doDrain); - } - - public void removeReagentDestinationViaActual(Reagent reagent, BlockPos pos) - { - this.removeReagentDestinationViaActual(reagent, pos.getX(), pos.getY(), pos.getZ()); - } - - public boolean addReagentDestinationViaActual(Reagent reagent, BlockPos pos) - { - return addReagentDestinationViaActual(reagent, pos.getX(), pos.getY(), pos.getZ()); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESchematicSaver.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESchematicSaver.java deleted file mode 100644 index 82cd940e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESchematicSaver.java +++ /dev/null @@ -1,160 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import java.io.FileWriter; -import java.io.IOException; -import java.io.Writer; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.common.demonVillage.BuildingSchematic; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - -public class TESchematicSaver extends TileEntity -{ - public Block targetBlock = ModBlocks.largeBloodStoneBrick; - - public void rightClickBlock() - { - BuildingSchematic schematic = new BuildingSchematic(); - - int negX = this.getNegXLimit(); - int negY = this.getNegYLimit(); - int negZ = this.getNegZLimit(); - int posX = this.getPosXLimit(); - int posY = this.getPosYLimit(); - int posZ = this.getPosZLimit(); - - for (int i = -negX + 1; i <= posX - 1; i++) - { - for (int j = -negY + 1; j <= posY - 1; j++) - { - for (int k = -negZ + 1; k <= posZ - 1; k++) - { - BlockPos newPos = pos.add(i, j, k); - IBlockState state = worldObj.getBlockState(newPos); - Block block = state.getBlock(); - int meta = block.getMetaFromState(state); - - if (!block.isAir(worldObj, newPos)) - { - schematic.addBlockWithMeta(block, meta, i, j, k); - } - } - } - - AlchemicalWizardry.logger.info("" + i); - } - - AlchemicalWizardry.logger.info("I got here!"); - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - String json = gson.toJson(schematic); - AlchemicalWizardry.logger.info("Here, too!"); - Writer writer; - try - { - writer = new FileWriter("config/BloodMagic/schematics/" + new Random().nextInt() + ".json"); - writer.write(json); - writer.close(); - } catch (IOException e) - { - e.printStackTrace(); - } - } - - public int getPosYLimit() - { - int i = 1; - while (i < 100) - { - if (targetBlock == (worldObj.getBlockState(pos.add(0, i, 0)).getBlock())) - { - return i; - } - - i++; - } - return 1; - } - - public int getNegYLimit() - { - int i = 1; - while (i < 100) - { - if (targetBlock == (worldObj.getBlockState(pos.add(0, -i, 0)).getBlock())) - { - return i; - } - - i++; - } - return 1; - } - - public int getPosXLimit() - { - int i = 1; - while (i < 100) - { - if (targetBlock == (worldObj.getBlockState(pos.add(i, 0, 0)).getBlock())) - { - return i; - } - - i++; - } - return 1; - } - - public int getNegXLimit() - { - int i = 1; - while (i < 100) - { - if (targetBlock == (worldObj.getBlockState(pos.add(-i, 0, 0)).getBlock())) - { - return i; - } - - i++; - } - return 1; - } - - public int getPosZLimit() - { - int i = 1; - while (i < 100) - { - if (targetBlock == (worldObj.getBlockState(pos.add(0, 0, i)).getBlock())) - { - return i; - } - - i++; - } - return 1; - } - - public int getNegZLimit() - { - int i = 1; - while (i < 100) - { - if (targetBlock == (worldObj.getBlockState(pos.add(0, 0, -i)).getBlock())) - { - return i; - } - - i++; - } - return 1; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESocket.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESocket.java deleted file mode 100644 index 2dab8da8..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESocket.java +++ /dev/null @@ -1,126 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.Packet; -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.common.NewPacketHandler; - -public class TESocket extends TEInventory -{ - public static final int sizeInv = 1; - - private int resultID; - private int resultDamage; - - private boolean isActive; - - public TESocket() - { - super(sizeInv); - resultID = 0; - resultDamage = 0; - isActive = false; - } - - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - - resultID = par1NBTTagCompound.getInteger("resultID"); - resultDamage = par1NBTTagCompound.getInteger("resultDamage"); - isActive = par1NBTTagCompound.getBoolean("isActive"); - } - - @Override - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - - par1NBTTagCompound.setInteger("resultID", resultID); - par1NBTTagCompound.setInteger("resultDamage", resultDamage); - par1NBTTagCompound.setBoolean("isActive", isActive); - } - - @Override - public String getName() - { - return "TESocket"; - } - - @Override - public int getInventoryStackLimit() - { - return 1; - } - - public void setActive() - { - isActive = false; - } - - public boolean isActive() - { - return isActive; - } - - @Override - public Packet getDescriptionPacket() - { - return NewPacketHandler.getPacket(this); - } - - public void handlePacketData(int[] intData) - { - if (intData == null) - { - return; - } - - if (intData.length == 3) - { - for (int i = 0; i < 1; i++) - { - if (intData[i * 3 + 2] != 0) - { - ItemStack is = new ItemStack(Item.getItemById(intData[i * 3]), intData[i * 3 + 2], intData[i * 3 + 1]); - inv[i] = is; - } else - { - inv[i] = null; - } - } - } - } - - public int[] buildIntDataList() - { - int[] sortList = new int[3]; //1 * 3 - int pos = 0; - - for (ItemStack is : inv) - { - if (is != null) - { - sortList[pos++] = Item.getIdFromItem(is.getItem()); - sortList[pos++] = is.getItemDamage(); - sortList[pos++] = is.stackSize; - } else - { - sortList[pos++] = 0; - sortList[pos++] = 0; - sortList[pos++] = 0; - } - } - - return sortList; - } - - @Override - public boolean isItemValidForSlot(int slot, ItemStack itemstack) - { - return itemstack.getItem() instanceof ArmourUpgrade; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpectralBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpectralBlock.java deleted file mode 100644 index 56ddd107..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpectralBlock.java +++ /dev/null @@ -1,81 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.server.gui.IUpdatePlayerListBox; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.ModBlocks; - -public class TESpectralBlock extends TileEntity implements IUpdatePlayerListBox -{ - private int ticksRemaining; - - public TESpectralBlock() - { - ticksRemaining = 0; - } - - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - - ticksRemaining = par1NBTTagCompound.getInteger("ticksRemaining"); - } - - @Override - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - - par1NBTTagCompound.setInteger("ticksRemaining", ticksRemaining); - } - - @Override - public void update() - { - if (worldObj.isRemote) - { - return; - } - - this.ticksRemaining--; - - if (this.ticksRemaining <= 0) - { - worldObj.setBlockToAir(pos); - } - } - - public static boolean createSpectralBlockAtLocation(World world, BlockPos pos, int duration) - { - if (!world.isAirBlock(pos)) - { - return false; - } - - world.setBlockState(pos, ModBlocks.spectralBlock.getDefaultState()); - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TESpectralBlock) - { - ((TESpectralBlock) tile).setDuration(duration); - return true; - } - - return false; - } - - public void setDuration(int dur) - { - this.ticksRemaining = dur; - } - - public void resetDuration(int dur) - { - if (this.ticksRemaining < dur) - { - this.ticksRemaining = dur; - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpectralContainer.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpectralContainer.java deleted file mode 100644 index 5936d83f..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpectralContainer.java +++ /dev/null @@ -1,149 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.server.gui.IUpdatePlayerListBox; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.fluids.IFluidBlock; -import WayofTime.alchemicalWizardry.ModBlocks; - -public class TESpectralContainer extends TileEntity implements IUpdatePlayerListBox -{ - private ItemStack[] inv; - - private int ticksRemaining; - - public TESpectralContainer() - { - this.inv = new ItemStack[1]; - - ticksRemaining = 0; - } - - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - NBTTagList tagList = par1NBTTagCompound.getTagList("Inventory", Constants.NBT.TAG_COMPOUND); - - for (int i = 0; i < tagList.tagCount(); i++) - { - NBTTagCompound tag = tagList.getCompoundTagAt(i); - int slot = tag.getByte("Slot"); - - if (slot >= 0 && slot < inv.length) - { - inv[slot] = ItemStack.loadItemStackFromNBT(tag); - } - } - - ticksRemaining = par1NBTTagCompound.getInteger("ticksRemaining"); - } - - @Override - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - NBTTagList itemList = new NBTTagList(); - - for (int i = 0; i < inv.length; i++) - { - if (inv[i] != null) - { - NBTTagCompound tag = new NBTTagCompound(); - tag.setByte("Slot", (byte) i); - inv[i].writeToNBT(tag); - itemList.appendTag(tag); - } - } - - par1NBTTagCompound.setTag("Inventory", itemList); - par1NBTTagCompound.setInteger("ticksRemaining", ticksRemaining); - } - - @Override - public void update() - { - this.ticksRemaining--; - - if (this.ticksRemaining <= 0) - { - this.returnContainedBlock(); - } - } - - public static boolean createSpectralBlockAtLocation(World world, BlockPos pos, int duration) - { - IBlockState state = world.getBlockState(pos); - Block block = state.getBlock(); - - if (block == null) - { - return false; - } - - if (world.getTileEntity(pos) == null || block instanceof IFluidBlock) - { - int meta = block.getMetaFromState(state); - ItemStack item = new ItemStack(block, 1, meta); - - world.setBlockState(pos, ModBlocks.blockSpectralContainer.getDefaultState()); - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TESpectralContainer) - { - ((TESpectralContainer) tile).setContainedItem(item); - ((TESpectralContainer) tile).setDuration(duration); - return true; - } - } - - return false; - } - - public void setDuration(int dur) - { - this.ticksRemaining = dur; - } - - public void resetDuration(int dur) - { - if (this.ticksRemaining < dur) - { - this.ticksRemaining = dur; - } - } - - public void setContainedItem(ItemStack item) - { - this.inv[0] = item; - } - - public void returnContainedBlock() - { - ItemStack item = this.inv[0]; - if (item != null) - { - if (item.getItem() instanceof ItemBlock) - { - Block block = ((ItemBlock) item.getItem()).getBlock(); - int meta = item.getItemDamage(); - - if (block != null) - { - this.worldObj.setBlockState(pos, block.getStateFromMeta(meta), 6); - } - } - - } else - { - this.worldObj.setBlockToAir(pos); - } - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellBlock.java deleted file mode 100644 index 278c943a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellBlock.java +++ /dev/null @@ -1,48 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.tile.ISpellTile; - -public abstract class TESpellBlock extends TEOrientable implements ISpellTile -{ - @Override - public void modifySpellParadigm(SpellParadigm parad) - { - this.applySpellChange(parad); - TileEntity tile = this.getTileAtOutput(); - if (tile instanceof TESpellBlock) - { - TESpellBlock outputBlock = (TESpellBlock) tile; - outputBlock.modifySpellParadigm(parad); - } - } - - protected abstract void applySpellChange(SpellParadigm parad); - - public TESpellBlock getTileAtOutput() - { - EnumFacing output = this.getOutputDirection(); - - TileEntity tile = worldObj.getTileEntity(pos.add(output.getDirectionVec())); - - if (tile instanceof TESpellBlock && ((TESpellBlock) tile).canInputRecieveOutput(output)) - { - return (TESpellBlock) tile; - } - - return null; - } - - public boolean canInputRecieve() - { - return true; - } - - @Override - public boolean canInputRecieveOutput(EnumFacing output) - { - return this.canInputRecieve() && this.getInputDirection().getOpposite() == output; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellEffectBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellEffectBlock.java deleted file mode 100644 index da988b1a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellEffectBlock.java +++ /dev/null @@ -1,48 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellType; -import WayofTime.alchemicalWizardry.api.spell.SpellEffect; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; - -public class TESpellEffectBlock extends TESpellBlock -{ - @Override - protected void applySpellChange(SpellParadigm parad) - { - parad.addBufferedEffect(this.getSpellEffect()); - } - - public SpellEffect getSpellEffect() - { - int meta = this.getBlockMetadata(); - switch (meta) - { - case 0: - return new SpellEffect(ComplexSpellType.FIRE); - case 1: - return new SpellEffect(ComplexSpellType.ICE); - case 2: - return new SpellEffect(ComplexSpellType.WIND); - case 3: - return new SpellEffect(ComplexSpellType.EARTH); - } - return new SpellEffect(ComplexSpellType.FIRE); - } - - @Override - public String getResourceLocationForMeta(int meta) - { - switch (meta) - { - case 0: - return "alchemicalwizardry:textures/models/SpellEffectFire.png"; - case 1: - return "alchemicalwizardry:textures/models/SpellEffectIce.png"; - case 2: - return "alchemicalwizardry:textures/models/SpellEffectWind.png"; - case 3: - return "alchemicalwizardry:textures/models/SpellEffectEarth.png"; - } - return ""; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellEnhancementBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellEnhancementBlock.java deleted file mode 100644 index 13aaf122..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellEnhancementBlock.java +++ /dev/null @@ -1,169 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import WayofTime.alchemicalWizardry.api.spell.SpellEnhancement; -import WayofTime.alchemicalWizardry.api.spell.SpellEnhancementCost; -import WayofTime.alchemicalWizardry.api.spell.SpellEnhancementPotency; -import WayofTime.alchemicalWizardry.api.spell.SpellEnhancementPower; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; - -public class TESpellEnhancementBlock extends TESpellBlock -{ - @Override - protected void applySpellChange(SpellParadigm parad) - { - int i = -1; - - switch (this.enhancementType()) - { - case 0: - i = parad.getBufferedEffectPower(); - break; - case 1: - i = parad.getBufferedEffectCost(); - break; - case 2: - i = parad.getBufferedEffectPotency(); - break; - } - - if (i != -1 && i < this.getLimit()) - { - parad.applyEnhancement(getSpellEnhancement()); - } else if (i < this.getLimit()) - { - this.doBadStuff(); - } - } - - public SpellEnhancement getSpellEnhancement() - { - int meta = this.getBlockMetadata(); - switch (meta) - { - case 0: - case 1: - case 2: - case 3: - case 4: - return new SpellEnhancementPower(); - case 5: - case 6: - case 7: - case 8: - case 9: - return new SpellEnhancementCost(); - case 10: - case 11: - case 12: - case 13: - case 14: - return new SpellEnhancementPotency(); - } - return new SpellEnhancementCost(); - } - - public int getLimit() - { - int meta = this.getBlockMetadata(); - switch (meta) - { - case 0: - return 1; - case 1: - return 2; - case 2: - return 3; - case 3: - return 4; - case 4: - return 5; - case 5: - return 1; - case 6: - return 2; - case 7: - return 3; - case 8: - return 4; - case 9: - return 5; - case 10: - return 1; - case 11: - return 2; - case 12: - return 3; - case 13: - return 4; - case 14: - return 5; - } - return 0; - } - - public int enhancementType() //0 is power, 1 is cost, 2 is potency - { - int meta = this.getBlockMetadata(); - switch (meta) - { - case 0: - case 1: - case 2: - case 3: - case 4: - return 0; - case 5: - case 6: - case 7: - case 8: - case 9: - return 1; - case 10: - case 11: - case 12: - case 13: - case 14: - return 2; - } - return 1; - } - - public void doBadStuff() - { - - } - - @Override - public String getResourceLocationForMeta(int meta) - { - switch (meta) - { - case 0: - return "alchemicalwizardry:textures/models/SpellEnhancementPower1.png"; - case 1: - return "alchemicalwizardry:textures/models/SpellEnhancementPower2.png"; - case 2: - return "alchemicalwizardry:textures/models/SpellEnhancementPower3.png"; - case 3: - return "alchemicalwizardry:textures/models/SpellEnhancementPower4.png"; - case 5: - return "alchemicalwizardry:textures/models/SpellEnhancementCost1.png"; - case 6: - return "alchemicalwizardry:textures/models/SpellEnhancementCost2.png"; - case 7: - return "alchemicalwizardry:textures/models/SpellEnhancementCost3.png"; - case 8: - return "alchemicalwizardry:textures/models/SpellEnhancementCost4.png"; - case 10: - return "alchemicalwizardry:textures/models/SpellEnhancementPotency1.png"; - case 11: - return "alchemicalwizardry:textures/models/SpellEnhancementPotency2.png"; - case 12: - return "alchemicalwizardry:textures/models/SpellEnhancementPotency3.png"; - case 13: - return "alchemicalwizardry:textures/models/SpellEnhancementPotency4.png"; - - } - return "alchemicalwizardry:textures/models/SpellEnhancementPower1.png"; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellModifierBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellModifierBlock.java deleted file mode 100644 index b1a3e1fa..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellModifierBlock.java +++ /dev/null @@ -1,47 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import WayofTime.alchemicalWizardry.api.spell.ComplexSpellModifier; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; - -public class TESpellModifierBlock extends TESpellBlock -{ - @Override - protected void applySpellChange(SpellParadigm parad) - { - parad.modifyBufferedEffect(this.getSpellModifier()); - } - - public ComplexSpellModifier getSpellModifier() - { - int meta = this.getBlockMetadata(); - switch (meta) - { - case 0: - return ComplexSpellModifier.DEFAULT; - case 1: - return ComplexSpellModifier.OFFENSIVE; - case 2: - return ComplexSpellModifier.DEFENSIVE; - case 3: - return ComplexSpellModifier.ENVIRONMENTAL; - } - return ComplexSpellModifier.DEFAULT; - } - - @Override - public String getResourceLocationForMeta(int meta) - { - switch (meta) - { - case 0: - return "alchemicalwizardry:textures/models/SpellModifierDefault.png"; - case 1: - return "alchemicalwizardry:textures/models/SpellModifierOffensive.png"; - case 2: - return "alchemicalwizardry:textures/models/SpellModifierDefensive.png"; - case 3: - return "alchemicalwizardry:textures/models/SpellModifierEnvironmental.png"; - } - return "alchemicalwizardry:textures/models/SpellModifierDefault.png"; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellParadigmBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellParadigmBlock.java deleted file mode 100644 index c60c5ebc..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellParadigmBlock.java +++ /dev/null @@ -1,75 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigm; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmMelee; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmProjectile; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmSelf; -import WayofTime.alchemicalWizardry.api.spell.SpellParadigmTool; -import WayofTime.alchemicalWizardry.api.tile.ISpellParadigmTile; - -public class TESpellParadigmBlock extends TESpellBlock implements ISpellParadigmTile -{ - public SpellParadigm getSpellParadigm() - { - int meta = this.getBlockMetadata(); - switch (meta) - { - case 0: - return new SpellParadigmProjectile(); - case 1: - return new SpellParadigmSelf(); - case 2: - return new SpellParadigmMelee(); - case 3: - return new SpellParadigmTool(); - } - return new SpellParadigmSelf(); - } - - @Override - protected void applySpellChange(SpellParadigm parad) {} - - public boolean canInputRecieve() - { - return false; - } - - @Override - public void castSpell(World world, EntityPlayer entity, ItemStack spellCasterStack) - { - SpellParadigm parad = this.getSpellParadigm(); - this.modifySpellParadigm(parad); - parad.applyAllSpellEffects(); - parad.castSpell(world, entity, spellCasterStack); - } - - @Override - public String getResourceLocationForMeta(int meta) - { - switch (meta) - { - case 0: - return "alchemicalwizardry:textures/models/SpellParadigmProjectile.png"; - case 1: - return "alchemicalwizardry:textures/models/SpellParadigmSelf.png"; - case 2: - return "alchemicalwizardry:textures/models/SpellParadigmMelee.png"; - case 3: - return "alchemicalwizardry:textures/models/SpellParadigmTool.png"; - } - return "alchemicalwizardry:textures/models/SpellParadigmProjectile.png"; - } - - @Override - public void setInputDirection(EnumFacing direction) {} - - @Override - public EnumFacing getInputDirection() - { - return EnumFacing.WEST; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellTable.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellTable.java deleted file mode 100644 index d90314d9..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellTable.java +++ /dev/null @@ -1,126 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntitySkull; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.common.spell.simple.HomSpell; -import WayofTime.alchemicalWizardry.common.spell.simple.HomSpellRegistry; - -public class TESpellTable extends TileEntity -{ - public boolean canCastSpell() - { - return true; - } - - public int getCostForSpell() - { - HomSpell spell = getSpell(); - - if (spell != null) - { - switch (getModifiedParadigm()) - { - case 0: - return spell.getOffensiveRangedEnergy(); - - case 1: - return spell.getOffensiveMeleeEnergy(); - - case 2: - return spell.getDefensiveEnergy(); - - case 3: - return spell.getEnvironmentalEnergy(); - } - } - - return 0; - } - - public int castSpell(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - HomSpell spell = getSpell(); - - if (spell != null) - { - switch (getModifiedParadigm()) - { - case 0: - spell.onOffensiveRangedRightClick(par1ItemStack, par2World, par3EntityPlayer); - return spell.getOffensiveRangedEnergy(); - - case 1: - spell.onOffensiveMeleeRightClick(par1ItemStack, par2World, par3EntityPlayer); - return spell.getOffensiveMeleeEnergy(); - - case 2: - spell.onDefensiveRightClick(par1ItemStack, par2World, par3EntityPlayer); - return spell.getDefensiveEnergy(); - - case 3: - spell.onEnvironmentalRightClick(par1ItemStack, par2World, par3EntityPlayer); - return spell.getEnvironmentalEnergy(); - } - } - - return 0; - } - - public HomSpell getSpell() - { - for(EnumFacing face : EnumFacing.HORIZONTALS) - { - TileEntity tileEntity = worldObj.getTileEntity(pos.offset(face)); - - if (tileEntity instanceof TEAltar) - { - ItemStack itemStack = ((TEAltar) tileEntity).getStackInSlot(0); - - if (itemStack != null) - { - HomSpell spell = HomSpellRegistry.getSpellForItemStack(itemStack); - - if (spell != null) - { - return spell; - } - } - } - } - - return null; - } - - public int getModifiedParadigm() - { - //TODO change so that it works with a Tile Entity for a custom head or whatnot - - TileEntity tileEntity = worldObj.getTileEntity(pos.offsetUp()); - - if (tileEntity instanceof TileEntitySkull) - { - int skullType = ((TileEntitySkull) tileEntity).getSkullType(); - - switch (skullType) - { - case 0: - return 0; - - case 1: - return 1; - - case 2: - return 2; - - case 4: - return 3; - } - } - - return -1; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TETeleposer.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TETeleposer.java deleted file mode 100644 index 018f3244..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TETeleposer.java +++ /dev/null @@ -1,268 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import java.util.Iterator; -import java.util.List; - -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.Packet; -import net.minecraft.server.gui.IUpdatePlayerListBox; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import WayofTime.alchemicalWizardry.common.NewPacketHandler; -import WayofTime.alchemicalWizardry.common.block.BlockTeleposer; -import WayofTime.alchemicalWizardry.common.items.TelepositionFocus; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; - -public class TETeleposer extends TEInventory implements IUpdatePlayerListBox -{ - public static final int sizeInv = 1; - - private int resultID; - private int resultDamage; - private int previousInput; - - private boolean isActive; - - public TETeleposer() - { - super(sizeInv); - resultID = 0; - resultDamage = 0; - isActive = false; - previousInput = 0; - } - - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - - resultID = par1NBTTagCompound.getInteger("resultID"); - resultDamage = par1NBTTagCompound.getInteger("resultDamage"); - isActive = par1NBTTagCompound.getBoolean("isActive"); - previousInput = par1NBTTagCompound.getInteger("previousInput"); - } - - @Override - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - - par1NBTTagCompound.setInteger("resultID", resultID); - par1NBTTagCompound.setInteger("resultDamage", resultDamage); - par1NBTTagCompound.setBoolean("isActive", isActive); - par1NBTTagCompound.setInteger("previousInput", previousInput); - } - - @Override - public String getName() - { - return "TETeleposer"; - } - - @Override - public int getInventoryStackLimit() - { - return 1; - } - - //Logic for the actual block is under here - @Override - public void update() - { - if (worldObj.isRemote) - { - return; - } - - int currentInput = worldObj.getStrongPower(pos); - - if (previousInput == 0 && currentInput != 0) - { - ItemStack focus = this.getStackInSlot(0); - - if (focus != null && focus.getItem() instanceof TelepositionFocus) - { - TelepositionFocus focusItem = (TelepositionFocus) (focus.getItem()); - int xf = focusItem.xCoord(focus); - int yf = focusItem.yCoord(focus); - int zf = focusItem.zCoord(focus); - BlockPos posF = focusItem.getBlockPos(focus); - - World worldF = focusItem.getWorld(focus); - int damage = (int) (0.5f * Math.sqrt(pos.distanceSq(posF))); - int focusLevel = focusItem.getFocusLevel(); - int transportCount = 0; - int entityCount = 0; - - if (worldF != null && worldF.getTileEntity(posF) instanceof TETeleposer && !worldF.getTileEntity(posF).equals(this)) - { - //Prime the teleportation - int d0 = focusLevel - 1; - AxisAlignedBB axisalignedbb1 = new AxisAlignedBB(pos.add(0, 1, 0), pos.add(1, 2, 1)).expand(d0, d0, d0); -// axisalignedbb1.maxY = Math.min((double) this.worldObj.getHeight(), pos.getY() + 2 + d0 + d0); - List list1 = this.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb1); - Iterator iterator1 = list1.iterator(); - EntityLivingBase entityplayer1; - - while (iterator1.hasNext()) - { - entityplayer1 = (EntityLivingBase) iterator1.next(); - entityCount++; - } - - AxisAlignedBB axisalignedbb2 = new AxisAlignedBB(xf-0.5, yf + d0 + 0.5, zf-0.5, xf + 0.5, yf + 1.5 + d0, zf+0.5).expand(d0, d0, d0); - List list2 = worldF.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb2); - Iterator iterator2 = list2.iterator(); - EntityLivingBase entityplayer2; - - while (iterator2.hasNext()) - { - entityplayer2 = (EntityLivingBase) iterator2.next(); - entityCount++; - } - - if (SoulNetworkHandler.canSyphonInContainer(focus, damage * (focusLevel * 2 - 1) * (focusLevel * 2 - 1) * (focusLevel * 2 - 1) + damage * entityCount)) - { - for (int k = 0; k <= (focusLevel * 2 - 2); k++) - for (int i = -(focusLevel - 1); i <= (focusLevel - 1); i++) - { - for (int j = -(focusLevel - 1); j <= (focusLevel - 1); j++) - { - { - if (BlockTeleposer.swapBlocks(this, worldObj, worldF, pos.add(i, 1 + k, j), posF.add(i, 1 + k, j))) - { - transportCount++; - } - } - } - } - - if (!worldF.equals(worldObj)) - { - entityCount = 0; - } - - SoulNetworkHandler.syphonFromNetworkWhileInContainer(focus, damage * transportCount + damage * entityCount); - //Teleport - - if (worldF.equals(worldObj)) - { - iterator1 = list1.iterator(); - iterator2 = list2.iterator(); - - while (iterator1.hasNext()) - { - entityplayer1 = (EntityLivingBase) iterator1.next(); - entityplayer1.worldObj = worldF; - entityplayer1.setPositionAndUpdate(entityplayer1.posX - pos.getX() + xf, entityplayer1.posY - pos.getY() + yf, entityplayer1.posZ - pos.getZ() + zf); - } - - while (iterator2.hasNext()) - { - entityplayer2 = (EntityLivingBase) iterator2.next(); - entityplayer2.worldObj = worldF; - entityplayer2.setPositionAndUpdate(entityplayer2.posX + pos.getX() - xf, entityplayer2.posY + pos.getY() - yf, entityplayer2.posZ + pos.getZ() - zf); - } - }else - { - iterator1 = list1.iterator(); - iterator2 = list2.iterator(); - - while (iterator1.hasNext()) - { - entityplayer1 = (EntityLivingBase) iterator1.next(); - SpellHelper.teleportEntityToDim(worldObj, worldF.provider.getDimensionId(), entityplayer1.posX - pos.getX() + xf, entityplayer1.posY - pos.getY() + yf, entityplayer1.posZ - pos.getZ() + zf, entityplayer1); -// entityplayer1.worldObj = worldF; -// entityplayer1.setPositionAndUpdate(entityplayer1.posX - pos.getX() + xf, entityplayer1.posY - pos.getY() + yf, entityplayer1.posZ - pos.getZ() + zf); - } - - while (iterator2.hasNext()) - { - entityplayer2 = (EntityLivingBase) iterator2.next(); - SpellHelper.teleportEntityToDim(worldF, worldObj.provider.getDimensionId(), entityplayer2.posX + pos.getX() - xf, entityplayer2.posY + pos.getY() - yf, entityplayer2.posZ + pos.getZ() - zf, entityplayer2); -// entityplayer2.worldObj = worldF; -// entityplayer2.setPositionAndUpdate(entityplayer2.posX + pos.getX() - xf, entityplayer2.posY + pos.getY() - yf, entityplayer2.posZ + pos.getZ() - zf); - } - } - } - } - } - } - - previousInput = currentInput; - } - - public void setActive() - { - isActive = false; - } - - public boolean isActive() - { - return isActive; - } - - @Override - public Packet getDescriptionPacket() - { - return NewPacketHandler.getPacket(this); - } - - public void handlePacketData(int[] intData) - { - if (intData == null) - { - return; - } - - if (intData.length == 3) - { - for (int i = 0; i < 1; i++) - { - if (intData[i * 3 + 2] != 0) - { - ItemStack is = new ItemStack(Item.getItemById(intData[i * 3]), intData[i * 3 + 2], intData[i * 3 + 1]); - inv[i] = is; - } else - { - inv[i] = null; - } - } - } - } - - public int[] buildIntDataList() - { - int[] sortList = new int[3]; //1 * 3 - int pos = 0; - - for (ItemStack is : inv) - { - if (is != null) - { - sortList[pos++] = Item.getIdFromItem(is.getItem()); - sortList[pos++] = is.getItemDamage(); - sortList[pos++] = is.stackSize; - } else - { - sortList[pos++] = 0; - sortList[pos++] = 0; - sortList[pos++] = 0; - } - } - - return sortList; - } - - @Override - public boolean isItemValidForSlot(int slot, ItemStack itemstack) - { - return itemstack.getItem() instanceof TelepositionFocus; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/container/ContainerAltar.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/container/ContainerAltar.java deleted file mode 100644 index ebb64d8e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/container/ContainerAltar.java +++ /dev/null @@ -1,91 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity.container; - -import WayofTime.alchemicalWizardry.common.tileEntity.TEAltar; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; - -public class ContainerAltar extends Container -{ - protected TEAltar tileEntity; - - public ContainerAltar(InventoryPlayer inventoryPlayer, TEAltar te) - { - tileEntity = te; - - for (int i = 0; i < 3; i++) - { - for (int j = 0; j < 3; j++) - { - addSlotToContainer(new Slot(tileEntity, j + i * 3, 62 + j * 18, 17 + i * 18)); - } - } - - bindPlayerInventory(inventoryPlayer); - } - - @Override - public boolean canInteractWith(EntityPlayer entityplayer) - { - return tileEntity.isUseableByPlayer(entityplayer); - } - - protected void bindPlayerInventory(InventoryPlayer inventoryPlayer) - { - for (int i = 0; i < 3; i++) - { - for (int j = 0; j < 9; j++) - { - addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9, - 8 + j * 18, 84 + i * 18)); - } - } - - for (int i = 0; i < 9; i++) - { - addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 142)); - } - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer player, int slot) - { - ItemStack stack = null; - Slot slotObject = (Slot) inventorySlots.get(slot); - if (slotObject != null && slotObject.getHasStack()) - { - ItemStack stackInSlot = slotObject.getStack(); - stack = stackInSlot.copy(); - if (slot < 9) - { - if (!this.mergeItemStack(stackInSlot, 0, 35, true)) - { - return null; - } - } - else if (!this.mergeItemStack(stackInSlot, 0, 9, false)) - { - return null; - } - - if (stackInSlot.stackSize == 0) - { - slotObject.putStack(null); - } else - { - slotObject.onSlotChanged(); - } - - if (stackInSlot.stackSize == stack.stackSize) - { - return null; - } - - slotObject.onPickupFromSlot(player, stackInSlot); - } - - return stack; - } -} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/container/ContainerTeleposer.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/container/ContainerTeleposer.java deleted file mode 100644 index aa677304..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/container/ContainerTeleposer.java +++ /dev/null @@ -1,104 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity.container; - -import WayofTime.alchemicalWizardry.common.items.TelepositionFocus; -import WayofTime.alchemicalWizardry.common.tileEntity.TETeleposer; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; - -public class ContainerTeleposer extends Container -{ - protected TETeleposer tileEntity; - - public ContainerTeleposer(InventoryPlayer inventoryPlayer, TETeleposer te) - { - tileEntity = te; - addSlotToContainer(new SlotTeleposer(te, 0, 80, 15)); - bindPlayerInventory(inventoryPlayer); - } - - @Override - public boolean canInteractWith(EntityPlayer player) - { - return tileEntity.isUseableByPlayer(player); - } - - protected void bindPlayerInventory(InventoryPlayer inventoryPlayer) - { - for (int i = 0; i < 3; i++) - { - for (int j = 0; j < 9; j++) - { - addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9, 8 + j * 18, 39 + i * 18)); - } - } - - for (int i = 0; i < 9; i++) - { - addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 97)); - } - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer player, int slot) - { - ItemStack stack = null; - Slot slotObject = (Slot) inventorySlots.get(slot); - int slots = inventorySlots.size(); - - if (slotObject != null && slotObject.getHasStack()) - { - ItemStack stackInSlot = slotObject.getStack(); - stack = stackInSlot.copy(); - - if (stack.getItem() instanceof TelepositionFocus) - { - if (slot <= slots) - { - if (!this.mergeItemStack(stackInSlot, 0, slots, false)) - { - return null; - } - } - else if (!this.mergeItemStack(stackInSlot, slots, 36 + slots, false)) - { - return null; - } - } - - if (stackInSlot.stackSize == 0) - { - slotObject.putStack(null); - } else - { - slotObject.onSlotChanged(); - } - - if (stackInSlot.stackSize == stack.stackSize) - { - return null; - } - - slotObject.onPickupFromSlot(player, stackInSlot); - } - - return stack; - } - - private class SlotTeleposer extends Slot - { - public SlotTeleposer(IInventory inventory, int slotIndex, int x, int y) - { - super(inventory, slotIndex, x, y); - } - - @Override - public boolean isItemValid(ItemStack itemStack) - { - return itemStack.getItem() instanceof TelepositionFocus; - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/container/ContainerWritingTable.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/container/ContainerWritingTable.java deleted file mode 100644 index 23bc01cc..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/container/ContainerWritingTable.java +++ /dev/null @@ -1,94 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity.container; - -import WayofTime.alchemicalWizardry.api.items.interfaces.IBloodOrb; -import WayofTime.alchemicalWizardry.common.tileEntity.TEChemistrySet; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; - -public class ContainerWritingTable extends Container -{ - protected TEChemistrySet tileEntity; - - public ContainerWritingTable(InventoryPlayer inventoryPlayer, TEChemistrySet te) - { - tileEntity = te; - addSlotToContainer(new Slot(tileEntity, 0, 152, 110)); - addSlotToContainer(new Slot(tileEntity, 1, 80, 18)); - addSlotToContainer(new Slot(tileEntity, 2, 33, 52)); - addSlotToContainer(new Slot(tileEntity, 3, 51, 110)); - addSlotToContainer(new Slot(tileEntity, 4, 109, 110)); - addSlotToContainer(new Slot(tileEntity, 5, 127, 52)); - addSlotToContainer(new Slot(tileEntity, 6, 80, 67)); - bindPlayerInventory(inventoryPlayer); - } - - @Override - public boolean canInteractWith(EntityPlayer player) - { - return tileEntity.isUseableByPlayer(player); - } - - protected void bindPlayerInventory(InventoryPlayer inventoryPlayer) - { - for (int i = 0; i < 3; i++) - { - for (int j = 0; j < 9; j++) - { - addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9, 8 + j * 18, 140 + i * 18)); - } - } - - for (int i = 0; i < 9; i++) - { - addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 198)); - } - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer player, int slot) - { - ItemStack stack = null; - Slot slotObject = (Slot) inventorySlots.get(slot); - if (slotObject != null && slotObject.getHasStack()) - { - ItemStack stackInSlot = slotObject.getStack(); - stack = stackInSlot.copy(); - if (slot <= 6) - { - if (!this.mergeItemStack(stackInSlot, 7, 43, true)) - { - return null; - } - } else if (stack.getItem() instanceof IBloodOrb) - { - if (!this.mergeItemStack(stackInSlot, 0, 1, false)) - { - return null; - } - } else if (!this.mergeItemStack(stackInSlot, 1, 6, false)) - { - return null; - } - - if (stackInSlot.stackSize == 0) - { - slotObject.putStack(null); - } else - { - slotObject.onSlotChanged(); - } - - if (stackInSlot.stackSize == stack.stackSize) - { - return null; - } - - slotObject.onPickupFromSlot(player, stackInSlot); - } - - return stack; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/gui/GuiChemistrySet.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/gui/GuiChemistrySet.java deleted file mode 100644 index e1a05602..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/gui/GuiChemistrySet.java +++ /dev/null @@ -1,43 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity.gui; - -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; - -import org.lwjgl.opengl.GL11; - -import WayofTime.alchemicalWizardry.common.tileEntity.TEChemistrySet; -import WayofTime.alchemicalWizardry.common.tileEntity.container.ContainerWritingTable; - -public class GuiChemistrySet extends GuiContainer -{ - public GuiChemistrySet(InventoryPlayer inventoryPlayer, TEChemistrySet tileEntity) - { - super(new ContainerWritingTable(inventoryPlayer, tileEntity)); - xSize = 176; - ySize = 222; - } - - @Override - protected void drawGuiContainerForegroundLayer(int param1, int param2) - { - //draw text and stuff here - //the parameters for drawString are: string, x, y, color - fontRendererObj.drawString("Alchemic Chemistry Set", 8, 6, 4210752); - //draws "Inventory" or your regional equivalent - fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 8, 130, 4210752); - } - - @Override - protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) - { - //draw your Gui here, only thing you need to change is the path - ResourceLocation test = new ResourceLocation("alchemicalwizardry", "gui/WritingTable.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.getTextureManager().bindTexture(test); - int x = (width - xSize) / 2; - int y = (height - ySize) / 2; - this.drawTexturedModalRect(x, y, 0, 0, xSize, ySize); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/gui/GuiHandler.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/gui/GuiHandler.java deleted file mode 100644 index 8245881e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/gui/GuiHandler.java +++ /dev/null @@ -1,88 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity.gui; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.network.IGuiHandler; -import WayofTime.alchemicalWizardry.common.items.sigil.holding.ContainerHolding; -import WayofTime.alchemicalWizardry.common.items.sigil.holding.GuiHolding; -import WayofTime.alchemicalWizardry.common.items.sigil.holding.InventoryHolding; -import WayofTime.alchemicalWizardry.common.tileEntity.TETeleposer; -import WayofTime.alchemicalWizardry.common.tileEntity.TEChemistrySet; -import WayofTime.alchemicalWizardry.common.tileEntity.container.ContainerTeleposer; -import WayofTime.alchemicalWizardry.common.tileEntity.container.ContainerWritingTable; - -public class GuiHandler implements IGuiHandler -{ - //returns an instance of the Container you made earlier - @Override - public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) - { - TileEntity tileEntity; - BlockPos pos = new BlockPos(x, y, z); - - switch (id) - { - case 0: - tileEntity = world.getTileEntity(pos); - - if (tileEntity instanceof TEChemistrySet) - { - return new ContainerWritingTable(player.inventory, (TEChemistrySet) tileEntity); - } - - case 1: - tileEntity = world.getTileEntity(pos); - - if (tileEntity instanceof TETeleposer) - { - return new ContainerTeleposer(player.inventory, (TETeleposer) tileEntity); - } - - case 3: - return new ContainerHolding(player, new InventoryHolding(player.getHeldItem())); - } - - return null; - } - - //returns an instance of the Gui you made earlier - @Override - public Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) - { - TileEntity tileEntity; - BlockPos pos = new BlockPos(x, y, z); - - switch (id) - { - case 0: - tileEntity = world.getTileEntity(pos); - - if (tileEntity instanceof TEChemistrySet) - { - return new GuiChemistrySet(player.inventory, (TEChemistrySet) tileEntity); - } - - break; - - case 1: - tileEntity = world.getTileEntity(pos); - - if (tileEntity instanceof TETeleposer) - { - return new GuiTeleposer(player.inventory, (TETeleposer) tileEntity); - } - - break; - - case 2: - - - case 3: - return new GuiHolding(player, new InventoryHolding(player.getHeldItem())); - } - - return null; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/gui/GuiTeleposer.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/gui/GuiTeleposer.java deleted file mode 100644 index 050849d6..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/gui/GuiTeleposer.java +++ /dev/null @@ -1,40 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity.gui; - -import WayofTime.alchemicalWizardry.common.tileEntity.TETeleposer; -import WayofTime.alchemicalWizardry.common.tileEntity.container.ContainerTeleposer; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; -import org.lwjgl.opengl.GL11; - -public class GuiTeleposer extends GuiContainer -{ - public GuiTeleposer(InventoryPlayer inventoryPlayer, TETeleposer tileEntity) - { - super(new ContainerTeleposer(inventoryPlayer, tileEntity)); - xSize = 176; - ySize = 121; - } - - @Override - protected void drawGuiContainerForegroundLayer(int param1, int param2) - { - //the parameters for drawString are: string, x, y, color - fontRendererObj.drawString("Teleposer", 64, 5, 4210752); - //draws "Inventory" or your regional equivalent - fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 8, 29, 4210752); - } - - @Override - protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) - { - //draw your Gui here, only thing you need to change is the path - ResourceLocation test = new ResourceLocation("alchemicalwizardry", "gui/Teleposer.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.getTextureManager().bindTexture(test); - int x = (width - xSize) / 2; - int y = (height - ySize) / 2; - this.drawTexturedModalRect(x, y, 0, 0, xSize, ySize); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/Alchemy.java b/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/Alchemy.java deleted file mode 100644 index 1cf2a2a3..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/Alchemy.java +++ /dev/null @@ -1,126 +0,0 @@ -//package WayofTime.alchemicalWizardry.common.tweaker; -// -//import static WayofTime.alchemicalWizardry.common.tweaker.MTHelper.toStack; -//import static WayofTime.alchemicalWizardry.common.tweaker.MTHelper.toStacks; -//import net.minecraft.item.ItemStack; -//import WayofTime.alchemicalWizardry.api.alchemy.AlchemyRecipe; -//import WayofTime.alchemicalWizardry.api.alchemy.AlchemyRecipeRegistry; -// -///** -// * MineTweaker3 Alchemy Recipe Handler by joshie * -// */ -//@ZenClass("mods.bloodmagic.Alchemy") -//public class Alchemy -//{ -// @ZenMethod -// public static void addRecipe(IItemStack output, IItemStack[] input, int tier, int lp) { -// MineTweakerAPI.apply(new Add(new AlchemyRecipe(toStack(output), (int) (((double) lp) / 100), toStacks(input), tier))); -// } -// -// private static class Add implements IUndoableAction -// { -// private final AlchemyRecipe recipe; -// -// public Add(AlchemyRecipe recipe) -// { -// this.recipe = recipe; -// } -// -// @Override -// public void apply() -// { -// AlchemyRecipeRegistry.recipes.add(recipe); -// } -// -// @Override -// public boolean canUndo() -// { -// return AlchemyRecipeRegistry.recipes != null; -// } -// -// @Override -// public void undo() -// { -// AlchemyRecipeRegistry.recipes.remove(recipe); -// } -// -// @Override -// public String describe() -// { -// return "Adding Alchemy Recipe for " + ((AlchemyRecipe) recipe).getResult().getDisplayName(); -// } -// -// @Override -// public String describeUndo() -// { -// return "Removing Alchemy Recipe for " + ((AlchemyRecipe) recipe).getResult().getDisplayName(); -// } -// -// @Override -// public Object getOverrideKey() -// { -// return null; -// } -// } -// -// @ZenMethod -// public static void removeRecipe(IItemStack output) { -// MineTweakerAPI.apply(new Remove(toStack(output))); -// } -// -// private static class Remove implements IUndoableAction -// { -// private final ItemStack output; -// private AlchemyRecipe recipe; -// -// public Remove(ItemStack output) -// { -// this.output = output; -// } -// -// @Override -// public void apply() -// { -// for (AlchemyRecipe r : AlchemyRecipeRegistry.recipes) -// { -// if (r.getResult() != null && r.getResult().isItemEqual(output)) -// { -// recipe = r; -// break; -// } -// } -// -// AlchemyRecipeRegistry.recipes.remove(recipe); -// } -// -// @Override -// public boolean canUndo() -// { -// return AlchemyRecipeRegistry.recipes != null && recipe != null; -// } -// -// @Override -// public void undo() -// { -// AlchemyRecipeRegistry.recipes.add(recipe); -// } -// -// @Override -// public String describe() -// { -// return "Removing Alchemy Recipe for " + output.getDisplayName(); -// } -// -// @Override -// public String describeUndo() -// { -// return "Restoring Alchemy Recipe for " + output.getDisplayName(); -// } -// -// @Override -// public Object getOverrideKey() -// { -// return null; -// } -// } -//} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/Binding.java b/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/Binding.java deleted file mode 100644 index 01384dc6..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/Binding.java +++ /dev/null @@ -1,130 +0,0 @@ -//package WayofTime.alchemicalWizardry.common.tweaker; -// -//import static WayofTime.alchemicalWizardry.common.tweaker.MTHelper.toStack; -//import minetweaker.IUndoableAction; -//import minetweaker.MineTweakerAPI; -//import minetweaker.api.item.IItemStack; -//import net.minecraft.item.ItemStack; -//import stanhebben.zenscript.annotations.ZenClass; -//import stanhebben.zenscript.annotations.ZenMethod; -//import WayofTime.alchemicalWizardry.api.bindingRegistry.BindingRecipe; -//import WayofTime.alchemicalWizardry.api.bindingRegistry.BindingRegistry; -// -///** -// * MineTweaker3 Binding Recipe Handler by joshie * -// */ -//@ZenClass("mods.bloodmagic.Binding") -//public class Binding -//{ -// @ZenMethod -// public static void addRecipe(IItemStack input, IItemStack output) { -// MineTweakerAPI.apply(new Add(new BindingRecipe(toStack(output), toStack(input)))); -// } -// -// private static class Add implements IUndoableAction -// { -// private final BindingRecipe recipe; -// -// public Add(BindingRecipe recipe) -// { -// this.recipe = recipe; -// } -// -// @Override -// public void apply() -// { -// BindingRegistry.bindingRecipes.add(recipe); -// } -// -// @Override -// public boolean canUndo() -// { -// return BindingRegistry.bindingRecipes != null; -// } -// -// @Override -// public void undo() -// { -// BindingRegistry.bindingRecipes.remove(recipe); -// } -// -// @Override -// public String describe() -// { -// return "Adding Binding Recipe for " + ((BindingRecipe) recipe).getResult().getDisplayName(); -// } -// -// @Override -// public String describeUndo() -// { -// return "Removing Binding Recipe for " + ((BindingRecipe) recipe).getResult().getDisplayName(); -// } -// -// @Override -// public Object getOverrideKey() -// { -// return null; -// } -// } -// -// @ZenMethod -// public static void removeRecipe(IItemStack output) { -// MineTweakerAPI.apply(new Remove(toStack(output))); -// } -// -// private static class Remove implements IUndoableAction -// { -// private final ItemStack output; -// private BindingRecipe recipe; -// -// public Remove(ItemStack output) -// { -// this.output = output; -// } -// -// @Override -// public void apply() -// { -// for (BindingRecipe r : BindingRegistry.bindingRecipes) -// { -// if (r.getResult() != null && r.getResult().isItemEqual(output)) -// { -// recipe = r; -// break; -// } -// } -// -// BindingRegistry.bindingRecipes.remove(recipe); -// } -// -// @Override -// public boolean canUndo() -// { -// return BindingRegistry.bindingRecipes != null && recipe != null; -// } -// -// @Override -// public void undo() -// { -// BindingRegistry.bindingRecipes.add(recipe); -// } -// -// @Override -// public String describe() -// { -// return "Removing Binding Recipe for " + output.getDisplayName(); -// } -// -// @Override -// public String describeUndo() -// { -// return "Restoring Binding Recipe for " + output.getDisplayName(); -// } -// -// @Override -// public Object getOverrideKey() -// { -// return null; -// } -// } -//} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/BloodAltar.java b/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/BloodAltar.java deleted file mode 100644 index 9ca40713..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/BloodAltar.java +++ /dev/null @@ -1,133 +0,0 @@ -//package WayofTime.alchemicalWizardry.common.tweaker; -// -//import static WayofTime.alchemicalWizardry.common.tweaker.MTHelper.toStack; -//import minetweaker.IUndoableAction; -//import minetweaker.MineTweakerAPI; -//import minetweaker.api.item.IItemStack; -//import net.minecraft.item.ItemStack; -//import stanhebben.zenscript.annotations.Optional; -//import stanhebben.zenscript.annotations.ZenClass; -//import stanhebben.zenscript.annotations.ZenMethod; -//import WayofTime.alchemicalWizardry.api.altarRecipeRegistry.AltarRecipe; -//import WayofTime.alchemicalWizardry.api.altarRecipeRegistry.AltarRecipeRegistry; -// -///** -// * MineTweaker3 Blood Altar Recipe Handler by joshie * -// */ -//@ZenClass("mods.bloodmagic.Altar") -//public class BloodAltar -//{ -// @ZenMethod -// public static void addRecipe(IItemStack output, IItemStack input, int tier, int lp, @Optional int consume, @Optional int drain) { -// consume = consume > 0 ? consume : 20; -// drain = drain > 0 ? drain : 20; -// MineTweakerAPI.apply(new Add(new AltarRecipe(toStack(output), toStack(input), tier, lp, consume, drain, false))); -// } -// -// private static class Add implements IUndoableAction -// { -// private final AltarRecipe recipe; -// -// public Add(AltarRecipe recipe) -// { -// this.recipe = recipe; -// } -// -// @Override -// public void apply() -// { -// AltarRecipeRegistry.altarRecipes.add(recipe); -// } -// -// @Override -// public boolean canUndo() -// { -// return AltarRecipeRegistry.altarRecipes != null; -// } -// -// @Override -// public void undo() -// { -// AltarRecipeRegistry.altarRecipes.remove(recipe); -// } -// -// @Override -// public String describe() -// { -// return "Adding Blood Altar Recipe for " + ((AltarRecipe) recipe).getResult().getDisplayName(); -// } -// -// @Override -// public String describeUndo() -// { -// return "Removing Blood Altar Recipe for " + ((AltarRecipe) recipe).getResult().getDisplayName(); -// } -// -// @Override -// public Object getOverrideKey() -// { -// return null; -// } -// } -// -// @ZenMethod -// public static void removeRecipe(IItemStack output) { -// MineTweakerAPI.apply(new Remove(toStack(output))); -// } -// -// private static class Remove implements IUndoableAction -// { -// private final ItemStack output; -// private AltarRecipe recipe; -// -// public Remove(ItemStack output) -// { -// this.output = output; -// } -// -// @Override -// public void apply() -// { -// for (AltarRecipe r : AltarRecipeRegistry.altarRecipes) -// { -// if (r.getResult() != null && r.getResult().isItemEqual(output)) -// { -// recipe = r; -// break; -// } -// } -// -// AltarRecipeRegistry.altarRecipes.remove(recipe); -// } -// -// @Override -// public boolean canUndo() -// { -// return AltarRecipeRegistry.altarRecipes != null && recipe != null; -// } -// -// @Override -// public void undo() -// { -// AltarRecipeRegistry.altarRecipes.add(recipe); -// } -// -// @Override -// public String describe() -// { -// return "Removing Blood Altar Recipe for " + output.getDisplayName(); -// } -// -// @Override -// public String describeUndo() -// { -// return "Restoring Blood Altar Recipe for " + output.getDisplayName(); -// } -// -// @Override -// public Object getOverrideKey() -// { -// return null; -// } -// } -//} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/BloodOrb.java b/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/BloodOrb.java deleted file mode 100644 index b3af37db..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/BloodOrb.java +++ /dev/null @@ -1,147 +0,0 @@ -//package WayofTime.alchemicalWizardry.common.tweaker; -// -//import static WayofTime.alchemicalWizardry.common.tweaker.MTHelper.toObjects; -//import static WayofTime.alchemicalWizardry.common.tweaker.MTHelper.toShapedObjects; -//import static WayofTime.alchemicalWizardry.common.tweaker.MTHelper.toStack; -// -//import java.util.List; -// -//import WayofTime.alchemicalWizardry.api.items.ShapelessBloodOrbRecipe; -//import minetweaker.IUndoableAction; -//import minetweaker.MineTweakerAPI; -//import minetweaker.api.item.IIngredient; -//import minetweaker.api.item.IItemStack; -//import net.minecraft.item.ItemStack; -//import net.minecraft.item.crafting.CraftingManager; -//import net.minecraft.item.crafting.IRecipe; -//import stanhebben.zenscript.annotations.ZenClass; -//import stanhebben.zenscript.annotations.ZenMethod; -//import WayofTime.alchemicalWizardry.api.items.ShapedBloodOrbRecipe; -// -///** -// * MineTweaker3 Blood Orb Recipe Handler by joshie * -// */ -//@ZenClass("mods.bloodmagic.BloodOrb") -//public class BloodOrb -//{ -// @ZenMethod -// public static void addShaped(IItemStack output, IIngredient[][] ingredients) -// { -// MineTweakerAPI.apply(new Add(false, toStack(output), toShapedObjects(ingredients))); -// } -// -// @ZenMethod -// public static void addShapeless(IItemStack output, IIngredient[] ingredients) -// { -// MineTweakerAPI.apply(new Add(true, toStack(output), toObjects(ingredients))); -// } -// -// private static class Add implements IUndoableAction { -// private IRecipe iRecipe; -// private final boolean isShapeless; -// private final ItemStack output; -// private final Object[] recipe; -// -// public Add(boolean isShapeless, ItemStack output, Object... recipe) -// { -// this.isShapeless = isShapeless; -// this.output = output; -// this.recipe = recipe; -// } -// -// @Override -// public void apply() -// { -// if (isShapeless) iRecipe = new ShapelessBloodOrbRecipe(output, recipe); -// else iRecipe = new ShapedBloodOrbRecipe(output, recipe); -// CraftingManager.getInstance().getRecipeList().add(iRecipe); -// } -// -// @Override -// public boolean canUndo() -// { -// return CraftingManager.getInstance().getRecipeList() != null; -// } -// -// @Override -// public void undo() -// { -// CraftingManager.getInstance().getRecipeList().remove(iRecipe); -// } -// -// @Override -// public String describe() { -// return "Adding Blood Orb Recipe for " + output.getDisplayName(); -// } -// -// @Override -// public String describeUndo() -// { -// return "Removing Blood Orb Recipe for " + output.getDisplayName(); -// } -// -// @Override -// public Object getOverrideKey() -// { -// return null; -// } -// } -// -// @ZenMethod -// public static void removeRecipe(IItemStack output) { -// MineTweakerAPI.apply(new Remove(toStack(output))); -// } -// -// private static class Remove implements IUndoableAction { -// private final ItemStack output; -// private IRecipe iRecipe; -// -// public Remove(ItemStack output) -// { -// this.output = output; -// } -// -// @Override -// public void apply() -// { -// for (IRecipe r : (List) CraftingManager.getInstance().getRecipeList()) -// { -// if((r instanceof ShapedBloodOrbRecipe || r instanceof ShapelessBloodOrbRecipe) && r.getRecipeOutput() != null && r.getRecipeOutput().isItemEqual(output)) { -// iRecipe = r; -// break; -// } -// } -// -// CraftingManager.getInstance().getRecipeList().remove(iRecipe); -// } -// -// @Override -// public boolean canUndo() -// { -// return CraftingManager.getInstance().getRecipeList() != null && iRecipe != null; -// } -// -// @Override -// public void undo() -// { -// CraftingManager.getInstance().getRecipeList().add(iRecipe); -// } -// -// @Override -// public String describe() { -// return "Removing Blood Orb Recipe for " + output.getDisplayName(); -// } -// -// @Override -// public String describeUndo() -// { -// return "Restoring Blood Orb Recipe for " + output.getDisplayName(); -// } -// -// @Override -// public Object getOverrideKey() -// { -// return null; -// } -// } -//} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/FallingTower.java b/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/FallingTower.java deleted file mode 100644 index 68a52b6a..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/FallingTower.java +++ /dev/null @@ -1,139 +0,0 @@ -//package WayofTime.alchemicalWizardry.common.tweaker; -// -//import WayofTime.alchemicalWizardry.common.summoning.meteor.MeteorParadigm; -//import WayofTime.alchemicalWizardry.common.summoning.meteor.MeteorRegistry; -//import minetweaker.IUndoableAction; -//import minetweaker.MineTweakerAPI; -//import minetweaker.api.item.IItemStack; -//import net.minecraft.item.ItemStack; -//import net.minecraftforge.oredict.OreDictionary; -//import stanhebben.zenscript.annotations.ZenClass; -//import stanhebben.zenscript.annotations.ZenMethod; -// -//import java.util.Iterator; -// -//import static WayofTime.alchemicalWizardry.common.tweaker.MTHelper.toStack; -// -///** -// * MineTweaker3 Falling Tower Paradigm Handler by hilburn * -// */ -//@ZenClass("mods.bloodmagic.FallingTower") -//public class FallingTower -//{ -// @ZenMethod -// public static void addFocus(IItemStack stack, int radius, String[] components) -// { -// MineTweakerAPI.apply(new Add(toStack(stack),radius, components)); -// } -// -// @ZenMethod -// public static void addFocus(IItemStack stack, int radius, String components) -// { -// MineTweakerAPI.apply(new Add(toStack(stack),radius, components.split("\\s*,\\s*"))); -// } -// -// @ZenMethod -// public static void removeFocus(IItemStack output) { -// MineTweakerAPI.apply(new Remove(toStack(output))); -// } -// -// private static class Add implements IUndoableAction -// { -// private MeteorParadigm paradigm; -// -// public Add(ItemStack stack, int radius, String[] components) -// { -// paradigm = new MeteorParadigm(stack,radius); -// paradigm.parseStringArray(components); -// } -// -// @Override -// public void apply() -// { -// MeteorRegistry.registerMeteorParadigm(paradigm); -// } -// -// @Override -// public boolean canUndo() -// { -// return MeteorRegistry.paradigmList!= null; -// } -// -// @Override -// public void undo() -// { -// MeteorRegistry.paradigmList.remove(paradigm); -// } -// -// @Override -// public String describe() { -// return "Adding Falling Tower Focus for " + paradigm.focusStack.getDisplayName(); -// } -// -// @Override -// public String describeUndo() -// { -// return "Removing Falling Tower Focus for " + paradigm.focusStack.getDisplayName(); -// } -// -// @Override -// public Object getOverrideKey() -// { -// return null; -// } -// } -// -// private static class Remove implements IUndoableAction { -// private final ItemStack focus; -// private MeteorParadigm paradigm; -// -// public Remove(ItemStack focus) -// { -// this.focus = focus; -// } -// -// @Override -// public void apply() -// { -// for (Iterator itr = MeteorRegistry.paradigmList.iterator(); itr.hasNext();) -// { -// MeteorParadigm paradigm = itr.next(); -// if (OreDictionary.itemMatches(paradigm.focusStack,focus,false)) -// { -// this.paradigm = paradigm; -// itr.remove(); -// break; -// } -// } -// } -// -// @Override -// public boolean canUndo() -// { -// return MeteorRegistry.paradigmList!= null && paradigm != null; -// } -// -// @Override -// public void undo() -// { -// MeteorRegistry.paradigmList.add(paradigm); -// } -// -// @Override -// public String describe() { -// return "Removing Falling Tower Focus for " + focus.getDisplayName(); -// } -// -// @Override -// public String describeUndo() -// { -// return "Restoring Falling Tower Focus for " + focus.getDisplayName(); -// } -// -// @Override -// public Object getOverrideKey() -// { -// return null; -// } -// } -//} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/HarvestMoon.java b/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/HarvestMoon.java deleted file mode 100644 index 222f8acf..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/HarvestMoon.java +++ /dev/null @@ -1,90 +0,0 @@ -//package WayofTime.alchemicalWizardry.common.tweaker; -// -//import WayofTime.alchemicalWizardry.api.harvest.HarvestRegistry; -//import WayofTime.alchemicalWizardry.api.harvest.IHarvestHandler; -//import WayofTime.alchemicalWizardry.common.harvest.GenericItemStackHarvestHandler; -//import minetweaker.IUndoableAction; -//import minetweaker.MineTweakerAPI; -//import minetweaker.api.item.IItemStack; -//import net.minecraft.block.Block; -//import net.minecraft.init.Blocks; -//import net.minecraft.item.ItemStack; -//import net.minecraftforge.common.IPlantable; -//import stanhebben.zenscript.annotations.ZenClass; -//import stanhebben.zenscript.annotations.ZenMethod; -// -///** -// * MineTweaker3 Harvest Moon Handler by hilburn * -// */ -//@ZenClass("mods.bloodmagic.HarvestMoon") -//public class HarvestMoon -//{ -// -// @ZenMethod -// public static void addHarvestable(IItemStack block, IItemStack seed) -// { -// addHarvestable(block,block.getDamage(),seed); -// } -// -// @ZenMethod -// public static void addHarvestable(IItemStack block, int meta, IItemStack seed) -// { -// ItemStack seedStack = MTHelper.toStack(seed); -// Block plantBlock = Block.getBlockFromItem(MTHelper.toStack(block).getItem()); -// if (!(plantBlock==null || plantBlock== Blocks.air || seedStack==null || !(seedStack.getItem() instanceof IPlantable))) -// { -// MineTweakerAPI.apply(new Add(plantBlock, meta, seedStack)); -// } -// else -// { -// throw new IllegalArgumentException("Invalid Harvest Block or Seed"); -// } -// } -// -// private static class Add implements IUndoableAction -// { -// private IHarvestHandler handler; -// private String name; -// -// public Add(Block block, int meta, ItemStack seed) -// { -// handler = new GenericItemStackHarvestHandler(block,meta,seed); -// name = seed.getDisplayName(); -// } -// -// @Override -// public void apply() -// { -// HarvestRegistry.registerHarvestHandler(handler); -// } -// -// @Override -// public boolean canUndo() -// { -// return HarvestRegistry.handlerList!=null; -// } -// -// @Override -// public void undo() -// { -// HarvestRegistry.handlerList.remove(handler); -// } -// -// @Override -// public String describe() { -// return "Adding Harvest Moon Support for " + name; -// } -// -// @Override -// public String describeUndo() -// { -// return "Removing Harvest Moon Support for " + name; -// } -// -// @Override -// public Object getOverrideKey() -// { -// return null; -// } -// } -//} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/MTHelper.java b/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/MTHelper.java deleted file mode 100644 index d16df05e..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/MTHelper.java +++ /dev/null @@ -1,82 +0,0 @@ -//package WayofTime.alchemicalWizardry.common.tweaker; -// -//import static minetweaker.api.minecraft.MineTweakerMC.getItemStack; -// -//import java.util.ArrayList; -// -//import minetweaker.api.item.IIngredient; -//import minetweaker.api.item.IItemStack; -//import minetweaker.api.oredict.IOreDictEntry; -//import net.minecraft.item.ItemStack; -// -///** -// * MineTweaker3 Helper by joshie * -// */ -//public class MTHelper { -// public static ItemStack toStack(IItemStack iStack) { -// return getItemStack(iStack); -// } -// -// public static ItemStack[] toStacks(IItemStack[] iStack) { -// if (iStack == null) return null; -// else { -// ItemStack[] output = new ItemStack[iStack.length]; -// for (int i = 0; i < iStack.length; i++) { -// output[i] = toStack(iStack[i]); -// } -// -// return output; -// } -// } -// -// public static Object toObject(IIngredient iStack) { -// if (iStack == null) return null; -// else { -// if (iStack instanceof IOreDictEntry) { -// return toString((IOreDictEntry) iStack); -// } else if (iStack instanceof IItemStack) { -// return getItemStack((IItemStack) iStack); -// } else return null; -// } -// } -// -// public static Object[] toObjects(IIngredient[] ingredient) { -// if (ingredient == null) return null; -// else { -// Object[] output = new Object[ingredient.length]; -// for (int i = 0; i < ingredient.length; i++) { -// if (ingredient[i] != null) { -// output[i] = toObject(ingredient[i]); -// } else output[i] = ""; -// } -// -// return output; -// } -// } -// -// public static Object[] toShapedObjects(IIngredient[][] ingredients) { -// if (ingredients == null) return null; -// else { -// ArrayList prep = new ArrayList(); -// prep.add("abc"); -// prep.add("def"); -// prep.add("ghi"); -// char[][] map = new char[][] { { 'a', 'b', 'c' }, { 'd', 'e', 'f' }, { 'g', 'h', 'i' } }; -// for (int x = 0; x < ingredients.length; x++) { -// if (ingredients[x] != null) { -// for (int y = 0; y < ingredients[x].length; y++) { -// if (ingredients[x][y] != null && x < map.length && y < map[x].length) { -// prep.add(map[x][y]); -// prep.add(toObject(ingredients[x][y])); -// } -// } -// } -// } -// return prep.toArray(); -// } -// } -// -// public static String toString(IOreDictEntry entry) { -// return ((IOreDictEntry) entry).getName(); -// } -//} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/MineTweakerIntegration.java b/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/MineTweakerIntegration.java deleted file mode 100644 index ae6d45ab..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/MineTweakerIntegration.java +++ /dev/null @@ -1,19 +0,0 @@ -//package WayofTime.alchemicalWizardry.common.tweaker; -// -//import minetweaker.MineTweakerAPI; -// -///** -// * MineTweaker3 Integration by joshie * -// */ -//public class MineTweakerIntegration -//{ -// public static void register() -// { -// MineTweakerAPI.registerClass(Alchemy.class); -// MineTweakerAPI.registerClass(Binding.class); -// MineTweakerAPI.registerClass(BloodAltar.class); -// MineTweakerAPI.registerClass(BloodOrb.class); -// MineTweakerAPI.registerClass(FallingTower.class); -// MineTweakerAPI.registerClass(HarvestMoon.class); -// } -//} diff --git a/src/main/java/wayoftime/bloodmagic/BloodMagic.java b/src/main/java/wayoftime/bloodmagic/BloodMagic.java new file mode 100644 index 00000000..a59eb766 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/BloodMagic.java @@ -0,0 +1,319 @@ +package wayoftime.bloodmagic; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import com.google.gson.Gson; + +import net.minecraft.block.Block; +import net.minecraft.data.DataGenerator; +import net.minecraft.fluid.Fluid; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.potion.Effect; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.event.ColorHandlerEvent; +import net.minecraftforge.client.event.ModelRegistryEvent; +import net.minecraftforge.client.model.ModelLoaderRegistry; +import net.minecraftforge.client.model.generators.ItemModelProvider; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent; +import net.minecraftforge.fml.event.lifecycle.GatherDataEvent; +import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; +import net.minecraftforge.fml.event.lifecycle.InterModProcessEvent; +import net.minecraftforge.fml.event.server.FMLServerStartingEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import wayoftime.bloodmagic.client.ClientEvents; +import wayoftime.bloodmagic.client.hud.Elements; +import wayoftime.bloodmagic.client.key.BloodMagicKeyHandler; +import wayoftime.bloodmagic.client.key.KeyBindings; +import wayoftime.bloodmagic.client.model.MimicModelLoader; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.data.GeneratorBaseRecipes; +import wayoftime.bloodmagic.common.data.GeneratorBlockStates; +import wayoftime.bloodmagic.common.data.GeneratorBlockTags; +import wayoftime.bloodmagic.common.data.GeneratorFluidTags; +import wayoftime.bloodmagic.common.data.GeneratorItemModels; +import wayoftime.bloodmagic.common.data.GeneratorItemTags; +import wayoftime.bloodmagic.common.data.GeneratorLanguage; +import wayoftime.bloodmagic.common.data.GeneratorLootTable; +import wayoftime.bloodmagic.common.data.recipe.BloodMagicRecipeProvider; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.registries.BloodMagicEntityTypes; +import wayoftime.bloodmagic.common.registries.BloodMagicRecipeSerializers; +import wayoftime.bloodmagic.core.AnointmentRegistrar; +import wayoftime.bloodmagic.core.LivingArmorRegistrar; +import wayoftime.bloodmagic.core.recipe.IngredientBloodOrb; +import wayoftime.bloodmagic.core.registry.AlchemyArrayRegistry; +import wayoftime.bloodmagic.core.registry.OrbRegistry; +import wayoftime.bloodmagic.impl.BloodMagicAPI; +import wayoftime.bloodmagic.impl.BloodMagicCorePlugin; +import wayoftime.bloodmagic.loot.GlobalLootModifier; +import wayoftime.bloodmagic.network.BloodMagicPacketHandler; +import wayoftime.bloodmagic.potion.BloodMagicPotions; +import wayoftime.bloodmagic.ritual.ModRituals; +import wayoftime.bloodmagic.ritual.RitualManager; +import wayoftime.bloodmagic.structures.ModDungeons; +import wayoftime.bloodmagic.tile.TileAlchemicalReactionChamber; +import wayoftime.bloodmagic.tile.TileAlchemyArray; +import wayoftime.bloodmagic.tile.TileAlchemyTable; +import wayoftime.bloodmagic.tile.TileAltar; +import wayoftime.bloodmagic.tile.TileDeforesterCharge; +import wayoftime.bloodmagic.tile.TileDemonCrucible; +import wayoftime.bloodmagic.tile.TileDemonCrystal; +import wayoftime.bloodmagic.tile.TileDemonCrystallizer; +import wayoftime.bloodmagic.tile.TileFungalCharge; +import wayoftime.bloodmagic.tile.TileIncenseAltar; +import wayoftime.bloodmagic.tile.TileMasterRitualStone; +import wayoftime.bloodmagic.tile.TileMimic; +import wayoftime.bloodmagic.tile.TileShapedExplosive; +import wayoftime.bloodmagic.tile.TileSoulForge; +import wayoftime.bloodmagic.tile.TileVeinMineCharge; +import wayoftime.bloodmagic.util.handler.event.GenericHandler; +import wayoftime.bloodmagic.util.handler.event.WillHandler; + +@Mod("bloodmagic") +//@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) +public class BloodMagic +{ + public static final String MODID = "bloodmagic"; + // Directly reference a log4j logger. + public static final Logger LOGGER = LogManager.getLogger(); + + private static Gson GSON = null; + + public static final BloodMagicPacketHandler packetHandler = new BloodMagicPacketHandler(); + public static final RitualManager RITUAL_MANAGER = new RitualManager(); + + public BloodMagic() + { + IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); + + modBus.addListener(this::setup); + modBus.addListener(this::onLoadComplete); + + BloodMagicBlocks.BLOCKS.register(modBus); + BloodMagicItems.ITEMS.register(modBus); +// RegistrarBloodMagic.BLOOD_ORBS.createAndRegister(modBus, "bloodorbs"); + BloodMagicItems.BLOOD_ORBS.createAndRegister(modBus, "bloodorbs"); + LivingArmorRegistrar.UPGRADES.createAndRegister(modBus, "upgrades"); + AnointmentRegistrar.ANOINTMENTS.createAndRegister(modBus, "anointments"); + BloodMagicItems.BASICITEMS.register(modBus); + BloodMagicBlocks.BASICBLOCKS.register(modBus); + BloodMagicBlocks.DUNGEONBLOCKS.register(modBus); + BloodMagicBlocks.FLUIDS.register(modBus); + BloodMagicBlocks.CONTAINERS.register(modBus); + BloodMagicEntityTypes.ENTITY_TYPES.register(modBus); + + GlobalLootModifier.GLM.register(modBus); + + BloodMagicRecipeSerializers.RECIPE_SERIALIZERS.register(modBus); + + // Register the setup method for modloading + modBus.addListener(this::setup); + // Register the enqueueIMC method for modloading + modBus.addListener(this::enqueueIMC); + // Register the processIMC method for modloading + modBus.addListener(this::processIMC); + // Register the doClientStuff method for modloading + modBus.addListener(this::doClientStuff); + modBus.addListener(this::loadModels); + modBus.addListener(this::gatherData); + + modBus.addGenericListener(Fluid.class, this::registerFluids); + modBus.addGenericListener(TileEntityType.class, this::registerTileEntityTypes); + modBus.addGenericListener(IRecipeSerializer.class, this::registerRecipes); + modBus.addGenericListener(Effect.class, BloodMagicPotions::registerPotions); + + MinecraftForge.EVENT_BUS.register(new GenericHandler()); +// MinecraftForge.EVENT_BUS.register(new ClientHandler()); + modBus.addListener(this::registerColors); + + MinecraftForge.EVENT_BUS.register(new WillHandler()); +// MinecraftForge.EVENT_BUS.register(new BloodMagicBlocks()); +// MinecraftForge.EVENT_BUS.addListener(this::commonSetup); + + // Register ourselves for server and other game events we are interested in + MinecraftForge.EVENT_BUS.register(this); + + ModLoadingContext context = ModLoadingContext.get(); + context.registerConfig(ModConfig.Type.CLIENT, ConfigManager.CLIENT_SPEC); + + ModDungeons.init(); + } + + private void registerRecipes(RegistryEvent.Register> event) + { +// System.out.println("Registering IngredientBloodOrb Serializer."); + CraftingHelper.register(IngredientBloodOrb.NAME, IngredientBloodOrb.Serializer.INSTANCE); + +// event.getRegistry().registerAll( +// new SewingRecipe.Serializer().setRegistryName("sewing") +// ); + } + + public static ResourceLocation rl(String name) + { + return new ResourceLocation(BloodMagic.MODID, name); + } + + public void registerFluids(RegistryEvent.Register event) + { + + } + + public void onLoadComplete(FMLLoadCompleteEvent event) + { + OrbRegistry.tierMap.put(BloodMagicItems.ORB_WEAK.get().getTier(), new ItemStack(BloodMagicItems.WEAK_BLOOD_ORB.get())); + OrbRegistry.tierMap.put(BloodMagicItems.ORB_APPRENTICE.get().getTier(), new ItemStack(BloodMagicItems.APPRENTICE_BLOOD_ORB.get())); + OrbRegistry.tierMap.put(BloodMagicItems.ORB_MAGICIAN.get().getTier(), new ItemStack(BloodMagicItems.MAGICIAN_BLOOD_ORB.get())); + OrbRegistry.tierMap.put(BloodMagicItems.ORB_MASTER.get().getTier(), new ItemStack(BloodMagicItems.MASTER_BLOOD_ORB.get())); + BloodMagicCorePlugin.INSTANCE.register(BloodMagicAPI.INSTANCE); + RITUAL_MANAGER.discover(); + ModRituals.initHarvestHandlers(); + LivingArmorRegistrar.register(); + AnointmentRegistrar.register(); + AlchemyArrayRegistry.registerBaseArrays(); + } + + public void registerTileEntityTypes(RegistryEvent.Register> event) + { + LOGGER.info("Attempting to register Tile Entities"); + event.getRegistry().register(TileEntityType.Builder.create(TileAltar::new, BloodMagicBlocks.BLOOD_ALTAR.get()).build(null).setRegistryName("altar")); + event.getRegistry().register(TileEntityType.Builder.create(TileAlchemyArray::new, BloodMagicBlocks.ALCHEMY_ARRAY.get()).build(null).setRegistryName("alchemyarray")); + event.getRegistry().register(TileEntityType.Builder.create(TileSoulForge::new, BloodMagicBlocks.SOUL_FORGE.get()).build(null).setRegistryName("soulforge")); + event.getRegistry().register(TileEntityType.Builder.create(TileMasterRitualStone::new, BloodMagicBlocks.MASTER_RITUAL_STONE.get()).build(null).setRegistryName("masterritualstone")); + event.getRegistry().register(TileEntityType.Builder.create(TileAlchemicalReactionChamber::new, BloodMagicBlocks.ALCHEMICAL_REACTION_CHAMBER.get()).build(null).setRegistryName("alchemicalreactionchamber")); + event.getRegistry().register(TileEntityType.Builder.create(TileAlchemyTable::new, BloodMagicBlocks.ALCHEMY_TABLE.get()).build(null).setRegistryName("alchemytable")); + event.getRegistry().register(TileEntityType.Builder.create(TileDemonCrystal::new, BloodMagicBlocks.RAW_CRYSTAL_BLOCK.get(), BloodMagicBlocks.CORROSIVE_CRYSTAL_BLOCK.get(), BloodMagicBlocks.DESTRUCTIVE_CRYSTAL_BLOCK.get(), BloodMagicBlocks.VENGEFUL_CRYSTAL_BLOCK.get(), BloodMagicBlocks.STEADFAST_CRYSTAL_BLOCK.get()).build(null).setRegistryName("demoncrystal")); + event.getRegistry().register(TileEntityType.Builder.create(TileDemonCrucible::new, BloodMagicBlocks.DEMON_CRUCIBLE.get()).build(null).setRegistryName("demoncrucible")); + event.getRegistry().register(TileEntityType.Builder.create(TileDemonCrystallizer::new, BloodMagicBlocks.DEMON_CRYSTALLIZER.get()).build(null).setRegistryName("demoncrystallizer")); + event.getRegistry().register(TileEntityType.Builder.create(TileIncenseAltar::new, BloodMagicBlocks.INCENSE_ALTAR.get()).build(null).setRegistryName("incensealtar")); + event.getRegistry().register(TileEntityType.Builder.create(TileMimic::new, BloodMagicBlocks.MIMIC.get(), BloodMagicBlocks.ETHEREAL_MIMIC.get()).build(null).setRegistryName("mimic")); + event.getRegistry().register(TileEntityType.Builder.create(TileShapedExplosive::new, BloodMagicBlocks.SHAPED_CHARGE.get()).build(null).setRegistryName("shaped_explosive")); + event.getRegistry().register(TileEntityType.Builder.create(TileDeforesterCharge::new, BloodMagicBlocks.DEFORESTER_CHARGE.get()).build(null).setRegistryName("deforester_charge")); + event.getRegistry().register(TileEntityType.Builder.create(TileVeinMineCharge::new, BloodMagicBlocks.VEINMINE_CHARGE.get()).build(null).setRegistryName("veinmine_charge")); + event.getRegistry().register(TileEntityType.Builder.create(TileFungalCharge::new, BloodMagicBlocks.FUNGAL_CHARGE.get()).build(null).setRegistryName("fungal_charge")); + + } + + @SubscribeEvent + public void gatherData(GatherDataEvent event) + { +// GSON = new GsonBuilder().registerTypeAdapter(Variant.class, new Variant.Deserializer()).registerTypeAdapter(ItemCameraTransforms.class, new ItemCameraTransforms.Deserializer()).registerTypeAdapter(ItemTransformVec3f.class, new ItemTransformVec3f.Deserializer()).create(); + + DataGenerator gen = event.getGenerator(); + +// if(event.includeClient()) + { + ItemModelProvider itemModels = new GeneratorItemModels(gen, event.getExistingFileHelper()); + gen.addProvider(itemModels); + gen.addProvider(new GeneratorBlockStates(gen, itemModels.existingFileHelper)); + gen.addProvider(new GeneratorLanguage(gen)); + gen.addProvider(new BloodMagicRecipeProvider(gen)); + gen.addProvider(new GeneratorBaseRecipes(gen)); + gen.addProvider(new GeneratorLootTable(gen)); + + GeneratorBlockTags bmBlockTags = new GeneratorBlockTags(gen, event.getExistingFileHelper()); + gen.addProvider(bmBlockTags); + gen.addProvider(new GeneratorItemTags(gen, bmBlockTags, event.getExistingFileHelper())); + gen.addProvider(new GeneratorFluidTags(gen, event.getExistingFileHelper())); + + } + } + + private void loadModels(final ModelRegistryEvent event) + { + ModelLoaderRegistry.registerLoader(BloodMagic.rl("mimicloader"), new MimicModelLoader(BloodMagic.rl("block/solidopaquemimic"))); + ModelLoaderRegistry.registerLoader(BloodMagic.rl("mimicloader_ethereal"), new MimicModelLoader(BloodMagic.rl("block/etherealopaquemimic"))); + } + + private void setup(final FMLCommonSetupEvent event) + { + // some preinit code +// LOGGER.info("HELLO FROM PREINIT"); +// LOGGER.info("DIRT BLOCK >> {}", Blocks.DIRT.getRegistryName()); + packetHandler.initialize(); + } + +// @OnlyIn(Dist.CLIENT) + private void doClientStuff(final FMLClientSetupEvent event) + { + // do something that can only be done on the client +// LOGGER.info("Got game settings {}", event.getMinecraftSupplier().get().gameSettings); + + ClientEvents.initClientEvents(event); + Elements.registerElements(); + MinecraftForge.EVENT_BUS.register(new ClientEvents()); + KeyBindings.initializeKeys(); + new BloodMagicKeyHandler(); +// IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); +// + + } + + private void registerColors(final ColorHandlerEvent event) + { + if (event instanceof ColorHandlerEvent.Item) + ClientEvents.colorHandlerEvent((ColorHandlerEvent.Item) event); + } + + private void enqueueIMC(final InterModEnqueueEvent event) + { + // some example code to dispatch IMC to another mod +// InterModComms.sendTo("examplemod", "helloworld", () -> { +// LOGGER.info("Hello world from the MDK"); +// return "Hello world"; +// }); + } + + private void processIMC(final InterModProcessEvent event) + { + // some example code to receive and process InterModComms from other mods +// LOGGER.info("Got IMC {}", event.getIMCStream().map(m -> m.getMessageSupplier().get()).collect(Collectors.toList())); + } + + // You can use SubscribeEvent and let the Event Bus discover methods to call + @SubscribeEvent + public void onServerStarting(FMLServerStartingEvent event) + { + // do something when the server starts +// LOGGER.info("HELLO from server starting"); + } + + // You can use EventBusSubscriber to automatically subscribe events on the + // contained class (this is subscribing to the MOD + // Event bus for receiving Registry Events) + @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) + public static class RegistryEvents + { + @SubscribeEvent + public static void onBlocksRegistry(final RegistryEvent.Register blockRegistryEvent) + { + // register a new block here +// LOGGER.info("HELLO from Register Block"); + } + } + + // Custom ItemGroup TAB + public static final ItemGroup TAB = new ItemGroup("bloodmagictab") + { + @Override + public ItemStack createIcon() + { + return new ItemStack(BloodMagicBlocks.BLOOD_ALTAR.get()); + } + }; + public static final String NAME = "Blood Magic: Alchemical Wizardry"; +} diff --git a/src/main/java/wayoftime/bloodmagic/ConfigHandler.java b/src/main/java/wayoftime/bloodmagic/ConfigHandler.java new file mode 100644 index 00000000..ef072b52 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ConfigHandler.java @@ -0,0 +1,135 @@ +package wayoftime.bloodmagic; + +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = BloodMagic.MODID) +public class ConfigHandler +{ + // Most of this stuff is commented out because a proper replacement for the + // ConfigHandler is not yet implemented. + +// @Config.Comment( +// { "General settings" }) +// public static ConfigGeneral general = new ConfigGeneral(); +// @Config.Comment( +// { "Blacklist options for various features" }) +// public static ConfigBlacklist blacklist = new ConfigBlacklist(); +// @Config.Comment( +// { "Value modifiers for various features" }) +// public static ConfigValues values = new ConfigValues(); +// @Config.Comment( +// { "Settings that only pertain to the client" }) +// public static ConfigClient client = new ConfigClient(); +// @Config.Comment( +// { "Compatibility settings" }) +// public static ConfigCompat compat = new ConfigCompat(); +// +// @SubscribeEvent +// public static void onConfigChanged(ConfigChangedEvent.OnConfigChangedEvent event) +// { +// if (event.getModID().equals(BloodMagic.MODID)) +// { +// ConfigManager.sync(event.getModID(), Config.Type.INSTANCE); // Sync config values +// BloodMagic.RITUAL_MANAGER.syncConfig(); +// MeteorConfigHandler.handleMeteors(false); // Reload meteors +// } +// } +// +// public static class ConfigGeneral +// { +// @Config.Comment( +// { "Enables extra information to be printed to the log.", "Warning: May drastically increase log size." }) +// public boolean enableDebugLogging = false; +// @Config.Comment( +// { "Enables extra information to be printed to the log." }) +// public boolean enableAPILogging = false; +// @Config.Comment( +// { "Enables extra information to be printed to the log.", "Warning: May drastically increase log size." }) +// public boolean enableVerboseAPILogging = false; +// @Config.Comment( +// { "Enables tier 6 related registrations. This is for pack makers." }) +// @Config.RequiresMcRestart +// public boolean enableTierSixEvenThoughThereIsNoContent = false; +// } +// +// public static class ConfigBlacklist +// { +// @Config.Comment( +// { "Stops listed blocks and entities from being teleposed.", +// "Use the registry name of the block or entity. Vanilla objects do not require the modid.", +// "If a block is specified, you can list the variants to only blacklist a given state." }) +// public String[] teleposer = +// { "bedrock", "mob_spawner" }; +// @Config.Comment( +// { "Stops listed blocks from being transposed.", +// "Use the registry name of the block. Vanilla blocks do not require the modid." }) +// public String[] transposer = +// { "bedrock", "mob_spawner" }; +// @Config.Comment( +// { "Stops the listed entities from being used in the Well of Suffering.", +// "Use the registry name of the entity. Vanilla entities do not require the modid." }) +// public String[] wellOfSuffering = +// {}; +// } +// +// public static class ConfigValues +// { +// @Config.Comment( +// { "Declares the amount of LP gained per HP sacrificed for the given entity.", +// "Setting the value to 0 will blacklist it.", +// "Use the registry name of the entity followed by a ';' and then the value you want.", +// "Vanilla entities do not require the modid." }) +// public String[] sacrificialValues = +// { "villager;100", "slime;15", "enderman;10", "cow;100", "chicken;100", "horse;100", "sheep;100", "wolf;100", +// "ocelot;100", "pig;100", "rabbit;100" }; +// @Config.Comment( +// { "Amount of LP the Coat of Arms should provide for each damage dealt." }) +// @Config.RangeInt(min = 0, max = 100) +// public int coatOfArmsConversion = 20; +// @Config.Comment( +// { "Amount of LP the Sacrificial Dagger should provide for each damage dealt." }) +// @Config.RangeInt(min = 0, max = 10000) +// public int sacrificialDaggerConversion = 100; +// @Config.Comment( +// { "Will rewrite any default meteor types with new versions.", +// "Disable this if you want any of your changes to stay, or do not want default meteor types regenerated." }) +// public boolean shouldResyncMeteors = true; +// @Config.Comment( +// { "Should mobs that die through the Well of Suffering Ritual drop items?" }) +// public boolean wellOfSufferingDrops = true; +// } +// +// public static class ConfigClient +// { +// @Config.Comment( +// { "Always render the beams between routing nodes.", +// "If disabled, the beams will only render while the Node Router is held." }) +// public boolean alwaysRenderRoutingLines = false; +// @Config.Comment( +// { "Completely hide spectral blocks from view.", "If disabled, a transparent block will be displayed." }) +// public boolean invisibleSpectralBlocks = true; +// @Config.Comment( +// { "When cycling through slots, the Sigil of Holding will skip over empty slots and move to the next occupied one.", +// "If disabled, it will behave identically to the default hotbar." }) +// public boolean sigilHoldingSkipsEmptySlots = false; +// } +// +// public static class ConfigCompat +// { +// @Config.Comment( +// { "The display mode to use when looking at a Blood Altar.", "ALWAYS - Always display information.", +// "SIGIL_HELD - Only display information when a Divination or Seers sigil is held in either hand.", +// "SIGIL_CONTAINED - Only display information when a Divination or Seers sigil is somewhere in the inventory." }) +// public AltarDisplayMode wailaAltarDisplayMode = AltarDisplayMode.SIGIL_HELD; +// +// public enum AltarDisplayMode +// { +// ALWAYS, SIGIL_HELD, SIGIL_CONTAINED,; +// } +// } + + public static class values + { + public static int sacrificialDaggerConversion = 100; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/ConfigManager.java b/src/main/java/wayoftime/bloodmagic/ConfigManager.java new file mode 100644 index 00000000..6863c46b --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ConfigManager.java @@ -0,0 +1,36 @@ +package wayoftime.bloodmagic; + +import org.apache.commons.lang3.tuple.Pair; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import net.minecraftforge.common.ForgeConfigSpec; + +public class ConfigManager +{ + private static final Logger LOGGER = LogManager.getLogger(); + + public static final ClientConfig CLIENT; + public static final ForgeConfigSpec CLIENT_SPEC; + + static + { + final Pair specPair = new ForgeConfigSpec.Builder().configure(ClientConfig::new); + CLIENT_SPEC = specPair.getRight(); + CLIENT = specPair.getLeft(); + } + + public static class ClientConfig + { + public final ForgeConfigSpec.DoubleValue demonWillGaugeX; + public final ForgeConfigSpec.DoubleValue demonWillGaugeY; + + ClientConfig(ForgeConfigSpec.Builder builder) + { + builder.comment("Settings for the position of the Demon Will Gauge HUD element.").push("hud"); + demonWillGaugeX = builder.defineInRange("DemonWillGaugePosX", 0.01, 0, 1); + demonWillGaugeY = builder.defineInRange("DemonWillGaugePosY", 0.01, 0, 1); + builder.pop(); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/altar/AltarComponent.java b/src/main/java/wayoftime/bloodmagic/altar/AltarComponent.java new file mode 100644 index 00000000..bb9b4562 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/altar/AltarComponent.java @@ -0,0 +1,62 @@ +package wayoftime.bloodmagic.altar; + +import net.minecraft.util.math.BlockPos; + +/** + * Used for building the altar structure. + */ +public class AltarComponent +{ + private final BlockPos offset; + private final ComponentType component; + private boolean upgradeSlot; + + /** + * Sets a component location for the altar. + * + * @param offset - Where the block should be in relation to the Altar + * @param component - The type of Component the location should contain + */ + public AltarComponent(BlockPos offset, ComponentType component) + { + this.offset = offset; + this.component = component; + } + + /** + * Use for setting a location at which there must be a block, but the type of + * block does not matter. + * + * @param offset - Where the block should be in relation to the Altar + */ + public AltarComponent(BlockPos offset) + { + this(offset, ComponentType.NOTAIR); + } + + /** + * Sets the location to an upgrade slot. + * + * @return the current instance for further use. + */ + public AltarComponent setUpgradeSlot() + { + this.upgradeSlot = true; + return this; + } + + public BlockPos getOffset() + { + return offset; + } + + public boolean isUpgradeSlot() + { + return upgradeSlot; + } + + public ComponentType getComponent() + { + return component; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/altar/AltarTier.java b/src/main/java/wayoftime/bloodmagic/altar/AltarTier.java new file mode 100644 index 00000000..7ab6c3ff --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/altar/AltarTier.java @@ -0,0 +1,172 @@ +package wayoftime.bloodmagic.altar; + +import java.util.List; +import java.util.function.Consumer; + +import com.google.common.collect.Lists; + +import net.minecraft.util.math.BlockPos; + +public enum AltarTier +{ + ONE() + { + @Override + public void buildComponents(Consumer components) + { + // Nada + } + }, + TWO() + { + @Override + public void buildComponents(Consumer components) + { + components.accept(new AltarComponent(new BlockPos(-1, -1, -1), ComponentType.BLOODRUNE)); + components.accept(new AltarComponent(new BlockPos(0, -1, -1), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(1, -1, -1), ComponentType.BLOODRUNE)); + components.accept(new AltarComponent(new BlockPos(-1, -1, 0), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(1, -1, 0), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(-1, -1, 1), ComponentType.BLOODRUNE)); + components.accept(new AltarComponent(new BlockPos(0, -1, 1), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(1, -1, 1), ComponentType.BLOODRUNE)); + } + }, + THREE() + { + @Override + public void buildComponents(Consumer components) + { + // Doesn't pull from tier 2 because upgrades slots are different + components.accept(new AltarComponent(new BlockPos(-1, -1, -1), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(0, -1, -1), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(1, -1, -1), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(-1, -1, 0), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(1, -1, 0), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(-1, -1, 1), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(0, -1, 1), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(1, -1, 1), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(-3, -1, -3))); + components.accept(new AltarComponent(new BlockPos(-3, 0, -3))); + components.accept(new AltarComponent(new BlockPos(3, -1, -3))); + components.accept(new AltarComponent(new BlockPos(3, 0, -3))); + components.accept(new AltarComponent(new BlockPos(-3, -1, 3))); + components.accept(new AltarComponent(new BlockPos(-3, 0, 3))); + components.accept(new AltarComponent(new BlockPos(3, -1, 3))); + components.accept(new AltarComponent(new BlockPos(3, 0, 3))); + components.accept(new AltarComponent(new BlockPos(-3, 1, -3), ComponentType.GLOWSTONE)); + components.accept(new AltarComponent(new BlockPos(3, 1, -3), ComponentType.GLOWSTONE)); + components.accept(new AltarComponent(new BlockPos(-3, 1, 3), ComponentType.GLOWSTONE)); + components.accept(new AltarComponent(new BlockPos(3, 1, 3), ComponentType.GLOWSTONE)); + + for (int i = -2; i <= 2; i++) + { + components.accept(new AltarComponent(new BlockPos(3, -2, i), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(-3, -2, i), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(i, -2, 3), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(i, -2, -3), ComponentType.BLOODRUNE).setUpgradeSlot()); + } + } + }, + FOUR() + { + @Override + public void buildComponents(Consumer components) + { + THREE.getAltarComponents().forEach(components); + + for (int i = -3; i <= 3; i++) + { + components.accept(new AltarComponent(new BlockPos(5, -3, i), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(-5, -3, i), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(i, -3, 5), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(i, -3, -5), ComponentType.BLOODRUNE).setUpgradeSlot()); + } + + for (int i = -2; i <= 1; i++) + { + components.accept(new AltarComponent(new BlockPos(5, i, 5))); + components.accept(new AltarComponent(new BlockPos(5, i, -5))); + components.accept(new AltarComponent(new BlockPos(-5, i, -5))); + components.accept(new AltarComponent(new BlockPos(-5, i, 5))); + } + + components.accept(new AltarComponent(new BlockPos(5, 2, 5), ComponentType.BLOODSTONE)); + components.accept(new AltarComponent(new BlockPos(5, 2, -5), ComponentType.BLOODSTONE)); + components.accept(new AltarComponent(new BlockPos(-5, 2, -5), ComponentType.BLOODSTONE)); + components.accept(new AltarComponent(new BlockPos(-5, 2, 5), ComponentType.BLOODSTONE)); + } + }, + FIVE() + { + @Override + public void buildComponents(Consumer components) + { + FOUR.getAltarComponents().forEach(components); + components.accept(new AltarComponent(new BlockPos(-8, -3, 8), ComponentType.BEACON)); + components.accept(new AltarComponent(new BlockPos(-8, -3, -8), ComponentType.BEACON)); + components.accept(new AltarComponent(new BlockPos(8, -3, -8), ComponentType.BEACON)); + components.accept(new AltarComponent(new BlockPos(8, -3, 8), ComponentType.BEACON)); + + for (int i = -6; i <= 6; i++) + { + components.accept(new AltarComponent(new BlockPos(8, -4, i), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(-8, -4, i), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(i, -4, 8), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(i, -4, -8), ComponentType.BLOODRUNE).setUpgradeSlot()); + } + } + }, + SIX() + { + @Override + public void buildComponents(Consumer components) + { + FIVE.getAltarComponents().forEach(components); + + for (int i = -4; i <= 2; i++) + { + components.accept(new AltarComponent(new BlockPos(11, i, 11))); + components.accept(new AltarComponent(new BlockPos(-11, i, -11))); + components.accept(new AltarComponent(new BlockPos(11, i, -11))); + components.accept(new AltarComponent(new BlockPos(-11, i, 11))); + } + + components.accept(new AltarComponent(new BlockPos(11, 3, 11), ComponentType.CRYSTAL)); + components.accept(new AltarComponent(new BlockPos(-11, 3, -11), ComponentType.CRYSTAL)); + components.accept(new AltarComponent(new BlockPos(11, 3, -11), ComponentType.CRYSTAL)); + components.accept(new AltarComponent(new BlockPos(-11, 3, 11), ComponentType.CRYSTAL)); + + for (int i = -9; i <= 9; i++) + { + components.accept(new AltarComponent(new BlockPos(11, -5, i), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(-11, -5, i), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(i, -5, 11), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(i, -5, -11), ComponentType.BLOODRUNE).setUpgradeSlot()); + } + } + }; + + public static final int MAXTIERS = values().length; + + private List altarComponents; + + AltarTier() + { + this.altarComponents = Lists.newArrayList(); + + buildComponents(altarComponents::add); + } + + public abstract void buildComponents(Consumer components); + + public int toInt() + { + return ordinal() + 1; + } + + public List getAltarComponents() + { + return altarComponents; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/altar/AltarUpgrade.java b/src/main/java/wayoftime/bloodmagic/altar/AltarUpgrade.java new file mode 100644 index 00000000..f7d9cc43 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/altar/AltarUpgrade.java @@ -0,0 +1,29 @@ +package wayoftime.bloodmagic.altar; + +import java.util.EnumMap; + +import com.google.common.collect.Maps; + +import wayoftime.bloodmagic.block.enums.BloodRuneType; + +public class AltarUpgrade +{ + + private final EnumMap upgradeLevels; + + public AltarUpgrade() + { + this.upgradeLevels = Maps.newEnumMap(BloodRuneType.class); + } + + public AltarUpgrade upgrade(BloodRuneType rune) + { + upgradeLevels.compute(rune, (r, l) -> l == null ? 1 : l + 1); + return this; + } + + public int getLevel(BloodRuneType rune) + { + return upgradeLevels.getOrDefault(rune, 0); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/altar/AltarUtil.java b/src/main/java/wayoftime/bloodmagic/altar/AltarUtil.java new file mode 100644 index 00000000..b02d469a --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/altar/AltarUtil.java @@ -0,0 +1,95 @@ +package wayoftime.bloodmagic.altar; + +import java.util.List; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import org.apache.commons.lang3.tuple.Pair; + +import net.minecraft.block.BlockState; +import net.minecraft.block.material.Material; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import wayoftime.bloodmagic.impl.BloodMagicAPI; +import wayoftime.bloodmagic.common.block.BlockBloodRune; +import wayoftime.bloodmagic.tile.TileAltar; + +public class AltarUtil +{ + + @Nonnull + public static AltarTier getTier(World world, BlockPos pos) + { + TileEntity tile = world.getTileEntity(pos); + if (!(tile instanceof TileAltar)) + return AltarTier.ONE; + + AltarTier lastCheck = AltarTier.ONE; + for (AltarTier tier : AltarTier.values()) + { + for (AltarComponent component : tier.getAltarComponents()) + { + BlockPos componentPos = pos.add(component.getOffset()); + BlockState worldState = world.getBlockState(componentPos); + + if (component.getComponent() == ComponentType.NOTAIR && worldState.getMaterial() != Material.AIR + && !worldState.getMaterial().isLiquid()) + continue; + + List validStates = BloodMagicAPI.INSTANCE.getComponentStates(component.getComponent()); + if (!validStates.contains(worldState)) + return lastCheck; + } + + lastCheck = tier; + } + + return lastCheck; + } + + @Nonnull + public static AltarUpgrade getUpgrades(World world, BlockPos pos, AltarTier currentTier) + { + AltarUpgrade upgrades = new AltarUpgrade(); + + for (AltarComponent component : currentTier.getAltarComponents()) + { + if (!component.isUpgradeSlot() || component.getComponent() != ComponentType.BLOODRUNE) + continue; + + BlockPos componentPos = pos.add(component.getOffset()); + BlockState state = world.getBlockState(componentPos); + if (state.getBlock() instanceof BlockBloodRune) + upgrades.upgrade(((BlockBloodRune) state.getBlock()).getBloodRune(world, componentPos)); + } + + return upgrades; + } + + @Nullable + public static Pair getFirstMissingComponent(World world, BlockPos pos, int altarTier) + { + if (altarTier >= AltarTier.MAXTIERS) + return null; + + for (AltarTier tier : AltarTier.values()) + { + for (AltarComponent component : tier.getAltarComponents()) + { + BlockPos componentPos = pos.add(component.getOffset()); + BlockState worldState = world.getBlockState(componentPos); + if (component.getComponent() == ComponentType.NOTAIR && worldState.getMaterial() != Material.AIR + && !worldState.getMaterial().isLiquid()) + continue; + + List validStates = BloodMagicAPI.INSTANCE.getComponentStates(component.getComponent()); + if (!validStates.contains(worldState)) + return Pair.of(componentPos, component.getComponent()); + } + } + + return null; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/altar/BloodAltar.java b/src/main/java/wayoftime/bloodmagic/altar/BloodAltar.java new file mode 100644 index 00000000..45d0f645 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/altar/BloodAltar.java @@ -0,0 +1,810 @@ +package wayoftime.bloodmagic.altar; + +import com.google.common.base.Enums; + +import net.minecraft.block.BlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.particles.RedstoneParticleData; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidAttributes; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.templates.FluidTank; +import net.minecraftforge.items.ItemHandlerHelper; +import wayoftime.bloodmagic.api.event.BloodMagicCraftedEvent; +import wayoftime.bloodmagic.block.enums.BloodRuneType; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.item.BloodOrb; +import wayoftime.bloodmagic.common.item.IBindable; +import wayoftime.bloodmagic.common.item.IBloodOrb; +import wayoftime.bloodmagic.core.data.Binding; +import wayoftime.bloodmagic.impl.BloodMagicAPI; +import wayoftime.bloodmagic.recipe.RecipeBloodAltar; +import wayoftime.bloodmagic.tile.TileAltar; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.helper.NetworkHelper; + +public class BloodAltar// implements IFluidHandler +{ + + public boolean isActive; + + protected FluidStack fluidOutput = new FluidStack(BloodMagicBlocks.LIFE_ESSENCE_FLUID.get(), 0); // TODO: Fix + protected FluidStack fluidInput = new FluidStack(BloodMagicBlocks.LIFE_ESSENCE_FLUID.get(), 0); + + protected FluidTank tank = new FluidTank(FluidAttributes.BUCKET_VOLUME); + + private final LazyOptional holder = LazyOptional.of(() -> tank); + + private TileAltar tileAltar; + private int internalCounter = 0; + private AltarTier altarTier = AltarTier.ONE; + private AltarUpgrade upgrade; + private int capacity = FluidAttributes.BUCKET_VOLUME * 10; + private FluidStack fluid = new FluidStack(BloodMagicBlocks.LIFE_ESSENCE_FLUID.get(), 0); + private int liquidRequired; // mB + private boolean canBeFilled; + private int consumptionRate; + private int drainRate; + private float consumptionMultiplier; + private float efficiencyMultiplier; + private float sacrificeEfficiencyMultiplier; + private float selfSacrificeEfficiencyMultiplier; + private float capacityMultiplier = 1; + private float orbCapacityMultiplier; + private float dislocationMultiplier; + private int accelerationUpgrades; + private boolean isUpgraded; + private boolean isResultBlock; + private int bufferCapacity = FluidAttributes.BUCKET_VOLUME; + private int progress; + private int lockdownDuration; + private int demonBloodDuration; + private int totalCharge = 0; // TODO save + private int chargingRate = 0; + private int chargingFrequency = 0; + private int maxCharge = 0; + private int cooldownAfterCrafting = 60; + private RecipeBloodAltar recipe; + private AltarTier currentTierDisplayed = AltarTier.ONE; + + public BloodAltar(TileAltar tileAltar) + { + this.tileAltar = tileAltar; + } + + public void readFromNBT(CompoundNBT tagCompound) + { + if (!tagCompound.contains(Constants.NBT.EMPTY)) + { + FluidStack fluid = FluidStack.loadFluidStackFromNBT(tagCompound); + + if (fluid != null) + { + setMainFluid(new FluidStack(BloodMagicBlocks.LIFE_ESSENCE_FLUID.get(), fluid.getAmount())); +// setMainFluid(fluid); + } else + { +// setMainFluid(new FluidStack(BloodMagicBlocks.LIFE_ESSENCE_FLUID.get(), fluid.getAmount())); + } + + FluidStack fluidOut = new FluidStack(BloodMagicBlocks.LIFE_ESSENCE_FLUID.get(), tagCompound.getInt(Constants.NBT.OUTPUT_AMOUNT)); + setOutputFluid(fluidOut); + + FluidStack fluidIn = new FluidStack(BloodMagicBlocks.LIFE_ESSENCE_FLUID.get(), tagCompound.getInt(Constants.NBT.INPUT_AMOUNT)); + setInputFluid(fluidIn); + } + + internalCounter = tagCompound.getInt("internalCounter"); + altarTier = Enums.getIfPresent(AltarTier.class, tagCompound.getString(Constants.NBT.ALTAR_TIER)).or(AltarTier.ONE); + isActive = tagCompound.getBoolean(Constants.NBT.ALTAR_ACTIVE); + liquidRequired = tagCompound.getInt(Constants.NBT.ALTAR_LIQUID_REQ); + canBeFilled = tagCompound.getBoolean(Constants.NBT.ALTAR_FILLABLE); + isUpgraded = tagCompound.getBoolean(Constants.NBT.ALTAR_UPGRADED); + consumptionRate = tagCompound.getInt(Constants.NBT.ALTAR_CONSUMPTION_RATE); + drainRate = tagCompound.getInt(Constants.NBT.ALTAR_DRAIN_RATE); + consumptionMultiplier = tagCompound.getFloat(Constants.NBT.ALTAR_CONSUMPTION_MULTIPLIER); + efficiencyMultiplier = tagCompound.getFloat(Constants.NBT.ALTAR_EFFICIENCY_MULTIPLIER); + selfSacrificeEfficiencyMultiplier = tagCompound.getFloat(Constants.NBT.ALTAR_SELF_SACRIFICE_MULTIPLIER); + sacrificeEfficiencyMultiplier = tagCompound.getFloat(Constants.NBT.ALTAR_SACRIFICE_MULTIPLIER); + capacityMultiplier = tagCompound.getFloat(Constants.NBT.ALTAR_CAPACITY_MULTIPLIER); + orbCapacityMultiplier = tagCompound.getFloat(Constants.NBT.ALTAR_ORB_CAPACITY_MULTIPLIER); + dislocationMultiplier = tagCompound.getFloat(Constants.NBT.ALTAR_DISLOCATION_MULTIPLIER); + capacity = tagCompound.getInt(Constants.NBT.ALTAR_CAPACITY); + bufferCapacity = tagCompound.getInt(Constants.NBT.ALTAR_BUFFER_CAPACITY); + progress = tagCompound.getInt(Constants.NBT.ALTAR_PROGRESS); + isResultBlock = tagCompound.getBoolean(Constants.NBT.ALTAR_IS_RESULT_BLOCK); + lockdownDuration = tagCompound.getInt(Constants.NBT.ALTAR_LOCKDOWN_DURATION); + accelerationUpgrades = tagCompound.getInt(Constants.NBT.ALTAR_ACCELERATION_UPGRADES); + demonBloodDuration = tagCompound.getInt(Constants.NBT.ALTAR_DEMON_BLOOD_DURATION); + cooldownAfterCrafting = tagCompound.getInt(Constants.NBT.ALTAR_COOLDOWN_AFTER_CRAFTING); + chargingRate = tagCompound.getInt(Constants.NBT.ALTAR_CHARGE_RATE); + chargingFrequency = tagCompound.getInt(Constants.NBT.ALTAR_CHARGE_FREQUENCY); + totalCharge = tagCompound.getInt(Constants.NBT.ALTAR_TOTAL_CHARGE); + maxCharge = tagCompound.getInt(Constants.NBT.ALTAR_MAX_CHARGE); + currentTierDisplayed = Enums.getIfPresent(AltarTier.class, tagCompound.getString(Constants.NBT.ALTAR_CURRENT_TIER_DISPLAYED)).or(AltarTier.ONE); + } + + public void writeToNBT(CompoundNBT tagCompound) + { + + if (fluid != null) + fluid.writeToNBT(tagCompound); + else + tagCompound.putString(Constants.NBT.EMPTY, ""); + + if (fluidOutput != null) + tagCompound.putInt(Constants.NBT.OUTPUT_AMOUNT, fluidOutput.getAmount()); + + if (fluidInput != null) + tagCompound.putInt(Constants.NBT.INPUT_AMOUNT, fluidInput.getAmount()); + + tagCompound.putInt("internalCounter", internalCounter); + tagCompound.putString(Constants.NBT.ALTAR_TIER, altarTier.name()); + tagCompound.putBoolean(Constants.NBT.ALTAR_ACTIVE, isActive); + tagCompound.putInt(Constants.NBT.ALTAR_LIQUID_REQ, liquidRequired); + tagCompound.putBoolean(Constants.NBT.ALTAR_FILLABLE, canBeFilled); + tagCompound.putBoolean(Constants.NBT.ALTAR_UPGRADED, isUpgraded); + tagCompound.putInt(Constants.NBT.ALTAR_CONSUMPTION_RATE, consumptionRate); + tagCompound.putInt(Constants.NBT.ALTAR_DRAIN_RATE, drainRate); + tagCompound.putFloat(Constants.NBT.ALTAR_CONSUMPTION_MULTIPLIER, consumptionMultiplier); + tagCompound.putFloat(Constants.NBT.ALTAR_EFFICIENCY_MULTIPLIER, efficiencyMultiplier); + tagCompound.putFloat(Constants.NBT.ALTAR_SACRIFICE_MULTIPLIER, sacrificeEfficiencyMultiplier); + tagCompound.putFloat(Constants.NBT.ALTAR_SELF_SACRIFICE_MULTIPLIER, selfSacrificeEfficiencyMultiplier); + tagCompound.putBoolean(Constants.NBT.ALTAR_IS_RESULT_BLOCK, isResultBlock); + tagCompound.putFloat(Constants.NBT.ALTAR_CAPACITY_MULTIPLIER, capacityMultiplier); + tagCompound.putFloat(Constants.NBT.ALTAR_ORB_CAPACITY_MULTIPLIER, orbCapacityMultiplier); + tagCompound.putFloat(Constants.NBT.ALTAR_DISLOCATION_MULTIPLIER, dislocationMultiplier); + tagCompound.putInt(Constants.NBT.ALTAR_CAPACITY, capacity); + tagCompound.putInt(Constants.NBT.ALTAR_PROGRESS, progress); + tagCompound.putInt(Constants.NBT.ALTAR_BUFFER_CAPACITY, bufferCapacity); + tagCompound.putInt(Constants.NBT.ALTAR_LOCKDOWN_DURATION, lockdownDuration); + tagCompound.putInt(Constants.NBT.ALTAR_ACCELERATION_UPGRADES, accelerationUpgrades); + tagCompound.putInt(Constants.NBT.ALTAR_DEMON_BLOOD_DURATION, demonBloodDuration); + tagCompound.putInt(Constants.NBT.ALTAR_COOLDOWN_AFTER_CRAFTING, cooldownAfterCrafting); + tagCompound.putInt(Constants.NBT.ALTAR_CHARGE_RATE, chargingRate); + tagCompound.putInt(Constants.NBT.ALTAR_CHARGE_FREQUENCY, chargingFrequency); + tagCompound.putInt(Constants.NBT.ALTAR_TOTAL_CHARGE, totalCharge); + tagCompound.putInt(Constants.NBT.ALTAR_MAX_CHARGE, maxCharge); + tagCompound.putString(Constants.NBT.ALTAR_CURRENT_TIER_DISPLAYED, currentTierDisplayed.name()); + } + + public void startCycle() + { + if (tileAltar.getWorld() != null) + tileAltar.getWorld().notifyBlockUpdate(tileAltar.getPos(), tileAltar.getWorld().getBlockState(tileAltar.getPos()), tileAltar.getWorld().getBlockState(tileAltar.getPos()), 3); + + checkTier(); + + // Temporary thing to test the recipes. +// fluid.setAmount(10000); +// this.setMainFluid(new FluidStack(BloodMagicBlocks.LIFE_ESSENCE_FLUID.get(), 10000)); + + if ((fluid == null || fluid.getAmount() <= 0) && totalCharge <= 0) + return; + + if (!isActive) + progress = 0; + + ItemStack input = tileAltar.getStackInSlot(0); + + if (!input.isEmpty()) + { + // Do recipes + RecipeBloodAltar recipe = BloodMagicAPI.INSTANCE.getRecipeRegistrar().getBloodAltar(tileAltar.getWorld(), input); + if (recipe != null) + { + if (recipe.getMinimumTier() <= altarTier.ordinal()) + { + this.isActive = true; + this.recipe = recipe; + this.liquidRequired = recipe.getSyphon(); + this.consumptionRate = recipe.getConsumeRate(); + this.drainRate = recipe.getDrainRate(); + this.canBeFilled = false; + return; + } + } else if (input.getItem() instanceof IBloodOrb) + { + this.isActive = true; + this.canBeFilled = true; + return; + } + } + + isActive = false; + } + + public void update() + { +// World world = tileAltar.getWorld(); +// +// RecipeBloodAltar recipe = BloodMagicAPI.INSTANCE.getRecipeRegistrar().getBloodAltar(world, new ItemStack(Items.DIAMOND)); +// +// if (recipe != null) +// { +// System.out.println("Found a recipe!"); +// } +// +// List altarRecipes = world.getRecipeManager().getRecipesForType(BloodMagicRecipeType.ALTAR); +// +// System.out.println("There are currently " + altarRecipes.size() + " Altar Recipes loaded."); +// +// this.fluidInput = new FluidStack(BloodMagicBlocks.LIFE_ESSENCE_FLUID.get(), 1000); + +// System.out.println(this.fluidOutput.getAmount()); + + World world = tileAltar.getWorld(); + BlockPos pos = tileAltar.getPos(); + + if (world.isRemote) + return; + + // Used instead of the world time for checks that do not happen every tick + internalCounter++; + + if (lockdownDuration > 0) + lockdownDuration--; + + if (internalCounter % 20 == 0) + { + for (Direction facing : Direction.values()) + { + BlockPos newPos = pos.offset(facing); + BlockState block = world.getBlockState(newPos); + block.getBlock().onNeighborChange(block, world, newPos, pos); + } + } + if (internalCounter % (Math.max(20 - this.accelerationUpgrades, 1)) == 0) + { + int syphonMax = (int) (20 * this.dislocationMultiplier); + int fluidInputted; + int fluidOutputted; + fluidInputted = Math.min(syphonMax, -this.fluid.getAmount() + capacity); + fluidInputted = Math.min(this.fluidInput.getAmount(), fluidInputted); + this.fluid.setAmount(this.fluid.getAmount() + fluidInputted); + this.fluidInput.setAmount(this.fluidInput.getAmount() - fluidInputted); + fluidOutputted = Math.min(syphonMax, this.bufferCapacity - this.fluidOutput.getAmount()); + fluidOutputted = Math.min(this.fluid.getAmount(), fluidOutputted); + this.fluidOutput.setAmount(this.fluidOutput.getAmount() + fluidOutputted); + this.fluid.setAmount(this.fluid.getAmount() - fluidOutputted); + tileAltar.getWorld().notifyBlockUpdate(tileAltar.getPos(), tileAltar.getWorld().getBlockState(tileAltar.getPos()), tileAltar.getWorld().getBlockState(tileAltar.getPos()), 3); + } + + if (internalCounter % this.getChargingFrequency() == 0 && !this.isActive) + { + int chargeInputted = Math.min(chargingRate, this.fluid.getAmount()); + chargeInputted = Math.min(chargeInputted, maxCharge - totalCharge); + totalCharge += chargeInputted; + this.fluid.setAmount(this.fluid.getAmount() - chargeInputted); + tileAltar.getWorld().notifyBlockUpdate(tileAltar.getPos(), tileAltar.getWorld().getBlockState(tileAltar.getPos()), tileAltar.getWorld().getBlockState(tileAltar.getPos()), 3); + } + + if (internalCounter % 100 == 0 && (this.isActive || this.cooldownAfterCrafting <= 0)) + startCycle(); + + updateAltar(); + } + + private void updateAltar() + { +// System.out.println("Updating altar."); + if (!isActive) + { + if (cooldownAfterCrafting > 0) + cooldownAfterCrafting--; + return; + } + + if (!canBeFilled && recipe == null) + { + startCycle(); + return; + } + + ItemStack input = tileAltar.getStackInSlot(0); + + if (input.isEmpty()) + return; + + World world = tileAltar.getWorld(); + BlockPos pos = tileAltar.getPos(); + + if (world.isRemote) + return; + + if (!canBeFilled) + { + boolean hasOperated = false; + int stackSize = input.getCount(); + + if (totalCharge > 0) + { + int chargeDrained = Math.min(liquidRequired * stackSize - progress, totalCharge); + + totalCharge -= chargeDrained; + progress += chargeDrained; + hasOperated = true; + } + if (fluid != null && fluid.getAmount() >= 1) + { +// int liquidDrained = Math.min((int) (altarTier.ordinal() >= 1 +// ? consumptionRate * (1 + consumptionMultiplier) +// : consumptionRate), fluid.getAmount()); + int liquidDrained = Math.min((int) (consumptionRate * (1 + consumptionMultiplier)), fluid.getAmount()); + + if (liquidDrained > (liquidRequired * stackSize - progress)) + liquidDrained = liquidRequired * stackSize - progress; + + fluid.setAmount(fluid.getAmount() - liquidDrained); + progress += liquidDrained; + + hasOperated = true; + + if (internalCounter % 4 == 0 && world instanceof ServerWorld) + { + ServerWorld server = (ServerWorld) world; +// server.spawnParticle(ParticleTypes.SPLASH, (double) pos.getX() +// + worldIn.rand.nextDouble(), (double) (pos.getY() + 1), (double) pos.getZ() +// + worldIn.rand.nextDouble(), 1, 0.0D, 0.0D, 0.0D, 1.0D); + server.spawnParticle(RedstoneParticleData.REDSTONE_DUST, pos.getX() + 0.5, pos.getY() + 1.0, pos.getZ() + 0.5, 1, 0.2, 0.0, 0.2, 0.0); + } + + } else if (!hasOperated && progress > 0) + { + progress -= (int) (efficiencyMultiplier * drainRate); + + if (internalCounter % 2 == 0 && world instanceof ServerWorld) + { + ServerWorld server = (ServerWorld) world; + server.spawnParticle(ParticleTypes.LARGE_SMOKE, pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5, 1, 0.1, 0, 0.1, 0); + } + } + + if (hasOperated) + { + if (progress >= liquidRequired * stackSize) + { + ItemStack result = ItemHandlerHelper.copyStackWithSize(recipe.getOutput(), stackSize); + + BloodMagicCraftedEvent.Altar event = new BloodMagicCraftedEvent.Altar(result, input.copy()); + MinecraftForge.EVENT_BUS.post(event); + tileAltar.setInventorySlotContents(0, event.getOutput()); + progress = 0; + + if (world instanceof ServerWorld) + { + ServerWorld server = (ServerWorld) world; + server.spawnParticle(RedstoneParticleData.REDSTONE_DUST, pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5, 40, 0.3, 0, 0.3, 0); + } + + this.cooldownAfterCrafting = 30; + this.isActive = false; + } + } + } else + { + ItemStack contained = tileAltar.getStackInSlot(0); + + if (contained.isEmpty() || !(contained.getItem() instanceof IBloodOrb) || !(contained.getItem() instanceof IBindable)) + return; + + BloodOrb orb = ((IBloodOrb) contained.getItem()).getOrb(contained); + Binding binding = ((IBindable) contained.getItem()).getBinding(contained); + + if (binding == null || orb == null) + return; + + if (fluid != null && fluid.getAmount() >= 1) + { +// int liquidDrained = Math.min((int) (altarTier.ordinal() >= 2 +// ? orb.getFillRate() * (1 + consumptionMultiplier) +// : orb.getFillRate()), fluid.getAmount()); + int liquidDrained = Math.min((int) (orb.getFillRate() * (1 + consumptionMultiplier)), fluid.getAmount()); + int drain = NetworkHelper.getSoulNetwork(binding).add(liquidDrained, (int) (orb.getCapacity() * this.orbCapacityMultiplier)); + fluid.setAmount(fluid.getAmount() - drain); + + if (drain > 0 && internalCounter % 4 == 0 && world instanceof ServerWorld) + { + ServerWorld server = (ServerWorld) world; + server.spawnParticle(ParticleTypes.WITCH, pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5, 1, 0, 0, 0, 0.001); + } + } + } + + tileAltar.getWorld().notifyBlockUpdate(tileAltar.getPos(), tileAltar.getWorld().getBlockState(tileAltar.getPos()), tileAltar.getWorld().getBlockState(tileAltar.getPos()), 3); + } + + public void checkTier() + { + AltarTier tier = AltarUtil.getTier(tileAltar.getWorld(), tileAltar.getPos()); + this.altarTier = tier; + + upgrade = AltarUtil.getUpgrades(tileAltar.getWorld(), tileAltar.getPos(), tier); + + if (tier.equals(currentTierDisplayed)) + currentTierDisplayed = AltarTier.ONE; + + if (tier.equals(AltarTier.ONE)) + { + upgrade = null; + isUpgraded = false; + this.consumptionMultiplier = 0; + this.efficiencyMultiplier = 1; + this.sacrificeEfficiencyMultiplier = 0; + this.selfSacrificeEfficiencyMultiplier = 0; + this.capacityMultiplier = 1; + this.orbCapacityMultiplier = 1; + this.dislocationMultiplier = 1; + this.accelerationUpgrades = 0; + this.chargingFrequency = 20; + this.chargingRate = 0; + this.maxCharge = 0; + this.totalCharge = 0; + return; + } else if (!tier.equals(AltarTier.ONE)) + { + this.isUpgraded = true; + this.accelerationUpgrades = upgrade.getLevel(BloodRuneType.ACCELERATION); + this.consumptionMultiplier = (float) (0.20 * upgrade.getLevel(BloodRuneType.SPEED)); + this.efficiencyMultiplier = (float) Math.pow(0.85, upgrade.getLevel(BloodRuneType.EFFICIENCY)); + this.sacrificeEfficiencyMultiplier = (float) (0.10 * upgrade.getLevel(BloodRuneType.SACRIFICE)); + this.selfSacrificeEfficiencyMultiplier = (float) (0.10 * upgrade.getLevel(BloodRuneType.SELF_SACRIFICE)); + int cap = upgrade.getLevel(BloodRuneType.CAPACITY); + int cap_aug = upgrade.getLevel(BloodRuneType.AUGMENTED_CAPACITY); + this.capacityMultiplier = (float) ((1 + 0.20 * cap) * Math.pow(1.1, cap_aug * Math.pow(0.99, Math.abs(cap_aug - cap)))); + this.dislocationMultiplier = (float) (Math.pow(1.2, upgrade.getLevel(BloodRuneType.DISPLACEMENT))); + this.orbCapacityMultiplier = (float) (1 + 0.02 * upgrade.getLevel(BloodRuneType.ORB)); + this.chargingFrequency = Math.max(20 - accelerationUpgrades, 1); + this.chargingRate = (int) (10 * upgrade.getLevel(BloodRuneType.CHARGING) * (1 + consumptionMultiplier / 2)); + this.maxCharge = (int) (FluidAttributes.BUCKET_VOLUME * Math.max(0.5 * capacityMultiplier, 1) * upgrade.getLevel(BloodRuneType.CHARGING)); + } + + this.capacity = (int) (FluidAttributes.BUCKET_VOLUME * 10 * capacityMultiplier); + this.bufferCapacity = (int) (FluidAttributes.BUCKET_VOLUME * 1 * capacityMultiplier); + + if (this.fluid.getAmount() > this.capacity) + this.fluid.setAmount(this.capacity); + if (this.fluidOutput.getAmount() > this.bufferCapacity) + this.fluidOutput.setAmount(this.bufferCapacity); + if (this.fluidInput.getAmount() > this.bufferCapacity) + this.fluidInput.setAmount(this.bufferCapacity); + if (this.totalCharge > this.maxCharge) + this.totalCharge = this.maxCharge; + + tileAltar.getWorld().notifyBlockUpdate(tileAltar.getPos(), tileAltar.getWorld().getBlockState(tileAltar.getPos()), tileAltar.getWorld().getBlockState(tileAltar.getPos()), 3); + } + + public int fillMainTank(int amount) + { + int filledAmount = Math.min(capacity - fluid.getAmount(), amount); + fluid.setAmount(fluid.getAmount() + filledAmount); + + return filledAmount; + } + + public void sacrificialDaggerCall(int amount, boolean isSacrifice) + { + if (this.lockdownDuration > 0) + { + int amt = (int) Math.min(bufferCapacity - fluidInput.getAmount(), (isSacrifice + ? 1 + sacrificeEfficiencyMultiplier + : 1 + selfSacrificeEfficiencyMultiplier) * amount); + fluidInput.setAmount(fluidInput.getAmount() + amt); + } else + { + fluid.setAmount((int) (fluid.getAmount() + Math.min(capacity - fluid.getAmount(), (isSacrifice + ? 1 + sacrificeEfficiencyMultiplier + : 1 + selfSacrificeEfficiencyMultiplier) * amount))); + } + } + + public void setMainFluid(FluidStack fluid) + { + this.fluid = fluid; + } + + public void setOutputFluid(FluidStack fluid) + { + this.fluidOutput = fluid; + } + + public void setInputFluid(FluidStack fluid) + { + this.fluidInput = fluid; + } + + public AltarUpgrade getUpgrade() + { + return upgrade; + } + + public void setUpgrade(AltarUpgrade upgrade) + { + this.upgrade = upgrade; + } + + public int getCapacity() + { + return capacity; + } + + public FluidStack getFluid() + { + return fluid; + } + + public int getFluidAmount() + { + return fluid.getAmount(); + } + + public int getCurrentBlood() + { + return getFluidAmount(); + } + + public AltarTier getTier() + { + return altarTier; + } + + public void setTier(AltarTier tier) + { + this.altarTier = tier; + } + + public int getProgress() + { + return progress; + } + + public float getSacrificeMultiplier() + { + return sacrificeEfficiencyMultiplier; + } + + public float getSelfSacrificeMultiplier() + { + return selfSacrificeEfficiencyMultiplier; + } + + public float getOrbMultiplier() + { + return orbCapacityMultiplier; + } + + public float getDislocationMultiplier() + { + return dislocationMultiplier; + } + + public float getConsumptionMultiplier() + { + return consumptionMultiplier; + } + + public float getConsumptionRate() + { + return consumptionRate; + } + + public int getLiquidRequired() + { + return liquidRequired; + } + + public int getBufferCapacity() + { + return bufferCapacity; + } + + public boolean setCurrentTierDisplayed(AltarTier altarTier) + { + if (currentTierDisplayed == altarTier) + return false; + else + currentTierDisplayed = altarTier; + return true; + } + + public void addToDemonBloodDuration(int dur) + { + this.demonBloodDuration += dur; + } + + public boolean hasDemonBlood() + { + return this.demonBloodDuration > 0; + } + + public void decrementDemonBlood() + { + this.demonBloodDuration = Math.max(0, this.demonBloodDuration - 1); + } + + public void setActive() + { +// if (tileAltar.getStackInSlot(0).isEmpty()) +// { +// isActive = false; +// } + } + + public boolean isActive() + { + return isActive; + } + + public void requestPauseAfterCrafting(int amount) + { + if (this.isActive) + { + this.cooldownAfterCrafting = amount; + } + } + + public int getChargingRate() + { + return chargingRate; + } + + public int getTotalCharge() + { + return totalCharge; + } + + public int getChargingFrequency() + { + return chargingFrequency == 0 ? 1 : chargingFrequency; + } + + public int fill(FluidStack resource, boolean doFill) + { + if (resource == null || resource.getFluid() != BloodMagicBlocks.LIFE_ESSENCE_FLUID.get()) + { + return 0; + } + + if (!doFill) + { + if (fluidInput == null || fluidInput.isEmpty()) + { + return Math.min(bufferCapacity, resource.getAmount()); + } + + if (!fluidInput.isFluidEqual(resource)) + { + return 0; + } + + return Math.min(bufferCapacity - fluidInput.getAmount(), resource.getAmount()); + } + + if (fluidInput == null || fluidInput.isEmpty()) + { + fluidInput = new FluidStack(resource, Math.min(bufferCapacity, resource.getAmount())); + + return fluidInput.getAmount(); + } + + if (!fluidInput.isFluidEqual(resource)) + { + return 0; + } + int filled = bufferCapacity - fluidInput.getAmount(); + + if (resource.getAmount() < filled) + { + fluidInput.setAmount(fluidInput.getAmount() + resource.getAmount()); + filled = resource.getAmount(); + } else + { + fluidInput.setAmount(bufferCapacity); + } + + return filled; + } + + public FluidStack drain(FluidStack resource, boolean doDrain) + { + if (resource == null || !resource.isFluidEqual(fluidOutput)) + { + return FluidStack.EMPTY; + } + return drain(resource.getAmount(), doDrain); + } + + public FluidStack drain(int maxDrain, boolean doDrain) + { + if (fluidOutput == null) + { + return FluidStack.EMPTY; + } + + int drained = maxDrain; + if (fluidOutput.getAmount() < drained) + { + drained = fluidOutput.getAmount(); + } + + FluidStack stack = new FluidStack(fluidOutput, drained); + if (doDrain) + { + fluidOutput.setAmount(fluidOutput.getAmount() - drained); + } + return stack; + } + +// @Override +// public IFluidTankProperties[] getTankProperties() +// { +// return new IFluidTankProperties[] +// { new FluidTankPropertiesWrapper(new FluidTank(fluid, capacity)) }; +// } + + public AltarTier getCurrentTierDisplayed() + { + return currentTierDisplayed; + } + + public static class VariableSizeFluidHandler implements IFluidHandler + { + BloodAltar altar; + + public VariableSizeFluidHandler(BloodAltar altar) + { + this.altar = altar; + } + + @Override + public int getTanks() + { + // TODO Auto-generated method stub + return 1; + } + + @Override + public FluidStack getFluidInTank(int tank) + { + return altar.fluid; + } + + @Override + public int getTankCapacity(int tank) + { + return altar.getCapacity(); + } + + @Override + public boolean isFluidValid(int tank, FluidStack stack) + { + return stack.getFluid() == BloodMagicBlocks.LIFE_ESSENCE_FLUID.get(); + } + + @Override + public int fill(FluidStack resource, FluidAction action) + { + return altar.fill(resource, action == FluidAction.EXECUTE); + } + + @Override + public FluidStack drain(FluidStack resource, FluidAction action) + { + return altar.drain(resource, action == FluidAction.EXECUTE); + } + + @Override + public FluidStack drain(int maxDrain, FluidAction action) + { + return altar.drain(maxDrain, action == FluidAction.EXECUTE); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/altar/ComponentType.java b/src/main/java/wayoftime/bloodmagic/altar/ComponentType.java new file mode 100644 index 00000000..30cae9dc --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/altar/ComponentType.java @@ -0,0 +1,37 @@ +package wayoftime.bloodmagic.altar; + +import java.util.Locale; + +/** + * List of different components used to construct different tiers of altars. + */ +public enum ComponentType +{ + GLOWSTONE, BLOODSTONE, BEACON, BLOODRUNE, CRYSTAL, NOTAIR; + + private static final String BASE = "chat.bloodmagic.altar.comp."; + private String key; + + ComponentType() + { + this.key = BASE + name().toLowerCase(Locale.ENGLISH); + } + + public String getKey() + { + return key; + } + + public static ComponentType getType(String type) + { + for (ComponentType t : values()) + { + if (t.name().equalsIgnoreCase(type)) + { + return t; + } + } + + return null; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/altar/IBloodAltar.java b/src/main/java/wayoftime/bloodmagic/altar/IBloodAltar.java new file mode 100644 index 00000000..08f8253c --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/altar/IBloodAltar.java @@ -0,0 +1,61 @@ +package wayoftime.bloodmagic.altar; + +/** + * Any Tile that implements this will be considered to be a Blood Altar + */ +public interface IBloodAltar +{ + int getCapacity(); + + int getCurrentBlood(); + + /** + * @return - The actual human-readable tier (ordinal + 1) of the altar + */ + int getTier(); + + int getProgress(); + + float getSacrificeMultiplier(); + + float getSelfSacrificeMultiplier(); + + float getOrbMultiplier(); + + float getDislocationMultiplier(); + + float getConsumptionMultiplier(); + + float getConsumptionRate(); + + int getChargingRate(); + + int getChargingFrequency(); + + int getTotalCharge(); + + int getLiquidRequired(); + + int getBufferCapacity(); + + void sacrificialDaggerCall(int amount, boolean isSacrifice); + + void startCycle(); + + void checkTier(); + + boolean isActive(); + + void setActive(); + + int fillMainTank(int amount); + + /** + * Will set the altar to initiate a cooldown cycle after it crafts before + * starting to craft again, giving the user time to interact with the altar. + * This can only be set while the altar is not active. + * + * @param cooldown - How long the cooldown should last + */ + void requestPauseAfterCrafting(int cooldown); +} diff --git a/src/main/java/wayoftime/bloodmagic/altar/IBloodRune.java b/src/main/java/wayoftime/bloodmagic/altar/IBloodRune.java new file mode 100644 index 00000000..e5cde2ba --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/altar/IBloodRune.java @@ -0,0 +1,16 @@ +package wayoftime.bloodmagic.altar; + +import javax.annotation.Nullable; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import wayoftime.bloodmagic.block.enums.BloodRuneType; + +/** + * Any Block that implements this interface wil be considered as Blood Runes for the Blood Altar + */ +public interface IBloodRune +{ + @Nullable + BloodRuneType getBloodRune(World world, BlockPos pos); +} diff --git a/src/main/java/wayoftime/bloodmagic/anointment/Anointment.java b/src/main/java/wayoftime/bloodmagic/anointment/Anointment.java new file mode 100644 index 00000000..1476eb9c --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/anointment/Anointment.java @@ -0,0 +1,317 @@ +package wayoftime.bloodmagic.anointment; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; +import java.util.function.Consumer; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; +import com.google.common.reflect.TypeToken; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.annotations.JsonAdapter; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.ai.attributes.Attribute; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.ListNBT; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Util; +import net.minecraft.util.registry.Registry; +import net.minecraftforge.registries.ForgeRegistryEntry; +import wayoftime.bloodmagic.core.living.LivingUpgrade.Level; + +@JsonAdapter(Anointment.Deserializer.class) +public class Anointment extends ForgeRegistryEntry +{ + public static final Anointment DUMMY = new Anointment(new ResourceLocation("dummy")); + + private final ResourceLocation key; + private final Set incompatible; + private String translationKey = null; + private final Map bonuses; + private IAttributeProvider attributeProvider; + private IDamageProvider damageProvider; + private boolean consumeOnAttack = false; + private boolean consumeOnUseFinish = false; + private boolean consumeOnHarvest = false; + + public Anointment(ResourceLocation key) + { + this.key = key; + this.incompatible = Sets.newHashSet(); + this.bonuses = Maps.newHashMap(); + } + + public Anointment withBonusSet(String id, Consumer> modifiers) + { +// List values = DefaultedList.of(); + + List values = new ArrayList(); + modifiers.accept(values); + + bonuses.put(id, new Bonus(id, values)); + return this; + } + + public Number getBonusValue(String id, int level) + { + List modifiers = bonuses.getOrDefault(id, Bonus.DEFAULT).modifiers; + if (modifiers.isEmpty() || level == 0) + return 0; + + return level <= modifiers.size() ? modifiers.get(level - 1) : modifiers.get(modifiers.size() - 1); + } + + public ResourceLocation getKey() + { + return key; + } + + @Override + public String toString() + { + return key.toString(); + } + + public boolean applyAnointment(AnointmentHolder holder, ItemStack stack, int level) + { + if (level < 0) + { + return false; + } + + IAttributeProvider prov = this.getAttributeProvider(); + if (prov == null) + { + return true; + } + + Multimap modifiers = HashMultimap.create(); + modifiers.putAll(stack.getItem().getAttributeModifiers(EquipmentSlotType.MAINHAND, stack)); + + this.getAttributeProvider().handleAttributes(holder, modifiers, UUID.nameUUIDFromBytes(this.getKey().toString().getBytes()), this, level); + + for (Entry entry : modifiers.entries()) + { + stack.addAttributeModifier(entry.getKey(), entry.getValue(), EquipmentSlotType.MAINHAND); + } + + return true; + } + + public boolean removeAnointment(AnointmentHolder holder, ItemStack stack, EquipmentSlotType slot) + { + IAttributeProvider provider = this.getAttributeProvider(); + if (provider != null) + { + Multimap modifiers = HashMultimap.create(); + this.getAttributeProvider().handleAttributes(holder, modifiers, UUID.nameUUIDFromBytes(this.getKey().toString().getBytes()), this, 1); + + if (stack.hasTag() && stack.getTag().contains("AttributeModifiers", 9)) + { +// multimap = HashMultimap.create(); + ListNBT listnbt = stack.getTag().getList("AttributeModifiers", 10); + List removeList = new ArrayList(); + + for (int i = 0; i < listnbt.size(); i++) + { + CompoundNBT compoundnbt = listnbt.getCompound(i); + if (!compoundnbt.contains("Slot", 8) || compoundnbt.getString("Slot").equals(slot.getName())) + { + Optional optional = Registry.ATTRIBUTE.getOptional(ResourceLocation.tryCreate(compoundnbt.getString("AttributeName"))); + if (optional.isPresent()) + { + AttributeModifier attributemodifier = AttributeModifier.read(compoundnbt); + if (attributemodifier != null && attributemodifier.getID().getLeastSignificantBits() != 0L && attributemodifier.getID().getMostSignificantBits() != 0L) + { + for (Entry entry : modifiers.entries()) + { + if (entry.getKey().equals(optional.get()) && entry.getValue().getID().equals(attributemodifier.getID())) + { + removeList.add(i); + } + } +// multimap.put(optional.get(), attributemodifier); + } + } + } + } + + for (int index : removeList) + { + listnbt.remove(index); + } + + if (removeList.size() >= 1) + { + stack.getTag().put("AttributeModifiers", listnbt); + if (listnbt.isEmpty()) + { + stack.getTag().remove("AttributeModifiers"); + } + } + } + +// for (Entry entry : modifiers.entries()) +// { +// +// } + } + return false; + } + + public boolean isCompatible(ResourceLocation otherUpgrade) + { + return !incompatible.contains(otherUpgrade); + } + + public Anointment addIncompatibility(ResourceLocation key, ResourceLocation... otherKeys) + { + incompatible.add(key); + Collections.addAll(incompatible, otherKeys); + return this; + } + + public String getTranslationKey() + { + return translationKey == null ? translationKey = Util.makeTranslationKey("anointment", key) : translationKey; + } + + public Anointment setConsumeOnAttack() + { + this.consumeOnAttack = true; + return this; + } + + public boolean consumeOnAttack() + { + return this.consumeOnAttack; + } + + public Anointment setConsumeOnUseFinish() + { + this.consumeOnUseFinish = true; + return this; + } + + public boolean consumeOnUseFinish() + { + return this.consumeOnUseFinish; + } + + public Anointment setConsumeOnHarvest() + { + this.consumeOnHarvest = true; + return this; + } + + public boolean consumeOnHarvest() + { + return this.consumeOnHarvest; + } + + public Anointment withAttributeProvider(IAttributeProvider attributeProvider) + { + this.attributeProvider = attributeProvider; + return this; + } + + public IAttributeProvider getAttributeProvider() + { + return attributeProvider; + } + + public Anointment withDamageProvider(IDamageProvider damageProvider) + { + this.damageProvider = damageProvider; + return this; + } + + public IDamageProvider getDamageProvider() + { + return damageProvider; + } + + public interface IAttributeProvider + { + void handleAttributes(AnointmentHolder holder, Multimap modifiers, UUID uuid, Anointment anoint, int level); + } + + public interface IDamageProvider + { + double getAdditionalDamage(PlayerEntity player, ItemStack weapon, double damage, AnointmentHolder holder, LivingEntity attacked, Anointment anoint, int level); + } + + public static class Bonus + { + private static final Bonus DEFAULT = new Bonus("null", Collections.emptyList()); + + private final String id; + private final List modifiers; + + public Bonus(String id, List modifiers) + { + this.id = id; + this.modifiers = modifiers; + } + + public String getId() + { + return id; + } + } + + public static class Deserializer implements JsonDeserializer + { + @Override + public Anointment deserialize(JsonElement element, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException + { + JsonObject json = element.getAsJsonObject(); + ResourceLocation id = new ResourceLocation(json.getAsJsonPrimitive("id").getAsString()); + List levels = context.deserialize(json.getAsJsonArray("levels"), new TypeToken>() + { + }.getType()); + boolean negative = json.has("negative") && json.getAsJsonPrimitive("negative").getAsBoolean(); + + Anointment upgrade = new Anointment(id); +// if (negative) +// upgrade.asDowngrade(); + +// if (json.has("incompatibilities")) +// { +// String[] incompatibilities = context.deserialize(json.getAsJsonArray("incompatibilities"), String[].class); +// for (String incompatible : incompatibilities) +// upgrade.addIncompatibility(new ResourceLocation(incompatible)); +// } + + if (json.has("bonuses")) + { + Map bonuses = context.deserialize(json.getAsJsonObject("bonuses"), new TypeToken>() + { + }.getType()); + bonuses.forEach((k, v) -> upgrade.withBonusSet(k, numbers -> Collections.addAll(numbers, v))); + } + + return upgrade; + } + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/anointment/AnointmentColor.java b/src/main/java/wayoftime/bloodmagic/anointment/AnointmentColor.java new file mode 100644 index 00000000..d8c3c248 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/anointment/AnointmentColor.java @@ -0,0 +1,19 @@ +package wayoftime.bloodmagic.anointment; + +import net.minecraft.client.renderer.color.IItemColor; +import net.minecraft.item.ItemStack; +import wayoftime.bloodmagic.common.item.ItemAnointmentProvider; + +public class AnointmentColor implements IItemColor +{ + @Override + public int getColor(ItemStack stack, int layer) + { + if (layer == 1 && stack.getItem() instanceof ItemAnointmentProvider) + { + return ((ItemAnointmentProvider) stack.getItem()).getColor(); + } + + return 0xFFFFFF; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/anointment/AnointmentData.java b/src/main/java/wayoftime/bloodmagic/anointment/AnointmentData.java new file mode 100644 index 00000000..5f23678a --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/anointment/AnointmentData.java @@ -0,0 +1,45 @@ +package wayoftime.bloodmagic.anointment; + +public class AnointmentData +{ + private int level; + private int damage; + private int maxDamage; + + public AnointmentData(int level, int damage, int maxDamage) + { + this.level = level; + this.damage = damage; + this.maxDamage = maxDamage; + } + + public int getLevel() + { + return this.level; + } + + public int getDamage() + { + return this.damage; + } + + public int getMaxDamage() + { + return this.maxDamage; + } + + public void damage(int amount) + { + this.damage = Math.min(damage + amount, maxDamage); + } + + public boolean isMaxDamage() + { + return damage >= maxDamage; + } + + public String getDamageString() + { + return "" + (maxDamage - damage) + "/" + maxDamage; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/anointment/AnointmentHolder.java b/src/main/java/wayoftime/bloodmagic/anointment/AnointmentHolder.java new file mode 100644 index 00000000..fe8e19fc --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/anointment/AnointmentHolder.java @@ -0,0 +1,316 @@ +package wayoftime.bloodmagic.anointment; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; + +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.ListNBT; +import net.minecraft.util.Hand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import wayoftime.bloodmagic.anointment.Anointment.IDamageProvider; +import wayoftime.bloodmagic.core.AnointmentRegistrar; +import wayoftime.bloodmagic.util.Constants; + +public class AnointmentHolder +{ + private final Map anointments; + + public AnointmentHolder(Map anointments) + { + this.anointments = anointments; + } + + public AnointmentHolder() + { + this(Maps.newHashMap()); + } + + public boolean isEmpty() + { + return anointments.isEmpty(); + } + + // Returns true if the anointment is applied successfully. + public boolean applyAnointment(ItemStack stack, Anointment anointment, AnointmentData data) + { + if (canApplyAnointment(stack, anointment, data)) + { + anointments.put(anointment, data); + anointment.applyAnointment(this, stack, data.getLevel()); + return true; + } + + return false; + } + + public boolean canApplyAnointment(ItemStack stack, Anointment anointment, AnointmentData data) + { + ResourceLocation key = anointment.getKey(); + for (Anointment containedAnoint : anointments.keySet()) + { + ResourceLocation containedKey = containedAnoint.getKey(); + if (!anointment.isCompatible(containedKey) || !containedAnoint.isCompatible(key)) + { + return false; + } + } + + if (anointments.containsKey(anointment)) + { + AnointmentData prevData = anointments.get(anointment); + int level = prevData.getLevel(); + int remainingDur = prevData.getMaxDamage() - prevData.getDamage(); + if (level < data.getLevel() || (level == data.getLevel() && remainingDur < (data.getMaxDamage() - data.getDamage()))) + { + return true; + } else + { + return false; + } + } + + return true; + } + + public int getAnointmentLevel(Anointment anointment) + { + if (anointments.containsKey(anointment)) + { + return anointments.get(anointment).getLevel(); + } + + return 0; + } + + public boolean consumeAnointmentDurabilityOnHit(ItemStack weaponStack, EquipmentSlotType type) + { +// System.out.println("Attempting consumption"); + boolean didConsume = false; + List removedAnointments = new ArrayList(); + for (Entry entry : anointments.entrySet()) + { + Anointment annointment = entry.getKey(); + if (annointment.consumeOnAttack()) + { + AnointmentData data = entry.getValue(); + data.damage(1); + didConsume = true; + if (data.isMaxDamage()) + { + removedAnointments.add(annointment); + } + } + } + + for (Anointment anointment : removedAnointments) + { + removeAnointment(weaponStack, type, anointment); + } + + return didConsume; + } + + public boolean consumeAnointmentDurabilityOnUseFinish(ItemStack weaponStack, EquipmentSlotType type) + { + boolean didConsume = false; + List removedAnointments = new ArrayList(); + for (Entry entry : anointments.entrySet()) + { + Anointment annointment = entry.getKey(); + if (annointment.consumeOnUseFinish()) + { + AnointmentData data = entry.getValue(); + data.damage(1); + didConsume = true; + if (data.isMaxDamage()) + { + removedAnointments.add(annointment); + } + } + } + + for (Anointment anointment : removedAnointments) + { + removeAnointment(weaponStack, type, anointment); + } + + return didConsume; + } + + public boolean consumeAnointmentDurabilityOnHarvest(ItemStack weaponStack, EquipmentSlotType type) + { + boolean didConsume = false; + List removedAnointments = new ArrayList(); + for (Entry entry : anointments.entrySet()) + { + Anointment annointment = entry.getKey(); + if (annointment.consumeOnHarvest()) + { + AnointmentData data = entry.getValue(); + data.damage(1); + didConsume = true; + if (data.isMaxDamage()) + { + removedAnointments.add(annointment); + } + } + } + + for (Anointment anointment : removedAnointments) + { + removeAnointment(weaponStack, type, anointment); + } + + return didConsume; + } + + // Called when the specified anointment is to be removed. Occurs if the + // anointment runs out of uses or if removed via another source. + public boolean removeAnointment(ItemStack weaponStack, EquipmentSlotType type, Anointment anointment) + { + anointments.remove(anointment); + anointment.removeAnointment(this, weaponStack, type); + return true; + } + + public Map getAnointments() + { + return ImmutableMap.copyOf(anointments); + } + + public double getAdditionalDamage(PlayerEntity player, ItemStack weapon, double damage, LivingEntity attacked) + { + double additionalDamage = 0; + for (Entry entry : anointments.entrySet()) + { + IDamageProvider prov = entry.getKey().getDamageProvider(); + if (prov != null) + { + additionalDamage += prov.getAdditionalDamage(player, weapon, damage, this, attacked, entry.getKey(), entry.getValue().getLevel()); + } + } + return additionalDamage; + } + + public CompoundNBT serialize() + { + CompoundNBT compound = new CompoundNBT(); + ListNBT statList = new ListNBT(); + anointments.forEach((k, v) -> { + CompoundNBT anoint = new CompoundNBT(); + anoint.putString("key", k.getKey().toString()); + anoint.putInt("level", v.getLevel()); + anoint.putInt("damage", v.getDamage()); + anoint.putInt("max_damage", v.getMaxDamage()); + statList.add(anoint); + }); + compound.put("anointments", statList); +// +// compound.putInt("maxPoints", maxPoints); + + return compound; + } + + public void deserialize(CompoundNBT nbt) + { + ListNBT statList = nbt.getList("anointments", 10); + statList.forEach(tag -> { + if (!(tag instanceof CompoundNBT)) + return; + Anointment anoint = AnointmentRegistrar.ANOINTMENT_MAP.getOrDefault(new ResourceLocation(((CompoundNBT) tag).getString("key")), Anointment.DUMMY); +// LivingUpgrade upgrade = LivingArmorRegistrar.UPGRADE_MAP.getOrDefault(new ResourceLocation(((CompoundNBT) tag).getString("key")), LivingUpgrade.DUMMY); + if (anoint == Anointment.DUMMY) + return; +// double experience = ((CompoundNBT) tag).getDouble("exp"); + AnointmentData data = new AnointmentData(((CompoundNBT) tag).getInt("level"), ((CompoundNBT) tag).getInt("damage"), ((CompoundNBT) tag).getInt("max_damage")); + anointments.put(anoint, data); + }); +// +// maxPoints = nbt.getInt("maxPoints"); + } + + public static AnointmentHolder fromNBT(CompoundNBT holderTag) + { + AnointmentHolder holder = new AnointmentHolder(); + holder.deserialize(holderTag); + return holder; + } + + public static AnointmentHolder fromItemStack(ItemStack stack) + { + CompoundNBT nbtTag = stack.getTag(); + if (nbtTag == null) + { + return null; + } + + CompoundNBT holderTag = nbtTag.getCompound(Constants.NBT.ANOINTMENTS); + if (holderTag != null) + { + return fromNBT(holderTag); + } + + return null; + } + + public void toItemStack(ItemStack stack) + { + CompoundNBT nbtTag = stack.getOrCreateTag(); + CompoundNBT childTag = this.serialize(); + + nbtTag.put(Constants.NBT.ANOINTMENTS, childTag); + } + + public static AnointmentHolder fromPlayer(PlayerEntity player, Hand hand) + { + return fromPlayer(player, hand, false); + } + + public static AnointmentHolder fromPlayer(PlayerEntity player, Hand hand, boolean createNew) + { + ItemStack heldItem = player.getHeldItem(hand); + + AnointmentHolder holder = fromItemStack(heldItem); + return holder == null && createNew ? new AnointmentHolder() : holder; + } + + public static void toPlayer(PlayerEntity player, Hand hand, AnointmentHolder holder) + { + ItemStack heldItem = player.getHeldItem(hand); + holder.toItemStack(heldItem); + } + + public static void appendAnointmentTooltip(AnointmentHolder holder, List tooltip) + { + if (holder != null) + { +// System.out.println("Holder is not null. Size: " + holder.getAnointments().size()); +// if (trainable) +// tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.livingarmour.upgrade.points", stats.getUsedPoints(), stats.getMaxPoints()).mergeStyle(TextFormatting.GOLD)); + + holder.getAnointments().forEach((k, v) -> { + +// if (k.getLevel(v.intValue()) <= 0) +// return; + boolean sneaking = Screen.hasShiftDown(); +// if (!InputUtil.isKeyPressed(MinecraftClient.getInstance().getWindow().getHandle(), 340) || k.getNextRequirement(v) == 0) + if (!sneaking) + tooltip.add(new TranslationTextComponent("%s %s", new TranslationTextComponent(k.getTranslationKey()), new TranslationTextComponent("enchantment.level." + v.getLevel()))); + else + tooltip.add(new TranslationTextComponent("%s %s", new TranslationTextComponent(k.getTranslationKey()), (": (" + v.getDamageString() + ")"))); + }); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/anointment/AnointmentUtil.java b/src/main/java/wayoftime/bloodmagic/anointment/AnointmentUtil.java new file mode 100644 index 00000000..71ff1ed1 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/anointment/AnointmentUtil.java @@ -0,0 +1,6 @@ +package wayoftime.bloodmagic.anointment; + +public class AnointmentUtil +{ + +} diff --git a/src/main/java/wayoftime/bloodmagic/api/IBloodMagicAPI.java b/src/main/java/wayoftime/bloodmagic/api/IBloodMagicAPI.java new file mode 100644 index 00000000..d0f85ddb --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/api/IBloodMagicAPI.java @@ -0,0 +1,143 @@ +package wayoftime.bloodmagic.api; + +import java.util.function.Predicate; + +import javax.annotation.Nonnull; + +import org.apache.logging.log4j.LogManager; + +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.LazyValue; + +/** + * The main interface between a plugin and Blood Magic's internals. + * + * This API is intended for compatibility between other mods and Blood + * Magic. More advanced integration is out of the scope of this API and are + * considered "addons". + * + * Use INSTANCE to get an instance of the API without actually implementing + * anything + */ +public interface IBloodMagicAPI +{ + LazyValue INSTANCE = new LazyValue<>(() -> { + try + { + return (IBloodMagicAPI) Class.forName("wayoftime.bloodmagic.impl.BloodMagicAPI").getDeclaredField("INSTANCE").get(null); + } catch (ReflectiveOperationException e) + { + LogManager.getLogger().warn("Unable to find BloodMagicAPI, using a dummy instance instead..."); + return new IBloodMagicAPI() + { + }; + } + }); + + /** + * Retrieves the instance of the blacklist. + * + * @return the active {@link IBloodMagicBlacklist} instance + */ + @Nonnull + default IBloodMagicBlacklist getBlacklist() + { + return new IBloodMagicBlacklist() + { + }; + }; + + /** + * Retrieves the instance of the value manager. + * + * @return the active {@link IBloodMagicValueManager} instance + */ + @Nonnull + default IBloodMagicValueManager getValueManager() + { + return new IBloodMagicValueManager() + { + }; + } + + /** + * Registers a {@link BlockState} as a given component for the Blood Altar. + *

+ * Valid component types: + *

    + *
  • GLOWSTONE
  • + *
  • BLOODSTONE
  • + *
  • BEACON
  • + *
  • BLOODRUNE
  • + *
  • CRYSTAL
  • + *
  • NOTAIR
  • + *
+ * + * @param state The state to register + * @param componentType The type of Blood Altar component to register as. + */ + default void registerAltarComponent(@Nonnull BlockState state, @Nonnull String componentType) + { + } + + /** + * Removes a {@link BlockState} from the component mappings + *

+ * Valid component types: + *

    + *
  • GLOWSTONE
  • + *
  • BLOODSTONE
  • + *
  • BEACON
  • + *
  • BLOODRUNE
  • + *
  • CRYSTAL
  • + *
  • NOTAIR
  • + *
+ * + * @param state The state to unregister + * @param componentType The type of Blood Altar component to unregister from. + */ + default void unregisterAltarComponent(@Nonnull BlockState state, @Nonnull String componentType) + { + } + + /** + * Registers a {@link Predicate} for tranquility handling + *

+ * Valid tranquility types: + *

    + *
  • PLANT
  • + *
  • CROP
  • + *
  • TREE
  • + *
  • EARTHEN
  • + *
  • WATER
  • + *
  • FIRE
  • + *
  • LAVA
  • + *
+ * + * @param predicate Predicate to be used for the handler (goes to + * ITranquilityHandler) + * @param tranquilityType Tranquility type that the handler holds + * @param value The amount of tranquility that the handler has + */ + default void registerTranquilityHandler(Predicate predicate, String tranquilityType, double value) + { + } + + /** + * Gets the total Will that a Player contains + *

+ * Valid tranquility types: + *

    + *
  • DEFAULT
  • + *
  • CORROSIVE
  • + *
  • DESTRUCTIVE
  • + *
  • VENGEFUL
  • + *
  • STEADFAST
  • + *
+ */ + default double getTotalDemonWill(String willType, PlayerEntity player) + { + return 0; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/api/IBloodMagicBlacklist.java b/src/main/java/wayoftime/bloodmagic/api/IBloodMagicBlacklist.java new file mode 100644 index 00000000..57ac89b2 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/api/IBloodMagicBlacklist.java @@ -0,0 +1,61 @@ +package wayoftime.bloodmagic.api; + +import javax.annotation.Nonnull; + +import net.minecraft.block.BlockState; +import net.minecraft.util.ResourceLocation; + +/** + * Allows blacklisting of various objects from different Blood Magic systems. + */ +public interface IBloodMagicBlacklist +{ + + /** + * Blacklists a given {@link BlockState} from being teleposed. + * + * @param state The {@link BlockState} to blacklist. + */ + default void addTeleposer(@Nonnull BlockState state) + { + }; + + /** + * Blacklists a {@link net.minecraft.entity.Entity} from being teleposed based + * on the given registry name. + * + * @param entityId The registry name to blacklist. + */ + default void addTeleposer(@Nonnull ResourceLocation entityId) + { + }; + + /** + * Blacklists a given {@link BlockState} from being transposed. + * + * @param state The {@link BlockState} to blacklist. + */ + default void addTransposition(@Nonnull BlockState state) + { + }; + + /** + * Blacklists a given {@link BlockState} from being accelerated by the growth + * enhancement ritual and sigil. + * + * @param state The {@link BlockState} to blacklist. + */ + default void addGreenGrove(@Nonnull BlockState state) + { + }; + + /** + * Blacklists a {@link net.minecraft.entity.Entity} from being sacrificed via + * the Well of Suffering ritual. + * + * @param entityId The registry name to blacklist. + */ + default void addWellOfSuffering(@Nonnull ResourceLocation entityId) + { + }; +} diff --git a/src/main/java/wayoftime/bloodmagic/api/IBloodMagicValueManager.java b/src/main/java/wayoftime/bloodmagic/api/IBloodMagicValueManager.java new file mode 100644 index 00000000..da1676d6 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/api/IBloodMagicValueManager.java @@ -0,0 +1,45 @@ +package wayoftime.bloodmagic.api; + +import javax.annotation.Nonnegative; +import javax.annotation.Nonnull; + +import net.minecraft.block.BlockState; +import net.minecraft.util.ResourceLocation; + +/** + * Allows value modification for various features of Blood Magic such as + * Sacrificial values. + */ +public interface IBloodMagicValueManager +{ + + /** + * Sets the amount of LP received per health point from sacrificing the given + * entity. By default, this is 25. Setting the value to 0 effectively disables + * sacrificing. + * + * @param entityId The registry name of the entity. + * @param value The amount of LP per health point to receive upon sacrifice. + */ + default void setSacrificialValue(@Nonnull ResourceLocation entityId, @Nonnegative int value) {} + + /** + * Sets the Tranquility value of a given {@link BlockState}. + *

+ * Valid tranquility types: + *

    + *
  • PLANT
  • + *
  • CROP
  • + *
  • TREE
  • + *
  • EARTHEN
  • + *
  • WATER
  • + *
  • FIRE
  • + *
  • LAVA
  • + *
+ * + * @param state The {@link BlockState} to set the value of. + * @param tranquilityType The type of Tranquility this block should provide. + * @param value The amount of tranquility this block should provide. + */ + default void setTranquility(@Nonnull BlockState state, @Nonnull String tranquilityType, double value) {} +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/api/compat/EnumDemonWillType.java b/src/main/java/wayoftime/bloodmagic/api/compat/EnumDemonWillType.java new file mode 100644 index 00000000..87829daf --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/api/compat/EnumDemonWillType.java @@ -0,0 +1,46 @@ +package wayoftime.bloodmagic.api.compat; + +import net.minecraft.util.IStringSerializable; + +import java.util.Locale; + +public enum EnumDemonWillType implements IStringSerializable +{ + DEFAULT("default"), + CORROSIVE("corrosive"), + DESTRUCTIVE("destructive"), + VENGEFUL("vengeful"), + STEADFAST("steadfast"); + + public final String name; + + EnumDemonWillType(String name) + { + this.name = name; + } + + @Override + public String toString() + { + return name().toLowerCase(Locale.ENGLISH); + } + + @Override + public String getString() + { + return this.toString(); + } + + public static EnumDemonWillType getType(String type) + { + for (EnumDemonWillType t : values()) + { + if (t.name().equalsIgnoreCase(type)) + { + return t; + } + } + + return null; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/api/compat/IAltarReader.java b/src/main/java/wayoftime/bloodmagic/api/compat/IAltarReader.java new file mode 100644 index 00000000..7eb672fd --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/api/compat/IAltarReader.java @@ -0,0 +1,10 @@ +package wayoftime.bloodmagic.api.compat; + +/** + * Any item that implements this interface will not be pulled into the Altar on + * right click. + */ +public interface IAltarReader +{ + +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/api/compat/ICustomAlchemyConsumable.java b/src/main/java/wayoftime/bloodmagic/api/compat/ICustomAlchemyConsumable.java new file mode 100644 index 00000000..10822cee --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/api/compat/ICustomAlchemyConsumable.java @@ -0,0 +1,12 @@ +package wayoftime.bloodmagic.api.compat; + +import net.minecraft.item.ItemStack; + +/** + * An interface for items that have custom drainage behaviour when used in + * certain alchemy recipes. + */ +public interface ICustomAlchemyConsumable +{ + ItemStack drainUseOnAlchemyCraft(ItemStack stack); +} diff --git a/src/main/java/wayoftime/bloodmagic/api/compat/IDemonWill.java b/src/main/java/wayoftime/bloodmagic/api/compat/IDemonWill.java new file mode 100644 index 00000000..0957789f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/api/compat/IDemonWill.java @@ -0,0 +1,47 @@ +package wayoftime.bloodmagic.api.compat; + +import net.minecraft.item.ItemStack; + +/** + * Interface for Items that contain Will + */ +public interface IDemonWill +{ + /** + * Obtains the amount of Will an ItemStack contains. + * + * @param willStack - The stack to retrieve the Will from + * @return - The amount of Will an ItemStack contains + */ + double getWill(EnumDemonWillType type, ItemStack willStack); + + /** + * Sets the amount of Will in a given ItemStack. + * + * @param willStack - The ItemStack of the Will + * @param will - The amount of will to set the stack to + * @return True if successfully set. + */ + boolean setWill(EnumDemonWillType type, ItemStack willStack, double will); + + /** + * Drains the demonic will from the willStack. If all of the will is drained, + * the willStack will be removed. + * + * @param willStack - The ItemStack of the will + * @param drainAmount - The amount of Will to drain + * @return The amount of will drained. + */ + double drainWill(EnumDemonWillType type, ItemStack willStack, double drainAmount); + + /** + * Creates a new ItemStack with the specified number of will. Implementation + * should respect the number requested. + * + * @param number - The amount of Will to create the Stack with. + * @return - An ItemStack with the set amount of Will + */ + ItemStack createWill(double number); + + EnumDemonWillType getType(ItemStack stack); +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/api/compat/IDemonWillConduit.java b/src/main/java/wayoftime/bloodmagic/api/compat/IDemonWillConduit.java new file mode 100644 index 00000000..b069377b --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/api/compat/IDemonWillConduit.java @@ -0,0 +1,19 @@ +package wayoftime.bloodmagic.api.compat; + +/** + * Implement this interface on a Block that can accept and store Demonic Will. + */ +public interface IDemonWillConduit +{ + int getWeight(); + + double fillDemonWill(EnumDemonWillType type, double amount, boolean doFill); + + double drainDemonWill(EnumDemonWillType type, double amount, boolean doDrain); + + boolean canFill(EnumDemonWillType type); + + boolean canDrain(EnumDemonWillType type); + + double getCurrentWill(EnumDemonWillType type); +} diff --git a/src/main/java/wayoftime/bloodmagic/api/compat/IDemonWillGem.java b/src/main/java/wayoftime/bloodmagic/api/compat/IDemonWillGem.java new file mode 100644 index 00000000..2e0ef4e9 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/api/compat/IDemonWillGem.java @@ -0,0 +1,32 @@ +package wayoftime.bloodmagic.api.compat; + +import net.minecraft.item.ItemStack; + +/** + * Interface for Items that store Will + */ +public interface IDemonWillGem +{ + /** + * @param willGemStack - The ItemStack for this demon will gem. + * @param willStack - The ItemStack for the will. Item should extend + * IDemonWill + * @return - The remainder willStack after the will has been absorbed into the + * gem. Return null if there is no will left in the stack. + */ + ItemStack fillDemonWillGem(ItemStack willGemStack, ItemStack willStack); + + /** + * Returns the number of souls that are left in the soul gem. Returns a double + * because souls can be fractionally drained. + */ + double getWill(EnumDemonWillType type, ItemStack willGemStack); + + void setWill(EnumDemonWillType type, ItemStack willGemStack, double amount); + + int getMaxWill(EnumDemonWillType type, ItemStack willGemStack); + + double drainWill(EnumDemonWillType type, ItemStack stack, double drainAmount, boolean doDrain); + + double fillWill(EnumDemonWillType type, ItemStack stack, double fillAmount, boolean doFill); +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/api/compat/IDemonWillViewer.java b/src/main/java/wayoftime/bloodmagic/api/compat/IDemonWillViewer.java new file mode 100644 index 00000000..7f646c72 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/api/compat/IDemonWillViewer.java @@ -0,0 +1,15 @@ +package wayoftime.bloodmagic.api.compat; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +/** + * Interface for Items that allow players to see Will inside of chunks + */ +public interface IDemonWillViewer +{ + boolean canSeeDemonWillAura(World world, ItemStack stack, PlayerEntity player); + + int getDemonWillAuraResolution(World world, ItemStack stack, PlayerEntity player); +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/api/compat/IDemonWillWeapon.java b/src/main/java/wayoftime/bloodmagic/api/compat/IDemonWillWeapon.java new file mode 100644 index 00000000..95a894c7 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/api/compat/IDemonWillWeapon.java @@ -0,0 +1,14 @@ +package wayoftime.bloodmagic.api.compat; + +import java.util.List; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; + +/** + * Interface for weapons that drop will when a LivingEntity is killed + */ +public interface IDemonWillWeapon +{ + List getRandomDemonWillDrop(LivingEntity killedEntity, LivingEntity attackingEntity, ItemStack stack, int looting); +} diff --git a/src/main/java/wayoftime/bloodmagic/api/compat/IDiscreteDemonWill.java b/src/main/java/wayoftime/bloodmagic/api/compat/IDiscreteDemonWill.java new file mode 100644 index 00000000..2b79fbb4 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/api/compat/IDiscreteDemonWill.java @@ -0,0 +1,44 @@ +package wayoftime.bloodmagic.api.compat; + +import net.minecraft.item.ItemStack; + +/** + * Interface for Items that contain a discrete amount of Will + */ +public interface IDiscreteDemonWill +{ + /** + * Obtains the amount of Will an ItemStack contains. + * + * @param soulStack - The stack to retrieve the Will from + * @return - The amount of Will an ItemStack contains + */ + double getWill(ItemStack soulStack); + + /** + * Drains the demonic will from the willStack. If all of the will is drained, + * the willStack will be removed. Will only drain in discrete amounts, + * determined by getDiscretization. + * + * @param willStack - The ItemStack of the will + * @param drainAmount - The amount of Will to drain + * @return The amount of will drained. + */ + double drainWill(ItemStack willStack, double drainAmount); + + /** + * Gets the discrete number for this demonic will. + * + * @param willStack - The ItemStack of the will + * @return - The discrete number for the given stack. + */ + double getDiscretization(ItemStack willStack); + + /** + * Obtains the type of will this is. + * + * @param willStack - The ItemStack of the will + * @return - The type of will this is. + */ + EnumDemonWillType getType(ItemStack willStack); +} diff --git a/src/main/java/wayoftime/bloodmagic/api/compat/IIncensePath.java b/src/main/java/wayoftime/bloodmagic/api/compat/IIncensePath.java new file mode 100644 index 00000000..2ba87a7d --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/api/compat/IIncensePath.java @@ -0,0 +1,18 @@ +package wayoftime.bloodmagic.api.compat; + +import net.minecraft.block.BlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * Any Block that implements this will be considered to be a valid path block for the Incense Altar + */ +public interface IIncensePath +{ + /** + * Goes from 0 to however far this path block can be from the altar while still + * functioning. 0 represents a block that can work when it is two blocks + * horizontally away from the altar. + */ + int getLevelOfPath(World world, BlockPos pos, BlockState state); +} diff --git a/src/main/java/wayoftime/bloodmagic/api/compat/IMultiWillTool.java b/src/main/java/wayoftime/bloodmagic/api/compat/IMultiWillTool.java new file mode 100644 index 00000000..790dbf62 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/api/compat/IMultiWillTool.java @@ -0,0 +1,11 @@ +package wayoftime.bloodmagic.api.compat; + +import net.minecraft.item.ItemStack; + +/** + * Interface for Items that can contain multiple Will types + */ +public interface IMultiWillTool +{ + EnumDemonWillType getCurrentType(ItemStack stack); +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/api/event/BloodMagicCraftedEvent.java b/src/main/java/wayoftime/bloodmagic/api/event/BloodMagicCraftedEvent.java new file mode 100644 index 00000000..335abe96 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/api/event/BloodMagicCraftedEvent.java @@ -0,0 +1,84 @@ +package wayoftime.bloodmagic.api.event; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.eventbus.api.Event; + +public class BloodMagicCraftedEvent extends Event +{ + + private final boolean modifiable; + private final ItemStack[] inputs; + private ItemStack output; + + public BloodMagicCraftedEvent(ItemStack output, ItemStack[] inputs, boolean modifiable) + { + this.modifiable = modifiable; + this.inputs = inputs; + this.output = output; + } + + public boolean isModifiable() + { + return modifiable; + } + + public ItemStack[] getInputs() + { + return inputs; + } + + public ItemStack getOutput() + { + return output; + } + + public void setOutput(ItemStack output) + { + if (isModifiable()) + this.output = output; + } + + /** + * Fired whenever a craft is completed in a Blood Altar. + * + * It is not cancelable, however you can modify the output stack. + */ + public static class Altar extends BloodMagicCraftedEvent + { + + public Altar(ItemStack output, ItemStack input) + { + super(output, new ItemStack[] + { input }, true); + } + } + + /** + * Fired whenever a craft is completed in a Soul Forge. + * + * It is not cancelable, however you can modify the output stack. + */ + public static class SoulForge extends BloodMagicCraftedEvent + { + + public SoulForge(ItemStack output, ItemStack[] inputs) + { + super(output, inputs, true); + } + } + + /** + * Fired whenever a craft is completed in an Alchemy Table. + * + * It is not cancelable, however you can modify the output stack. + */ + public static class AlchemyTable extends BloodMagicCraftedEvent + { + + public AlchemyTable(ItemStack output, ItemStack[] inputs) + { + super(output, inputs, true); + } + } + +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/block/enums/BloodRuneType.java b/src/main/java/wayoftime/bloodmagic/block/enums/BloodRuneType.java new file mode 100644 index 00000000..cce55391 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/block/enums/BloodRuneType.java @@ -0,0 +1,37 @@ +package wayoftime.bloodmagic.block.enums; + +import java.util.Locale; + +import net.minecraft.util.IStringSerializable; + +public enum BloodRuneType implements IStringSerializable +{ + BLANK, + SPEED, + EFFICIENCY, + SACRIFICE, + SELF_SACRIFICE, + DISPLACEMENT, + CAPACITY, + AUGMENTED_CAPACITY, + ORB, + ACCELERATION, + CHARGING; + + @Override + public String toString() + { + return name().toLowerCase(Locale.ENGLISH); + } + + /** + * getName() + * + * @return + */ + @Override + public String getString() + { + return this.toString(); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/block/enums/EnumRitualController.java b/src/main/java/wayoftime/bloodmagic/block/enums/EnumRitualController.java new file mode 100644 index 00000000..29948a7a --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/block/enums/EnumRitualController.java @@ -0,0 +1,23 @@ +package wayoftime.bloodmagic.block.enums; + +import java.util.Locale; + +import net.minecraft.util.IStringSerializable; + +//TODO: Will want to probably discontinue this due to The Flattening +public enum EnumRitualController implements IStringSerializable +{ + MASTER, IMPERFECT, INVERTED,; + + @Override + public String toString() + { + return name().toLowerCase(Locale.ENGLISH); + } + + @Override + public String getString() + { + return this.toString(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/ClientEvents.java b/src/main/java/wayoftime/bloodmagic/client/ClientEvents.java new file mode 100644 index 00000000..06f7c598 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/ClientEvents.java @@ -0,0 +1,240 @@ +package wayoftime.bloodmagic.client; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.client.gui.ScreenManager; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.RenderTypeLookup; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.IItemPropertyGetter; +import net.minecraft.item.Item; +import net.minecraft.item.ItemModelsProperties; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.StringTextComponent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.ColorHandlerEvent; +import net.minecraftforge.client.event.InputEvent; +import net.minecraftforge.client.event.ModelRegistryEvent; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.DeferredWorkQueue; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import net.minecraftforge.fml.client.registry.RenderingRegistry; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.anointment.AnointmentColor; +import wayoftime.bloodmagic.anointment.AnointmentHolder; +import wayoftime.bloodmagic.api.compat.IMultiWillTool; +import wayoftime.bloodmagic.client.model.MimicColor; +import wayoftime.bloodmagic.client.render.alchemyarray.BeaconAlchemyCircleRenderer; +import wayoftime.bloodmagic.client.render.alchemyarray.DayAlchemyCircleRenderer; +import wayoftime.bloodmagic.client.render.alchemyarray.LowStaticAlchemyCircleRenderer; +import wayoftime.bloodmagic.client.render.alchemyarray.NightAlchemyCircleRenderer; +import wayoftime.bloodmagic.client.render.alchemyarray.StaticAlchemyCircleRenderer; +import wayoftime.bloodmagic.client.render.block.RenderAlchemyArray; +import wayoftime.bloodmagic.client.render.block.RenderAltar; +import wayoftime.bloodmagic.client.render.block.RenderDemonCrucible; +import wayoftime.bloodmagic.client.render.entity.BloodLightRenderer; +import wayoftime.bloodmagic.client.render.entity.EntityShapedChargeRenderer; +import wayoftime.bloodmagic.client.render.entity.EntityThrowingDaggerRenderer; +import wayoftime.bloodmagic.client.render.entity.SoulSnareRenderer; +import wayoftime.bloodmagic.client.screens.ScreenAlchemicalReactionChamber; +import wayoftime.bloodmagic.client.screens.ScreenAlchemyTable; +import wayoftime.bloodmagic.client.screens.ScreenHolding; +import wayoftime.bloodmagic.client.screens.ScreenSoulForge; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.item.ItemSacrificialDagger; +import wayoftime.bloodmagic.common.item.sigil.ItemSigilHolding; +import wayoftime.bloodmagic.common.item.sigil.ItemSigilToggleable; +import wayoftime.bloodmagic.common.item.soul.ItemSentientSword; +import wayoftime.bloodmagic.common.registries.BloodMagicEntityTypes; +import wayoftime.bloodmagic.core.registry.AlchemyArrayRendererRegistry; +import wayoftime.bloodmagic.network.BloodMagicPacketHandler; +import wayoftime.bloodmagic.network.SigilHoldingPacket; +import wayoftime.bloodmagic.tile.TileAlchemyArray; +import wayoftime.bloodmagic.tile.TileAltar; +import wayoftime.bloodmagic.tile.TileDemonCrucible; + +@Mod.EventBusSubscriber(value = Dist.CLIENT, modid = BloodMagic.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class ClientEvents +{ + @SubscribeEvent + public static void registerModels(ModelRegistryEvent event) + { + ClientRegistry.bindTileEntityRenderer(TileAltar.TYPE, RenderAltar::new); + ClientRegistry.bindTileEntityRenderer(TileAlchemyArray.TYPE, RenderAlchemyArray::new); + ClientRegistry.bindTileEntityRenderer(TileDemonCrucible.TYPE, RenderDemonCrucible::new); +// ClientRegistry.bindTileEntityRenderer(TileSoulForge.TYPE, RenderAlchemyArray::new); + } + + public static void registerContainerScreens() + { + ScreenManager.registerFactory(BloodMagicBlocks.SOUL_FORGE_CONTAINER.get(), ScreenSoulForge::new); + ScreenManager.registerFactory(BloodMagicBlocks.ARC_CONTAINER.get(), ScreenAlchemicalReactionChamber::new); + ScreenManager.registerFactory(BloodMagicBlocks.ALCHEMY_TABLE_CONTAINER.get(), ScreenAlchemyTable::new); + ScreenManager.registerFactory(BloodMagicBlocks.HOLDING_CONTAINER.get(), ScreenHolding::new); + } + + public static void colorHandlerEvent(ColorHandlerEvent.Item event) + { + event.getItemColors().register(new AnointmentColor(), BloodMagicItems.MELEE_DAMAGE_ANOINTMENT.get(), BloodMagicItems.SILK_TOUCH_ANOINTMENT.get(), BloodMagicItems.FORTUNE_ANOINTMENT.get(), BloodMagicItems.HOLY_WATER_ANOINTMENT.get(), BloodMagicItems.HIDDEN_KNOWLEDGE_ANOINTMENT.get(), BloodMagicItems.QUICK_DRAW_ANOINTMENT.get(), BloodMagicItems.LOOTING_ANOINTMENT.get(), BloodMagicItems.BOW_POWER_ANOINTMENT.get(), BloodMagicItems.WILL_POWER_ANOINTMENT.get(), BloodMagicItems.SMELTING_ANOINTMENT.get()); + } + + public static void cycleSigil(ItemStack stack, PlayerEntity player, int dWheel) + { + int mode = dWheel; + if (true) + { + mode = ItemSigilHolding.getCurrentItemOrdinal(stack); + mode = dWheel < 0 ? ItemSigilHolding.next(mode) : ItemSigilHolding.prev(mode); + } + + ItemSigilHolding.cycleToNextSigil(stack, mode); + BloodMagicPacketHandler.INSTANCE.sendToServer(new SigilHoldingPacket(player.inventory.currentItem, mode)); + ItemStack newStack = ItemSigilHolding.getItemStackInSlot(stack, ItemSigilHolding.getCurrentItemOrdinal(stack)); + player.sendStatusMessage(newStack.isEmpty() ? new StringTextComponent("") : newStack.getTextComponent(), true); + } + + @SubscribeEvent + public void onMouseEvent(InputEvent.MouseScrollEvent event) + { + ClientPlayerEntity player = Minecraft.getInstance().player; + + if (event.getScrollDelta() != 0 && player != null && player.isSneaking()) + { + ItemStack stack = player.getHeldItemMainhand(); + + if (!stack.isEmpty()) + { + Item item = stack.getItem(); + + if (item instanceof ItemSigilHolding) + { + cycleSigil(stack, player, event.getScrollDelta() > 0 ? 1 : -1); + event.setCanceled(true); + } + } + } + } + + @SubscribeEvent + public void appendTooltip(ItemTooltipEvent event) + { + ItemStack stack = event.getItemStack(); + AnointmentHolder holder = AnointmentHolder.fromItemStack(stack); + AnointmentHolder.appendAnointmentTooltip(holder, event.getToolTip()); + } + + @SuppressWarnings("deprecation") + public static void initClientEvents(FMLClientSetupEvent event) + { + RenderingRegistry.registerEntityRenderingHandler(BloodMagicEntityTypes.SNARE.getEntityType(), SoulSnareRenderer::new); + RenderingRegistry.registerEntityRenderingHandler(BloodMagicEntityTypes.THROWING_DAGGER.getEntityType(), EntityThrowingDaggerRenderer::new); + RenderingRegistry.registerEntityRenderingHandler(BloodMagicEntityTypes.BLOOD_LIGHT.getEntityType(), BloodLightRenderer::new); + RenderingRegistry.registerEntityRenderingHandler(BloodMagicEntityTypes.SHAPED_CHARGE.getEntityType(), EntityShapedChargeRenderer::new); + + DeferredWorkQueue.runLater(() -> { + RenderType rendertype = RenderType.getCutoutMipped(); + RenderTypeLookup.setRenderLayer(BloodMagicBlocks.ALCHEMY_TABLE.get(), rendertype); + RenderTypeLookup.setRenderLayer(BloodMagicBlocks.GROWING_DOUBT.get(), rendertype); + + ClientEvents.registerContainerScreens(); + + registerToggleableProperties(BloodMagicItems.GREEN_GROVE_SIGIL.get()); + registerToggleableProperties(BloodMagicItems.FAST_MINER_SIGIL.get()); + registerToggleableProperties(BloodMagicItems.MAGNETISM_SIGIL.get()); + registerToggleableProperties(BloodMagicItems.ICE_SIGIL.get()); + registerMultiWillTool(BloodMagicItems.SENTIENT_SWORD.get()); + registerMultiWillTool(BloodMagicItems.SENTIENT_AXE.get()); + registerMultiWillTool(BloodMagicItems.SENTIENT_PICKAXE.get()); + registerMultiWillTool(BloodMagicItems.SENTIENT_SHOVEL.get()); + registerMultiWillTool(BloodMagicItems.SENTIENT_SCYTHE.get()); + registerMultiWillTool(BloodMagicItems.PETTY_GEM.get()); + registerMultiWillTool(BloodMagicItems.LESSER_GEM.get()); + registerMultiWillTool(BloodMagicItems.COMMON_GEM.get()); + registerMultiWillTool(BloodMagicItems.GREATER_GEM.get()); + registerSacrificialKnife(BloodMagicItems.SACRIFICIAL_DAGGER.get()); + + ItemModelsProperties.registerProperty(BloodMagicItems.SENTIENT_SWORD.get(), BloodMagic.rl("active"), new IItemPropertyGetter() + { + @Override + public float call(ItemStack stack, ClientWorld world, LivingEntity entity) + { + return ((ItemSentientSword) stack.getItem()).getActivated(stack) ? 1 : 0; + } + }); + + Minecraft.getInstance().getBlockColors().register(new MimicColor(), BloodMagicBlocks.MIMIC.get()); + RenderTypeLookup.setRenderLayer(BloodMagicBlocks.MIMIC.get(), (RenderType) -> true); + }); + + AlchemyArrayRendererRegistry.registerRenderer(BloodMagic.rl("array/movement"), new StaticAlchemyCircleRenderer(BloodMagic.rl("textures/models/alchemyarrays/movementarray.png"))); + AlchemyArrayRendererRegistry.registerRenderer(BloodMagic.rl("array/updraft"), new BeaconAlchemyCircleRenderer(BloodMagic.rl("textures/models/alchemyarrays/updraftarray.png"))); + AlchemyArrayRendererRegistry.registerRenderer(BloodMagic.rl("array/spike"), new LowStaticAlchemyCircleRenderer(BloodMagic.rl("textures/models/alchemyarrays/spikearray.png"))); + AlchemyArrayRendererRegistry.registerRenderer(BloodMagic.rl("array/day"), new DayAlchemyCircleRenderer(BloodMagic.rl("textures/models/alchemyarrays/sunarray.png"), BloodMagic.rl("textures/models/alchemyarrays/sunarrayspikes.png"), BloodMagic.rl("textures/models/alchemyarrays/sunarraycircle.png"))); + AlchemyArrayRendererRegistry.registerRenderer(BloodMagic.rl("array/night"), new NightAlchemyCircleRenderer(BloodMagic.rl("textures/models/alchemyarrays/moonarrayoutside.png"), BloodMagic.rl("textures/models/alchemyarrays/moonarraysymbols.png"), BloodMagic.rl("textures/models/alchemyarrays/moonarrayinside.png"))); + AlchemyArrayRendererRegistry.registerRenderer(BloodMagic.rl("array/grove"), new BeaconAlchemyCircleRenderer(BloodMagic.rl("textures/models/alchemyarrays/growthsigil.png"))); + AlchemyArrayRendererRegistry.registerRenderer(BloodMagic.rl("array/bounce"), new LowStaticAlchemyCircleRenderer(BloodMagic.rl("textures/models/alchemyarrays/bouncearray.png"))); + + } + + public static void registerItemModelProperties(FMLClientSetupEvent event) + { + + } + + public static void registerToggleableProperties(Item item) + { + ItemModelsProperties.registerProperty(item, BloodMagic.rl("active"), new IItemPropertyGetter() + { + @Override + public float call(ItemStack stack, ClientWorld world, LivingEntity entity) + { + Item item = stack.getItem(); + if (item instanceof ItemSigilToggleable) + { + return ((ItemSigilToggleable) item).getActivated(stack) ? 1 : 0; + } + return 0; + } + }); + } + + public static void registerMultiWillTool(Item item) + { + ItemModelsProperties.registerProperty(item, BloodMagic.rl("type"), new IItemPropertyGetter() + { + @Override + public float call(ItemStack stack, ClientWorld world, LivingEntity entity) + { + Item item = stack.getItem(); + if (item instanceof IMultiWillTool) + { + return ((IMultiWillTool) item).getCurrentType(stack).ordinal(); + } + return 0; + } + }); + } + + public static void registerSacrificialKnife(Item item) + { + ItemModelsProperties.registerProperty(item, BloodMagic.rl("incense"), new IItemPropertyGetter() + { + @Override + public float call(ItemStack stack, ClientWorld world, LivingEntity entity) + { + Item item = stack.getItem(); + if (item instanceof ItemSacrificialDagger) + { + return ((ItemSacrificialDagger) item).canUseForSacrifice(stack) ? 1 : 0; + } + return 0; + } + }); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/Sprite.java b/src/main/java/wayoftime/bloodmagic/client/Sprite.java new file mode 100644 index 00000000..8b637fe1 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/Sprite.java @@ -0,0 +1,57 @@ +package wayoftime.bloodmagic.client; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.util.ResourceLocation; + +public class Sprite +{ + + private final ResourceLocation textureLocation; + private final int textureX; + private final int textureY; + private final int textureWidth; + private final int textureHeight; + + public Sprite(ResourceLocation textureLocation, int textureX, int textureY, int textureWidth, int textureHeight) + { + this.textureLocation = textureLocation; + this.textureX = textureX; + this.textureY = textureY; + this.textureWidth = textureWidth; + this.textureHeight = textureHeight; + } + + public ResourceLocation getTextureLocation() + { + return textureLocation; + } + + public int getTextureX() + { + return textureX; + } + + public int getTextureY() + { + return textureY; + } + + public int getTextureWidth() + { + return textureWidth; + } + + public int getTextureHeight() + { + return textureHeight; + } + + public void draw(MatrixStack matrixStack, int x, int y) + { + Minecraft.getInstance().getTextureManager().bindTexture(getTextureLocation()); + AbstractGui.blit(matrixStack, x, y, 0, getTextureX(), getTextureY(), getTextureWidth(), getTextureHeight(), 256, 256); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/hud/ElementInfo.java b/src/main/java/wayoftime/bloodmagic/client/hud/ElementInfo.java new file mode 100644 index 00000000..1a21439d --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/hud/ElementInfo.java @@ -0,0 +1,45 @@ +package wayoftime.bloodmagic.client.hud; + +import net.minecraft.util.math.vector.Vector2f; + +public class ElementInfo +{ + public static final ElementInfo DUMMY = new ElementInfo(new Vector2f(0F, 0F), ElementRegistry.getRandomColor()); + + private final Vector2f defaultPosition; + private final int boxColor; + private Vector2f currentPosition; + + public ElementInfo(Vector2f defaultPosition, int boxColor) + { + this.defaultPosition = defaultPosition; + this.boxColor = boxColor; + this.currentPosition = defaultPosition; + } + + public Vector2f getDefaultPosition() + { + return defaultPosition; + } + + public int getBoxColor() + { + return boxColor; + } + + public ElementInfo setPosition(Vector2f position) + { + this.currentPosition = position; + return this; + } + + public Vector2f getPosition() + { + return currentPosition; + } + + public void resetPosition() + { + this.currentPosition = defaultPosition; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/client/hud/ElementRegistry.java b/src/main/java/wayoftime/bloodmagic/client/hud/ElementRegistry.java new file mode 100644 index 00000000..427d9505 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/hud/ElementRegistry.java @@ -0,0 +1,185 @@ +package wayoftime.bloodmagic.client.hud; + +import java.awt.Color; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.util.List; +import java.util.Map; +import java.util.Random; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Maps; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; + +import net.minecraft.client.MainWindow; +import net.minecraft.client.Minecraft; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Vector2f; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.loading.FMLPaths; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.client.hud.element.HUDElement; + +@Mod.EventBusSubscriber(modid = BloodMagic.MODID, value = Dist.CLIENT) +public class ElementRegistry +{ + +// private static final File CORNFIG = new File(Loader.instance().getConfigDir(), BloodMagic.MODID + "/hud_elements.json"); + private static final File CONFIG = FMLPaths.CONFIGDIR.get().resolve(BloodMagic.MODID).resolve("hud_elements.json").toFile(); + + private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); + private static final Map HUD_ELEMENTS = Maps.newLinkedHashMap(); + private static final Map REVERSE = Maps.newHashMap(); + private static final Map ELEMENT_INFO = Maps.newHashMap(); + + public static void registerHandler(ResourceLocation key, HUDElement element, Vector2f defaultPosition) + { + HUD_ELEMENTS.put(key, element); + REVERSE.put(element, key); + + ELEMENT_INFO.put(key, new ElementInfo(defaultPosition, getRandomColor())); + } + + public static void resetPos() + { + ELEMENT_INFO.values().forEach(ElementInfo::resetPosition); + } + + public static List getElements() + { + return ImmutableList.copyOf(HUD_ELEMENTS.values()); + } + + public static ResourceLocation getKey(HUDElement element) + { + return REVERSE.get(element); + } + + public static int getColor(ResourceLocation element) + { + return ELEMENT_INFO.getOrDefault(element, ElementInfo.DUMMY).getBoxColor(); + } + + public static Vector2f getPosition(ResourceLocation element) + { + return ELEMENT_INFO.get(element).getPosition(); + } + + public static void setPosition(ResourceLocation element, Vector2f point) + { + ELEMENT_INFO.compute(element, (resourceLocation, elementInfo) -> { + if (elementInfo == null) + return new ElementInfo(point, getRandomColor()); + + elementInfo.setPosition(point); + return elementInfo; + }); + } + + public static void save(Map newLocations) + { + newLocations.forEach((k, v) -> { + ElementInfo info = ELEMENT_INFO.get(k); + if (info != null) + info.setPosition(v); + }); + + Map toWrite = Maps.newHashMap(); + for (Map.Entry entry : ELEMENT_INFO.entrySet()) + toWrite.put(entry.getKey().toString(), entry.getValue().getPosition()); + + String json = GSON.toJson(toWrite); + try (FileWriter writer = new FileWriter(CONFIG)) + { + writer.write(json); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + public static void readConfig() + { + if (!CONFIG.exists()) + return; + + try (FileReader reader = new FileReader(CONFIG)) + { + Map toLoad = GSON.fromJson(reader, new TypeToken>() + { + }.getType()); + for (Map.Entry entry : toLoad.entrySet()) + { + ElementInfo info = ELEMENT_INFO.get(new ResourceLocation(entry.getKey())); + if (info != null) + info.setPosition(entry.getValue()); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + + @OnlyIn(Dist.CLIENT) + @SubscribeEvent + public static void onRenderOverlay(RenderGameOverlayEvent.Pre event) + { + if (event.getType() == RenderGameOverlayEvent.ElementType.HOTBAR) + { + MainWindow window = event.getWindow(); + + for (HUDElement element : HUD_ELEMENTS.values()) + { + if (!element.shouldRender(Minecraft.getInstance())) + continue; + +// Vector2f position = ELEMENT_INFO.get(getKey(element)).getPosition(); +// int xPos = (int) (resolution.getScaledWidth_double() * position.x); +// if (xPos - element.getWidth() < 0) +// xPos *= 2; +// if (xPos + element.getWidth() > resolution.getScaledWidth()) +// xPos -= element.getWidth(); +// +// int yPos = (int) (resolution.getScaledHeight_double() * position.y); +// if (yPos - element.getHeight() < 0) +// yPos *= 2; +// if (yPos + element.getHeight() > resolution.getScaledHeight()) +// yPos -= element.getHeight(); +// +// element.draw(event.getResolution(), event.getPartialTicks(), xPos, yPos); + + Vector2f position = ELEMENT_INFO.get(getKey(element)).getPosition(); + int xPos = (int) (window.getScaledWidth() * position.x); + if (xPos - element.getWidth() < 0) + xPos *= 2; + if (xPos + element.getWidth() > window.getScaledWidth()) + xPos -= element.getWidth(); + + int yPos = (int) (window.getScaledHeight() * position.y); + if (yPos - element.getHeight() < 0) + yPos *= 2; + if (yPos + element.getHeight() > window.getScaledHeight()) + yPos -= element.getHeight(); + + element.draw(event.getMatrixStack(), event.getPartialTicks(), xPos, yPos); + } + } + } + + public static int getRandomColor() + { + Random rand = new Random(); + float r = rand.nextFloat() / 2F + 0.5F; + float g = rand.nextFloat() / 2F + 0.5F; + float b = rand.nextFloat() / 2F + 0.5F; + float a = 0.5F; + return new Color(r, g, b, a).getRGB(); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/client/hud/Elements.java b/src/main/java/wayoftime/bloodmagic/client/hud/Elements.java new file mode 100644 index 00000000..cff7e3a0 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/hud/Elements.java @@ -0,0 +1,93 @@ +package wayoftime.bloodmagic.client.hud; + +import java.util.function.Consumer; +import java.util.function.Function; + +import org.apache.commons.lang3.tuple.Pair; + +import net.minecraft.client.resources.I18n; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Vector2f; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.ConfigManager; +import wayoftime.bloodmagic.client.Sprite; +import wayoftime.bloodmagic.client.hud.element.ElementDemonAura; +import wayoftime.bloodmagic.client.hud.element.ElementDivinedInformation; +import wayoftime.bloodmagic.client.hud.element.ElementHolding; +import wayoftime.bloodmagic.tile.TileAltar; +import wayoftime.bloodmagic.tile.TileIncenseAltar; +import wayoftime.bloodmagic.util.helper.NumeralHelper; + +public class Elements +{ + public static void registerElements() + { + ElementRegistry.registerHandler(new ResourceLocation(BloodMagic.MODID, "demon_will_aura"), new ElementDemonAura(), new Vector2f(ConfigManager.CLIENT.demonWillGaugeX.get().floatValue(), ConfigManager.CLIENT.demonWillGaugeY.get().floatValue())); + + ElementRegistry.registerHandler(BloodMagic.rl("blood_altar"), new ElementDivinedInformation(2, true, TileAltar.class) + { + @Override + public void gatherInformation(Consumer>> information) + { + // Current tier + information.accept(Pair.of(new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 0, 46, 16, 16), altar -> altar == null + ? "IV" + : NumeralHelper.toRoman(altar.getTier()))); + // Stored/Capacity + information.accept(Pair.of(new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 16, 46, 16, 16), altar -> String.format("%d/%d", altar == null + ? 0 + : altar.getCurrentBlood(), altar == null ? 10000 : altar.getCapacity()))); + } + }, new Vector2f(0.01F, 0.01F)); + + ElementRegistry.registerHandler(new ResourceLocation(BloodMagic.MODID, "blood_altar_adv"), new ElementDivinedInformation(5, false, TileAltar.class) + { + @Override + public void gatherInformation(Consumer>> information) + { + // Current tier + information.accept(Pair.of(new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 0, 46, 16, 16), altar -> altar == null + ? "IV" + : NumeralHelper.toRoman(altar.getTier()))); + // Stored/Capacity + information.accept(Pair.of(new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 16, 46, 16, 16), altar -> String.format("%d/%d", altar == null + ? 0 + : altar.getCurrentBlood(), altar == null ? 10000 : altar.getCapacity()))); + // Crafting progress/Crafting requirement + information.accept(Pair.of(new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 32, 46, 16, 16), altar -> { + if (altar == null || !altar.isActive()) + return I18n.format("hud.bloodmagic.inactive"); + int progress = altar.getProgress(); + int totalLiquidRequired = altar.getLiquidRequired() * altar.getStackInSlot(0).getCount(); + return String.format("%d/%d", progress, totalLiquidRequired); + })); + // Consumption rate + information.accept(Pair.of(new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 48, 46, 16, 16), altar -> altar == null + ? "0" + : String.valueOf((int) (altar.getConsumptionRate() * (altar.getConsumptionMultiplier() + 1))))); + // Total charge + information.accept(Pair.of(new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 64, 46, 16, 16), altar -> altar == null + ? "0" + : String.valueOf(altar.getTotalCharge()))); + } + }, new Vector2f(0.01F, 0.01F)); + + ElementRegistry.registerHandler(new ResourceLocation(BloodMagic.MODID, "incense_altar"), new ElementDivinedInformation(2, true, TileIncenseAltar.class) + { + @Override + public void gatherInformation(Consumer>> information) + { + // Current tranquility + information.accept(Pair.of(new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 80, 46, 16, 16), incense -> incense == null + ? "0" + : String.valueOf((int) ((100D * (int) (100 * incense.tranquility)) / 100D)))); + // Sacrifice bonus + information.accept(Pair.of(new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 96, 46, 16, 16), incense -> incense == null + ? "0" + : String.valueOf((int) (100 * incense.incenseAddition)))); + } + }, new Vector2f(0.01F, 0.01F)); + + ElementRegistry.registerHandler(new ResourceLocation(BloodMagic.MODID, "holding"), new ElementHolding(), new Vector2f(0.72F, 1.0F)); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/hud/GuiEditHUD.java b/src/main/java/wayoftime/bloodmagic/client/hud/GuiEditHUD.java new file mode 100644 index 00000000..84756bac --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/hud/GuiEditHUD.java @@ -0,0 +1,239 @@ +package wayoftime.bloodmagic.client.hud; + +import java.awt.Point; +import java.util.Map; + +import javax.annotation.Nullable; + +import com.google.common.collect.Maps; +import com.mojang.blaze3d.matrix.MatrixStack; + +import net.minecraft.client.MainWindow; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Vector2f; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import wayoftime.bloodmagic.client.hud.element.HUDElement; + +public class GuiEditHUD extends Screen +{ + private static final int LINE_COLOR = 0x2D2D2D; + + private final Screen parent; + private final Map currentOverrides = Maps.newHashMap(); + private HUDElement dragged; + public boolean changes; + + public GuiEditHUD(Screen parent) + { + super(new StringTextComponent("Testing GuiEditHUD")); + this.parent = parent; + } + + @Override + public void init() + { + super.init(); + + addButton(new Button(width / 2 - 155, height - 30, 70, 20, new TranslationTextComponent("gui.bloodmagic.toggle"), b -> { + Minecraft.getInstance().displayGuiScreen(parent); + }) + { + { + active = false; + } + }); + addButton(new Button(width / 2 - 75, height - 30, 70, 20, new TranslationTextComponent("gui.bloodmagic.default"), b -> { + currentOverrides.clear(); + ElementRegistry.resetPos(); + changes = false; + })); + addButton(new Button(width / 2 + 5, height - 30, 70, 20, new TranslationTextComponent("gui.bloodmagic.save"), b -> { + ElementRegistry.save(currentOverrides); + Minecraft.getInstance().displayGuiScreen(parent); + })); + addButton(new Button(width / 2 + 90, height - 30, 70, 20, new TranslationTextComponent("gui.bloodmagic.cancel"), b -> { + currentOverrides.clear(); + Minecraft.getInstance().displayGuiScreen(parent); + })); + } + + @Override + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + super.render(matrixStack, mouseX, mouseY, partialTicks); + +// ScaledResolution resolution = new ScaledResolution(Minecraft.getInstance()); + MainWindow window = Minecraft.getInstance().getMainWindow(); + for (HUDElement element : ElementRegistry.getElements()) + { + if (dragged == element) + continue; + + ResourceLocation key = ElementRegistry.getKey(element); + Vector2f position = currentOverrides.getOrDefault(key, ElementRegistry.getPosition(key)); + int xPos = (int) (window.getScaledWidth() * position.x); + int yPos = (int) (window.getScaledHeight() * position.y); + + drawWithBox(matrixStack, element, partialTicks, xPos, yPos); + } + + if (dragged != null) + { + Point bounded = getBoundedDrag(window, mouseX, mouseY); + drawWithBox(matrixStack, dragged, partialTicks, bounded.x, bounded.y); + } + } + + @Override + public boolean isPauseScreen() + { + return true; + } + + @Override +// protected void mouseClickMove(int mouseX, int mouseY, int clickedMouseButton, long timeSinceLastClick) + public boolean mouseDragged(double mouseX, double mouseY, int button, double dragX, double dragY) + { + if (dragged == null) + { + HUDElement element = getHoveredElement(mouseX, mouseY); + if (element != null) + { + if (button == 0) + dragged = element; + } + + } + + return super.mouseDragged(mouseX, mouseY, button, dragX, dragY); +// if (dragged != null) +// return false; +// +// HUDElement element = getHoveredElement(mouseX, mouseY); +// if (element == null) +// return false; +// +// if (button == 0) +// dragged = element; +// +// return super.mouseDragged(mouseX, mouseY, button, dragX, dragY); + } + + @Override + public boolean mouseReleased(double mouseX, double mouseY, int state) + { + if (dragged != null) + { + MainWindow window = Minecraft.getInstance().getMainWindow(); + Point bounded = getBoundedDrag(window, mouseX, mouseY); + float xPos = (float) ((bounded.x) / window.getScaledWidth()); + float yPos = (float) ((bounded.y) / window.getScaledHeight()); + + currentOverrides.put(ElementRegistry.getKey(dragged), new Vector2f(xPos, yPos)); + changes = true; + dragged = null; +// return super; + } + + return super.mouseReleased(mouseX, mouseY, state); + } + +// @Override +// protected void actionPerformed(Button button) +// { +// switch (button.id) +// { +// case 0: +// { +// Minecraft.getInstance().displayGuiScreen(parent); +// break; +// } +// case 1: +// { +// currentOverrides.clear(); +// ElementRegistry.resetPos(); +// changes = false; +// break; +// } +// case 2: +// { +// ElementRegistry.save(currentOverrides); +// Minecraft.getInstance().displayGuiScreen(parent); +// break; +// } +// case 3: +// { +// currentOverrides.clear(); +// Minecraft.getInstance().displayGuiScreen(parent); +// break; +// } +// } +// } + + @Nullable + public HUDElement getHoveredElement(double mouseX, double mouseY) + { + MainWindow window = Minecraft.getInstance().getMainWindow(); + for (HUDElement element : ElementRegistry.getElements()) + { + ResourceLocation key = ElementRegistry.getKey(element); + Vector2f position = currentOverrides.getOrDefault(key, ElementRegistry.getPosition(key)); + + int xPos = (int) (window.getScaledWidth() * position.x); + int yPos = (int) (window.getScaledHeight() * position.y); + + if (mouseX < xPos || mouseX > xPos + element.getWidth()) + continue; + + if (mouseY < yPos || mouseY > yPos + element.getHeight()) + continue; + + return element; + } + + return null; + } + + protected Point getBoundedDrag(MainWindow window, double mouseX, double mouseY) + { + int drawX = (int) (mouseX - dragged.getWidth() / 2); + if (drawX + dragged.getWidth() >= window.getScaledWidth()) + drawX = window.getScaledWidth() - dragged.getWidth(); + if (drawX < 0) + drawX = 0; + + int drawY = (int) (mouseY - dragged.getHeight() / 2); + if (drawY + dragged.getHeight() >= window.getScaledHeight()) + drawY = window.getScaledHeight() - dragged.getHeight(); + if (drawY < 0) + drawY = 0; + + return new Point(drawX, drawY); + } + + protected void drawWithBox(MatrixStack matrixStack, HUDElement element, float partialTicks, int drawX, int drawY) + { + int color = ElementRegistry.getColor(ElementRegistry.getKey(element)); + matrixStack.push(); +// GlStateManager.enableAlpha(); +// GlStateManager.enableBlend(); +// GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + + this.vLine(matrixStack, drawX, drawY, drawY + element.getHeight() - 1, color); + this.vLine(matrixStack, drawX + element.getWidth() - 1, drawY, drawY + element.getHeight() - 1, color); + this.hLine(matrixStack, drawX, drawX + element.getWidth() - 1, drawY, color); + this.hLine(matrixStack, drawX, drawX + element.getWidth() - 1, drawY + element.getHeight() - 1, color); +// GlStateManager.disableBlend(); +// GlStateManager.disableAlpha(); + matrixStack.pop(); +// GlStateManager.color(1.0F, 1.0F, 1.0F); +// GlStateManager.enableTexture2D(); + element.draw(matrixStack, partialTicks, drawX, drawY); +// GlStateManager.disableTexture2D(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/hud/element/ElementDemonAura.java b/src/main/java/wayoftime/bloodmagic/client/hud/element/ElementDemonAura.java new file mode 100644 index 00000000..6f29cf8a --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/hud/element/ElementDemonAura.java @@ -0,0 +1,83 @@ +package wayoftime.bloodmagic.client.hud.element; + +import java.util.List; + +import com.google.common.collect.Lists; +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.util.Utils; +import wayoftime.bloodmagic.util.handler.event.ClientHandler; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; + +public class ElementDemonAura extends HUDElement +{ + + private static final ResourceLocation BAR_LOCATION = new ResourceLocation(BloodMagic.MODID, "textures/hud/bars.png"); + + private final List orderedTypes = Lists.newArrayList(EnumDemonWillType.DEFAULT, EnumDemonWillType.CORROSIVE, EnumDemonWillType.STEADFAST, EnumDemonWillType.DESTRUCTIVE, EnumDemonWillType.VENGEFUL); + + public ElementDemonAura() + { + super(80, 46); + } + + @Override + public void draw(MatrixStack matrixStack, float partialTicks, int drawX, int drawY) + { + Minecraft minecraft = Minecraft.getInstance(); + PlayerEntity player = minecraft.player; + + minecraft.getTextureManager().bindTexture(BAR_LOCATION); +// GlStateManager.color(1.0F, 1.0F, 1.0F); + this.blit(matrixStack, drawX, drawY, 0, 210, 80, 46); + + double maxAmount = Utils.getDemonWillResolution(player); + + int i = 0; + for (EnumDemonWillType type : orderedTypes) + { + i++; +// GlStateManager.color(1.0F, 1.0F, 1.0F); + minecraft.getTextureManager().bindTexture(BAR_LOCATION); + int textureXOffset = (i > 3) ? (i - 3) : (3 - i); + int maxBarSize = 30 - 2 * textureXOffset; + + double amount = ClientHandler.currentAura == null ? 0 : ClientHandler.currentAura.getWill(type); + double ratio = Math.max(Math.min(amount / maxAmount, 1), 0); + +// double amount = 50; +// double ratio = 0.5; + + double width = maxBarSize * ratio * 2; + double height = 2; + double x = drawX + 2 * textureXOffset + 10; + double y = drawY + 4 * i + 10; + + double textureX = 2 * textureXOffset + 2 * 42; + double textureY = 4 * i + 220; + + this.blit(matrixStack, (int) x, (int) y, (int) textureX, (int) textureY, (int) width, (int) height); + + if (player.isSneaking()) + { + matrixStack.push(); + matrixStack.translate(x - 2 * textureXOffset + 70, (y - 2), 0); + matrixStack.scale(0.5f, 0.5f, 1f); + minecraft.fontRenderer.drawStringWithShadow(matrixStack, String.valueOf((int) amount), 0, 2, 0xffffffff); + RenderSystem.clearTexGen(); + matrixStack.pop(); + } + } + } + + @Override + public boolean shouldRender(Minecraft minecraft) + { + return Utils.canPlayerSeeDemonWill(Minecraft.getInstance().player); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/client/hud/element/ElementDivinedInformation.java b/src/main/java/wayoftime/bloodmagic/client/hud/element/ElementDivinedInformation.java new file mode 100644 index 00000000..d068635b --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/hud/element/ElementDivinedInformation.java @@ -0,0 +1,76 @@ +package wayoftime.bloodmagic.client.hud.element; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Hand; +import wayoftime.bloodmagic.common.item.BloodMagicItems; + +public abstract class ElementDivinedInformation extends ElementTileInformation +{ + + private final boolean simple; + + public ElementDivinedInformation(int lines, boolean simple, Class tileClass) + { + super(100, lines, tileClass); + this.simple = simple; + } + + @Override + public boolean shouldRender(Minecraft minecraft) + { + PlayerEntity player = Minecraft.getInstance().player; + ItemStack sigilStack = player.getHeldItem(Hand.MAIN_HAND); + boolean flag = false; + if (simple) + { + if (sigilStack.getItem() == BloodMagicItems.DIVINATION_SIGIL.get() || sigilStack.getItem() == BloodMagicItems.SEER_SIGIL.get()) + flag = true; + else + flag = isFlagSigilHolding(sigilStack, true); + +// if (!flag) +// { +// sigilStack = player.getHeldItem(Hand.OFF_HAND); +// if (sigilStack.getItem() == RegistrarBloodMagicItems.SIGIL_DIVINATION || sigilStack.getItem() == RegistrarBloodMagicItems.SIGIL_SEER) +// flag = true; +// else +// flag = isFlagSigilHolding(sigilStack, true); +// } + + } else + { + if (sigilStack.getItem() == BloodMagicItems.SEER_SIGIL.get()) + flag = true; + else + flag = isFlagSigilHolding(sigilStack, false); +// +// if (!flag) +// { +// sigilStack = player.getHeldItem(Hand.OFF_HAND); +// if (sigilStack.getItem() == RegistrarBloodMagicItems.SIGIL_SEER) +// flag = true; +// else +// flag = isFlagSigilHolding(sigilStack, false); +// } + } + + return super.shouldRender(minecraft) && flag; + } + + private boolean isFlagSigilHolding(ItemStack sigilStack, boolean simple) + { +// if (sigilStack.getItem() instanceof ItemSigilHolding) +// { +// List internalInv = ItemSigilHolding.getInternalInventory(sigilStack); +// int currentSlot = ItemSigilHolding.getCurrentItemOrdinal(sigilStack); +// if (internalInv != null && !internalInv.get(currentSlot).isEmpty()) +// { +// return (internalInv.get(currentSlot).getItem() == RegistrarBloodMagicItems.SIGIL_SEER && !simple) || (internalInv.get(currentSlot).getItem() == RegistrarBloodMagicItems.SIGIL_DIVINATION && simple); +// } +// } + return false; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/hud/element/ElementHolding.java b/src/main/java/wayoftime/bloodmagic/client/hud/element/ElementHolding.java new file mode 100644 index 00000000..2231907f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/hud/element/ElementHolding.java @@ -0,0 +1,109 @@ +package wayoftime.bloodmagic.client.hud.element; + +import java.util.List; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.client.Sprite; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.item.sigil.ItemSigilHolding; + +public class ElementHolding extends HUDElement +{ + private static final Sprite HOLDING_BAR = new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 0, 0, 102, 22); + private static final Sprite SELECTED_OVERLAY = new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 0, 22, 24, 24); + + public ElementHolding() + { + super(HOLDING_BAR.getTextureWidth(), HOLDING_BAR.getTextureHeight()); + } + + @Override + public void draw(MatrixStack matrixStack, float partialTicks, int drawX, int drawY) + { +// GlStateManager.color(1.0F, 1.0F, 1.0F); + matrixStack.push(); + HOLDING_BAR.draw(matrixStack, drawX, drawY); + + Minecraft minecraft = Minecraft.getInstance(); + ItemStack sigilHolding = minecraft.player.getHeldItemMainhand(); + // Check mainhand for Sigil of Holding + if (!(sigilHolding.getItem() == BloodMagicItems.HOLDING_SIGIL.get())) + sigilHolding = minecraft.player.getHeldItemOffhand(); + // Check offhand for Sigil of Holding + if (!(sigilHolding.getItem() == BloodMagicItems.HOLDING_SIGIL.get())) + return; + + int currentSlot = ItemSigilHolding.getCurrentItemOrdinal(sigilHolding); + SELECTED_OVERLAY.draw(matrixStack, drawX - 1 + (currentSlot * 20), drawY - 1); + + RenderHelper.enableStandardItemLighting(); + List inventory = ItemSigilHolding.getInternalInventory(sigilHolding); + int xOffset = 0; + for (ItemStack stack : inventory) + { + renderHotbarItem(matrixStack, drawX + 3 + xOffset, drawY + 3, partialTicks, minecraft.player, stack); + xOffset += 20; + } + matrixStack.pop(); + } + + @Override + public boolean shouldRender(Minecraft minecraft) + { + ItemStack sigilHolding = minecraft.player.getHeldItemMainhand(); + // Check mainhand for Sigil of Holding + if (!(sigilHolding.getItem() == BloodMagicItems.HOLDING_SIGIL.get())) + sigilHolding = minecraft.player.getHeldItemOffhand(); + // Check offhand for Sigil of Holding + if (!(sigilHolding.getItem() == BloodMagicItems.HOLDING_SIGIL.get())) + return false; + + return true; + } + + protected void renderHotbarItem(MatrixStack matrixStack, int x, int y, float partialTicks, PlayerEntity player, ItemStack stack) + { + if (!stack.isEmpty()) + { + float animation = (float) stack.getAnimationsToGo() - partialTicks; + + if (animation > 0.0F) + { + matrixStack.push(); + float f1 = 1.0F + animation / 5.0F; + matrixStack.translate((float) (x + 8), (float) (y + 12), 0.0F); + matrixStack.scale(1.0F / f1, (f1 + 1.0F) / 2.0F, 1.0F); + matrixStack.translate((float) (-(x + 8)), (float) (-(y + 12)), 0.0F); +// RenderSystem.translatef((float) (x + 8), (float) (y + 12), 0.0F); +// RenderSystem.scalef(1.0F / f1, (f1 + 1.0F) / 2.0F, 1.0F); +// RenderSystem.translatef((float) (-(x + 8)), (float) (-(y + 12)), 0.0F); + } + + Minecraft.getInstance().getItemRenderer().renderItemAndEffectIntoGUI(player, stack, x, y); + + if (animation > 0.0F) + matrixStack.pop(); + + Minecraft.getInstance().getItemRenderer().renderItemOverlays(Minecraft.getInstance().fontRenderer, stack, x, y); + } + } + +// private void drawItemStack(ItemStack stack, int x, int y, String altText) { +// RenderSystem.translatef(0.0F, 0.0F, 32.0F); +// this.setBlitOffset(200); +// this.itemRenderer.zLevel = 200.0F; +// net.minecraft.client.gui.FontRenderer font = stack.getItem().getFontRenderer(stack); +// if (font == null) font = this.font; +// this.itemRenderer.renderItemAndEffectIntoGUI(stack, x, y); +// this.itemRenderer.renderItemOverlayIntoGUI(font, stack, x, y - (this.draggedStack.isEmpty() ? 0 : 8), altText); +// this.setBlitOffset(0); +// this.itemRenderer.zLevel = 0.0F; +// } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/client/hud/element/ElementTileInformation.java b/src/main/java/wayoftime/bloodmagic/client/hud/element/ElementTileInformation.java new file mode 100644 index 00000000..5a5aa20f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/hud/element/ElementTileInformation.java @@ -0,0 +1,71 @@ +package wayoftime.bloodmagic.client.hud.element; + +import java.awt.Color; +import java.util.List; +import java.util.function.Consumer; +import java.util.function.Function; + +import org.apache.commons.lang3.tuple.Pair; + +import com.google.common.collect.Lists; +import com.mojang.blaze3d.matrix.MatrixStack; + +import net.minecraft.client.Minecraft; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceResult; +import wayoftime.bloodmagic.client.Sprite; + +public abstract class ElementTileInformation extends HUDElement +{ + + protected final Class tileClass; + private final List>> information; + + public ElementTileInformation(int width, int lines, Class tileClass) + { + super(width, 18 * lines - 2); + + this.tileClass = tileClass; + this.information = Lists.newArrayList(); + gatherInformation(information::add); + } + + public abstract void gatherInformation(Consumer>> information); + + @SuppressWarnings("unchecked") + @Override + public void draw(MatrixStack matrixStack, float partialTicks, int drawX, int drawY) + { + RayTraceResult trace = Minecraft.getInstance().objectMouseOver; + if (trace == null || trace.getType() != RayTraceResult.Type.BLOCK) + return; + + T tile = (T) Minecraft.getInstance().world.getTileEntity(((BlockRayTraceResult) trace).getPos()); + + int yOffset = 0; + for (Pair> sprite : information) + { + sprite.getLeft().draw(matrixStack, drawX, drawY + yOffset); + int textY = drawY + yOffset + (sprite.getLeft().getTextureHeight() / 4); + Minecraft.getInstance().fontRenderer.drawStringWithShadow(matrixStack, (tile != null && tile.getClass() == tileClass) + ? sprite.getRight().apply(tile) + : "?", drawX + sprite.getLeft().getTextureWidth() + 2, textY, Color.WHITE.getRGB()); + yOffset += sprite.getLeft().getTextureHeight() + 2; + } + } + + @Override + public boolean shouldRender(Minecraft minecraft) + { + RayTraceResult trace = Minecraft.getInstance().objectMouseOver; + if (trace == null || trace.getType() != RayTraceResult.Type.BLOCK) + return false; + + TileEntity tile = Minecraft.getInstance().world.getTileEntity(((BlockRayTraceResult) trace).getPos()); + if (tile == null || !tileClass.isAssignableFrom(tile.getClass())) + return false; + + return true; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/hud/element/HUDElement.java b/src/main/java/wayoftime/bloodmagic/client/hud/element/HUDElement.java new file mode 100644 index 00000000..fc39c966 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/hud/element/HUDElement.java @@ -0,0 +1,68 @@ +package wayoftime.bloodmagic.client.hud.element; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.util.math.vector.Vector2f; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.client.hud.ElementRegistry; + +@OnlyIn(Dist.CLIENT) +public abstract class HUDElement +{ + + private int width; + private int height; + protected int blitOffset = 0; + + public HUDElement(int width, int height) + { + this.width = width; + this.height = height; + } + + public boolean shouldRender(Minecraft minecraft) + { + return true; + } + + public abstract void draw(MatrixStack matrixStack, float partialTicks, int drawX, int drawY); + + public final int getWidth() + { + return width; + } + + public final int getHeight() + { + return height; + } + +// protected void drawTexturedModalRect(double x, double y, double textureX, double textureY, double width, double height) +// { +// float f = 0.00390625F; +// float f1 = 0.00390625F; +// Tessellator tessellator = Tessellator.getInstance(); +// BufferBuilder buffer = tessellator.getBuffer(); +// buffer.begin(7, DefaultVertexFormats.POSITION_TEX); +// buffer.pos(x + 0, y + height, 0).tex((double) ((float) (textureX + 0) * f), (double) ((float) (textureY + height) * f1)).endVertex(); +// buffer.pos(x + width, y + height, 0).tex((double) ((float) (textureX + width) * f), (double) ((float) (textureY + height) * f1)).endVertex(); +// buffer.pos(x + width, y + 0, 0).tex((double) ((float) (textureX + width) * f), (double) ((float) (textureY + 0) * f1)).endVertex(); +// buffer.pos(x + 0, y + 0, 0).tex((double) ((float) (textureX + 0) * f), (double) ((float) (textureY + 0) * f1)).endVertex(); +// tessellator.draw(); +// } + + public void blit(MatrixStack matrixStack, int x, int y, int uOffset, int vOffset, int uWidth, int vHeight) + { + AbstractGui.blit(matrixStack, x, y, this.blitOffset, (float) uOffset, (float) vOffset, uWidth, vHeight, 256, 256); + } + + @Override + public String toString() + { + Vector2f point = ElementRegistry.getPosition(ElementRegistry.getKey(this)); + return ElementRegistry.getKey(this) + "@" + point.x + "," + point.y; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/key/BloodMagicKeyHandler.java b/src/main/java/wayoftime/bloodmagic/client/key/BloodMagicKeyHandler.java new file mode 100644 index 00000000..f3b2ab92 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/key/BloodMagicKeyHandler.java @@ -0,0 +1,82 @@ +package wayoftime.bloodmagic.client.key; + +import java.util.BitSet; + +import org.lwjgl.glfw.GLFW; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.settings.KeyBinding; +import net.minecraft.client.util.InputMappings; +import net.minecraftforge.client.event.InputEvent; +import net.minecraftforge.common.MinecraftForge; + +public class BloodMagicKeyHandler +{ + + private final BitSet keyDown; + + private final BitSet repeatings; + + public BloodMagicKeyHandler() + { + this.keyDown = new BitSet(); + this.repeatings = new BitSet(); + MinecraftForge.EVENT_BUS.addListener(this::keyTick); + } + + public static boolean isKeyDown(KeyBinding keyBinding) + { + InputMappings.Input key = keyBinding.getKey(); + int keyCode = key.getKeyCode(); + if (keyCode != InputMappings.INPUT_INVALID.getKeyCode()) + { + long windowHandle = Minecraft.getInstance().getMainWindow().getHandle(); + try + { + if (key.getType() == InputMappings.Type.KEYSYM) + { + return InputMappings.isKeyDown(windowHandle, keyCode); + } else if (key.getType() == InputMappings.Type.MOUSE) + { + return GLFW.glfwGetMouseButton(windowHandle, keyCode) == GLFW.GLFW_PRESS; + } + } catch (Exception ignored) + { + } + } + return false; + } + + public void keyTick(InputEvent.KeyInputEvent event) + { +// System.out.println("Pressing the key handlers"); + for (int i = 0; i < KeyBindings.values().length; i++) + { + KeyBindings keyBindings = KeyBindings.values()[i]; + KeyBinding keyBinding = keyBindings.getKey(); + boolean state = keyBinding.isKeyDown(); + boolean lastState = keyDown.get(i); + if (state != lastState || (state && repeatings.get(i))) + { + if (state) + { + keyDown(keyBindings, lastState); + } else + { + keyUp(keyBindings); + } + keyDown.set(i, state); + } + } + } + + public void keyDown(KeyBindings kb, boolean isRepeat) + { + kb.handleKeybind(); + } + + public void keyUp(KeyBindings kb) + { + + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/key/IKeybindable.java b/src/main/java/wayoftime/bloodmagic/client/key/IKeybindable.java new file mode 100644 index 00000000..35eddcd0 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/key/IKeybindable.java @@ -0,0 +1,9 @@ +package wayoftime.bloodmagic.client.key; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; + +public interface IKeybindable +{ + void onKeyPressed(ItemStack stack, PlayerEntity player, KeyBindings key, boolean showInChat); +} diff --git a/src/main/java/wayoftime/bloodmagic/client/key/KeyBindingBloodMagic.java b/src/main/java/wayoftime/bloodmagic/client/key/KeyBindingBloodMagic.java new file mode 100644 index 00000000..b48666a1 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/key/KeyBindingBloodMagic.java @@ -0,0 +1,17 @@ +package wayoftime.bloodmagic.client.key; + +import net.minecraft.client.settings.KeyBinding; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.client.registry.ClientRegistry; + +@OnlyIn(Dist.CLIENT) +public class KeyBindingBloodMagic extends KeyBinding +{ + public KeyBindingBloodMagic(KeyBindings key) + { + super(key.getDescription(), -1, "key.bloodmagic.category"); + + ClientRegistry.registerKeyBinding(this); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/key/KeyBindings.java b/src/main/java/wayoftime/bloodmagic/client/key/KeyBindings.java new file mode 100644 index 00000000..e711dad3 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/key/KeyBindings.java @@ -0,0 +1,120 @@ +package wayoftime.bloodmagic.client.key; + +import java.util.Locale; + +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.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.settings.IKeyConflictContext; +import net.minecraftforge.client.settings.KeyConflictContext; +import net.minecraftforge.client.settings.KeyModifier; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.client.ClientEvents; +import wayoftime.bloodmagic.common.item.sigil.ItemSigilHolding; +import wayoftime.bloodmagic.network.KeyProcessorPacket; +import wayoftime.bloodmagic.util.handler.event.ClientHandler; + +public enum KeyBindings +{ + // @formatter:off + OPEN_HOLDING(KeyConflictContext.IN_GAME, KeyModifier.NONE, -1) + { + @OnlyIn(Dist.CLIENT) + @Override + public void handleKeybind() + { + ItemStack itemStack = ClientHandler.minecraft.player.getHeldItemMainhand(); + if (itemStack.getItem() instanceof IKeybindable) + BloodMagic.packetHandler.sendToServer(new KeyProcessorPacket(this.ordinal(), false)); +// System.out.println("I is on the client."); +// +// +// BloodMagicPacketHandler.INSTANCE.sendToServer(new KeyProcessorPacket(this, false)); + } + }, + CYCLE_HOLDING_POS(KeyConflictContext.IN_GAME, KeyModifier.SHIFT, -1) + { + @OnlyIn(Dist.CLIENT) + @Override + public void handleKeybind() + { + ClientPlayerEntity player = Minecraft.getInstance().player; + if (player.getHeldItemMainhand().getItem() instanceof ItemSigilHolding) + ClientEvents.cycleSigil(player.getHeldItemMainhand(), player, -1); + } + }, + CYCLE_HOLDING_NEG(KeyConflictContext.IN_GAME, KeyModifier.SHIFT, -1) + { + @OnlyIn(Dist.CLIENT) + @Override + public void handleKeybind() + { + ClientPlayerEntity player = Minecraft.getInstance().player; + if (player.getHeldItemMainhand().getItem() instanceof ItemSigilHolding) + ClientEvents.cycleSigil(player.getHeldItemMainhand(), player, 1); + } + },; + // @formatter:on + + private final IKeyConflictContext keyConflictContext; + private final KeyModifier keyModifier; + private final int keyCode; + + @OnlyIn(Dist.CLIENT) + private KeyBinding key; + + KeyBindings(IKeyConflictContext keyConflictContext, KeyModifier keyModifier, int keyCode) + { + this.keyConflictContext = keyConflictContext; + this.keyModifier = keyModifier; + this.keyCode = keyCode; + } + + @OnlyIn(Dist.CLIENT) + public abstract void handleKeybind(); + + public IKeyConflictContext getKeyConflictContext() + { + return keyConflictContext; + } + + public KeyModifier getKeyModifier() + { + return keyModifier; + } + + public int getKeyCode() + { + return keyCode; + } + + @OnlyIn(Dist.CLIENT) + public KeyBinding getKey() + { + if (key == null) + key = new KeyBindingBloodMagic(this); + + return key; + } + + @OnlyIn(Dist.CLIENT) + public void setKey(KeyBinding key) + { + this.key = key; + } + + public String getDescription() + { + return BloodMagic.MODID + ".keybind." + name().toLowerCase(Locale.ENGLISH); + } + + public static void initializeKeys() + { + OPEN_HOLDING.getKey(); + CYCLE_HOLDING_POS.getKey(); + CYCLE_HOLDING_NEG.getKey(); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/client/model/MimicBakedModel.java b/src/main/java/wayoftime/bloodmagic/client/model/MimicBakedModel.java new file mode 100644 index 00000000..095bdea8 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/model/MimicBakedModel.java @@ -0,0 +1,195 @@ +package wayoftime.bloodmagic.client.model; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Random; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import com.google.common.collect.ImmutableList; + +import net.minecraft.block.BlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.RenderTypeLookup; +import net.minecraft.client.renderer.model.BakedQuad; +import net.minecraft.client.renderer.model.IBakedModel; +import net.minecraft.client.renderer.model.ItemCameraTransforms; +import net.minecraft.client.renderer.model.ItemOverrideList; +import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.vertex.VertexFormatElement; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraftforge.client.MinecraftForgeClient; +import net.minecraftforge.client.model.data.EmptyModelData; +import net.minecraftforge.client.model.data.IDynamicBakedModel; +import net.minecraftforge.client.model.data.IModelData; +import net.minecraftforge.client.model.pipeline.BakedQuadBuilder; +import wayoftime.bloodmagic.common.block.BlockMimic; +import wayoftime.bloodmagic.tile.TileMimic; + +public class MimicBakedModel implements IDynamicBakedModel +{ + public final ResourceLocation texture; + + public MimicBakedModel(ResourceLocation texture) + { + this.texture = texture; + } + + private TextureAtlasSprite getTexture() + { + return Minecraft.getInstance().getAtlasSpriteGetter(AtlasTexture.LOCATION_BLOCKS_TEXTURE).apply(texture); + } + + @Override + public boolean isSideLit() + { + return false; + } + + private void putVertex(BakedQuadBuilder builder, Vector3d normal, double x, double y, double z, float u, float v, TextureAtlasSprite sprite, float r, float g, float b) + { + ImmutableList elements = builder.getVertexFormat().getElements().asList(); + for (int j = 0; j < elements.size(); j++) + { + VertexFormatElement e = elements.get(j); + switch (e.getUsage()) + { + case POSITION: + builder.put(j, (float) x, (float) y, (float) z, 1.0f); + break; + case COLOR: + builder.put(j, r, g, b, 1.0f); + break; + case UV: + switch (e.getIndex()) + { + case 0: + float iu = sprite.getInterpolatedU(u); + float iv = sprite.getInterpolatedV(v); + builder.put(j, iu, iv); + break; + case 2: + builder.put(j, (short) 0, (short) 0); + break; + default: + builder.put(j); + break; + } + break; + case NORMAL: + builder.put(j, (float) normal.x, (float) normal.y, (float) normal.z); + break; + default: + builder.put(j); + break; + } + } + } + + private BakedQuad createQuad(Vector3d v1, Vector3d v2, Vector3d v3, Vector3d v4, TextureAtlasSprite sprite) + { + Vector3d normal = v3.subtract(v2).crossProduct(v1.subtract(v2)).normalize(); + int tw = sprite.getWidth(); + int th = sprite.getHeight(); + + BakedQuadBuilder builder = new BakedQuadBuilder(sprite); + builder.setQuadOrientation(Direction.getFacingFromVector(normal.x, normal.y, normal.z)); + putVertex(builder, normal, v1.x, v1.y, v1.z, 0, 0, sprite, 1.0f, 1.0f, 1.0f); + putVertex(builder, normal, v2.x, v2.y, v2.z, 0, th, sprite, 1.0f, 1.0f, 1.0f); + putVertex(builder, normal, v3.x, v3.y, v3.z, tw, th, sprite, 1.0f, 1.0f, 1.0f); + putVertex(builder, normal, v4.x, v4.y, v4.z, tw, 0, sprite, 1.0f, 1.0f, 1.0f); + return builder.build(); + } + + private static Vector3d v(double x, double y, double z) + { + return new Vector3d(x, y, z); + } + + @Nonnull + @Override + public List getQuads(@Nullable BlockState state, @Nullable Direction side, @Nonnull Random rand, @Nonnull IModelData extraData) + { + RenderType layer = MinecraftForgeClient.getRenderLayer(); + + BlockState mimic = extraData.getData(TileMimic.MIMIC); + if (mimic != null && !(mimic.getBlock() instanceof BlockMimic)) + { + if (layer == null || RenderTypeLookup.canRenderInLayer(mimic, layer)) + { + IBakedModel model = Minecraft.getInstance().getBlockRendererDispatcher().getBlockModelShapes().getModel(mimic); + try + { + return model.getQuads(mimic, side, rand, EmptyModelData.INSTANCE); + } catch (Exception e) + { + return Collections.emptyList(); + } + } + return Collections.emptyList(); + } + + if (side != null || (layer != null && !layer.equals(RenderType.getSolid()))) + { + return Collections.emptyList(); + } + + TextureAtlasSprite texture = getTexture(); + List quads = new ArrayList<>(); + double l = 0; + double r = 1; +// double l = .2; +// double r = 1 - .2; + quads.add(createQuad(v(l, r, l), v(l, r, r), v(r, r, r), v(r, r, l), texture)); + quads.add(createQuad(v(l, l, l), v(r, l, l), v(r, l, r), v(l, l, r), texture)); + quads.add(createQuad(v(r, r, r), v(r, l, r), v(r, l, l), v(r, r, l), texture)); + quads.add(createQuad(v(l, r, l), v(l, l, l), v(l, l, r), v(l, r, r), texture)); + quads.add(createQuad(v(r, r, l), v(r, l, l), v(l, l, l), v(l, r, l), texture)); + quads.add(createQuad(v(l, r, r), v(l, l, r), v(r, l, r), v(r, r, r), texture)); + + return quads; + } + + @Override + public boolean isAmbientOcclusion() + { + return true; + } + + @Override + public boolean isGui3d() + { + return false; + } + + @Override + public boolean isBuiltInRenderer() + { + return false; + } + + @Override + public TextureAtlasSprite getParticleTexture() + { + return getTexture(); + } + + @Override + public ItemOverrideList getOverrides() + { + return ItemOverrideList.EMPTY; + } + + @Override + public ItemCameraTransforms getItemCameraTransforms() + { + return ItemCameraTransforms.DEFAULT; + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/client/model/MimicColor.java b/src/main/java/wayoftime/bloodmagic/client/model/MimicColor.java new file mode 100644 index 00000000..8ee567e7 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/model/MimicColor.java @@ -0,0 +1,32 @@ +package wayoftime.bloodmagic.client.model; + +import javax.annotation.Nullable; + +import net.minecraft.block.BlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.color.IBlockColor; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockDisplayReader; +import wayoftime.bloodmagic.tile.TileMimic; + +public class MimicColor implements IBlockColor +{ + @Override + public int getColor(BlockState blockState, @Nullable IBlockDisplayReader world, @Nullable BlockPos pos, int tint) + { + TileEntity te = world.getTileEntity(pos); + if (te instanceof TileMimic) + { + TileMimic fancy = (TileMimic) te; + BlockState mimic = fancy.getMimic(); + if (mimic != null) + { + return Minecraft.getInstance().getBlockColors().getColor(mimic, world, pos, tint); + } + } + + return -1; + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/client/model/MimicModelGeometry.java b/src/main/java/wayoftime/bloodmagic/client/model/MimicModelGeometry.java new file mode 100644 index 00000000..4324be2f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/model/MimicModelGeometry.java @@ -0,0 +1,39 @@ +package wayoftime.bloodmagic.client.model; + +import java.util.Collection; +import java.util.Collections; +import java.util.Set; + +import net.minecraft.client.renderer.model.IBakedModel; +import net.minecraft.client.renderer.model.IModelTransform; +import net.minecraft.client.renderer.model.IUnbakedModel; +import net.minecraft.client.renderer.model.ItemOverrideList; +import net.minecraft.client.renderer.model.ModelBakery; +import net.minecraft.client.renderer.model.RenderMaterial; +import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.IModelConfiguration; +import net.minecraftforge.client.model.geometry.IModelGeometry; + +public class MimicModelGeometry implements IModelGeometry +{ + public final ResourceLocation texture; + + public MimicModelGeometry(ResourceLocation texture) + { + this.texture = texture; + } + + @Override + public IBakedModel bake(IModelConfiguration owner, ModelBakery bakery, java.util.function.Function spriteGetter, IModelTransform modelTransform, ItemOverrideList overrides, ResourceLocation modelLocation) + { + return new MimicBakedModel(texture); + } + + @Override + public Collection getTextures(IModelConfiguration owner, java.util.function.Function modelGetter, Set> missingTextureErrors) + { + return Collections.singletonList(new RenderMaterial(AtlasTexture.LOCATION_BLOCKS_TEXTURE, texture)); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/model/MimicModelLoader.java b/src/main/java/wayoftime/bloodmagic/client/model/MimicModelLoader.java new file mode 100644 index 00000000..6c14dfd1 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/model/MimicModelLoader.java @@ -0,0 +1,30 @@ +package wayoftime.bloodmagic.client.model; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; + +import net.minecraft.resources.IResourceManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.IModelLoader; + +public class MimicModelLoader implements IModelLoader +{ + public final ResourceLocation texture; + + public MimicModelLoader(ResourceLocation texture) + { + this.texture = texture; + } + + @Override + public void onResourceManagerReload(IResourceManager resourceManager) + { + + } + + @Override + public MimicModelGeometry read(JsonDeserializationContext deserializationContext, JsonObject modelContents) + { + return new MimicModelGeometry(texture); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/client/render/BloodMagicRenderer.java b/src/main/java/wayoftime/bloodmagic/client/render/BloodMagicRenderer.java new file mode 100644 index 00000000..2948f554 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/render/BloodMagicRenderer.java @@ -0,0 +1,104 @@ +package wayoftime.bloodmagic.client.render; + +import java.util.Arrays; + +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; + +public class BloodMagicRenderer +{ + public static float getRed(int color) + { + return (color >> 16 & 0xFF) / 255.0F; + } + + public static float getGreen(int color) + { + return (color >> 8 & 0xFF) / 255.0F; + } + + public static float getBlue(int color) + { + return (color & 0xFF) / 255.0F; + } + + public static float getAlpha(int color) + { + return (color >> 24 & 0xFF) / 255.0F; + } + + public static class Model3D + { + public double minX, minY, minZ; + public double maxX, maxY, maxZ; + + public final TextureAtlasSprite[] textures = new TextureAtlasSprite[6]; + + public final boolean[] renderSides = new boolean[] + { true, true, true, true, true, true, false }; + + public double sizeX() + { + return maxX - minX; + } + + public double sizeY() + { + return maxY - minY; + } + + public double sizeZ() + { + return maxZ - minZ; + } + + public void setSideRender(Direction side, boolean value) + { + renderSides[side.ordinal()] = value; + } + + public boolean shouldSideRender(Direction side) + { + return renderSides[side.ordinal()]; + } + + public void setTexture(TextureAtlasSprite tex) + { + Arrays.fill(textures, tex); + } + + public void setTextures(TextureAtlasSprite down, TextureAtlasSprite up, TextureAtlasSprite north, TextureAtlasSprite south, TextureAtlasSprite west, TextureAtlasSprite east) + { + textures[0] = down; + textures[1] = up; + textures[2] = north; + textures[3] = south; + textures[4] = west; + textures[5] = east; + } + } + + public static class Model2D + { + public double minX, minY; + public double maxX, maxY; + + public ResourceLocation resource; + + public double sizeX() + { + return maxX - minX; + } + + public double sizeY() + { + return maxY - minY; + } + + public void setTexture(ResourceLocation resource) + { + this.resource = resource; + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/render/RenderResizableCuboid.java b/src/main/java/wayoftime/bloodmagic/client/render/RenderResizableCuboid.java new file mode 100644 index 00000000..fbdb2e52 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/render/RenderResizableCuboid.java @@ -0,0 +1,162 @@ +package wayoftime.bloodmagic.client.render; + +import java.util.Arrays; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.Direction.AxisDirection; +import net.minecraft.util.math.vector.Matrix3f; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Vector3f; +import net.minecraft.util.math.vector.Vector3i; +import wayoftime.bloodmagic.client.render.BloodMagicRenderer.Model3D; + +/** + * Adapted from BuildCraft + */ +public class RenderResizableCuboid +{ + public static final RenderResizableCuboid INSTANCE = new RenderResizableCuboid(); + private static final Vector3f VEC_ZERO = new Vector3f(0, 0, 0); + private static final int U_MIN = 0; + private static final int U_MAX = 1; + private static final int V_MIN = 2; + private static final int V_MAX = 3; + + protected EntityRendererManager manager = Minecraft.getInstance().getRenderManager(); + + private static Vector3f withValue(Vector3f vector, Axis axis, float value) + { + if (axis == Axis.X) + { + return new Vector3f(value, vector.getY(), vector.getZ()); + } else if (axis == Axis.Y) + { + return new Vector3f(vector.getX(), value, vector.getZ()); + } else if (axis == Axis.Z) + { + return new Vector3f(vector.getX(), vector.getY(), value); + } + throw new RuntimeException("Was given a null axis! That was probably not intentional, consider this a bug! (Vector = " + vector + ")"); + } + + public static double getValue(Vector3d vector, Axis axis) + { + if (axis == Axis.X) + { + return vector.x; + } else if (axis == Axis.Y) + { + return vector.y; + } else if (axis == Axis.Z) + { + return vector.z; + } + throw new RuntimeException("Was given a null axis! That was probably not intentional, consider this a bug! (Vector = " + vector + ")"); + } + + public void renderCube(Model3D cube, MatrixStack matrix, IVertexBuilder buffer, int argb, int light, int overlay) + { + float red = BloodMagicRenderer.getRed(argb); + float green = BloodMagicRenderer.getGreen(argb); + float blue = BloodMagicRenderer.getBlue(argb); + float alpha = BloodMagicRenderer.getAlpha(argb); + Vector3d size = new Vector3d(cube.sizeX(), cube.sizeY(), cube.sizeZ()); + matrix.push(); + matrix.translate(cube.minX, cube.minY, cube.minZ); + MatrixStack.Entry lastMatrix = matrix.getLast(); + Matrix4f matrix4f = lastMatrix.getMatrix(); + Matrix3f normal = lastMatrix.getNormal(); + for (Direction face : Direction.values()) + { + if (cube.shouldSideRender(face)) + { + int ordinal = face.ordinal(); + TextureAtlasSprite sprite = cube.textures[ordinal]; + if (sprite != null) + { + Axis u = face.getAxis() == Axis.X ? Axis.Z : Axis.X; + Axis v = face.getAxis() == Axis.Y ? Axis.Z : Axis.Y; + float other = face.getAxisDirection() == AxisDirection.POSITIVE + ? (float) getValue(size, face.getAxis()) + : 0; + + // Swap the face if this is positive: the renderer returns indexes that ALWAYS + // are for the negative face, so light it properly this way + face = face.getAxisDirection() == AxisDirection.NEGATIVE ? face : face.getOpposite(); + Direction opposite = face.getOpposite(); + + float minU = sprite.getMinU(); + float maxU = sprite.getMaxU(); + // Flip the v + float minV = sprite.getMaxV(); + float maxV = sprite.getMinV(); + double sizeU = getValue(size, u); + double sizeV = getValue(size, v); + // TODO: Look into this more, as it makes tiling of multiple objects not render + // properly if they don't fit the full texture. + // Example: Mechanical pipes rendering water or lava, makes it relatively easy + // to see the texture artifacts + for (int uIndex = 0; uIndex < sizeU; uIndex++) + { + float[] baseUV = new float[] { minU, maxU, minV, maxV }; + double addU = 1; + // If the size of the texture is greater than the cuboid goes on for then make + // sure the texture positions are lowered + if (uIndex + addU > sizeU) + { + addU = sizeU - uIndex; + baseUV[U_MAX] = baseUV[U_MIN] + (baseUV[U_MAX] - baseUV[U_MIN]) * (float) addU; + } + for (int vIndex = 0; vIndex < sizeV; vIndex++) + { + float[] uv = Arrays.copyOf(baseUV, 4); + double addV = 1; + if (vIndex + addV > sizeV) + { + addV = sizeV - vIndex; + uv[V_MAX] = uv[V_MIN] + (uv[V_MAX] - uv[V_MIN]) * (float) addV; + } + float[] xyz = new float[] { uIndex, (float) (uIndex + addU), vIndex, + (float) (vIndex + addV) }; + + renderPoint(matrix4f, normal, buffer, face, u, v, other, uv, xyz, true, false, red, green, blue, alpha, light, overlay); + renderPoint(matrix4f, normal, buffer, face, u, v, other, uv, xyz, true, true, red, green, blue, alpha, light, overlay); + renderPoint(matrix4f, normal, buffer, face, u, v, other, uv, xyz, false, true, red, green, blue, alpha, light, overlay); + renderPoint(matrix4f, normal, buffer, face, u, v, other, uv, xyz, false, false, red, green, blue, alpha, light, overlay); + + renderPoint(matrix4f, normal, buffer, opposite, u, v, other, uv, xyz, false, false, red, green, blue, alpha, light, overlay); + renderPoint(matrix4f, normal, buffer, opposite, u, v, other, uv, xyz, false, true, red, green, blue, alpha, light, overlay); + renderPoint(matrix4f, normal, buffer, opposite, u, v, other, uv, xyz, true, true, red, green, blue, alpha, light, overlay); + renderPoint(matrix4f, normal, buffer, opposite, u, v, other, uv, xyz, true, false, red, green, blue, alpha, light, overlay); + } + } + } + } + } + matrix.pop(); + } + + private void renderPoint(Matrix4f matrix4f, Matrix3f normal, IVertexBuilder buffer, Direction face, Axis u, Axis v, float other, float[] uv, float[] xyz, boolean minU, boolean minV, float red, float green, float blue, float alpha, int light, int overlay) + { + int U_ARRAY = minU ? U_MIN : U_MAX; + int V_ARRAY = minV ? V_MIN : V_MAX; + Vector3f vertex = withValue(VEC_ZERO, u, xyz[U_ARRAY]); + vertex = withValue(vertex, v, xyz[V_ARRAY]); + vertex = withValue(vertex, face.getAxis(), other); + Vector3i normalForFace = face.getDirectionVec(); + // TODO: Figure out how and why this works, it gives about the same brightness + // as we used to have but I don't understand why/how + float adjustment = 2.5F; + Vector3f norm = new Vector3f(normalForFace.getX() + adjustment, normalForFace.getY() + adjustment, normalForFace.getZ() + adjustment); + norm.normalize(); + buffer.pos(matrix4f, vertex.getX(), vertex.getY(), vertex.getZ()).color(red, green, blue, alpha).tex(uv[U_ARRAY], uv[V_ARRAY]).overlay(overlay).lightmap(light).normal(normal, norm.getX(), norm.getY(), norm.getZ()).endVertex(); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/client/render/RenderResizableQuadrilateral.java b/src/main/java/wayoftime/bloodmagic/client/render/RenderResizableQuadrilateral.java new file mode 100644 index 00000000..006b7f4f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/render/RenderResizableQuadrilateral.java @@ -0,0 +1,167 @@ +package wayoftime.bloodmagic.client.render; + +import java.util.Arrays; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.Direction.AxisDirection; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Matrix3f; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Vector3f; +import net.minecraft.util.math.vector.Vector3i; +import wayoftime.bloodmagic.client.render.BloodMagicRenderer.Model2D; + +public class RenderResizableQuadrilateral +{ + public static final RenderResizableQuadrilateral INSTANCE = new RenderResizableQuadrilateral(); + private static final Vector3f VEC_ZERO = new Vector3f(0, 0, 0); + private static final int U_MIN = 0; + private static final int U_MAX = 1; + private static final int V_MIN = 2; + private static final int V_MAX = 3; + + protected EntityRendererManager manager = Minecraft.getInstance().getRenderManager(); + + private static Vector3f withValue(Vector3f vector, Axis axis, float value) + { + if (axis == Axis.X) + { + return new Vector3f(value, vector.getY(), vector.getZ()); + } else if (axis == Axis.Y) + { + return new Vector3f(vector.getX(), value, vector.getZ()); + } else if (axis == Axis.Z) + { + return new Vector3f(vector.getX(), vector.getY(), value); + } + throw new RuntimeException("Was given a null axis! That was probably not intentional, consider this a bug! (Vector = " + + vector + ")"); + } + + public static double getValue(Vector3d vector, Axis axis) + { + if (axis == Axis.X) + { + return vector.x; + } else if (axis == Axis.Y) + { + return vector.y; + } else if (axis == Axis.Z) + { + return vector.z; + } + throw new RuntimeException("Was given a null axis! That was probably not intentional, consider this a bug! (Vector = " + + vector + ")"); + } + + public void renderSquare(Model2D square, MatrixStack matrix, IVertexBuilder buffer, int argb, int light, int overlay) + { + float red = BloodMagicRenderer.getRed(argb); + float green = BloodMagicRenderer.getGreen(argb); + float blue = BloodMagicRenderer.getBlue(argb); + float alpha = BloodMagicRenderer.getAlpha(argb); + Vector3d size = new Vector3d(square.sizeX(), 0, square.sizeY()); + matrix.push(); + matrix.translate(square.minX, 0, square.minY); + MatrixStack.Entry lastMatrix = matrix.getLast(); + Matrix4f matrix4f = lastMatrix.getMatrix(); + Matrix3f normal = lastMatrix.getNormal(); + Direction face = Direction.UP; +// for (Direction face : Direction.values()) + + int ordinal = face.ordinal(); +// TextureAtlasSprite sprite = cube.textures[ordinal]; + ResourceLocation rl = square.resource; + if (rl != null) + { +// Minecraft.getInstance().textureManager.bindTexture(rl); + Axis u = face.getAxis() == Axis.X ? Axis.Z : Axis.X; + Axis v = face.getAxis() == Axis.Y ? Axis.Z : Axis.Y; + float other = face.getAxisDirection() == AxisDirection.POSITIVE ? (float) getValue(size, face.getAxis()) + : 0; + + // Swap the face if this is positive: the renderer returns indexes that ALWAYS + // are for the negative face, so light it properly this way + face = face.getAxisDirection() == AxisDirection.NEGATIVE ? face : face.getOpposite(); +// Direction opposite = face.getOpposite(); + + float minU = 0; + float maxU = 1; + // Flip the v + float minV = 1; + float maxV = 0; +// float minU = sprite.getMinU(); +// float maxU = sprite.getMaxU(); +// // Flip the v +// float minV = sprite.getMaxV(); +// float maxV = sprite.getMinV(); + double sizeU = getValue(size, u); + double sizeV = getValue(size, v); + // TODO: Look into this more, as it makes tiling of multiple objects not render + // properly if they don't fit the full texture. + // Example: Mechanical pipes rendering water or lava, makes it relatively easy + // to see the texture artifacts + for (int uIndex = 0; uIndex < sizeU; uIndex++) + { + float[] baseUV = new float[] + { minU, maxU, minV, maxV }; + double addU = 1; + // If the size of the texture is greater than the cuboid goes on for then make + // sure the texture positions are lowered + if (uIndex + addU > sizeU) + { +// addU = sizeU - uIndex; + baseUV[U_MAX] = baseUV[U_MIN] + (baseUV[U_MAX] - baseUV[U_MIN]) * (float) addU; + } + for (int vIndex = 0; vIndex < sizeV; vIndex++) + { + float[] uv = Arrays.copyOf(baseUV, 4); + double addV = 1; + if (vIndex + addV > sizeV) + { +// addV = sizeV - vIndex; + uv[V_MAX] = uv[V_MIN] + (uv[V_MAX] - uv[V_MIN]) * (float) addV; + } + float[] xyz = new float[] + { uIndex, (float) (uIndex + addU), vIndex, (float) (vIndex + addV) }; + + renderPoint(matrix4f, normal, buffer, face, u, v, other, uv, xyz, true, false, red, green, blue, alpha, light, overlay); + renderPoint(matrix4f, normal, buffer, face, u, v, other, uv, xyz, true, true, red, green, blue, alpha, light, overlay); + renderPoint(matrix4f, normal, buffer, face, u, v, other, uv, xyz, false, true, red, green, blue, alpha, light, overlay); + renderPoint(matrix4f, normal, buffer, face, u, v, other, uv, xyz, false, false, red, green, blue, alpha, light, overlay); + +// renderPoint(matrix4f, normal, buffer, opposite, u, v, other, uv, xyz, false, false, red, green, blue, alpha, light, overlay); +// renderPoint(matrix4f, normal, buffer, opposite, u, v, other, uv, xyz, false, true, red, green, blue, alpha, light, overlay); +// renderPoint(matrix4f, normal, buffer, opposite, u, v, other, uv, xyz, true, true, red, green, blue, alpha, light, overlay); +// renderPoint(matrix4f, normal, buffer, opposite, u, v, other, uv, xyz, true, false, red, green, blue, alpha, light, overlay); + } + + } + } + matrix.pop(); + } + + private void renderPoint(Matrix4f matrix4f, Matrix3f normal, IVertexBuilder buffer, Direction face, Axis u, Axis v, float other, float[] uv, float[] xyz, boolean minU, boolean minV, float red, float green, float blue, float alpha, int light, int overlay) + { + int U_ARRAY = minU ? U_MIN : U_MAX; + int V_ARRAY = minV ? V_MIN : V_MAX; + Vector3f vertex = withValue(VEC_ZERO, u, xyz[U_ARRAY]); + vertex = withValue(vertex, v, xyz[V_ARRAY]); + vertex = withValue(vertex, face.getAxis(), other); + Vector3i normalForFace = face.getDirectionVec(); + // TODO: Figure out how and why this works, it gives about the same brightness + // as we used to have but I don't understand why/how + float adjustment = 2.5F; + Vector3f norm = new Vector3f(normalForFace.getX() + adjustment, normalForFace.getY() + + adjustment, normalForFace.getZ() + adjustment); + norm.normalize(); + buffer.pos(matrix4f, vertex.getX(), vertex.getY(), vertex.getZ()).color(red, green, blue, alpha).tex(uv[U_ARRAY], uv[V_ARRAY]).overlay(overlay).lightmap(light).normal(normal, norm.getX(), norm.getY(), norm.getZ()).endVertex(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/AlchemyArrayRenderer.java b/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/AlchemyArrayRenderer.java new file mode 100644 index 00000000..3557df32 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/AlchemyArrayRenderer.java @@ -0,0 +1,115 @@ +package wayoftime.bloodmagic.client.render.alchemyarray; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; + +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Quaternion; +import wayoftime.bloodmagic.client.render.BloodMagicRenderer; +import wayoftime.bloodmagic.client.render.BloodMagicRenderer.Model2D; +import wayoftime.bloodmagic.client.render.RenderResizableQuadrilateral; +import wayoftime.bloodmagic.tile.TileAlchemyArray; + +public class AlchemyArrayRenderer +{ + public final ResourceLocation arrayResource; + + public AlchemyArrayRenderer() + { + this(new ResourceLocation("bloodmagic", "textures/models/alchemyarrays/sightsigil.png")); + } + + public AlchemyArrayRenderer(ResourceLocation arrayResource) + { + this.arrayResource = arrayResource; + } + + public float getRotation(float craftTime) + { + float offset = 2; + if (craftTime >= offset) + { + float modifier = (float) Math.pow(craftTime - offset, 1.5); + return modifier * 1f; + } + return 0; + } + + public float getSecondaryRotation(float craftTime) + { + float offset = 50; + if (craftTime >= offset) + { + float modifier = (float) Math.pow(craftTime - offset, 1.7); + return modifier * 0.5f; + } + return 0; + } + + public float getSizeModifier(float craftTime) + { + if (craftTime >= 150 && craftTime <= 250) + { + return (200 - craftTime) / 50f; + } + return 1.0f; + } + + public float getVerticalOffset(float craftTime) + { + if (craftTime >= 5) + { + if (craftTime <= 40) + { + return (float) (-0.4 + (0.4) * Math.pow((craftTime - 5) / 35f, 3)); + } else + { + return 0; + } + } + return -0.4f; + } + + public void renderAt(TileAlchemyArray tileArray, double x, double y, double z, float craftTime, MatrixStack matrixStack, IRenderTypeBuffer renderer, int combinedLightIn, int combinedOverlayIn) + { + matrixStack.push(); + + matrixStack.translate(0.5, 0.5, 0.5); + + float rot = getRotation(craftTime); + float secondaryRot = getSecondaryRotation(craftTime); + + float size = 1.0F * getSizeModifier(craftTime); + Direction rotation = tileArray.getRotation(); + + matrixStack.push(); + matrixStack.translate(0, getVerticalOffset(craftTime), 0); + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), -rotation.getHorizontalAngle(), true)); + + matrixStack.push(); + + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), rot, true)); + matrixStack.rotate(new Quaternion(Direction.NORTH.toVector3f(), secondaryRot, true)); + matrixStack.rotate(new Quaternion(Direction.EAST.toVector3f(), secondaryRot * 0.45812f, true)); + + IVertexBuilder twoDBuffer = renderer.getBuffer(RenderType.getEntityTranslucent(arrayResource)); + Model2D arrayModel = new BloodMagicRenderer.Model2D(); + arrayModel.minX = -0.5; + arrayModel.maxX = +0.5; + arrayModel.minY = -0.5; + arrayModel.maxY = +0.5; + arrayModel.resource = arrayResource; + + matrixStack.scale(size, size, size); + + RenderResizableQuadrilateral.INSTANCE.renderSquare(arrayModel, matrixStack, twoDBuffer, 0xFFFFFFFF, 0x00F000F0, OverlayTexture.NO_OVERLAY); + + matrixStack.pop(); + matrixStack.pop(); + matrixStack.pop(); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/BeaconAlchemyCircleRenderer.java b/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/BeaconAlchemyCircleRenderer.java new file mode 100644 index 00000000..b5021539 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/BeaconAlchemyCircleRenderer.java @@ -0,0 +1,113 @@ +package wayoftime.bloodmagic.client.render.alchemyarray; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; + +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Quaternion; +import wayoftime.bloodmagic.client.render.BloodMagicRenderer; +import wayoftime.bloodmagic.client.render.BloodMagicRenderer.Model2D; +import wayoftime.bloodmagic.client.render.RenderResizableQuadrilateral; +import wayoftime.bloodmagic.tile.TileAlchemyArray; + +public class BeaconAlchemyCircleRenderer extends AlchemyArrayRenderer +{ + public BeaconAlchemyCircleRenderer(ResourceLocation arrayResource) + { + super(arrayResource); + } + + @Override + public float getRotation(float craftTime) + { + float offset = 2; + if (craftTime >= offset) + { + float modifier = (craftTime - offset) * 5f; + return modifier * 1f; + } + return 0; + } + + @Override + public float getSecondaryRotation(float craftTime) + { + float offset = 50; + float secondaryOffset = 150; + if (craftTime >= offset) + { + if (craftTime < secondaryOffset) + { + float modifier = 90 * (craftTime - offset) / (secondaryOffset - offset); + return modifier; + } else + { + return 90; + } + } + return 0; + } + + public float getSizeModifier(float craftTime) + { + return 1.0f; + } + +// public float getVerticalOffset(float craftTime) +// { +// if (craftTime >= 5) +// { +// if (craftTime <= 40) +// { +// return (float) (-0.4 + (0.4) * Math.pow((craftTime - 5) / 35f, 3)); +// } else +// { +// return 0; +// } +// } +// return -0.4f; +// } + + public void renderAt(TileAlchemyArray tileArray, double x, double y, double z, float craftTime, MatrixStack matrixStack, IRenderTypeBuffer renderer, int combinedLightIn, int combinedOverlayIn) + { + matrixStack.push(); + + matrixStack.translate(0.5, 0.5, 0.5); + + float rot = getRotation(craftTime); + float secondaryRot = getSecondaryRotation(craftTime); + + float size = 1.0F * getSizeModifier(craftTime); + Direction rotation = tileArray.getRotation(); + + matrixStack.push(); + matrixStack.translate(0, getVerticalOffset(craftTime), 0); + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), -rotation.getHorizontalAngle(), true)); + + matrixStack.push(); + + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), rot, true)); + matrixStack.rotate(new Quaternion(Direction.EAST.toVector3f(), -secondaryRot, true)); +// matrixStack.rotate(new Quaternion(Direction.EAST.toVector3f(), secondaryRot * 0.45812f, true)); + + IVertexBuilder twoDBuffer = renderer.getBuffer(RenderType.getEntityTranslucent(arrayResource)); + Model2D arrayModel = new BloodMagicRenderer.Model2D(); + arrayModel.minX = -0.5; + arrayModel.maxX = +0.5; + arrayModel.minY = -0.5; + arrayModel.maxY = +0.5; + arrayModel.resource = arrayResource; + + matrixStack.scale(size, size, size); + +// RenderResizableQuadrilateral.INSTANCE.renderSquare(arrayModel, matrixStack, twoDBuffer, 0x000000FF, 0xFFFFFFFF, OverlayTexture.NO_OVERLAY); + RenderResizableQuadrilateral.INSTANCE.renderSquare(arrayModel, matrixStack, twoDBuffer, 0xFFFFFFFF, 0x00F000F0, combinedOverlayIn); + + matrixStack.pop(); + matrixStack.pop(); + matrixStack.pop(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/BindingAlchemyCircleRenderer.java b/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/BindingAlchemyCircleRenderer.java new file mode 100644 index 00000000..1a79c19c --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/BindingAlchemyCircleRenderer.java @@ -0,0 +1,229 @@ +package wayoftime.bloodmagic.client.render.alchemyarray; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; + +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Quaternion; +import wayoftime.bloodmagic.client.render.BloodMagicRenderer; +import wayoftime.bloodmagic.client.render.BloodMagicRenderer.Model2D; +import wayoftime.bloodmagic.client.render.RenderResizableQuadrilateral; +import wayoftime.bloodmagic.tile.TileAlchemyArray; + +public class BindingAlchemyCircleRenderer extends AlchemyArrayRenderer +{ + public static final int numberOfSweeps = 5; + public static final int startTime = 50; + public static final int sweepTime = 40; + public static final int inwardRotationTime = 50; + public static final float arcLength = (float) Math.sqrt(2 * (2 * 2) - 2 * 2 * 2 * Math.cos(2 * Math.PI * 2 / 5)); + public static final float theta2 = (float) (18f * Math.PI / 180f); + public static final int endTime = 300; + public final ResourceLocation[] arraysResources; + public float offsetFromFace = -0.9f; + + public BindingAlchemyCircleRenderer() + { + super(new ResourceLocation("bloodmagic", "textures/models/alchemyarrays/bindingarray.png")); + arraysResources = new ResourceLocation[5]; + arraysResources[0] = new ResourceLocation("bloodmagic", "textures/models/alchemyarrays/bindinglightningarray.png"); + arraysResources[1] = new ResourceLocation("bloodmagic", "textures/models/alchemyarrays/bindinglightningarray.png"); + arraysResources[2] = new ResourceLocation("bloodmagic", "textures/models/alchemyarrays/bindinglightningarray.png"); + arraysResources[3] = new ResourceLocation("bloodmagic", "textures/models/alchemyarrays/bindinglightningarray.png"); + arraysResources[4] = new ResourceLocation("bloodmagic", "textures/models/alchemyarrays/bindinglightningarray.png"); + } + + public float getRotation(int circle, float craftTime) + { + float offset = 2; + if (circle == -1 && craftTime >= offset) + { + return (craftTime - offset) * 360 * 2 / 5 / sweepTime; + } + if (craftTime >= offset) + { + float modifier = (float) Math.pow(craftTime - offset, 1.5); + return modifier * 0.5f; + } + return 0; + } + + public float getSecondaryRotation(int circle, float craftTime) + { + float offset = 50; + if (craftTime >= offset) + { + float modifier = (float) Math.pow(craftTime - offset, 1.7); + return modifier * 0.5f; + } + return 0; + } + + public float getVerticalOffset(int circle, float craftTime) + { + if (circle >= 0 && circle <= 4) + { + if (craftTime >= 5) + { + if (craftTime <= 40) + { + return (float) ((0.4) * Math.pow((craftTime - 5) / 35f, 3)); + } else + { + return 0.4f; + } + } + + return 0; + } + + if (craftTime >= 5) + { + if (craftTime <= 40) + { + return (float) ((0.4) * Math.pow((craftTime - 5) / 35f, 3)); + } else + { + return 0.4f; + } + } + return 0; + } + + public float getInwardRotation(int circle, float craftTime) + { + float offset = startTime + numberOfSweeps * sweepTime; + if (craftTime >= offset) + { + if (craftTime <= offset + inwardRotationTime) + { + return 90f / inwardRotationTime * (craftTime - offset); + } else + { + return 90; + } + } + + return 0; + } + + public void renderAt(TileAlchemyArray tileArray, double x, double y, double z, float craftTime, MatrixStack matrixStack, IRenderTypeBuffer renderer, int combinedLightIn, int combinedOverlayIn) + { + matrixStack.push(); + + matrixStack.translate(0.5, 0.5, 0.5); + + float rot = getRotation(-1, craftTime); + float secondaryRot = getSecondaryRotation(craftTime); + + float size = 3; + Direction dirRotation = tileArray.getRotation(); + + matrixStack.push(); + matrixStack.translate(0, getVerticalOffset(craftTime), 0); + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), -dirRotation.getHorizontalAngle(), true)); + + matrixStack.push(); + + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), rot, true)); +// matrixStack.rotate(new Quaternion(Direction.NORTH.toVector3f(), secondaryRot, true)); +// matrixStack.rotate(new Quaternion(Direction.EAST.toVector3f(), secondaryRot * 0.45812f, true)); + + IVertexBuilder twoDBuffer = renderer.getBuffer(RenderType.getEntityTranslucent(arrayResource)); + Model2D arrayModel = new BloodMagicRenderer.Model2D(); + arrayModel.minX = -0.5; + arrayModel.maxX = +0.5; + arrayModel.minY = -0.5; + arrayModel.maxY = +0.5; + arrayModel.resource = arrayResource; + + matrixStack.scale(size, size, size); + + RenderResizableQuadrilateral.INSTANCE.renderSquare(arrayModel, matrixStack, twoDBuffer, 0xFFFFFFFF, combinedLightIn, combinedOverlayIn); + + matrixStack.pop(); + + for (int i = 0; i < 5; i++) + { + matrixStack.push(); + + float newSize = 1; + float distance = BindingAlchemyCircleRenderer.getDistanceOfCircle(i, craftTime); + float angle = BindingAlchemyCircleRenderer.getAngleOfCircle(i, craftTime); + float rotation = this.getRotation(i, craftTime); + + matrixStack.translate(distance * Math.sin(angle), this.getVerticalOffset(i, craftTime), -distance * Math.cos(angle)); + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), i * 360 / 5, true)); + matrixStack.rotate(new Quaternion(Direction.NORTH.toVector3f(), getInwardRotation(i, craftTime), true)); + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), rotation, true)); + twoDBuffer = renderer.getBuffer(RenderType.getEntityTranslucent(arraysResources[i])); + arrayModel.resource = arraysResources[i]; + + matrixStack.scale(newSize, newSize, newSize); + + RenderResizableQuadrilateral.INSTANCE.renderSquare(arrayModel, matrixStack, twoDBuffer, 0xFFFFFFFF, combinedLightIn, combinedOverlayIn); + + matrixStack.pop(); + } + + matrixStack.pop(); + matrixStack.pop(); + } + + public static float getAngleOfCircle(int circle, float craftTime) + { + if (circle >= 0 && circle <= 4) + { + float originalAngle = (float) (circle * 2 * Math.PI / 5d); + + double sweep = (craftTime - startTime) / sweepTime; + if (sweep >= 0 && sweep < numberOfSweeps) + { + float offset = ((int) sweep) * sweepTime + startTime; + originalAngle += 2 * Math.PI * 2 / 5 * (int) sweep + getAngle(craftTime - offset, (int) sweep); + } else if (sweep >= numberOfSweeps) + { + originalAngle += 2 * Math.PI * 2 / 5 * numberOfSweeps + (craftTime - 5 * sweepTime - startTime) * 2 * Math.PI * 2 / 5 / sweepTime; + } + + return originalAngle; + } + + return 0; + } + + public static float getAngle(float craftTime, int sweep) + { + float rDP = craftTime / sweepTime * arcLength; + float rEnd = (float) Math.sqrt(rDP * rDP + 2 * 2 - 2 * rDP * 2 * Math.cos(theta2)); + return (float) (Math.acos((2 * 2 + rEnd * rEnd - rDP * rDP) / (2 * rEnd * 2))); + } + + /** + * Returns the center-to-center distance of this circle. + */ + public static float getDistanceOfCircle(int circle, float craftTime) + { // TODO Change this so it doesn't use angle, since it is a constant speed. + double sweep = (craftTime - startTime) / sweepTime; + if (sweep >= 0 && sweep < numberOfSweeps) + { + float offset = ((int) sweep) * sweepTime + startTime; + float angle = getAngle(craftTime - offset, (int) sweep); + float thetaPrime = (float) (Math.PI - theta2 - angle); + // if(thetaPrime > 0 && thetaPrime < Math.PI) { + return (float) (2 * Math.sin(theta2) / Math.sin(thetaPrime)); + // } + } else if (sweep >= numberOfSweeps && craftTime < endTime) + { + return 2 - 2 * (craftTime - startTime - numberOfSweeps * sweepTime) / (endTime - startTime - numberOfSweeps * sweepTime); + } else if (craftTime >= endTime) + { + return 0; + } + + return 2; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/DayAlchemyCircleRenderer.java b/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/DayAlchemyCircleRenderer.java new file mode 100644 index 00000000..4a2d37ec --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/DayAlchemyCircleRenderer.java @@ -0,0 +1,229 @@ +package wayoftime.bloodmagic.client.render.alchemyarray; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; + +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Quaternion; +import wayoftime.bloodmagic.client.render.BloodMagicRenderer; +import wayoftime.bloodmagic.client.render.BloodMagicRenderer.Model2D; +import wayoftime.bloodmagic.client.render.RenderResizableQuadrilateral; +import wayoftime.bloodmagic.tile.TileAlchemyArray; + +public class DayAlchemyCircleRenderer extends AlchemyArrayRenderer +{ + private final ResourceLocation spikesResource; + private final ResourceLocation circleResource; + + public DayAlchemyCircleRenderer(ResourceLocation arrayResource, ResourceLocation spikesResource, ResourceLocation circleResource) + { + super(arrayResource); + this.spikesResource = spikesResource; + this.circleResource = circleResource; + } + + @Override + public float getRotation(float craftTime) + { + return 0; + } + + public float getSecondaryRotation(float craftTime) + { + float offset = 2; + if (craftTime >= offset) + { + float modifier = (craftTime - offset) * (craftTime - offset) * 0.05f; + return modifier * 1f; + } + return 0; + } + + public float getVerticalOffset(float craftTime) + { + if (craftTime >= 40) + { + if (craftTime <= 100) + { + return (float) (-0.4 + (0.4) * Math.pow((craftTime - 40) / 60f, 3)); + } else + { + return 0; + } + } + return -0.4f; + } + + public float getSizeModifier(float craftTime) + { + return 1.0f; + } + + public float getSecondarySizeModifier(float craftTime) + { + if (craftTime >= 40) + { + if (craftTime <= 160) + { + return (float) ((2f) * Math.pow((craftTime - 40) / 120f, 3)); + } else + { + return 2; + } + } + + return 0; + } + + public float getTertiarySizeModifier(float craftTime) + { + if (craftTime >= 40) + { + if (craftTime <= 100) + { + return (float) ((1f) * Math.pow((craftTime - 40) / 60f, 3)); + } else + { + return 1; + } + } + + return 0; + } + + public float getSpikeVerticalOffset(float craftTime) + { + if (craftTime >= 40) + { + if (craftTime <= 100) + { + return (float) (-0.4 + (0.4) * Math.pow((craftTime - 40) / 60f, 3)); + } else if (craftTime <= 140) + { + return -0.01f * (craftTime - 100); + } else + { + return -0.4f; + } + } + return -0.4f; + } + + public float getCentralCircleOffset(float craftTime) + { + if (craftTime >= 40) + { + if (craftTime <= 100) + { + return (float) (-0.4 + (0.4) * Math.pow((craftTime - 40) / 60f, 3)); + } else if (craftTime <= 140) + { + return 0.01f * (craftTime - 100); + } else + { + return 0.4f; + } + } + return -0.4f; + } + + public void renderAt(TileAlchemyArray tileArray, double x, double y, double z, float craftTime, MatrixStack matrixStack, IRenderTypeBuffer renderer, int combinedLightIn, int combinedOverlayIn) + { + matrixStack.push(); + + matrixStack.translate(0.5, 0.5, 0.5); + + float rot = getRotation(craftTime); + float secondaryRot = getSecondaryRotation(craftTime); + + float size = 1.0F * getSizeModifier(craftTime); + Direction rotation = tileArray.getRotation(); + + matrixStack.push(); + matrixStack.translate(0, getVerticalOffset(craftTime), 0); + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), -rotation.getHorizontalAngle(), true)); + + matrixStack.push(); + + matrixStack.rotate(new Quaternion(Direction.NORTH.toVector3f(), rot, true)); + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), secondaryRot, true)); +// matrixStack.rotate(new Quaternion(Direction.EAST.toVector3f(), secondaryRot * 0.45812f, true)); + + IVertexBuilder twoDBuffer = renderer.getBuffer(RenderType.getEntityTranslucent(arrayResource)); + Model2D arrayModel = new BloodMagicRenderer.Model2D(); + arrayModel.minX = -0.5; + arrayModel.maxX = +0.5; + arrayModel.minY = -0.5; + arrayModel.maxY = +0.5; + arrayModel.resource = arrayResource; + + matrixStack.scale(size, size, size); + + RenderResizableQuadrilateral.INSTANCE.renderSquare(arrayModel, matrixStack, twoDBuffer, 0xFFFFFFFF, 0x00F000F0, combinedOverlayIn); + + matrixStack.pop(); + matrixStack.pop(); + + matrixStack.push(); + matrixStack.translate(0, getSpikeVerticalOffset(craftTime), 0); + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), -rotation.getHorizontalAngle(), true)); + + matrixStack.push(); + + matrixStack.rotate(new Quaternion(Direction.NORTH.toVector3f(), rot, true)); + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), -secondaryRot, true)); +// matrixStack.rotate(new Quaternion(Direction.EAST.toVector3f(), secondaryRot * 0.45812f, true)); + + twoDBuffer = renderer.getBuffer(RenderType.getEntityTranslucent(spikesResource)); + arrayModel = new BloodMagicRenderer.Model2D(); + arrayModel.minX = -0.5; + arrayModel.maxX = +0.5; + arrayModel.minY = -0.5; + arrayModel.maxY = +0.5; + arrayModel.resource = spikesResource; + + float secondarySize = 1.0F * getSecondarySizeModifier(craftTime); + + matrixStack.scale(secondarySize, secondarySize, secondarySize); + + int colorWanted = 0xFFFFFFFF; + + RenderResizableQuadrilateral.INSTANCE.renderSquare(arrayModel, matrixStack, twoDBuffer, colorWanted, 0x00F000F0, combinedOverlayIn); + + matrixStack.pop(); + matrixStack.pop(); + + matrixStack.push(); + matrixStack.translate(0, getCentralCircleOffset(craftTime), 0); + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), -rotation.getHorizontalAngle(), true)); + + matrixStack.push(); + + matrixStack.rotate(new Quaternion(Direction.NORTH.toVector3f(), rot, true)); + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), -secondaryRot, true)); +// matrixStack.rotate(new Quaternion(Direction.EAST.toVector3f(), secondaryRot * 0.45812f, true)); + + twoDBuffer = renderer.getBuffer(RenderType.getEntityTranslucent(circleResource)); + arrayModel = new BloodMagicRenderer.Model2D(); + arrayModel.minX = -0.5; + arrayModel.maxX = +0.5; + arrayModel.minY = -0.5; + arrayModel.maxY = +0.5; + arrayModel.resource = circleResource; + + float tertiarySize = 1.0F * getTertiarySizeModifier(craftTime); + + matrixStack.scale(tertiarySize, tertiarySize, tertiarySize); + + colorWanted = 0xFFFFFFFF; + + RenderResizableQuadrilateral.INSTANCE.renderSquare(arrayModel, matrixStack, twoDBuffer, colorWanted, 0x00F000F0, combinedOverlayIn); + + matrixStack.pop(); + matrixStack.pop(); + matrixStack.pop(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/LowAlchemyCircleRenderer.java b/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/LowAlchemyCircleRenderer.java new file mode 100644 index 00000000..5e7e4724 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/LowAlchemyCircleRenderer.java @@ -0,0 +1,23 @@ +package wayoftime.bloodmagic.client.render.alchemyarray; + +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.BloodMagic; + +public class LowAlchemyCircleRenderer extends SingleAlchemyCircleRenderer +{ + public LowAlchemyCircleRenderer() + { + this(BloodMagic.rl("textures/models/AlchemyArrays/SkeletonTurret1.png")); + } + + public LowAlchemyCircleRenderer(ResourceLocation arrayResource) + { + super(arrayResource); + } + + @Override + public float getVerticalOffset(float craftTime) + { + return -0.4f; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/LowStaticAlchemyCircleRenderer.java b/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/LowStaticAlchemyCircleRenderer.java new file mode 100644 index 00000000..ce9c1668 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/LowStaticAlchemyCircleRenderer.java @@ -0,0 +1,36 @@ +package wayoftime.bloodmagic.client.render.alchemyarray; + +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.BloodMagic; + +public class LowStaticAlchemyCircleRenderer extends LowAlchemyCircleRenderer +{ + public LowStaticAlchemyCircleRenderer() + { + this(BloodMagic.rl("textures/models/AlchemyArrays/SkeletonTurret1.png")); + } + + public LowStaticAlchemyCircleRenderer(ResourceLocation arrayResource) + { + super(arrayResource); + } + + @Override + public float getRotation(float craftTime) + { + + return 0; + } + + public float getSecondaryRotation(float craftTime) + { + float offset = 2; + float duration = 180; + if (craftTime >= offset && craftTime < offset + duration) + { + float modifier = (craftTime - offset) * 2f; + return modifier * 1f; + } + return 0; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/NightAlchemyCircleRenderer.java b/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/NightAlchemyCircleRenderer.java new file mode 100644 index 00000000..64f59611 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/NightAlchemyCircleRenderer.java @@ -0,0 +1,327 @@ +package wayoftime.bloodmagic.client.render.alchemyarray; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; + +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Quaternion; +import wayoftime.bloodmagic.client.render.BloodMagicRenderer; +import wayoftime.bloodmagic.client.render.BloodMagicRenderer.Model2D; +import wayoftime.bloodmagic.client.render.RenderResizableQuadrilateral; +import wayoftime.bloodmagic.tile.TileAlchemyArray; + +public class NightAlchemyCircleRenderer extends AlchemyArrayRenderer +{ + private final ResourceLocation symbolResource; + private final ResourceLocation circleResource; + + public NightAlchemyCircleRenderer(ResourceLocation arrayResource, ResourceLocation symbolResource, ResourceLocation circleResource) + { + super(arrayResource); + this.symbolResource = symbolResource; + this.circleResource = circleResource; + } + + @Override + public float getRotation(float craftTime) + { + return 0; + } + + public float getSecondaryRotation(float craftTime) + { + float offset = 2; + if (craftTime >= offset) + { + float modifier = (craftTime - offset) * (craftTime - offset) * 0.05f; + return modifier * 1f; + } + return 0; + } + + public float getTertiaryRotation(float craftTime) + { + float offset = 60; + if (craftTime >= offset) + { + float modifier = (craftTime - offset) * (craftTime - offset) * 0.15f; + return modifier * 1f; + } + return 0; + } + + public float getVerticalOffset(float craftTime) + { +// if (craftTime >= 40) +// { +// if (craftTime <= 100) +// { +// return (float) (-0.4 + (0.4) * Math.pow((craftTime - 40) / 60f, 3)); +// } else +// { +// return 0; +// } +// } + return -0.4f; + } + + public float getSizeModifier(float craftTime) + { + return 1.0f; + } + + public float getSecondarySizeModifier(float craftTime) + { + if (craftTime >= 100) + { + if (craftTime <= 160) + { + return (float) ((1f) * Math.pow((craftTime - 100) / 60f, 3)) + 1f; + } else + { + return 2; + } + } + return 1.0f; + } + + public float getTertiarySizeModifier(float craftTime) + { + return 1; + } + + public float getSymbolVerticaloffset(float craftTime) + { + if (craftTime >= 40) + { + if (craftTime <= 100) + { + return (float) (-0.4 + (0.4) * Math.pow((craftTime - 40) / 60f, 3)); + } else if (craftTime <= 140) + { + return 0.01f * (craftTime - 100); + } else + { + return 0.4f; + } + } + + return -0.4f; + } + + public float getCentralCircleOffset(float craftTime) + { + if (craftTime >= 40) + { + if (craftTime <= 100) + { + return (float) (-0.4 + (0.4) * Math.pow((craftTime - 40) / 60f, 3)); + } else + { + return 0; + } + } + + return -0.4f; + } + + public float getSymbolPitch(float craftTime) + { + if (craftTime > 70) + { + if (craftTime <= 100) + { + return 90 * (craftTime - 70) / 30f; + } else + { + return 90; + } + } + return 0; + } + + public float getCentralCirclePitch(float craftTime) + { + if (craftTime > 70) + { + if (craftTime <= 150) + { + return 360 * (craftTime - 70) / 80f; + } else + { + return 360; + } + } + return 0; + } + + public float moonDisplacement(float craftTime) + { + if (craftTime > 40) + { + if (craftTime <= 100) + { + return (float) (2 * Math.pow((craftTime - 40) / 60f, 3)); + } else + { + return 2; + } + } + return 0; + } + + public float moonArc(float craftTime) + { + if (craftTime > 100) + { + if (craftTime <= 200) + { + return 180 * (craftTime - 100) / 100f; + } else + { + return 180; + } + } + + return 0; + } + + public void renderAt(TileAlchemyArray tileArray, double x, double y, double z, float craftTime, MatrixStack matrixStack, IRenderTypeBuffer renderer, int combinedLightIn, int combinedOverlayIn) + { + matrixStack.push(); + + matrixStack.translate(0.5, 0.5, 0.5); + + float rot = getRotation(craftTime); + float secondaryRot = getSecondaryRotation(craftTime); + float tertiaryRot = getTertiaryRotation(craftTime); + + float size = 1.0F * getSizeModifier(craftTime); + Direction rotation = tileArray.getRotation(); + + matrixStack.push(); + matrixStack.translate(0, getVerticalOffset(craftTime), 0); + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), -rotation.getHorizontalAngle(), true)); + + matrixStack.push(); + + matrixStack.rotate(new Quaternion(Direction.NORTH.toVector3f(), rot, true)); + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), secondaryRot, true)); +// matrixStack.rotate(new Quaternion(Direction.EAST.toVector3f(), secondaryRot * 0.45812f, true)); + + IVertexBuilder twoDBuffer = renderer.getBuffer(RenderType.getEntityTranslucent(arrayResource)); + Model2D arrayModel = new BloodMagicRenderer.Model2D(); + arrayModel.minX = -0.5; + arrayModel.maxX = +0.5; + arrayModel.minY = -0.5; + arrayModel.maxY = +0.5; + arrayModel.resource = arrayResource; + + matrixStack.scale(size, size, size); + + RenderResizableQuadrilateral.INSTANCE.renderSquare(arrayModel, matrixStack, twoDBuffer, 0xFFFFFFFF, 0x00F000F0, combinedOverlayIn); + + matrixStack.pop(); + matrixStack.pop(); + +// matrixStack.push(); +// matrixStack.translate(0, getSymbolVerticaloffset(craftTime), 0); +// matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), -rotation.getHorizontalAngle(), true)); +// +// matrixStack.push(); +// + float pitch = getSymbolPitch(craftTime); +// matrixStack.rotate(new Quaternion(Direction.WEST.toVector3f(), pitch, true)); +// matrixStack.rotate(new Quaternion(Direction.NORTH.toVector3f(), tertiaryRot, true)); +//// matrixStack.rotate(new Quaternion(Direction.EAST.toVector3f(), secondaryRot * 0.45812f, true)); +// +// twoDBuffer = renderer.getBuffer(RenderType.getEntityTranslucent(symbolResource)); +// arrayModel = new BloodMagicRenderer.Model2D(); +// arrayModel.minX = -0.5; +// arrayModel.maxX = +0.5; +// arrayModel.minY = -0.5; +// arrayModel.maxY = +0.5; +// arrayModel.resource = symbolResource; +// + float secondarySize = 1.0F * getSecondarySizeModifier(craftTime); +// +// matrixStack.scale(secondarySize, secondarySize, secondarySize); +// + int colorWanted = 0xFFFFFFFF; +// +// RenderResizableQuadrilateral.INSTANCE.renderSquare(arrayModel, matrixStack, twoDBuffer, colorWanted, 0x00F000F0, combinedOverlayIn); +// +// matrixStack.pop(); +// matrixStack.pop(); + + matrixStack.push(); + matrixStack.translate(0, getCentralCircleOffset(craftTime), 0); + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), -rotation.getHorizontalAngle(), true)); + + matrixStack.push(); + + pitch = getCentralCirclePitch(craftTime); + matrixStack.rotate(new Quaternion(Direction.WEST.toVector3f(), pitch, true)); + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), -secondaryRot, true)); +// matrixStack.rotate(new Quaternion(Direction.EAST.toVector3f(), secondaryRot * 0.45812f, true)); + + twoDBuffer = renderer.getBuffer(RenderType.getEntityTranslucent(circleResource)); + arrayModel = new BloodMagicRenderer.Model2D(); + arrayModel.minX = -0.5; + arrayModel.maxX = +0.5; + arrayModel.minY = -0.5; + arrayModel.maxY = +0.5; + arrayModel.resource = circleResource; + + float tertiarySize = 1.0F * getTertiarySizeModifier(craftTime); + + matrixStack.scale(tertiarySize, tertiarySize, tertiarySize); + + colorWanted = 0xFFFFFFFF; + + RenderResizableQuadrilateral.INSTANCE.renderSquare(arrayModel, matrixStack, twoDBuffer, colorWanted, 0x00F000F0, combinedOverlayIn); + + matrixStack.pop(); + matrixStack.pop(); + + // Moon going over the array + + matrixStack.push(); + matrixStack.translate(0, getCentralCircleOffset(craftTime), 0); + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), -rotation.getHorizontalAngle(), true)); + matrixStack.rotate(new Quaternion(Direction.SOUTH.toVector3f(), moonArc(craftTime), true)); + matrixStack.translate(moonDisplacement(craftTime), 0, 0); + + matrixStack.push(); + + pitch = getSymbolPitch(craftTime); + + matrixStack.rotate(new Quaternion(Direction.WEST.toVector3f(), pitch, true)); + matrixStack.rotate(new Quaternion(Direction.NORTH.toVector3f(), tertiaryRot, true)); +// matrixStack.rotate(new Quaternion(Direction.EAST.toVector3f(), secondaryRot * 0.45812f, true)); + + twoDBuffer = renderer.getBuffer(RenderType.getEntityTranslucent(symbolResource)); + arrayModel = new BloodMagicRenderer.Model2D(); + arrayModel.minX = -0.5; + arrayModel.maxX = +0.5; + arrayModel.minY = -0.5; + arrayModel.maxY = +0.5; + arrayModel.resource = symbolResource; + + secondarySize = 1.0F; + + matrixStack.scale(secondarySize, secondarySize, secondarySize); + + colorWanted = 0xFFFFFFFF; + + RenderResizableQuadrilateral.INSTANCE.renderSquare(arrayModel, matrixStack, twoDBuffer, colorWanted, 0x00F000F0, combinedOverlayIn); + + matrixStack.pop(); + matrixStack.pop(); + + matrixStack.pop(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/SingleAlchemyCircleRenderer.java b/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/SingleAlchemyCircleRenderer.java new file mode 100644 index 00000000..ff6ff63a --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/SingleAlchemyCircleRenderer.java @@ -0,0 +1,83 @@ +package wayoftime.bloodmagic.client.render.alchemyarray; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; + +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Quaternion; +import wayoftime.bloodmagic.client.render.BloodMagicRenderer; +import wayoftime.bloodmagic.client.render.BloodMagicRenderer.Model2D; +import wayoftime.bloodmagic.client.render.RenderResizableQuadrilateral; +import wayoftime.bloodmagic.tile.TileAlchemyArray; + +public class SingleAlchemyCircleRenderer extends AlchemyArrayRenderer +{ + public SingleAlchemyCircleRenderer(ResourceLocation arrayResource) + { + super(arrayResource); + } + + @Override + public float getRotation(float craftTime) + { + float offset = 2; + if (craftTime >= offset) + { + float modifier = (craftTime - offset) * 2f; + return modifier * 1f; + } + return 0; + } + + public float getSecondaryRotation(float craftTime) + { + return 0; + } + + public float getSizeModifier(float craftTime) + { + return 1.0f; + } + + public void renderAt(TileAlchemyArray tileArray, double x, double y, double z, float craftTime, MatrixStack matrixStack, IRenderTypeBuffer renderer, int combinedLightIn, int combinedOverlayIn) + { + matrixStack.push(); + + matrixStack.translate(0.5, 0.5, 0.5); + + float rot = getRotation(craftTime); + float secondaryRot = getSecondaryRotation(craftTime); + + float size = 1.0F * getSizeModifier(craftTime); + Direction rotation = tileArray.getRotation(); + + matrixStack.push(); + matrixStack.translate(0, getVerticalOffset(craftTime), 0); + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), -rotation.getHorizontalAngle(), true)); + + matrixStack.push(); + + matrixStack.rotate(new Quaternion(Direction.NORTH.toVector3f(), rot, true)); + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), secondaryRot, true)); +// matrixStack.rotate(new Quaternion(Direction.EAST.toVector3f(), secondaryRot * 0.45812f, true)); + + IVertexBuilder twoDBuffer = renderer.getBuffer(RenderType.getEntityTranslucent(arrayResource)); + Model2D arrayModel = new BloodMagicRenderer.Model2D(); + arrayModel.minX = -0.5; + arrayModel.maxX = +0.5; + arrayModel.minY = -0.5; + arrayModel.maxY = +0.5; + arrayModel.resource = arrayResource; + + matrixStack.scale(size, size, size); + + RenderResizableQuadrilateral.INSTANCE.renderSquare(arrayModel, matrixStack, twoDBuffer, 0xFFFFFFFF, 0x00F000F0, combinedOverlayIn); + + matrixStack.pop(); + matrixStack.pop(); + matrixStack.pop(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/StaticAlchemyCircleRenderer.java b/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/StaticAlchemyCircleRenderer.java new file mode 100644 index 00000000..a7650134 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/render/alchemyarray/StaticAlchemyCircleRenderer.java @@ -0,0 +1,98 @@ +package wayoftime.bloodmagic.client.render.alchemyarray; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; + +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Quaternion; +import wayoftime.bloodmagic.client.render.BloodMagicRenderer; +import wayoftime.bloodmagic.client.render.BloodMagicRenderer.Model2D; +import wayoftime.bloodmagic.client.render.RenderResizableQuadrilateral; +import wayoftime.bloodmagic.tile.TileAlchemyArray; + +public class StaticAlchemyCircleRenderer extends AlchemyArrayRenderer +{ + public StaticAlchemyCircleRenderer(ResourceLocation arrayResource) + { + super(arrayResource); + } + + public float getRotation(float craftTime) + { + float offset = 50; + if (craftTime >= offset) + { + float modifier = (float) (craftTime - offset) * 5f; + return modifier * 1f; + } + return 0; + } + + public float getSecondaryRotation(float craftTime) + { + return 0; + } + + public float getSizeModifier(float craftTime) + { + return 1.0f; + } + +// public float getVerticalOffset(float craftTime) +// { +// if (craftTime >= 5) +// { +// if (craftTime <= 40) +// { +// return (float) (-0.4 + (0.4) * Math.pow((craftTime - 5) / 35f, 3)); +// } else +// { +// return 0; +// } +// } +// return -0.4f; +// } + + public void renderAt(TileAlchemyArray tileArray, double x, double y, double z, float craftTime, MatrixStack matrixStack, IRenderTypeBuffer renderer, int combinedLightIn, int combinedOverlayIn) + { + matrixStack.push(); + + matrixStack.translate(0.5, 0.5, 0.5); + + float rot = getRotation(craftTime); + float secondaryRot = getSecondaryRotation(craftTime); + + float size = 1.0F * getSizeModifier(craftTime); + Direction rotation = tileArray.getRotation(); + + matrixStack.push(); + matrixStack.translate(0, getVerticalOffset(craftTime), 0); + matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), -rotation.getHorizontalAngle(), true)); + + matrixStack.push(); + + matrixStack.rotate(new Quaternion(Direction.NORTH.toVector3f(), rot, true)); +// matrixStack.rotate(new Quaternion(Direction.NORTH.toVector3f(), secondaryRot, true)); +// matrixStack.rotate(new Quaternion(Direction.EAST.toVector3f(), secondaryRot * 0.45812f, true)); + + IVertexBuilder twoDBuffer = renderer.getBuffer(RenderType.getEntityTranslucent(arrayResource)); + Model2D arrayModel = new BloodMagicRenderer.Model2D(); + arrayModel.minX = -0.5; + arrayModel.maxX = +0.5; + arrayModel.minY = -0.5; + arrayModel.maxY = +0.5; + arrayModel.resource = arrayResource; + + matrixStack.scale(size, size, size); + + RenderResizableQuadrilateral.INSTANCE.renderSquare(arrayModel, matrixStack, twoDBuffer, 0xFFFFFFFF, 0x00F000F0, OverlayTexture.NO_OVERLAY); + + matrixStack.pop(); + matrixStack.pop(); + matrixStack.pop(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/render/block/RenderAlchemyArray.java b/src/main/java/wayoftime/bloodmagic/client/render/block/RenderAlchemyArray.java new file mode 100644 index 00000000..83a9e972 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/render/block/RenderAlchemyArray.java @@ -0,0 +1,43 @@ +package wayoftime.bloodmagic.client.render.block; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.tileentity.TileEntityRenderer; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.item.ItemStack; +import wayoftime.bloodmagic.client.render.alchemyarray.AlchemyArrayRenderer; +import wayoftime.bloodmagic.core.registry.AlchemyArrayRendererRegistry; +import wayoftime.bloodmagic.tile.TileAlchemyArray; + +public class RenderAlchemyArray extends TileEntityRenderer +{ + public static final AlchemyArrayRenderer arrayRenderer = new AlchemyArrayRenderer(); + + public RenderAlchemyArray(TileEntityRendererDispatcher rendererDispatcherIn) + { + super(rendererDispatcherIn); + } + + @Override + public void render(TileAlchemyArray tileArray, float partialTicks, MatrixStack matrixStack, IRenderTypeBuffer buffer, int combinedLightIn, int combinedOverlayIn) + { + ItemStack inputStack = tileArray.getStackInSlot(0); + ItemStack catalystStack = tileArray.getStackInSlot(1); +// arrayRenderer.renderAt(tileArray, 0, 0, 0, tileArray.activeCounter +// + partialTicks, matrixStack, buffer, combinedLightIn, combinedOverlayIn); + + AlchemyArrayRenderer renderer = AlchemyArrayRendererRegistry.getRenderer(tileArray.getWorld(), inputStack, catalystStack); + if (renderer == null) + { + renderer = AlchemyArrayRendererRegistry.DEFAULT_RENDERER; + } + + renderer.renderAt(tileArray, 0, 0, 0, tileArray.activeCounter + + partialTicks, matrixStack, buffer, combinedLightIn, combinedOverlayIn); +// arrayRenderer.renderAt(tileArray, 0, 0, 0, 0, matrixStack, buffer, combinedLightIn, combinedOverlayIn); + +// if (tileAltar.getCurrentTierDisplayed() != AltarTier.ONE) +// renderHologram(tileAltar, tileAltar.getCurrentTierDisplayed(), partialTicks); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/render/block/RenderAltar.java b/src/main/java/wayoftime/bloodmagic/client/render/block/RenderAltar.java new file mode 100644 index 00000000..10aca891 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/render/block/RenderAltar.java @@ -0,0 +1,233 @@ +package wayoftime.bloodmagic.client.render.block; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.Atlases; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.model.IBakedModel; +import net.minecraft.client.renderer.model.ItemCameraTransforms; +import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.tileentity.TileEntityRenderer; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.entity.LivingEntity; +import net.minecraft.fluid.Fluid; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3f; +import net.minecraftforge.fluids.FluidStack; +import wayoftime.bloodmagic.client.render.BloodMagicRenderer; +import wayoftime.bloodmagic.client.render.BloodMagicRenderer.Model3D; +import wayoftime.bloodmagic.client.render.RenderResizableCuboid; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.tile.TileAltar; + +public class RenderAltar extends TileEntityRenderer +{ + public RenderAltar(TileEntityRendererDispatcher rendererDispatcherIn) + { + super(rendererDispatcherIn); + } + + private static final float MIN_HEIGHT = 0.499f; + private static final float MAX_HEIGHT = 0.745f; + + @Override + public void render(TileAltar tileAltar, float partialTicks, MatrixStack matrixStack, IRenderTypeBuffer buffer, int combinedLightIn, int combinedOverlayIn) + { + ItemStack inputStack = tileAltar.getStackInSlot(0); + + float level = ((float) tileAltar.getCurrentBlood()) / (float) tileAltar.getCapacity(); + + this.renderItem(inputStack, tileAltar, matrixStack, buffer, combinedLightIn, combinedOverlayIn); + + renderFluid(level, matrixStack, buffer, combinedLightIn, combinedOverlayIn); + +// if (tileAltar.getCurrentTierDisplayed() != AltarTier.ONE) +// renderHologram(tileAltar, tileAltar.getCurrentTierDisplayed(), partialTicks); + } + + private void renderFluid(float fluidLevel, MatrixStack matrixStack, IRenderTypeBuffer renderer, int combinedLightIn, int combinedOverlayIn) + { + Fluid fluid = BloodMagicBlocks.LIFE_ESSENCE_FLUID.get(); + FluidStack fluidStack = new FluidStack(fluid, 1000); + + FluidRenderData data = new FluidRenderData(fluidStack); + matrixStack.push(); + + Model3D model = getFluidModel(fluidLevel, data); + IVertexBuilder buffer = renderer.getBuffer(Atlases.getTranslucentCullBlockType()); + +// matrixStack.translate(data.loca, y, z); +// int glow = data.calculateGlowLight(0); + RenderResizableCuboid.INSTANCE.renderCube(model, matrixStack, buffer, data.getColorARGB(1), combinedLightIn, combinedOverlayIn); + + matrixStack.pop(); + } + + private void renderItem(ItemStack stack, TileAltar tileAltar, MatrixStack matrixStack, IRenderTypeBuffer buffer, int combinedLightIn, int combinedOverlayIn) + { + matrixStack.push(); + Minecraft mc = Minecraft.getInstance(); + ItemRenderer itemRenderer = mc.getItemRenderer(); + if (!stack.isEmpty()) + { + matrixStack.translate(0.5, 1, 0.5); + matrixStack.push(); + + float rotation = (float) (720.0 * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL); + + matrixStack.rotate(Vector3f.YP.rotationDegrees(rotation)); + matrixStack.scale(0.5F, 0.5F, 0.5F); + RenderHelper.enableStandardItemLighting(); + IBakedModel ibakedmodel = itemRenderer.getItemModelWithOverrides(stack, tileAltar.getWorld(), (LivingEntity) null); + itemRenderer.renderItem(stack, ItemCameraTransforms.TransformType.FIXED, true, matrixStack, buffer, combinedLightIn, combinedOverlayIn, ibakedmodel); // renderItem + RenderHelper.disableStandardItemLighting(); + + matrixStack.pop(); + } + + matrixStack.pop(); + } + + private Model3D getFluidModel(float fluidLevel, FluidRenderData data) + { + Model3D model = new BloodMagicRenderer.Model3D(); + model.setTexture(data.getTexture()); + model.minX = 0.1; + model.minY = MIN_HEIGHT; + model.minZ = 0.1; + model.maxX = 0.9; + model.maxY = (MAX_HEIGHT - MIN_HEIGHT) * fluidLevel + MIN_HEIGHT; + model.maxZ = 0.9; + + return model; + } + + public class FluidRenderData + { + public BlockPos location; + + public int height; + public int length; + public int width; + + public final FluidStack fluidType; + + public FluidRenderData(FluidStack fluidType) + { + this.fluidType = fluidType; + } + + public TextureAtlasSprite getTexture() + { + return Minecraft.getInstance().getAtlasSpriteGetter(AtlasTexture.LOCATION_BLOCKS_TEXTURE).apply(fluidType.getFluid().getAttributes().getStillTexture()); + } + + public boolean isGaseous() + { + return fluidType.getFluid().getAttributes().isGaseous(fluidType); + } + + public int getColorARGB(float scale) + { + return fluidType.getFluid().getAttributes().getColor(fluidType); + } + + public int calculateGlowLight(int light) + { + return light; + } + + @Override + public int hashCode() + { + int code = super.hashCode(); + code = 31 * code + fluidType.getFluid().getRegistryName().hashCode(); + if (fluidType.hasTag()) + { + code = 31 * code + fluidType.getTag().hashCode(); + } + return code; + } + + @Override + public boolean equals(Object data) + { + return super.equals(data) && data instanceof FluidRenderData + && fluidType.isFluidEqual(((FluidRenderData) data).fluidType); + } + } +// +// private void renderHologram(TileAltar altar, AltarTier tier, float partialTicks) +// { +// EntityPlayerSP player = Minecraft.getMinecraft().player; +// World world = player.world; +// +// if (tier == AltarTier.ONE) +// return; +// +// GlStateManager.pushMatrix(); +// GlStateManager.enableBlend(); +// GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); +// GlStateManager.color(1F, 1F, 1F, 0.6125F); +// +// BlockPos vec3, vX; +// vec3 = altar.getPos(); +// double posX = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTicks; +// double posY = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTicks; +// double posZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTicks; +// +// for (AltarComponent altarComponent : tier.getAltarComponents()) +// { +// vX = vec3.add(altarComponent.getOffset()); +// double minX = vX.getX() - posX; +// double minY = vX.getY() - posY; +// double minZ = vX.getZ() - posZ; +// +// if (!world.getBlockState(vX).isOpaqueCube()) +// { +// TextureAtlasSprite texture = null; +// +// switch (altarComponent.getComponent()) +// { +// case BLOODRUNE: +// texture = ClientHandler.blankBloodRune; +// break; +// case NOTAIR: +// texture = ClientHandler.stoneBrick; +// break; +// case GLOWSTONE: +// texture = ClientHandler.glowstone; +// break; +// case BLOODSTONE: +// texture = ClientHandler.bloodStoneBrick; +// break; +// case BEACON: +// texture = ClientHandler.beacon; +// break; +// case CRYSTAL: +// texture = ClientHandler.crystalCluster; +// break; +// } +// +// RenderFakeBlocks.drawFakeBlock(texture, minX, minY, minZ); +// } +// } +// +// GlStateManager.popMatrix(); +// } + +// private static void setGLColorFromInt(int color) +// { +// float red = (color >> 16 & 0xFF) / 255.0F; +// float green = (color >> 8 & 0xFF) / 255.0F; +// float blue = (color & 0xFF) / 255.0F; +// +// GlStateManager.color(red, green, blue, 1.0F); +// } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/render/block/RenderDemonCrucible.java b/src/main/java/wayoftime/bloodmagic/client/render/block/RenderDemonCrucible.java new file mode 100644 index 00000000..6e5c4f1c --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/render/block/RenderDemonCrucible.java @@ -0,0 +1,57 @@ +package wayoftime.bloodmagic.client.render.block; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.model.IBakedModel; +import net.minecraft.client.renderer.model.ItemCameraTransforms; +import net.minecraft.client.renderer.tileentity.TileEntityRenderer; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.vector.Vector3f; +import wayoftime.bloodmagic.tile.TileDemonCrucible; + +public class RenderDemonCrucible extends TileEntityRenderer +{ + public RenderDemonCrucible(TileEntityRendererDispatcher rendererDispatcherIn) + { + super(rendererDispatcherIn); + } + + @Override + public void render(TileDemonCrucible tileAltar, float partialTicks, MatrixStack matrixStack, IRenderTypeBuffer buffer, int combinedLightIn, int combinedOverlayIn) + { + ItemStack inputStack = tileAltar.getStackInSlot(0); + + this.renderItem(inputStack, tileAltar, matrixStack, buffer, combinedLightIn, combinedOverlayIn); + } + + private void renderItem(ItemStack stack, TileDemonCrucible tileAltar, MatrixStack matrixStack, IRenderTypeBuffer buffer, int combinedLightIn, int combinedOverlayIn) + { + matrixStack.push(); + Minecraft mc = Minecraft.getInstance(); + ItemRenderer itemRenderer = mc.getItemRenderer(); + if (!stack.isEmpty()) + { + matrixStack.translate(0.5, 1.5, 0.5); + matrixStack.push(); + + float rotation = (float) (720.0 * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL); + + matrixStack.rotate(Vector3f.YP.rotationDegrees(rotation)); + matrixStack.scale(0.5F, 0.5F, 0.5F); + RenderHelper.enableStandardItemLighting(); + IBakedModel ibakedmodel = itemRenderer.getItemModelWithOverrides(stack, tileAltar.getWorld(), (LivingEntity) null); + itemRenderer.renderItem(stack, ItemCameraTransforms.TransformType.FIXED, true, matrixStack, buffer, combinedLightIn, combinedOverlayIn, ibakedmodel); // renderItem + RenderHelper.disableStandardItemLighting(); + + matrixStack.pop(); + } + + matrixStack.pop(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/render/block/RenderFakeBlocks.java b/src/main/java/wayoftime/bloodmagic/client/render/block/RenderFakeBlocks.java new file mode 100644 index 00000000..50f5a5f2 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/render/block/RenderFakeBlocks.java @@ -0,0 +1,66 @@ +package wayoftime.bloodmagic.client.render.block; + +import org.lwjgl.opengl.GL11; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; + +public class RenderFakeBlocks +{ + public static void drawFakeBlock(TextureAtlasSprite texture, double minX, double minY, double minZ) + { + if (texture == null) + return; + + double maxX = minX + 1; + double maxY = minY + 1; + double maxZ = minZ + 1; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder wr = tessellator.getBuffer(); + + Minecraft.getInstance().getAtlasSpriteGetter(AtlasTexture.LOCATION_BLOCKS_TEXTURE).apply(texture.getName()); + + wr.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + + float texMinU = texture.getMinU(); + float texMinV = texture.getMinV(); + float texMaxU = texture.getMaxU(); + float texMaxV = texture.getMaxV(); + + wr.pos(minX, minY, minZ).tex(texMinU, texMinV).endVertex(); + wr.pos(maxX, minY, minZ).tex(texMaxU, texMinV).endVertex(); + wr.pos(maxX, minY, maxZ).tex(texMaxU, texMaxV).endVertex(); + wr.pos(minX, minY, maxZ).tex(texMinU, texMaxV).endVertex(); + + wr.pos(minX, maxY, maxZ).tex(texMinU, texMaxV).endVertex(); + wr.pos(maxX, maxY, maxZ).tex(texMaxU, texMaxV).endVertex(); + wr.pos(maxX, maxY, minZ).tex(texMaxU, texMinV).endVertex(); + wr.pos(minX, maxY, minZ).tex(texMinU, texMinV).endVertex(); + + wr.pos(maxX, minY, minZ).tex(texMinU, texMaxV).endVertex(); + wr.pos(minX, minY, minZ).tex(texMaxU, texMaxV).endVertex(); + wr.pos(minX, maxY, minZ).tex(texMaxU, texMinV).endVertex(); + wr.pos(maxX, maxY, minZ).tex(texMinU, texMinV).endVertex(); + + wr.pos(minX, minY, maxZ).tex(texMinU, texMaxV).endVertex(); + wr.pos(maxX, minY, maxZ).tex(texMaxU, texMaxV).endVertex(); + wr.pos(maxX, maxY, maxZ).tex(texMaxU, texMinV).endVertex(); + wr.pos(minX, maxY, maxZ).tex(texMinU, texMinV).endVertex(); + + wr.pos(minX, minY, minZ).tex(texMinU, texMaxV).endVertex(); + wr.pos(minX, minY, maxZ).tex(texMaxU, texMaxV).endVertex(); + wr.pos(minX, maxY, maxZ).tex(texMaxU, texMinV).endVertex(); + wr.pos(minX, maxY, minZ).tex(texMinU, texMinV).endVertex(); + + wr.pos(maxX, minY, maxZ).tex(texMinU, texMaxV).endVertex(); + wr.pos(maxX, minY, minZ).tex(texMaxU, texMaxV).endVertex(); + wr.pos(maxX, maxY, minZ).tex(texMaxU, texMinV).endVertex(); + wr.pos(maxX, maxY, maxZ).tex(texMinU, texMinV).endVertex(); + + tessellator.draw(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/render/entity/BloodLightRenderer.java b/src/main/java/wayoftime/bloodmagic/client/render/entity/BloodLightRenderer.java new file mode 100644 index 00000000..23609445 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/render/entity/BloodLightRenderer.java @@ -0,0 +1,24 @@ +package wayoftime.bloodmagic.client.render.entity; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.minecraft.client.renderer.entity.SpriteRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.entity.IRendersAsItem; + +public class BloodLightRenderer extends SpriteRenderer +{ + public BloodLightRenderer(EntityRendererManager renderManagerIn) + { + super(renderManagerIn, Minecraft.getInstance().getItemRenderer()); + } + + @Override + public void render(T entityIn, float entityYaw, float partialTicks, MatrixStack matrixStackIn, IRenderTypeBuffer bufferIn, int packedLightIn) + { + super.render(entityIn, entityYaw, partialTicks, matrixStackIn, bufferIn, packedLightIn); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/render/entity/EntityShapedChargeRenderer.java b/src/main/java/wayoftime/bloodmagic/client/render/entity/EntityShapedChargeRenderer.java new file mode 100644 index 00000000..c27ad2ec --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/render/entity/EntityShapedChargeRenderer.java @@ -0,0 +1,68 @@ +package wayoftime.bloodmagic.client.render.entity; + +import java.util.Random; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderTypeLookup; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.entity.projectile.EntityShapedCharge; + +@OnlyIn(Dist.CLIENT) +public class EntityShapedChargeRenderer extends EntityRenderer +{ + public EntityShapedChargeRenderer(EntityRendererManager renderManagerIn) + { + super(renderManagerIn); + this.shadowSize = 0.5F; + } + + public void render(EntityShapedCharge entityIn, float entityYaw, float partialTicks, MatrixStack matrixStackIn, IRenderTypeBuffer bufferIn, int packedLightIn) + { +// System.out.println("Testing~"); + BlockState blockstate = entityIn.getBlockState(); + if (blockstate.getRenderType() == BlockRenderType.MODEL) + { + World world = entityIn.getWorldObj(); + if (blockstate != world.getBlockState(entityIn.getPosition()) && blockstate.getRenderType() != BlockRenderType.INVISIBLE) + { + matrixStackIn.push(); + BlockPos blockpos = new BlockPos(entityIn.getPosX(), entityIn.getBoundingBox().maxY, entityIn.getPosZ()); + matrixStackIn.translate(-0.5D, 0.0D, -0.5D); + BlockRendererDispatcher blockrendererdispatcher = Minecraft.getInstance().getBlockRendererDispatcher(); + for (net.minecraft.client.renderer.RenderType type : net.minecraft.client.renderer.RenderType.getBlockRenderTypes()) + { + if (RenderTypeLookup.canRenderInLayer(blockstate, type)) + { + net.minecraftforge.client.ForgeHooksClient.setRenderLayer(type); + blockrendererdispatcher.getBlockModelRenderer().renderModel(world, blockrendererdispatcher.getModelForState(blockstate), blockstate, blockpos, matrixStackIn, bufferIn.getBuffer(type), false, new Random(), 0, OverlayTexture.NO_OVERLAY); + } + } + net.minecraftforge.client.ForgeHooksClient.setRenderLayer(null); + matrixStackIn.pop(); + super.render(entityIn, entityYaw, partialTicks, matrixStackIn, bufferIn, packedLightIn); + } + } + } + + /** + * Returns the location of an entity's texture. + */ + public ResourceLocation getEntityTexture(EntityShapedCharge entity) + { + return AtlasTexture.LOCATION_BLOCKS_TEXTURE; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/client/render/entity/EntityThrowingDaggerRenderer.java b/src/main/java/wayoftime/bloodmagic/client/render/entity/EntityThrowingDaggerRenderer.java new file mode 100644 index 00000000..62ec2118 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/render/entity/EntityThrowingDaggerRenderer.java @@ -0,0 +1,67 @@ +package wayoftime.bloodmagic.client.render.entity; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.minecraft.client.renderer.model.ItemCameraTransforms; +import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.vector.Vector3f; +import wayoftime.bloodmagic.entity.projectile.AbstractEntityThrowingDagger; + +public class EntityThrowingDaggerRenderer extends EntityRenderer +{ + private final net.minecraft.client.renderer.ItemRenderer itemRenderer; + private final float scale; + private final boolean field_229126_f_; + + public EntityThrowingDaggerRenderer(EntityRendererManager p_i226035_1_, net.minecraft.client.renderer.ItemRenderer p_i226035_2_, float p_i226035_3_, boolean p_i226035_4_) + { + super(p_i226035_1_); + this.itemRenderer = p_i226035_2_; + this.scale = p_i226035_3_; + this.field_229126_f_ = p_i226035_4_; + } + + public EntityThrowingDaggerRenderer(EntityRendererManager renderManagerIn) + { + this(renderManagerIn, Minecraft.getInstance().getItemRenderer(), 1.0F, false); + } + + protected int getBlockLight(T entityIn, BlockPos partialTicks) + { + return this.field_229126_f_ ? 15 : super.getBlockLight(entityIn, partialTicks); + } + + public void render(T entityIn, float entityYaw, float partialTicks, MatrixStack matrixStackIn, IRenderTypeBuffer bufferIn, int packedLightIn) + { +// System.out.println("Rendering dagger"); +// if (entityIn.ticksExisted >= 2 || !(this.renderManager.info.getRenderViewEntity().getDistanceSq(entityIn) < 12.25D)) + { +// ArrowRenderer d; + matrixStackIn.push(); + matrixStackIn.scale(this.scale, this.scale, this.scale); + matrixStackIn.rotate(Vector3f.YP.rotationDegrees(MathHelper.lerp(partialTicks, entityIn.prevRotationYaw, entityIn.rotationYaw) - 90.0F)); + matrixStackIn.rotate(Vector3f.ZP.rotationDegrees(MathHelper.lerp(partialTicks, entityIn.prevRotationPitch, entityIn.rotationPitch) - 45F)); + + this.itemRenderer.renderItem(entityIn.getItem(), ItemCameraTransforms.TransformType.GROUND, packedLightIn, OverlayTexture.NO_OVERLAY, matrixStackIn, bufferIn); + matrixStackIn.pop(); + super.render(entityIn, entityYaw, partialTicks, matrixStackIn, bufferIn, packedLightIn); + } + } + + /** + * Returns the location of an entity's texture. + */ + public ResourceLocation getEntityTexture(T entity) + { + return AtlasTexture.LOCATION_BLOCKS_TEXTURE; + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/client/render/entity/SoulSnareRenderer.java b/src/main/java/wayoftime/bloodmagic/client/render/entity/SoulSnareRenderer.java new file mode 100644 index 00000000..f2084b34 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/render/entity/SoulSnareRenderer.java @@ -0,0 +1,24 @@ +package wayoftime.bloodmagic.client.render.entity; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.minecraft.client.renderer.entity.SpriteRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.entity.IRendersAsItem; + +public class SoulSnareRenderer extends SpriteRenderer +{ + public SoulSnareRenderer(EntityRendererManager renderManagerIn) + { + super(renderManagerIn, Minecraft.getInstance().getItemRenderer()); + } + + @Override + public void render(T entityIn, float entityYaw, float partialTicks, MatrixStack matrixStackIn, IRenderTypeBuffer bufferIn, int packedLightIn) + { + super.render(entityIn, entityYaw, partialTicks, matrixStackIn, bufferIn, packedLightIn); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/client/screens/ScreenAlchemicalReactionChamber.java b/src/main/java/wayoftime/bloodmagic/client/screens/ScreenAlchemicalReactionChamber.java new file mode 100644 index 00000000..eb26c582 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/screens/ScreenAlchemicalReactionChamber.java @@ -0,0 +1,108 @@ +package wayoftime.bloodmagic.client.screens; + +import java.util.ArrayList; +import java.util.List; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; + +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraftforge.fml.client.gui.GuiUtils; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.tile.TileAlchemicalReactionChamber; +import wayoftime.bloodmagic.tile.container.ContainerAlchemicalReactionChamber; +import wayoftime.bloodmagic.util.handler.event.ClientHandler; + +public class ScreenAlchemicalReactionChamber extends ScreenBase +{ + private static final ResourceLocation background = new ResourceLocation(BloodMagic.MODID, "textures/gui/arc_gui.png"); + public TileAlchemicalReactionChamber tileARC; + + public ScreenAlchemicalReactionChamber(ContainerAlchemicalReactionChamber container, PlayerInventory playerInventory, ITextComponent title) + { + super(container, playerInventory, title); + tileARC = container.tileARC; + this.xSize = 176; + this.ySize = 205; + } + + @Override + public ResourceLocation getBackground() + { + return background; + } + +// public + +// public ScreenSoulForge(InventoryPlayer playerInventory, IInventory tileSoulForge) +// { +// super(new ContainerSoulForge(playerInventory, tileSoulForge)); +// this.tileSoulForge = tileSoulForge; +// this.xSize = 176; +// this.ySize = 205; +// } +// + @Override + public void render(MatrixStack stack, int mouseX, int mouseY, float partialTicks) + { + super.render(stack, mouseX, mouseY, partialTicks); + List tooltip = new ArrayList<>(); +// FluidTank inputTank = new FluidTank(FluidAttributes.BUCKET_VOLUME * 2); +// inputTank.fill(new FluidStack(Fluids.WATER, 1000), FluidAction.EXECUTE); + + ClientHandler.handleGuiTank(stack, tileARC.inputTank, this.guiLeft + 8, this.guiTop + + 40, 16, 63, 194, 1, 16, 63, mouseX, mouseY, background.toString(), tooltip); + ClientHandler.handleGuiTank(stack, tileARC.outputTank, this.guiLeft + 152, this.guiTop + + 15, 16, 63, 194, 1, 16, 63, mouseX, mouseY, background.toString(), tooltip); + + if (!tooltip.isEmpty()) + GuiUtils.drawHoveringText(stack, tooltip, mouseX, mouseY, width, height, -1, font); + } + +// + @Override + protected void drawGuiContainerForegroundLayer(MatrixStack stack, int mouseX, int mouseY) + { + this.font.func_243248_b(stack, new TranslationTextComponent("tile.bloodmagic.arc.name"), 8, 5, 4210752); + this.font.func_243248_b(stack, new TranslationTextComponent("container.inventory"), 8, 111, 4210752); + } + +// + @Override + protected void drawGuiContainerBackgroundLayer(MatrixStack stack, float partialTicks, int mouseX, int mouseY) + { + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + getMinecraft().getTextureManager().bindTexture(background); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.blit(stack, i, j, 0, 0, this.xSize, this.ySize); + +// FluidTank inputTank = new FluidTank(FluidAttributes.BUCKET_VOLUME * 2); +// inputTank.fill(new FluidStack(Fluids.WATER, 1000), FluidAction.EXECUTE); + + ClientHandler.handleGuiTank(stack, tileARC.inputTank, this.guiLeft + 8, this.guiTop + + 40, 16, 63, 194, 1, 16, 63, mouseX, mouseY, background.toString(), null); + ClientHandler.handleGuiTank(stack, tileARC.outputTank, this.guiLeft + 152, this.guiTop + + 15, 16, 63, 194, 1, 16, 63, mouseX, mouseY, background.toString(), null); + + int w = this.getCookProgressScaled(38); +// FurnaceTileEntity d; + this.blit(stack, i + 63, j + 44, 176, 90, w, 23); + } + +//// + public int getCookProgressScaled(int scale) + { + double progress = ((TileAlchemicalReactionChamber) tileARC).getProgressForGui(); +// if (tileSoulForge != null) +// { +// System.out.println("Tile is NOT null"); +// } +// double progress = ((float) this.container.data.get(0)) / ((float) this.container.data.get(1)); +// System.out.println(this.container.data.get(0)); + return (int) (progress * scale); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/client/screens/ScreenAlchemyTable.java b/src/main/java/wayoftime/bloodmagic/client/screens/ScreenAlchemyTable.java new file mode 100644 index 00000000..ccaa7574 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/screens/ScreenAlchemyTable.java @@ -0,0 +1,228 @@ +package wayoftime.bloodmagic.client.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.platform.GlStateManager.DestFactor; +import com.mojang.blaze3d.platform.GlStateManager.SourceFactor; +import com.mojang.blaze3d.systems.RenderSystem; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.container.Slot; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.network.AlchemyTableButtonPacket; +import wayoftime.bloodmagic.network.BloodMagicPacketHandler; +import wayoftime.bloodmagic.tile.TileAlchemyTable; +import wayoftime.bloodmagic.tile.container.ContainerAlchemyTable; + +public class ScreenAlchemyTable extends ScreenBase +{ + private static final ResourceLocation background = new ResourceLocation(BloodMagic.MODID, "textures/gui/alchemytable.png"); + public TileAlchemyTable tileTable; + + private int left, top; + + public ScreenAlchemyTable(ContainerAlchemyTable container, PlayerInventory playerInventory, ITextComponent title) + { + super(container, playerInventory, title); + tileTable = container.tileTable; + this.xSize = 176; + this.ySize = 205; + } + + @Override + public ResourceLocation getBackground() + { + return background; + } + + @Override + protected void drawGuiContainerForegroundLayer(MatrixStack stack, int mouseX, int mouseY) + { + this.font.func_243248_b(stack, new TranslationTextComponent("tile.bloodmagic.alchemytable.name"), 8, 5, 4210752); + this.font.func_243248_b(stack, new TranslationTextComponent("container.inventory"), 8, 111, 4210752); + } + + @Override + public void init() + { + super.init(); + left = (this.width - this.xSize) / 2; + top = (this.height - this.ySize) / 2; + + this.buttons.clear(); +// this.buttons.add(); + this.addButton(new Button(left + 135, top + 52, 14, 14, new StringTextComponent("D"), new DirectionalPress(tileTable, Direction.DOWN))); + this.addButton(new Button(left + 153, top + 52, 14, 14, new StringTextComponent("U"), new DirectionalPress(tileTable, Direction.UP))); + this.addButton(new Button(left + 135, top + 70, 14, 14, new StringTextComponent("N"), new DirectionalPress(tileTable, Direction.NORTH))); + this.addButton(new Button(left + 153, top + 70, 14, 14, new StringTextComponent("S"), new DirectionalPress(tileTable, Direction.SOUTH))); + this.addButton(new Button(left + 135, top + 88, 14, 14, new StringTextComponent("W"), new DirectionalPress(tileTable, Direction.WEST))); + this.addButton(new Button(left + 153, top + 88, 14, 14, new StringTextComponent("E"), new DirectionalPress(tileTable, Direction.EAST))); + } + + @Override + protected void drawGuiContainerBackgroundLayer(MatrixStack stack, float partialTicks, int mouseX, int mouseY) + { + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + getMinecraft().getTextureManager().bindTexture(background); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.blit(stack, i, j, 0, 0, this.xSize, this.ySize); + + int l = this.getCookProgressScaled(90); + this.blit(stack, i + 106, j + 14 + 90 - l, 176, 90 - l, 18, l); + + int slotId = tileTable.activeSlot; + if (slotId != -1) + { + Slot slot = this.getContainer().getSlot(slotId); + + if (slotId == TileAlchemyTable.outputSlot) + { + this.blit(stack, i + slot.xPos, j + slot.yPos, 195, 37, 16, 16); + } else + { + this.blit(stack, i + slot.xPos, j + slot.yPos, 195, 19, 16, 16); + } + + for (int buttonId = 0; buttonId < 6; buttonId++) + { + int xOffset = (buttonId % 2) * 18 + 133; + int yOffset = (buttonId / 2) * 18 + 50; + if (tileTable.isSlotEnabled(slotId, Direction.byIndex(buttonId))) + { + this.blit(stack, i + xOffset, j + yOffset, 212, 18, 18, 18); + } else + { + this.blit(stack, i + xOffset, j + yOffset, 212, 0, 18, 18); + } + } + } + +// for (int slotId = 0; slotId < 6; slotId++) +// { +// if (!((TileAlchemyTable) tileTable).isInputSlotAccessible(slotId)) +// { +// Slot slot = this.getContainer().getSlot(slotId); +// +// this.blit(stack, i + slot.xPos, j + slot.yPos, 195, 1, 16, 16); +// } +// } + } + +// @Override +// public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) +// { +// boolean superMouse = super.mouseClicked(mouseX, mouseY, mouseButton); +// System.out.println("Last button clicked: " + mouseButton); +// return superMouse; +// } + +// + public int getCookProgressScaled(int scale) + { + double progress = ((TileAlchemyTable) tileTable).getProgressForGui(); +// if (tileSoulForge != null) +// { +// System.out.println("Tile is NOT null"); +// } +// double progress = ((float) this.container.data.get(0)) / ((float) this.container.data.get(1)); +// System.out.println(this.container.data.get(0)); + return (int) (progress * scale); + } + + public class DirectionalButton extends Button + { + private static final int BUTTON_TEX_X = 200, BUTTON_TEX_Y = 60; + + public DirectionalButton(int x, int y, int width, int height, ITextComponent title, IPressable pressedAction) + { + super(x, y, width, height, title, pressedAction); + } + + @Override + public void renderButton(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + Minecraft minecraft = Minecraft.getInstance(); + FontRenderer fontrenderer = minecraft.fontRenderer; + minecraft.getTextureManager().bindTexture(WIDGETS_LOCATION); + + // Vanilla's method +// RenderSystem.color4f(1.0F, 1.0F, 1.0F, this.alpha); +// int i = this.getYImage(this.isHovered()); +// RenderSystem.enableBlend(); +// RenderSystem.defaultBlendFunc(); +// RenderSystem.enableDepthTest(); +// this.blit(matrixStack, this.x, this.y, 0, 46 + i * 20, this.width / 2, this.height); +// this.blit(matrixStack, this.x + this.width / 2, this.y, 200 - this.width / 2, 46 + i * 20, this.width / 2, this.height); +// this.renderBg(matrixStack, minecraft, mouseX, mouseY); +// int j = getFGColor(); +// drawCenteredString(matrixStack, fontrenderer, this.getMessage(), this.x + this.width / 2, this.y + (this.height - 8) / 2, j | MathHelper.ceil(this.alpha * 255.0F) << 24); + + // Mekanism's method + int i = this.getYImage(this.isHovered()); + RenderSystem.enableBlend(); + RenderSystem.blendFuncSeparate(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA, SourceFactor.ONE, DestFactor.ZERO); + RenderSystem.blendFunc(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA); + + int width = this.width; + int height = this.height; + int halfWidthLeft = width / 2; + int halfWidthRight = width % 2 == 0 ? halfWidthLeft : halfWidthLeft + 1; + int halfHeightTop = height / 2; + int halfHeightBottom = height % 2 == 0 ? halfHeightTop : halfHeightTop + 1; + int position = i * 20; + + // Left Top Corner + blit(matrixStack, x, y, 0, position, halfWidthLeft, halfHeightTop, BUTTON_TEX_X, BUTTON_TEX_Y); + // Left Bottom Corner + blit(matrixStack, x, y + halfHeightTop, 0, position + 20 - halfHeightBottom, halfWidthLeft, halfHeightBottom, BUTTON_TEX_X, BUTTON_TEX_Y); + // Right Top Corner + blit(matrixStack, x + halfWidthLeft, y, 200 - halfWidthRight, position, halfWidthRight, halfHeightTop, BUTTON_TEX_X, BUTTON_TEX_Y); + // Right Bottom Corner + blit(matrixStack, x + halfWidthLeft, y + halfHeightTop, 200 - halfWidthRight, position + 20 - halfHeightBottom, halfWidthRight, halfHeightBottom, BUTTON_TEX_X, BUTTON_TEX_Y); + renderBg(matrixStack, minecraft, mouseX, mouseY); + RenderSystem.disableBlend(); + + if (this.isHovered()) + { + this.renderToolTip(matrixStack, mouseX, mouseY); + } + } + } + + public class DirectionalPress implements Button.IPressable + { + private final TileAlchemyTable table; + private final Direction direction; + + public DirectionalPress(TileAlchemyTable table, Direction direction) + { + this.table = table; + this.direction = direction; + } + + @Override + public void onPress(Button button) + { +// System.out.println("Pressing le " + direction.toString() + " button, beign oui!"); + int activeSlot = table.activeSlot; + if (activeSlot != -1) + { + boolean enabled = table.isSlotEnabled(activeSlot, direction); + table.setSlotEnabled(!enabled, activeSlot, direction); + BloodMagicPacketHandler.INSTANCE.sendToServer(new AlchemyTableButtonPacket(table.getPos(), activeSlot, direction, !enabled)); + } +//// if (button.visible) +// { +// button.visible = !button.visible; +// } + } + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/client/screens/ScreenBase.java b/src/main/java/wayoftime/bloodmagic/client/screens/ScreenBase.java new file mode 100644 index 00000000..c1d8091a --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/screens/ScreenBase.java @@ -0,0 +1,68 @@ +package wayoftime.bloodmagic.client.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import net.minecraft.client.gui.screen.inventory.ContainerScreen; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import wayoftime.bloodmagic.BloodMagic; + +public abstract class ScreenBase extends ContainerScreen +{ + private static final ResourceLocation background = new ResourceLocation(BloodMagic.MODID, "textures/gui/soulforge.png"); + + protected final T container; + + public ScreenBase(T container, PlayerInventory playerInventory, ITextComponent title) + { + super(container, playerInventory, title); + this.container = container; + } + + public ResourceLocation getBackground() + { + return background; + } + + @Override + public void render(MatrixStack stack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(stack); + super.render(stack, mouseX, mouseY, partialTicks); + + this.renderHoveredTooltip(stack, mouseX, mouseY); // @mcp: func_230459_a_ = renderHoveredToolTip +// if (mouseX > (guiLeft + 7) && mouseX < (guiLeft + 7) + 18 && mouseY > (guiTop + 7) +// && mouseY < (guiTop + 7) + 73) +// this.renderTooltip(stack, LanguageMap.getInstance().func_244260_a(Arrays.asList(new TranslationTextComponent("screen.diregoo.energy", MagicHelpers.withSuffix(this.container.getEnergy()), MagicHelpers.withSuffix(this.container.getMaxPower())))), mouseX, mouseY); + } + + @Override + public void init() + { + super.init(); + } + + @Override + protected void drawGuiContainerBackgroundLayer(MatrixStack stack, float partialTicks, int mouseX, int mouseY) + { +// RenderSystem.color4f(1, 1, 1, 1); +// getMinecraft().getTextureManager().bindTexture(getBackground()); +// this.blit(stack, guiLeft, guiTop, 0, 0, xSize, ySize); + +// int maxEnergy = this.container.getMaxPower(), height = 70; +// if (maxEnergy > 0) +// { +// int remaining = (this.container.getEnergy() * height) / maxEnergy; +// this.blit(stack, guiLeft + 8, guiTop + 78 - remaining, 176, 84 - remaining, 16, remaining + 1); +// } + } + +// + protected static TranslationTextComponent getTrans(String key, Object... args) + { + return new TranslationTextComponent(BloodMagic.MODID + "." + key, args); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/screens/ScreenHolding.java b/src/main/java/wayoftime/bloodmagic/client/screens/ScreenHolding.java new file mode 100644 index 00000000..a7147cdd --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/screens/ScreenHolding.java @@ -0,0 +1,87 @@ +package wayoftime.bloodmagic.client.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Hand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.item.inventory.ContainerHolding; +import wayoftime.bloodmagic.common.item.sigil.ItemSigilHolding; + +public class ScreenHolding extends ScreenBase +{ + private static final ResourceLocation background = BloodMagic.rl("gui/sigilholding.png"); + public IInventory tileTable; + private PlayerEntity player; + + public ScreenHolding(ContainerHolding container, PlayerInventory playerInventory, ITextComponent title) + { + super(container, playerInventory, title); + tileTable = container.inventoryHolding; + xSize = 176; + ySize = 121; + this.player = playerInventory.player; + } + + @Override + public ResourceLocation getBackground() + { + return background; + } + + @Override + protected void drawGuiContainerForegroundLayer(MatrixStack stack, int mouseX, int mouseY) + { +// this.font.func_243248_b(stack, new TranslationTextComponent("tile.bloodmagic.alchemytable.name"), 8, 5, 4210752); +// this.font.func_243248_b(stack, new TranslationTextComponent("container.inventory"), 8, 111, 4210752); + this.font.func_243248_b(stack, new TranslationTextComponent("item.bloodmagic.sigilofholding"), 53, 4, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(MatrixStack stack, float partialTicks, int mouseX, int mouseY) + { + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + getMinecraft().getTextureManager().bindTexture(background); +// int i = (this.width - this.xSize) / 2; +// int j = (this.height - this.ySize) / 2; +// this.blit(stack, i, j, 0, 0, this.xSize, this.ySize); +// +// int l = this.getCookProgressScaled(90); +// this.blit(stack, i + 115, j + 14 + 90 - l, 176, 90 - l, 18, l); +// +// for (int slotId = 0; slotId < 6; slotId++) +// { +// if (!((TileAlchemyTable) tileTable).isInputSlotAccessible(slotId)) +// { +// Slot slot = this.getContainer().getSlot(slotId); +// +// this.blit(stack, i + slot.xPos, j + slot.yPos, 195, 1, 16, 16); +// } +// } + + // draw your Gui here, only thing you need to change is the path +// GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); +// this.mc.getTextureManager().bindTexture(texture); + int x = (width - xSize) / 2; + int y = (height - ySize) / 2; + this.blit(stack, x, y, 0, 0, xSize, ySize); + ItemStack held = player.getHeldItem(Hand.MAIN_HAND); + if (!held.isEmpty() && held.getItem() == BloodMagicItems.HOLDING_SIGIL.get()) + { +// GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + this.blit(stack, 4 + x + 36 * ItemSigilHolding.getCurrentItemOrdinal(player.getHeldItemMainhand()), y + 13, 0, 123, 24, 24); + } + } + +// + +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/client/screens/ScreenSoulForge.java b/src/main/java/wayoftime/bloodmagic/client/screens/ScreenSoulForge.java new file mode 100644 index 00000000..f146ecae --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/screens/ScreenSoulForge.java @@ -0,0 +1,85 @@ +package wayoftime.bloodmagic.client.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; + +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.tile.TileSoulForge; +import wayoftime.bloodmagic.tile.container.ContainerSoulForge; + +public class ScreenSoulForge extends ScreenBase +{ + private static final ResourceLocation background = new ResourceLocation(BloodMagic.MODID, "textures/gui/soulforge.png"); + public IInventory tileSoulForge; + + public ScreenSoulForge(ContainerSoulForge container, PlayerInventory playerInventory, ITextComponent title) + { + super(container, playerInventory, title); + tileSoulForge = container.tileForge; + this.xSize = 176; + this.ySize = 205; + } + + @Override + public ResourceLocation getBackground() + { + return background; + } + +// public + +// public ScreenSoulForge(InventoryPlayer playerInventory, IInventory tileSoulForge) +// { +// super(new ContainerSoulForge(playerInventory, tileSoulForge)); +// this.tileSoulForge = tileSoulForge; +// this.xSize = 176; +// this.ySize = 205; +// } +// +// @Override +// public void render(MatrixStack stack, int mouseX, int mouseY, float partialTicks) +// { +// this.drawDefaultBackground(); +// super.drawScreen(mouseX, mouseY, partialTicks); +// this.renderHoveredToolTip(mouseX, mouseY); +// } +// + @Override + protected void drawGuiContainerForegroundLayer(MatrixStack stack, int mouseX, int mouseY) + { + this.font.func_243248_b(stack, new TranslationTextComponent("tile.bloodmagic.soulforge.name"), 8, 5, 4210752); + this.font.func_243248_b(stack, new TranslationTextComponent("container.inventory"), 8, 111, 4210752); + } + +// + @Override + protected void drawGuiContainerBackgroundLayer(MatrixStack stack, float partialTicks, int mouseX, int mouseY) + { + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + getMinecraft().getTextureManager().bindTexture(background); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.blit(stack, i, j, 0, 0, this.xSize, this.ySize); + + int l = this.getCookProgressScaled(90); + this.blit(stack, i + 115, j + 14 + 90 - l, 176, 90 - l, 18, l); + } + +// + public int getCookProgressScaled(int scale) + { + double progress = ((TileSoulForge) tileSoulForge).getProgressForGui(); +// if (tileSoulForge != null) +// { +// System.out.println("Tile is NOT null"); +// } +// double progress = ((float) this.container.data.get(0)) / ((float) this.container.data.get(1)); +// System.out.println(this.container.data.get(0)); + return (int) (progress * scale); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/client/utils/BMRenderTypes.java b/src/main/java/wayoftime/bloodmagic/client/utils/BMRenderTypes.java new file mode 100644 index 00000000..9ea90a92 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/utils/BMRenderTypes.java @@ -0,0 +1,153 @@ +package wayoftime.bloodmagic.client.utils; + +import java.util.OptionalDouble; +import java.util.function.Consumer; + +import org.lwjgl.opengl.GL11; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.IVertexBuilder; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderState; +import net.minecraft.client.renderer.RenderState.AlphaState; +import net.minecraft.client.renderer.RenderState.CullState; +import net.minecraft.client.renderer.RenderState.FogState; +import net.minecraft.client.renderer.RenderState.LightmapState; +import net.minecraft.client.renderer.RenderState.LineState; +import net.minecraft.client.renderer.RenderState.ShadeModelState; +import net.minecraft.client.renderer.RenderState.TextureState; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.inventory.container.PlayerContainer; +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.BloodMagic; + +public class BMRenderTypes +{ + public static final RenderType SOLID_FULLBRIGHT; + public static final RenderType TRANSLUCENT_LINES; + public static final RenderType LINES; + public static final RenderType TRANSLUCENT_TRIANGLES; + public static final RenderType TRANSLUCENT_POSITION_COLOR; + public static final RenderType TRANSLUCENT_NO_DEPTH; + public static final RenderType CHUNK_MARKER; + public static final RenderType VEIN_MARKER; + public static final RenderType POSITION_COLOR_TEX_LIGHTMAP; + public static final RenderType POSITION_COLOR_LIGHTMAP; + public static final RenderType ITEM_DAMAGE_BAR; + protected static final RenderState.ShadeModelState SHADE_ENABLED = new RenderState.ShadeModelState(true); + protected static final RenderState.TextureState BLOCK_SHEET_MIPPED = new RenderState.TextureState(AtlasTexture.LOCATION_BLOCKS_TEXTURE, false, true); + protected static final RenderState.LightmapState LIGHTMAP_DISABLED = new RenderState.LightmapState(false); + protected static final RenderState.TransparencyState TRANSLUCENT_TRANSPARENCY = new RenderState.TransparencyState("translucent_transparency", () -> { + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + }, RenderSystem::disableBlend); + protected static final RenderState.TransparencyState NO_TRANSPARENCY = new RenderState.TransparencyState("no_transparency", RenderSystem::disableBlend, () -> { + }); + protected static final RenderState.DepthTestState DEPTH_ALWAYS = new RenderState.DepthTestState("", GL11.GL_ALWAYS); + + static + { + RenderType.State fullbrightSolidState = RenderType.State.getBuilder().shadeModel(SHADE_ENABLED).lightmap(LIGHTMAP_DISABLED).texture(BLOCK_SHEET_MIPPED).build(true); + SOLID_FULLBRIGHT = RenderType.makeType(BloodMagic.MODID + ":block_fullbright", DefaultVertexFormats.BLOCK, GL11.GL_QUADS, 256, fullbrightSolidState); + RenderType.State translucentNoDepthState = RenderType.State.getBuilder().transparency(TRANSLUCENT_TRANSPARENCY).line(new LineState(OptionalDouble.of(2))).texture(new TextureState()).depthTest(DEPTH_ALWAYS).build(false); + RenderType.State translucentNoTextureState = RenderType.State.getBuilder().transparency(TRANSLUCENT_TRANSPARENCY).texture(new TextureState()).build(false); + TRANSLUCENT_LINES = RenderType.makeType(BloodMagic.MODID + ":translucent_lines", DefaultVertexFormats.POSITION_COLOR, GL11.GL_LINES, 256, translucentNoDepthState); + LINES = RenderType.makeType(BloodMagic.MODID + ":lines", DefaultVertexFormats.POSITION_COLOR, GL11.GL_LINES, 256, RenderType.State.getBuilder().build(false)); + TRANSLUCENT_TRIANGLES = RenderType.makeType(BloodMagic.MODID + ":translucent_triangle_fan", DefaultVertexFormats.POSITION_COLOR, GL11.GL_TRIANGLES, 256, translucentNoDepthState); + TRANSLUCENT_POSITION_COLOR = RenderType.makeType(BloodMagic.MODID + ":translucent_pos_color", DefaultVertexFormats.POSITION_COLOR, GL11.GL_QUADS, 256, translucentNoTextureState); + TRANSLUCENT_NO_DEPTH = RenderType.makeType(BloodMagic.MODID + ":translucent_no_depth", DefaultVertexFormats.POSITION_COLOR, GL11.GL_QUADS, 256, translucentNoDepthState); + RenderType.State chunkMarkerState = RenderType.State.getBuilder().texture(new TextureState()).transparency(TRANSLUCENT_TRANSPARENCY).cull(new CullState(false)).shadeModel(new ShadeModelState(true)).line(new LineState(OptionalDouble.of(5))).build(false); + CHUNK_MARKER = RenderType.makeType(BloodMagic.MODID + ":chunk_marker", DefaultVertexFormats.POSITION_COLOR, GL11.GL_LINES, 256, chunkMarkerState); + VEIN_MARKER = RenderType.makeType(BloodMagic.MODID + ":vein_marker", DefaultVertexFormats.POSITION_COLOR, GL11.GL_LINE_LOOP, 256, chunkMarkerState); + POSITION_COLOR_TEX_LIGHTMAP = RenderType.makeType(BloodMagic.MODID + ":pos_color_tex_lightmap", DefaultVertexFormats.POSITION_COLOR_TEX_LIGHTMAP, GL11.GL_QUADS, 256, RenderType.State.getBuilder().texture(new TextureState(PlayerContainer.LOCATION_BLOCKS_TEXTURE, false, false)).lightmap(new LightmapState(true)).build(false)); + POSITION_COLOR_LIGHTMAP = RenderType.makeType(BloodMagic.MODID + ":pos_color_lightmap", DefaultVertexFormats.POSITION_COLOR_LIGHTMAP, GL11.GL_QUADS, 256, RenderType.State.getBuilder().texture(new TextureState()).lightmap(new LightmapState(true)).build(false)); + ITEM_DAMAGE_BAR = RenderType.makeType(BloodMagic.MODID + ":item_damage_bar", DefaultVertexFormats.POSITION_COLOR, GL11.GL_QUADS, 256, RenderType.State.getBuilder().depthTest(DEPTH_ALWAYS).texture(new TextureState()).alpha(new AlphaState(0)).transparency(NO_TRANSPARENCY).build(false)); + } + + public static RenderType getGui(ResourceLocation texture) + { + return RenderType.makeType("gui_" + texture, DefaultVertexFormats.POSITION_COLOR_TEX, GL11.GL_QUADS, 256, RenderType.State.getBuilder().texture(new TextureState(texture, false, false)).alpha(new AlphaState(0.5F)).build(false)); + } + + public static RenderType getLines(float lineWidth) + { + return RenderType.makeType("lines_color_pos_" + lineWidth, DefaultVertexFormats.POSITION_COLOR, GL11.GL_LINES, 256, RenderType.State.getBuilder().line(new LineState(OptionalDouble.of(lineWidth))).texture(new TextureState()).build(false)); + } + + public static RenderType getPoints(float pointSize) + { + // Not really a fog state, but using it like this makes using RenderType.State + // with custom states possible + FogState setPointSize = new FogState(BloodMagic.MODID + ":pointsize_" + pointSize, () -> GL11.glPointSize(pointSize), () -> { + GL11.glPointSize(1); + }); + return RenderType.makeType("point_pos_color_" + pointSize, DefaultVertexFormats.POSITION_COLOR, GL11.GL_POINTS, 256, RenderType.State.getBuilder().fog(setPointSize).texture(new TextureState()).build(false)); + } + + public static RenderType getPositionTex(ResourceLocation texture) + { + return RenderType.makeType(BloodMagic.MODID + ":pos_tex_" + texture, DefaultVertexFormats.POSITION_TEX, GL11.GL_QUADS, 256, RenderType.State.getBuilder().texture(new TextureState(texture, false, false)).build(false)); + } + + public static RenderType getFullbrightTranslucent(ResourceLocation resourceLocation) + { + RenderType.State glState = RenderType.State.getBuilder().transparency(TRANSLUCENT_TRANSPARENCY).texture(new TextureState(resourceLocation, false, false)).lightmap(new LightmapState(false)).build(false); + return RenderType.makeType("BloodMagic:fullbright_translucent_" + resourceLocation, DefaultVertexFormats.BLOCK, GL11.GL_QUADS, 256, glState); + } + + public static IRenderTypeBuffer wrapWithStencil(IRenderTypeBuffer in, Consumer setupStencilArea, String name, int ref) + { + return wrapWithAdditional(in, "stencil_" + name + "_" + ref, () -> { + GL11.glEnable(GL11.GL_STENCIL_TEST); + RenderSystem.colorMask(false, false, false, false); + RenderSystem.depthMask(false); + GL11.glStencilFunc(GL11.GL_NEVER, 1, 0xFF); + GL11.glStencilOp(GL11.GL_REPLACE, GL11.GL_KEEP, GL11.GL_KEEP); + + GL11.glStencilMask(0xFF); + RenderSystem.clear(GL11.GL_STENCIL_BUFFER_BIT, true); + RenderSystem.disableTexture(); + Tessellator tes = Tessellator.getInstance(); + BufferBuilder bb = tes.getBuffer(); + bb.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + setupStencilArea.accept(bb); + tes.draw(); + RenderSystem.enableTexture(); + RenderSystem.colorMask(true, true, true, true); + RenderSystem.depthMask(true); + GL11.glStencilMask(0x00); + GL11.glStencilFunc(GL11.GL_EQUAL, ref, 0xFF); + }, () -> GL11.glDisable(GL11.GL_STENCIL_TEST)); + } + + public static IRenderTypeBuffer disableLighting(IRenderTypeBuffer in) + { + return wrapWithAdditional(in, "no_lighting", RenderSystem::disableLighting, () -> { + }); + } + + public static IRenderTypeBuffer disableCull(IRenderTypeBuffer in) + { + return wrapWithAdditional(in, "no_cull", RenderSystem::disableCull, RenderSystem::enableCull); + } + + private static IRenderTypeBuffer wrapWithAdditional(IRenderTypeBuffer in, String name, Runnable setup, Runnable teardown) + { + return type -> { + return in.getBuffer(new RenderType(BloodMagic.MODID + ":" + type + "_" + name, type.getVertexFormat(), type.getDrawMode(), type.getBufferSize(), type.isUseDelegate(), false, () -> { + type.setupRenderState(); + setup.run(); + }, () -> { + teardown.run(); + type.clearRenderState(); + }) + { + }); + }; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/command/CommandBloodMagic.java b/src/main/java/wayoftime/bloodmagic/command/CommandBloodMagic.java new file mode 100644 index 00000000..c24d195f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/command/CommandBloodMagic.java @@ -0,0 +1,14 @@ +package wayoftime.bloodmagic.command; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; + +import net.minecraft.command.CommandSource; + +public class CommandBloodMagic +{ + public CommandBloodMagic(CommandDispatcher dispatcher) + { + dispatcher.register(LiteralArgumentBuilder.literal("bloodmagic")); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/command/sub/SubCommandBind.java b/src/main/java/wayoftime/bloodmagic/command/sub/SubCommandBind.java new file mode 100644 index 00000000..c71d3d82 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/command/sub/SubCommandBind.java @@ -0,0 +1,111 @@ +package wayoftime.bloodmagic.command.sub; + +import net.minecraft.command.CommandException; +import net.minecraft.command.CommandSource; +import net.minecraft.entity.player.ServerPlayerEntity; + +public class SubCommandBind +{ + public ServerPlayerEntity player; + +// static ArgumentBuilder register() +// { +// return Commands.literal("generate") +// .requires(cs->cs.hasPermissionLevel(4)) //permission +// .then(Commands.argument("pos", BlockPosArgument.blockPos()) +// .then(Commands.argument("count", IntegerArgumentType.integer(1)) +// .then(Commands.argument("dim", DimensionArgument.getDimension()) +// .then(Commands.argument("interval", IntegerArgumentType.integer()) +// .executes(ctx -> execute(ctx.getSource(), BlockPosArgument.getBlockPos(ctx, "pos"), getInt(ctx, "count"), DimensionArgument.getDimensionArgument(ctx, "dim"), getInt(ctx, "interval"))) +// ) +// .executes(ctx -> execute(ctx.getSource(), BlockPosArgument.getBlockPos(ctx, "pos"), getInt(ctx, "count"), DimensionArgument.getDimensionArgument(ctx, "dim"), -1)) +// ) +// .executes(ctx -> execute(ctx.getSource(), BlockPosArgument.getBlockPos(ctx, "pos"), getInt(ctx, "count"), ctx.getSource().getWorld(), -1)) +// ) +// ); +// } + +// public ITextComponent getInfo() +// { +// return player.getName(); +// } +// +// @Override +// public String getName() +// { +// return "bind"; +// } +// +// @Override +// public String getUsage(ICommandSender commandSender) +// { +// return "commands.bloodmagic.bind.usage"; +// } +// +// public String getHelp() +// { +// return "commands.bloodmagic.bind.help"; +// } +// +// @Override +// public int getRequiredPermissionLevel() +// { +// return 2; +// } + + public static int execute(CommandSource source, String[] args) + throws CommandException + { +// if (args.length == 1 && (args[0].equals("?") || args[0].equals("help"))) +// { +// sender.sendMessage(new TranslationTextComponent(getHelp())); +// return; +// } +// if (sender.getEntityWorld().isRemote) +// return; +// ServerPlayerEntity player = args.length < 2 ? getCommandSenderAsPlayer(sender) +// : getPlayer(server, sender, args[0]); +// ItemStack held = player.getHeldItemMainhand(); +// boolean bind = true; +// if (held.getItem() instanceof IBindable) +// { +// Binding binding = ((IBindable) held.getItem()).getBinding(held); +// if (binding != null) +// bind = false; +// if (args.length < 2) +// if (args.length == 1) +// if (isBoolean(args[0])) +// bind = Boolean.parseBoolean(args[0]); +// else +// player = getPlayer(server, sender, args[0]); +// if (bind) +// { +// if (binding.getOwnerName().equals(player.getName())) +// { +// sender.sendMessage(new TranslationTextComponent("commands.bloodmagic.bind.error.ownerEqualsTarget")); +// return; +// } +// binding = new Binding(player.getGameProfile().getId(), player.getGameProfile().getName()); +// BindableHelper.applyBinding(held, binding); +// this.player = player; +// sender.sendMessage(new TranslationTextComponent("commands.bloodmagic.bind.success", getInfo())); +// } else +// { +// if (binding == null) +// { +// sender.sendMessage(new TranslationTextComponent("commands.bloodmagic.bind.error.notBound")); +// } +// held.getTagCompound().removeTag("binding"); +// sender.sendMessage(new TranslationTextComponent("commands.bloodmagic.bind.remove.success")); +// } +// } else +// sender.sendMessage(new TranslationTextComponent("commands.bloodmagic.bind.error.notBindable")); + + return 1; + } + + private boolean isBoolean(String string) + { + return string.equalsIgnoreCase("true") || string.equalsIgnoreCase("false"); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffect.java b/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffect.java new file mode 100644 index 00000000..2219ea52 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffect.java @@ -0,0 +1,23 @@ +package wayoftime.bloodmagic.common.alchemyarray; + +import net.minecraft.block.BlockState; +import net.minecraft.entity.Entity; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import wayoftime.bloodmagic.tile.TileAlchemyArray; + +public abstract class AlchemyArrayEffect +{ + public abstract AlchemyArrayEffect getNewCopy(); + + public abstract void readFromNBT(CompoundNBT compound); + + public abstract void writeToNBT(CompoundNBT compound); + + public abstract boolean update(TileAlchemyArray array, int activeCounter); + + public void onEntityCollidedWithBlock(TileAlchemyArray tileAlchemyArray, World world, BlockPos pos, BlockState state, Entity entity) + { + }; +} diff --git a/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectBinding.java b/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectBinding.java new file mode 100644 index 00000000..a1519163 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectBinding.java @@ -0,0 +1,78 @@ +package wayoftime.bloodmagic.common.alchemyarray; + +import net.minecraft.entity.EntityType; +import net.minecraft.entity.effect.LightningBoltEntity; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import wayoftime.bloodmagic.client.render.alchemyarray.BindingAlchemyCircleRenderer; +import wayoftime.bloodmagic.tile.TileAlchemyArray; + +public class AlchemyArrayEffectBinding extends AlchemyArrayEffectCrafting +{ + public AlchemyArrayEffectBinding(ItemStack outputStack, int tickLimit) + { + super(outputStack, tickLimit); + } + + public AlchemyArrayEffectBinding(ItemStack outputStack) + { + this(outputStack, 300); + } + + @Override + public boolean update(TileAlchemyArray tile, int ticksActive) + { + // TODO: Add recipe rechecking to verify nothing screwy is going on. + if (tile.getWorld().isRemote) + { + return false; + } + + if (ticksActive >= 50 && ticksActive <= 250) + { + this.spawnLightningOnCircle(tile.getWorld(), tile.getPos(), ticksActive); + } + + if (ticksActive >= tickLimit) + { + BlockPos pos = tile.getPos(); + + ItemStack output = outputStack.copy(); + + ItemEntity outputEntity = new ItemEntity(tile.getWorld(), pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, output); + + tile.getWorld().addEntity(outputEntity); + + return true; + } + + return false; + } + + public void spawnLightningOnCircle(World world, BlockPos pos, int ticksActive) + { + if (ticksActive % 50 == 0) + { + int circle = ticksActive / 50 - 1; + float distance = BindingAlchemyCircleRenderer.getDistanceOfCircle(circle, ticksActive); + float angle = BindingAlchemyCircleRenderer.getAngleOfCircle(circle, ticksActive); + + double dispX = distance * Math.sin(angle); + double dispZ = -distance * Math.cos(angle); + + LightningBoltEntity lightningboltentity = EntityType.LIGHTNING_BOLT.create(world); +// LightningBoltEntity lightning = new LightningBoltEntity(world, pos.getX() + dispX, pos.getY(), pos.getZ() + dispZ); + lightningboltentity.setPosition(pos.getX() + dispX, pos.getY(), pos.getZ() + dispZ); + lightningboltentity.setEffectOnly(true); + world.addEntity(lightningboltentity); + } + } + + @Override + public AlchemyArrayEffect getNewCopy() + { + return new AlchemyArrayEffectBinding(outputStack, tickLimit); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectBounce.java b/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectBounce.java new file mode 100644 index 00000000..7a316e04 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectBounce.java @@ -0,0 +1,66 @@ +package wayoftime.bloodmagic.common.alchemyarray; + +import net.minecraft.block.BlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.World; +import wayoftime.bloodmagic.tile.TileAlchemyArray; + +public class AlchemyArrayEffectBounce extends AlchemyArrayEffect +{ + public AlchemyArrayEffectBounce() + { + super(); + } + + @Override + public boolean update(TileAlchemyArray tile, int ticksActive) + { + return false; + } + + @Override + public void onEntityCollidedWithBlock(TileAlchemyArray array, World world, BlockPos pos, BlockState state, Entity entity) + { + if (entity.isSneaking()) + { + entity.fallDistance = 0; + } else if (entity.getMotion().y < 0.0D) + { + Vector3d motion = entity.getMotion(); + motion = motion.mul(1, -1, 1); + + if (!(entity instanceof LivingEntity)) + { + motion = motion.mul(1, 0.8, 1); + } + + entity.setMotion(motion); + + entity.fallDistance = 0; + } + } + + @Override + public AlchemyArrayEffect getNewCopy() + { + return new AlchemyArrayEffectBounce(); + } + + @Override + public void readFromNBT(CompoundNBT compound) + { + // TODO Auto-generated method stub + + } + + @Override + public void writeToNBT(CompoundNBT compound) + { + // TODO Auto-generated method stub + + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectCrafting.java b/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectCrafting.java new file mode 100644 index 00000000..eebde533 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectCrafting.java @@ -0,0 +1,69 @@ +package wayoftime.bloodmagic.common.alchemyarray; + +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.math.BlockPos; +import wayoftime.bloodmagic.tile.TileAlchemyArray; + +public class AlchemyArrayEffectCrafting extends AlchemyArrayEffect +{ + public final ItemStack outputStack; + public int tickLimit; + + public AlchemyArrayEffectCrafting(ItemStack outputStack) + { + this(outputStack, 200); + } + + public AlchemyArrayEffectCrafting(ItemStack outputStack, int tickLimit) + { + this.outputStack = outputStack; + this.tickLimit = tickLimit; + } + + @Override + public boolean update(TileAlchemyArray tile, int ticksActive) + { + // TODO: Add recipe rechecking to verify nothing screwy is going on. + if (tile.getWorld().isRemote) + { + return false; + } + + if (ticksActive >= tickLimit) + { + BlockPos pos = tile.getPos(); + + ItemStack output = outputStack.copy(); + + ItemEntity outputEntity = new ItemEntity(tile.getWorld(), pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + + 0.5, output); + + tile.getWorld().addEntity(outputEntity); +// tile.getWorld().spawnEntity(outputEntity); + + return true; + } + + return false; + } + + @Override + public void writeToNBT(CompoundNBT tag) + { + + } + + @Override + public void readFromNBT(CompoundNBT tag) + { + + } + + @Override + public AlchemyArrayEffect getNewCopy() + { + return new AlchemyArrayEffectCrafting(outputStack, tickLimit); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectDay.java b/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectDay.java new file mode 100644 index 00000000..ea94e748 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectDay.java @@ -0,0 +1,97 @@ +package wayoftime.bloodmagic.common.alchemyarray; + +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.effect.LightningBoltEntity; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import wayoftime.bloodmagic.tile.TileAlchemyArray; + +public class AlchemyArrayEffectDay extends AlchemyArrayEffect +{ + private long startingTime = 0; + + public AlchemyArrayEffectDay() + { + + } + + @Override + public boolean update(TileAlchemyArray tile, int ticksActive) + { +// if (ticksActive < 200) +// { +// return false; +// } + + World world = tile.getWorld(); + + if (ticksActive == 100) + { + startingTime = world.getDayTime(); + tile.doDropIngredients(false); + } + + if (ticksActive <= 100) + { + return false; + } + + // TODO: Add recipe rechecking to verify nothing screwy is going on. + if (world.isRemote && world instanceof ClientWorld) + { + long finalTime = ((world.getDayTime() + 24000) / 24000) * 24000; + long time = (finalTime - startingTime) * (ticksActive - 100) / 100 + startingTime; + + ((ClientWorld) world).getWorldInfo().setDayTime(time); + + return false; + } + + if (world instanceof ServerWorld) + { +// world.getDayTime() + long finalTime = ((world.getDayTime() + 24000) / 24000) * 24000; + long time = (finalTime - startingTime) * (ticksActive - 100) / 100 + startingTime; + for (ServerWorld serverworld : world.getServer().getWorlds()) + { + serverworld.func_241114_a_((long) time); + } + + if (ticksActive >= 200) + { + BlockPos pos = tile.getPos(); + LightningBoltEntity lightningboltentity = EntityType.LIGHTNING_BOLT.create(world); +// LightningBoltEntity lightning = new LightningBoltEntity(world, pos.getX() + dispX, pos.getY(), pos.getZ() + dispZ); + lightningboltentity.setPosition(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5); + lightningboltentity.setEffectOnly(true); + world.addEntity(lightningboltentity); + + return true; + } + + return false; + } + return false; + } + + @Override + public void writeToNBT(CompoundNBT tag) + { + + } + + @Override + public void readFromNBT(CompoundNBT tag) + { + + } + + @Override + public AlchemyArrayEffect getNewCopy() + { + return new AlchemyArrayEffectDay(); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectMovement.java b/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectMovement.java new file mode 100644 index 00000000..8037b5b4 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectMovement.java @@ -0,0 +1,96 @@ +package wayoftime.bloodmagic.common.alchemyarray; + +import net.minecraft.block.BlockState; +import net.minecraft.entity.Entity; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.World; +import wayoftime.bloodmagic.tile.TileAlchemyArray; + +public class AlchemyArrayEffectMovement extends AlchemyArrayEffect +{ + public AlchemyArrayEffectMovement() + { + super(); + } + + @Override + public boolean update(TileAlchemyArray tile, int ticksActive) + { + + return false; + } + + @Override + public void onEntityCollidedWithBlock(TileAlchemyArray array, World world, BlockPos pos, BlockState state, Entity entity) + { + double motionY = 0.5; + double motionYGlowstoneMod = 0.05; + double speed = 1.5; + double speedRedstoneMod = 0.15; + + Direction direction = array.getRotation(); + TileAlchemyArray tileArray = (TileAlchemyArray) array; + + motionY += motionYGlowstoneMod * (tileArray.getStackInSlot(0).getCount() - 1); + speed += speedRedstoneMod * (tileArray.getStackInSlot(1).getCount() - 1); + +// entity.getMotion().y = motionY; + entity.fallDistance = 0; + + switch (direction) + { + case NORTH: +// entity.motionX = 0; +// entity.motionY = motionY; +// entity.motionZ = -speed; + entity.setMotion(new Vector3d(0, motionY, -speed)); + break; + + case SOUTH: +// entity.motionX = 0; +// entity.motionY = motionY; +// entity.motionZ = speed; + entity.setMotion(new Vector3d(0, motionY, speed)); + break; + + case WEST: +// entity.motionX = -speed; +// entity.motionY = motionY; +// entity.motionZ = 0; + entity.setMotion(new Vector3d(-speed, motionY, 0)); + break; + + case EAST: +// entity.motionX = speed; +// entity.motionY = motionY; +// entity.motionZ = 0; + entity.setMotion(new Vector3d(speed, motionY, 0)); + break; + default: + break; + } + } + + @Override + public AlchemyArrayEffect getNewCopy() + { + return new AlchemyArrayEffectMovement(); + } + + @Override + public void readFromNBT(CompoundNBT compound) + { + // TODO Auto-generated method stub + + } + + @Override + public void writeToNBT(CompoundNBT compound) + { + // TODO Auto-generated method stub + + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectNight.java b/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectNight.java new file mode 100644 index 00000000..5d322081 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectNight.java @@ -0,0 +1,97 @@ +package wayoftime.bloodmagic.common.alchemyarray; + +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.effect.LightningBoltEntity; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import wayoftime.bloodmagic.tile.TileAlchemyArray; + +public class AlchemyArrayEffectNight extends AlchemyArrayEffect +{ + private long startingTime = 0; + + public AlchemyArrayEffectNight() + { + + } + + @Override + public boolean update(TileAlchemyArray tile, int ticksActive) + { +// if (ticksActive < 200) +// { +// return false; +// } + + World world = tile.getWorld(); + if (ticksActive == 100) + { + startingTime = world.getDayTime(); + tile.doDropIngredients(false); + } + + if (ticksActive <= 100) + { + return false; + } + + // TODO: Add recipe rechecking to verify nothing screwy is going on. + + if (world.isRemote && world instanceof ClientWorld) + { + long finalTime = ((world.getDayTime() + 11000) / 24000) * 24000 + 13000; + long time = (finalTime - startingTime) * (ticksActive - 100) / 100 + startingTime; + + ((ClientWorld) world).getWorldInfo().setDayTime(time); + + return false; + } + + if (world instanceof ServerWorld) + { +// world.getDayTime() + long finalTime = ((world.getDayTime() + 11000) / 24000) * 24000 + 13000; + long time = (finalTime - startingTime) * (ticksActive - 100) / 100 + startingTime; + for (ServerWorld serverworld : world.getServer().getWorlds()) + { + serverworld.func_241114_a_((long) time); + } + + if (ticksActive >= 200) + { + BlockPos pos = tile.getPos(); + LightningBoltEntity lightningboltentity = EntityType.LIGHTNING_BOLT.create(world); +// LightningBoltEntity lightning = new LightningBoltEntity(world, pos.getX() + dispX, pos.getY(), pos.getZ() + dispZ); + lightningboltentity.setPosition(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5); + lightningboltentity.setEffectOnly(true); + world.addEntity(lightningboltentity); + + return true; + } + + return false; + } + return false; + } + + @Override + public void writeToNBT(CompoundNBT tag) + { + + } + + @Override + public void readFromNBT(CompoundNBT tag) + { + + } + + @Override + public AlchemyArrayEffect getNewCopy() + { + return new AlchemyArrayEffectNight(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectSpike.java b/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectSpike.java new file mode 100644 index 00000000..585c0f8a --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectSpike.java @@ -0,0 +1,53 @@ +package wayoftime.bloodmagic.common.alchemyarray; + +import net.minecraft.block.BlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import wayoftime.bloodmagic.tile.TileAlchemyArray; + +public class AlchemyArrayEffectSpike extends AlchemyArrayEffect +{ + public AlchemyArrayEffectSpike() + { + super(); + } + + @Override + public boolean update(TileAlchemyArray tile, int ticksActive) + { + return false; + } + + @Override + public void onEntityCollidedWithBlock(TileAlchemyArray array, World world, BlockPos pos, BlockState state, Entity entity) + { + if (entity instanceof LivingEntity) + { + entity.attackEntityFrom(DamageSource.CACTUS, 2); + } + } + + @Override + public AlchemyArrayEffect getNewCopy() + { + return new AlchemyArrayEffectSpike(); + } + + @Override + public void readFromNBT(CompoundNBT compound) + { + // TODO Auto-generated method stub + + } + + @Override + public void writeToNBT(CompoundNBT compound) + { + // TODO Auto-generated method stub + + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectUpdraft.java b/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectUpdraft.java new file mode 100644 index 00000000..62831113 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/alchemyarray/AlchemyArrayEffectUpdraft.java @@ -0,0 +1,63 @@ +package wayoftime.bloodmagic.common.alchemyarray; + +import net.minecraft.block.BlockState; +import net.minecraft.entity.Entity; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.World; +import wayoftime.bloodmagic.tile.TileAlchemyArray; + +public class AlchemyArrayEffectUpdraft extends AlchemyArrayEffect +{ + public AlchemyArrayEffectUpdraft() + { + super(); + } + + @Override + public boolean update(TileAlchemyArray tile, int ticksActive) + { + + return false; + } + + @Override + public void onEntityCollidedWithBlock(TileAlchemyArray array, World world, BlockPos pos, BlockState state, Entity entity) + { + double motionY = 1; + double motionYGlowstoneMod = 0.1; + double motionYFeatherMod = 0.05; + + TileAlchemyArray tileArray = (TileAlchemyArray) array; + + motionY += motionYGlowstoneMod * (tileArray.getStackInSlot(0).getCount() - 1); // Glowstone Dust + motionY += motionYFeatherMod * (tileArray.getStackInSlot(1).getCount() - 1); // Feathers + +// entity.getMotion().y = motionY; + entity.fallDistance = 0; + + entity.setMotion(new Vector3d(0, motionY, 0)); + + } + + @Override + public AlchemyArrayEffect getNewCopy() + { + return new AlchemyArrayEffectUpdraft(); + } + + @Override + public void readFromNBT(CompoundNBT compound) + { + // TODO Auto-generated method stub + + } + + @Override + public void writeToNBT(CompoundNBT compound) + { + // TODO Auto-generated method stub + + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockAlchemicalReactionChamber.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockAlchemicalReactionChamber.java new file mode 100644 index 00000000..da151b5c --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockAlchemicalReactionChamber.java @@ -0,0 +1,162 @@ +package wayoftime.bloodmagic.common.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.HorizontalBlock; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.DirectionProperty; +import net.minecraft.state.StateContainer; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.AbstractFurnaceTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; +import net.minecraftforge.common.ToolType; +import net.minecraftforge.fml.network.NetworkHooks; +import wayoftime.bloodmagic.tile.TileAlchemicalReactionChamber; + +public class BlockAlchemicalReactionChamber extends Block +{ + public static final DirectionProperty FACING = HorizontalBlock.HORIZONTAL_FACING; + public static final BooleanProperty LIT = BlockStateProperties.LIT; + + public BlockAlchemicalReactionChamber() + { + super(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(2).sound(SoundType.STONE)); + this.setDefaultState(this.stateContainer.getBaseState().with(FACING, Direction.NORTH).with(LIT, Boolean.valueOf(false))); + } + + @Override + public boolean hasTileEntity(BlockState state) + { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) + { + return new TileAlchemicalReactionChamber(); + } + + @Override + public void onPlayerDestroy(IWorld world, BlockPos blockPos, BlockState blockState) + { + TileAlchemicalReactionChamber arc = (TileAlchemicalReactionChamber) world.getTileEntity(blockPos); + if (arc != null) + arc.dropItems(); + + super.onPlayerDestroy(world, blockPos, blockState); + } + + @Override + public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) + { + if (!state.isIn(newState.getBlock())) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + if (tileentity instanceof TileAlchemicalReactionChamber) + { + ((TileAlchemicalReactionChamber) tileentity).dropItems(); + worldIn.updateComparatorOutputLevel(pos, this); + } + + super.onReplaced(state, worldIn, pos, newState, isMoving); + } + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult blockRayTraceResult) + { + if (world.isRemote) + return ActionResultType.SUCCESS; + + TileEntity tile = world.getTileEntity(pos); + if (!(tile instanceof TileAlchemicalReactionChamber)) + return ActionResultType.FAIL; + + NetworkHooks.openGui((ServerPlayerEntity) player, (INamedContainerProvider) tile, pos); +// player.openGui(BloodMagic.instance, Constants.Gui.SOUL_FORGE_GUI, world, pos.getX(), pos.getY(), pos.getZ()); + + return ActionResultType.SUCCESS; + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) + { + return this.getDefaultState().with(FACING, context.getPlacementHorizontalFacing().getOpposite()); + } + + /** + * Called by ItemBlocks after a block is set in the world, to allow post-place + * logic + */ + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack) + { + if (stack.hasDisplayName()) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + if (tileentity instanceof AbstractFurnaceTileEntity) + { + ((AbstractFurnaceTileEntity) tileentity).setCustomName(stack.getDisplayName()); + } + } + + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If + * inapplicable, returns the passed blockstate. + * + * @deprecated call via {@link IBlockState#withRotation(Rotation)} whenever + * possible. Implementing/overriding is fine. + */ + @Override + public BlockState rotate(BlockState state, Rotation rot) + { + return state.with(FACING, rot.rotate(state.get(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If + * inapplicable, returns the passed blockstate. + * + * @deprecated call via {@link IBlockState#withMirror(Mirror)} whenever + * possible. Implementing/overriding is fine. + */ + @Override + public BlockState mirror(BlockState state, Mirror mirrorIn) + { + return state.rotate(mirrorIn.toRotation(state.get(FACING))); + } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) + { + builder.add(FACING, LIT); + } + + public boolean eventReceived(BlockState state, World worldIn, BlockPos pos, int id, int param) + { + super.eventReceived(state, worldIn, pos, id, param); + TileEntity tileentity = worldIn.getTileEntity(pos); + return tileentity == null ? false : tileentity.receiveClientEvent(id, param); + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockAlchemyArray.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockAlchemyArray.java new file mode 100644 index 00000000..a554ed0a --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockAlchemyArray.java @@ -0,0 +1,123 @@ +package wayoftime.bloodmagic.common.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; +import wayoftime.bloodmagic.tile.TileAlchemyArray; +import wayoftime.bloodmagic.util.Utils; + +public class BlockAlchemyArray extends Block +{ + protected static final VoxelShape BODY = Block.makeCuboidShape(1, 0, 1, 15, 1, 15); + + public BlockAlchemyArray() + { + super(Properties.create(Material.WOOL).hardnessAndResistance(1.0F, 0).doesNotBlockMovement()); + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) + { + return BODY; + } + + @Override + public boolean hasTileEntity(BlockState state) + { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) + { + return new TileAlchemyArray(); + } + + @Override + public BlockRenderType getRenderType(BlockState state) + { + return BlockRenderType.ENTITYBLOCK_ANIMATED; + } + + @Override + public void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileAlchemyArray) + { + ((TileAlchemyArray) tile).onEntityCollidedWithBlock(state, entity); + } + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult blockRayTraceResult) + { + TileAlchemyArray array = (TileAlchemyArray) world.getTileEntity(pos); + + if (array == null || player.isSneaking()) + return ActionResultType.FAIL; + + ItemStack playerItem = player.getHeldItem(hand); + + if (!playerItem.isEmpty()) + { + if (array.getStackInSlot(0).isEmpty()) + { + Utils.insertItemToTile(array, player, 0); + world.notifyBlockUpdate(pos, state, state, 3); + } else if (!array.getStackInSlot(0).isEmpty()) + { + Utils.insertItemToTile(array, player, 1); + array.attemptCraft(); + world.notifyBlockUpdate(pos, state, state, 3); + } else + { + return ActionResultType.SUCCESS; + } + } + + world.notifyBlockUpdate(pos, state, state, 3); + return ActionResultType.SUCCESS; + } + + @Override + public void onPlayerDestroy(IWorld world, BlockPos blockPos, BlockState blockState) + { + TileAlchemyArray alchemyArray = (TileAlchemyArray) world.getTileEntity(blockPos); + if (alchemyArray != null) + alchemyArray.dropItems(); + + super.onPlayerDestroy(world, blockPos, blockState); + } + + @Override + public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) + { + if (!state.isIn(newState.getBlock())) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + if (tileentity instanceof TileAlchemyArray) + { + ((TileAlchemyArray) tileentity).dropItems(); + worldIn.updateComparatorOutputLevel(pos, this); + } + + super.onReplaced(state, worldIn, pos, newState, isMoving); + } + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockAlchemyTable.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockAlchemyTable.java new file mode 100644 index 00000000..210cce1d --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockAlchemyTable.java @@ -0,0 +1,183 @@ +package wayoftime.bloodmagic.common.block; + +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.Item; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.DirectionProperty; +import net.minecraft.state.StateContainer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; +import net.minecraftforge.common.ToolType; +import net.minecraftforge.fml.network.NetworkHooks; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.tile.TileAlchemyTable; + +public class BlockAlchemyTable extends Block// implements IBMBlock +{ + public static final DirectionProperty DIRECTION = DirectionProperty.create("direction", Direction.Plane.HORIZONTAL); + public static final BooleanProperty INVISIBLE = BooleanProperty.create("invisible"); + protected static final VoxelShape BODY = Block.makeCuboidShape(1, 0, 1, 15, 15, 15); + + public BlockAlchemyTable() + { + super(AbstractBlock.Properties.create(Material.IRON).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(1).notSolid().setOpaque(BlockAlchemyTable::isntSolid).setBlocksVision(BlockAlchemyTable::isntSolid)); + } + + private static boolean isntSolid(BlockState state, IBlockReader reader, BlockPos pos) + { + return false; + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) + { + return BODY; + } + + public VoxelShape getRayTraceShape(BlockState state, IBlockReader reader, BlockPos pos, ISelectionContext context) + { + return VoxelShapes.empty(); + } + + @Override + public boolean hasTileEntity(BlockState state) + { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) + { + return new TileAlchemyTable(); + } + + @Override + public BlockRenderType getRenderType(BlockState state) + { + return BlockRenderType.MODEL; + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult blockRayTraceResult) + { + if (world.isRemote) + return ActionResultType.SUCCESS; + + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileAlchemyTable) + { + if (((TileAlchemyTable) tile).isSlave()) + { + NetworkHooks.openGui((ServerPlayerEntity) player, (INamedContainerProvider) world.getTileEntity(((TileAlchemyTable) tile).getConnectedPos()), ((TileAlchemyTable) tile).getConnectedPos()); + } else + { + NetworkHooks.openGui((ServerPlayerEntity) player, (INamedContainerProvider) tile, pos); + } + + return ActionResultType.SUCCESS; + } + +// player.openGui(BloodMagic.instance, Constants.Gui.SOUL_FORGE_GUI, world, pos.getX(), pos.getY(), pos.getZ()); + + return ActionResultType.FAIL; + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) + { + return this.getDefaultState().with(DIRECTION, context.getPlacementHorizontalFacing()); + } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) + { + builder.add(DIRECTION, INVISIBLE); + } + + @Override + public void onNeighborChange(BlockState state, IWorldReader world, BlockPos pos, BlockPos neighbor) + { + TileAlchemyTable tile = (TileAlchemyTable) world.getTileEntity(pos); + if (tile != null) + { + BlockPos connectedPos = tile.getConnectedPos(); + TileEntity connectedTile = world.getTileEntity(connectedPos); + if (!(connectedTile instanceof TileAlchemyTable + && ((TileAlchemyTable) connectedTile).getConnectedPos().equals(pos))) + { + this.onPlayerDestroy(tile.getWorld(), pos, state); + this.removedByPlayer(state, tile.getWorld(), pos, null, true, this.getFluidState(state)); + } + } + } + + @Override + public void onPlayerDestroy(IWorld world, BlockPos blockPos, BlockState blockState) + { + TileAlchemyTable forge = (TileAlchemyTable) world.getTileEntity(blockPos); + + if (forge != null && !forge.isSlave()) + { + forge.dropItems(); + } + + super.onPlayerDestroy(world, blockPos, blockState); + } + + @Override + public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) + { + if (!state.isIn(newState.getBlock())) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + if (tileentity instanceof TileAlchemyTable && !((TileAlchemyTable) tileentity).isSlave()) + { + ((TileAlchemyTable) tileentity).dropItems(); + worldIn.updateComparatorOutputLevel(pos, this); + } + + super.onReplaced(state, worldIn, pos, newState, isMoving); + } + } + +// @Override +// public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) +// { +// if (!state.isIn(newState.getBlock())) +// { +// TileEntity tileentity = worldIn.getTileEntity(pos); +// if (tileentity instanceof TileSoulForge) +// { +// ((TileSoulForge) tileentity).dropItems(); +// worldIn.updateComparatorOutputLevel(pos, this); +// } +// +// super.onReplaced(state, worldIn, pos, newState, isMoving); +// } +// } + + @Override + public Item asItem() + { + return BloodMagicItems.ALCHEMY_TABLE_ITEM.get(); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockAltar.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockAltar.java new file mode 100644 index 00000000..af1908e3 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockAltar.java @@ -0,0 +1,100 @@ +package wayoftime.bloodmagic.common.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; +import net.minecraftforge.common.ToolType; +import wayoftime.bloodmagic.api.compat.IAltarReader; +import wayoftime.bloodmagic.tile.TileAltar; +import wayoftime.bloodmagic.util.Utils; + +public class BlockAltar extends Block +{ + protected static final VoxelShape BODY = Block.makeCuboidShape(0, 0, 0, 16, 12, 16); + + public BlockAltar() + { + super(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(1)); + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) + { + return BODY; + } + + @Override + public boolean hasTileEntity(BlockState state) + { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) + { + return new TileAltar(); + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult blockRayTraceResult) + { + TileAltar altar = (TileAltar) world.getTileEntity(pos); + + if (altar == null || player.isSneaking()) + return ActionResultType.FAIL; + + ItemStack playerItem = player.getHeldItem(hand); + + if (playerItem.getItem() instanceof IAltarReader)// || playerItem.getItem() instanceof IAltarManipulator) + { + playerItem.getItem().onItemRightClick(world, player, hand); + return ActionResultType.SUCCESS; + } + + if (Utils.insertItemToTile(altar, player)) + altar.startCycle(); + else + altar.setActive(); + + world.notifyBlockUpdate(pos, state, state, 3); + return ActionResultType.SUCCESS; + } + + @Override + public void onPlayerDestroy(IWorld world, BlockPos blockPos, BlockState blockState) + { + TileAltar altar = (TileAltar) world.getTileEntity(blockPos); + if (altar != null) + altar.dropItems(); + + super.onPlayerDestroy(world, blockPos, blockState); + } + + @Override + public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) + { + if (!state.isIn(newState.getBlock())) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + if (tileentity instanceof TileAltar) + { + ((TileAltar) tileentity).dropItems(); + worldIn.updateComparatorOutputLevel(pos, this); + } + + super.onReplaced(state, worldIn, pos, newState, isMoving); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockBloodLight.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockBloodLight.java new file mode 100644 index 00000000..4f3ad3f0 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockBloodLight.java @@ -0,0 +1,64 @@ +package wayoftime.bloodmagic.common.block; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.material.Material; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.particles.RedstoneParticleData; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +public class BlockBloodLight extends Block +{ + protected static final VoxelShape BODY = Block.makeCuboidShape(7, 7, 7, 9, 9, 9); + + public BlockBloodLight() + { + super(Properties.create(Material.WOOL).doesNotBlockMovement().setLightLevel((state) -> { + return 15; + })); + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) + { + return BODY; + } + + @Override + public BlockRenderType getRenderType(BlockState state) + { + return BlockRenderType.ENTITYBLOCK_ANIMATED; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void animateTick(BlockState stateIn, World world, BlockPos pos, Random rand) + { + ClientPlayerEntity player = Minecraft.getInstance().player; + + if (rand.nextInt(3) != 0) + { + world.addParticle(RedstoneParticleData.REDSTONE_DUST, pos.getX() + 0.5D + + rand.nextGaussian() / 8, pos.getY() + 0.5D, pos.getZ() + 0.5D + rand.nextGaussian() / 8, 0, 0, 0); + ItemStack heldItem = player.getHeldItem(Hand.MAIN_HAND); + +// if (heldItem.isEmpty() || heldItem.getItem() != RegistrarBloodMagicItems.SIGIL_BLOOD_LIGHT) +// return; +// +// for (int i = 0; i < 8; i++) world.addParticle(RedstoneParticleData.REDSTONE_DUST, pos.getX() + 0.5D +// + rand.nextGaussian() / 8, pos.getY() + 0.5D, pos.getZ() + 0.5D + rand.nextGaussian() / 8, 0, 0, 0); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockBloodRune.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockBloodRune.java new file mode 100644 index 00000000..fc5f537b --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockBloodRune.java @@ -0,0 +1,46 @@ +package wayoftime.bloodmagic.common.block; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraftforge.common.ToolType; +import wayoftime.bloodmagic.block.enums.BloodRuneType; +import wayoftime.bloodmagic.altar.IBloodRune; + +public class BlockBloodRune extends Block implements IBloodRune +{ + private final BloodRuneType type; + + public BlockBloodRune(BloodRuneType type) + { + super(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(2).sound(SoundType.STONE)); + this.type = type; + } + + @Nullable + @Override + public BloodRuneType getBloodRune(World world, BlockPos pos) + { + return type; + } + + @Override + public void addInformation(ItemStack stack, @Nullable IBlockReader world, List tooltip, + ITooltipFlag flag) + { + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.decoration.safe").mergeStyle(TextFormatting.GRAY)); + super.addInformation(stack, world, tooltip, flag); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockDeforesterCharge.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockDeforesterCharge.java new file mode 100644 index 00000000..beefd606 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockDeforesterCharge.java @@ -0,0 +1,20 @@ +package wayoftime.bloodmagic.common.block; + +import net.minecraft.block.BlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockReader; +import wayoftime.bloodmagic.tile.TileDeforesterCharge; + +public class BlockDeforesterCharge extends BlockShapedExplosive +{ + public BlockDeforesterCharge(int explosionSize, Properties properties) + { + super(explosionSize, properties); + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) + { + return new TileDeforesterCharge(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockDemonCrucible.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockDemonCrucible.java new file mode 100644 index 00000000..41a302a7 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockDemonCrucible.java @@ -0,0 +1,101 @@ +package wayoftime.bloodmagic.common.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; +import net.minecraftforge.common.ToolType; +import wayoftime.bloodmagic.tile.TileDemonCrucible; +import wayoftime.bloodmagic.util.Utils; +import wayoftime.bloodmagic.api.compat.IDemonWillGem; +import wayoftime.bloodmagic.api.compat.IDiscreteDemonWill; + +public class BlockDemonCrucible extends Block +{ + protected static final VoxelShape BODY = Block.makeCuboidShape(1, 0, 1, 15, 12, 15); + + public BlockDemonCrucible() + { + super(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(1)); + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) + { + return BODY; + } + + @Override + public boolean hasTileEntity(BlockState state) + { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) + { + return new TileDemonCrucible(); + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult blockRayTraceResult) + { + TileDemonCrucible crucible = (TileDemonCrucible) world.getTileEntity(pos); + + if (crucible == null || player.isSneaking()) + return ActionResultType.FAIL; + + ItemStack playerItem = player.getHeldItem(hand); + + if (!playerItem.isEmpty()) + { + if (!(playerItem.getItem() instanceof IDiscreteDemonWill) + && !(playerItem.getItem() instanceof IDemonWillGem)) + { + return ActionResultType.SUCCESS; + } + } + + Utils.insertItemToTile(crucible, player); + + world.notifyBlockUpdate(pos, state, state, 3); + return ActionResultType.SUCCESS; + } + + @Override + public void onPlayerDestroy(IWorld world, BlockPos blockPos, BlockState blockState) + { + TileDemonCrucible altar = (TileDemonCrucible) world.getTileEntity(blockPos); + if (altar != null) + altar.dropItems(); + + super.onPlayerDestroy(world, blockPos, blockState); + } + + @Override + public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) + { + if (!state.isIn(newState.getBlock())) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + if (tileentity instanceof TileDemonCrucible) + { + ((TileDemonCrucible) tileentity).dropItems(); + worldIn.updateComparatorOutputLevel(pos, this); + } + + super.onReplaced(state, worldIn, pos, newState, isMoving); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockDemonCrystal.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockDemonCrystal.java new file mode 100644 index 00000000..291b6e69 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockDemonCrystal.java @@ -0,0 +1,258 @@ +package wayoftime.bloodmagic.common.block; + +import java.util.EnumMap; + +import javax.annotation.Nullable; + +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.state.EnumProperty; +import net.minecraft.state.IntegerProperty; +import net.minecraft.state.StateContainer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; +import net.minecraftforge.common.ToolType; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.item.ItemDemonCrystal; +import wayoftime.bloodmagic.tile.TileDemonCrystal; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.will.PlayerDemonWillHandler; + +public class BlockDemonCrystal extends Block +{ + public static final IntegerProperty AGE = IntegerProperty.create("age", 0, 6); +// public static final EnumProperty TYPE = EnumProperty.create("type", EnumDemonWillType.class); + public static final EnumProperty ATTACHED = EnumProperty.create("attached", Direction.class); + private static final EnumMap bounds = new EnumMap<>(Direction.class); + + public final EnumDemonWillType type; + + // Bounding / Collision boxes + private static final VoxelShape[] UP = + { Block.makeCuboidShape(6, 0, 5, 10, 13, 9), Block.makeCuboidShape(7, 0, 0, 13, 6, 5), + Block.makeCuboidShape(9, 0, 9, 13, 5, 14), Block.makeCuboidShape(2, 0, 1, 7, 6, 7), + Block.makeCuboidShape(5, 0, 9, 9, 7, 15), Block.makeCuboidShape(0, 0, 7, 6, 6, 10), + Block.makeCuboidShape(10, 0, 6, 15, 6, 9) }; + private static final VoxelShape[] DOWN = + { Block.makeCuboidShape(6, 3, 7, 10, 16, 11), Block.makeCuboidShape(7, 10, 11, 13, 16, 16), + Block.makeCuboidShape(9, 11, 2, 13, 16, 7), Block.makeCuboidShape(2, 9, 11, 7, 16, 15), + Block.makeCuboidShape(5, 9, 1, 9, 16, 7), Block.makeCuboidShape(0, 10, 6, 6, 16, 9), + Block.makeCuboidShape(10, 11, 7, 15, 16, 10) }; + private static final VoxelShape[] NORTH = + { Block.makeCuboidShape(6, 5, 3, 10, 9, 16), Block.makeCuboidShape(9, 0, 6, 13, 5, 16), + Block.makeCuboidShape(8, 9, 11, 13, 14, 16), Block.makeCuboidShape(2, 1, 9, 7, 7, 16), + Block.makeCuboidShape(5, 9, 9, 9, 15, 16), Block.makeCuboidShape(0, 7, 10, 6, 10, 16), + Block.makeCuboidShape(10, 7, 10, 15, 9, 15), }; + private static final VoxelShape[] SOUTH = + { Block.makeCuboidShape(6, 7, 0, 10, 11, 13), Block.makeCuboidShape(7, 11, 0, 13, 16, 6), + Block.makeCuboidShape(8, 2, 9, 13, 7, 14), Block.makeCuboidShape(2, 9, 1, 7, 14, 7), + Block.makeCuboidShape(5, 1, 9, 9, 7, 9), Block.makeCuboidShape(0, 6, 1, 6, 9, 7), + Block.makeCuboidShape(10, 8, 1, 15, 10, 6) }; + private static final VoxelShape[] EAST = + { Block.makeCuboidShape(0, 6, 5, 13, 10, 9), Block.makeCuboidShape(0, 3, 0, 6, 9, 5), + Block.makeCuboidShape(0, 3, 9, 5, 8, 14), Block.makeCuboidShape(1, 9, 1, 7, 13, 7), + Block.makeCuboidShape(1, 0, 9, 7, 11, 15), Block.makeCuboidShape(0, 10, 7, 6, 16, 10), + Block.makeCuboidShape(0, 1, 6, 5, 6, 9) }; + private static final VoxelShape[] WEST = + { Block.makeCuboidShape(3, 6, 5, 16, 10, 9), Block.makeCuboidShape(9, 7, 0, 16, 12, 5), + Block.makeCuboidShape(11, 4, 9, 16, 13, 14), Block.makeCuboidShape(9, 3, 1, 16, 8, 7), + Block.makeCuboidShape(9, 6, 9, 16, 8, 15), Block.makeCuboidShape(10, 1, 7, 16, 6, 10), + Block.makeCuboidShape(10, 6, 6, 15, 15, 9) }; + + public BlockDemonCrystal(EnumDemonWillType type) + { + super(AbstractBlock.Properties.create(Material.IRON).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(2)); + this.type = type; + + this.setDefaultState(this.stateContainer.getBaseState().with(ATTACHED, Direction.UP).with(AGE, Integer.valueOf(0))); +// this.setDefaultState(this.blockState.getBaseState().withProperty(TYPE, EnumDemonWillType.DEFAULT).withProperty(ATTACHED, Direction.UP)); + +// setTranslationKey(BloodMagic.MODID + ".demonCrystal."); +// setCreativeTab(BloodMagic.TAB_BM); +// setHardness(2.0F); +// setResistance(5.0F); +// setHarvestLevel("pickaxe", 2); + } + + public static ItemStack getItemStackDropped(EnumDemonWillType type, int crystalNumber) + { + ItemStack stack = ItemStack.EMPTY; + switch (type) + { + case CORROSIVE: + stack = new ItemStack(BloodMagicItems.CORROSIVE_CRYSTAL.get()); + break; + case DEFAULT: + stack = new ItemStack(BloodMagicItems.RAW_CRYSTAL.get()); + break; + case DESTRUCTIVE: + stack = new ItemStack(BloodMagicItems.DESTRUCTIVE_CRYSTAL.get()); + break; + case STEADFAST: + stack = new ItemStack(BloodMagicItems.STEADFAST_CRYSTAL.get()); + break; + case VENGEFUL: + stack = new ItemStack(BloodMagicItems.VENGEFUL_CRYSTAL.get()); + break; + } + + stack.setCount(crystalNumber); + return stack; + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) + { + switch (state.get(ATTACHED)) + { + case DOWN: + return DOWN[0]; + case NORTH: + return NORTH[0]; + case SOUTH: + return SOUTH[0]; + case EAST: + return EAST[0]; + case WEST: + return WEST[0]; + case UP: + default: + return UP[0]; + } + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult blockRayTraceResult) + { + if (!world.isRemote) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileDemonCrystal) + { + TileDemonCrystal crystal = (TileDemonCrystal) tile; + boolean isCreative = player.isCreative(); + boolean holdsCrystal = player.getHeldItem(hand).getItem() instanceof ItemDemonCrystal; + + if (PlayerDemonWillHandler.getTotalDemonWill(EnumDemonWillType.DEFAULT, player) > 1024 + && !(holdsCrystal && isCreative)) + { + crystal.dropSingleCrystal(); + + } + if (!crystal.getWorld().isRemote && isCreative && holdsCrystal) + { + if (crystal.getCrystalCount() < 7) + { + crystal.internalCounter = 0; + if (crystal.progressToNextCrystal > 0) + crystal.progressToNextCrystal--; + crystal.setCrystalCount(crystal.getCrystalCount() + 1); + crystal.markDirty(); + crystal.notifyUpdate(); + } + } + } + } + + return ActionResultType.SUCCESS; + } + + public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) + { + Direction direction = state.get(ATTACHED); + BlockPos blockpos = pos.offset(direction.getOpposite()); + BlockState blockstate = worldIn.getBlockState(blockpos); + return blockstate.isSolidSide(worldIn, blockpos, direction); + } + + @Nullable + public BlockState getStateForPlacement(BlockItemUseContext context) + { + BlockState blockstate = this.getDefaultState(); + IWorldReader iworldreader = context.getWorld(); + BlockPos blockpos = context.getPos(); + Direction[] adirection = context.getNearestLookingDirections(); + + for (Direction direction : adirection) + { +// if (direction.getAxis().isHorizontal()) + { + Direction direction1 = direction.getOpposite(); + blockstate = blockstate.with(ATTACHED, direction1); + if (blockstate.isValidPosition(iworldreader, blockpos)) + { + return blockstate; + } + } + } + + return null; + } + + public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) + { + return facing.getOpposite() == stateIn.get(ATTACHED) && !stateIn.isValidPosition(worldIn, currentPos) + ? Blocks.AIR.getDefaultState() + : stateIn; + } + + @Override + public BlockRenderType getRenderType(BlockState state) + { + return BlockRenderType.MODEL; + } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) + { + builder.add(ATTACHED, AGE); + } + +// @Override +// public void onPlayerDestroy(IWorld world, BlockPos blockPos, BlockState blockState) +// { +// +// super.onPlayerDestroy(world, blockPos, blockState); +// } +// +// @Override +// public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) +// { +// TorchBlock d; +// if (!state.isIn(newState.getBlock())) +// { +// +// super.onReplaced(state, worldIn, pos, newState, isMoving); +// } +// } + + @Override + public boolean hasTileEntity(BlockState state) + { + return true; + } + + @Nullable + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) + { + return new TileDemonCrystal(type); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockDemonCrystallizer.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockDemonCrystallizer.java new file mode 100644 index 00000000..a7178f08 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockDemonCrystallizer.java @@ -0,0 +1,47 @@ +package wayoftime.bloodmagic.common.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.material.Material; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.minecraftforge.common.ToolType; +import wayoftime.bloodmagic.tile.TileDemonCrystallizer; + +public class BlockDemonCrystallizer extends Block +{ + protected static final VoxelShape BODY = Block.makeCuboidShape(2, 2, 2, 14, 16, 14); + + public BlockDemonCrystallizer() + { + super(Properties.create(Material.IRON).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(1)); + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) + { + return BODY; + } + + @Override + public boolean hasTileEntity(BlockState state) + { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) + { + return new TileDemonCrystallizer(); + } + + @Override + public BlockRenderType getRenderType(BlockState state) + { + return BlockRenderType.MODEL; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockFungalCharge.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockFungalCharge.java new file mode 100644 index 00000000..9552dccf --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockFungalCharge.java @@ -0,0 +1,20 @@ +package wayoftime.bloodmagic.common.block; + +import net.minecraft.block.BlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockReader; +import wayoftime.bloodmagic.tile.TileFungalCharge; + +public class BlockFungalCharge extends BlockShapedExplosive +{ + public BlockFungalCharge(int explosionSize, Properties properties) + { + super(explosionSize, properties); + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) + { + return new TileFungalCharge(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockGrowingDoubt.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockGrowingDoubt.java new file mode 100644 index 00000000..a56760c5 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockGrowingDoubt.java @@ -0,0 +1,45 @@ +package wayoftime.bloodmagic.common.block; + +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.CropsBlock; +import net.minecraft.item.Items; +import net.minecraft.util.IItemProvider; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; + +public class BlockGrowingDoubt extends CropsBlock +{ + private static final VoxelShape[] SHAPES = new VoxelShape[] { + Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 4.0D, 16.0D), + Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 6.0D, 16.0D), + Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 7.0D, 16.0D), + Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 9.0D, 16.0D), + Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 10.0D, 16.0D), + Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 11.0D, 16.0D), + Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 14.0D, 16.0D), + Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D) }; + + public BlockGrowingDoubt(AbstractBlock.Properties properties) + { + super(properties); + } + + protected boolean isValidGround(BlockState state, IBlockReader worldIn, BlockPos pos) + { + return state.isIn(BloodMagicBlocks.NETHER_SOIL.get()); + } + + protected IItemProvider getSeedsItem() + { + return Items.POTATO; + } + + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) + { + return SHAPES[state.get(this.getAgeProperty())]; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockIncenseAltar.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockIncenseAltar.java new file mode 100644 index 00000000..2d64b98c --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockIncenseAltar.java @@ -0,0 +1,77 @@ +package wayoftime.bloodmagic.common.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.material.Material; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; +import net.minecraftforge.common.ToolType; +import wayoftime.bloodmagic.tile.TileIncenseAltar; +import wayoftime.bloodmagic.tile.TileSoulForge; + +public class BlockIncenseAltar extends Block +{ + protected static final VoxelShape BODY = Block.makeCuboidShape(5, 0, 5, 12, 16, 12); + + public BlockIncenseAltar() + { + super(Properties.create(Material.IRON).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(0)); + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) + { + return BODY; + } + + @Override + public void onPlayerDestroy(IWorld world, BlockPos blockPos, BlockState blockState) + { + TileSoulForge forge = (TileSoulForge) world.getTileEntity(blockPos); + if (forge != null) + forge.dropItems(); + + super.onPlayerDestroy(world, blockPos, blockState); + } + + @Override + public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) + { + if (!state.isIn(newState.getBlock())) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + if (tileentity instanceof TileSoulForge) + { + ((TileSoulForge) tileentity).dropItems(); + worldIn.updateComparatorOutputLevel(pos, this); + } + + super.onReplaced(state, worldIn, pos, newState, isMoving); + } + } + + @Override + public boolean hasTileEntity(BlockState state) + { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) + { + return new TileIncenseAltar(); + } + + @Override + public BlockRenderType getRenderType(BlockState state) + { + return BlockRenderType.MODEL; + } + +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockMasterRitualStone.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockMasterRitualStone.java new file mode 100644 index 00000000..360118bb --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockMasterRitualStone.java @@ -0,0 +1,130 @@ +package wayoftime.bloodmagic.common.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.Explosion; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; +import net.minecraftforge.common.ToolType; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.item.ItemActivationCrystal; +import wayoftime.bloodmagic.common.item.IBindable; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.tile.TileMasterRitualStone; +import wayoftime.bloodmagic.util.helper.RitualHelper; + +public class BlockMasterRitualStone extends Block +{ + public final boolean isInverted; + + public BlockMasterRitualStone(boolean isInverted) + { + super(Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(2)); + this.isInverted = isInverted; + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult blockRayTraceResult) + { + ItemStack heldItem = player.getHeldItem(hand); + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof TileMasterRitualStone) + { + if (heldItem.getItem() instanceof ItemActivationCrystal) + { + if (((IBindable) heldItem.getItem()).getBinding(heldItem) == null) + return ActionResultType.FAIL; + + String key = RitualHelper.getValidRitual(world, pos); + if (!key.isEmpty()) + { + Ritual ritual = BloodMagic.RITUAL_MANAGER.getRitual(key); + if (ritual != null) + { + Direction direction = RitualHelper.getDirectionOfRitual(world, pos, ritual); + // TODO: Give a message stating that this ritual is not a valid ritual. + if (direction != null && RitualHelper.checkValidRitual(world, pos, ritual, direction)) + { + if (((TileMasterRitualStone) tile).activateRitual(heldItem, player, BloodMagic.RITUAL_MANAGER.getRitual(key))) + { + ((TileMasterRitualStone) tile).setDirection(direction); + if (isInverted) + ((TileMasterRitualStone) tile).setInverted(true); + } + } else + { + player.sendStatusMessage(new TranslationTextComponent("chat.bloodmagic.ritual.notvalid"), true); + } + } else + { + player.sendStatusMessage(new TranslationTextComponent("chat.bloodmagic.ritual.notvalid"), true); + } + } else + { + player.sendStatusMessage(new TranslationTextComponent("chat.bloodmagic.ritual.notvalid"), true); + } + } + } + + return ActionResultType.FAIL; + } + + @Override + public void onPlayerDestroy(IWorld world, BlockPos blockPos, BlockState blockState) + { + TileMasterRitualStone tile = (TileMasterRitualStone) world.getTileEntity(blockPos); + if (tile != null) + ((TileMasterRitualStone) tile).stopRitual(Ritual.BreakType.BREAK_MRS); + + super.onPlayerDestroy(world, blockPos, blockState); + } + + @Override + public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) + { + if (!state.isIn(newState.getBlock())) + { + TileEntity tile = worldIn.getTileEntity(pos); + if (tile instanceof TileMasterRitualStone) + { + ((TileMasterRitualStone) tile).stopRitual(Ritual.BreakType.BREAK_MRS); + } + + super.onReplaced(state, worldIn, pos, newState, isMoving); + } + } + + @Override + public void onExplosionDestroy(World world, BlockPos pos, Explosion explosion) + { + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof TileMasterRitualStone) + ((TileMasterRitualStone) tile).stopRitual(Ritual.BreakType.EXPLOSION); + } + + @Override + public boolean hasTileEntity(BlockState state) + { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) + { + return new TileMasterRitualStone(); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockMimic.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockMimic.java new file mode 100644 index 00000000..231685d0 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockMimic.java @@ -0,0 +1,133 @@ +package wayoftime.bloodmagic.common.block; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; +import wayoftime.bloodmagic.tile.TileMimic; + +public class BlockMimic extends Block +{ + private static final VoxelShape SHAPE = VoxelShapes.create(0.01, 0, 0.01, 0.99, 1, 0.99); + + public BlockMimic(Properties prop) + { + super(prop); + } + +// @Override +// public void addInformation(ItemStack stack, @Nullable IBlockReader reader, List list, ITooltipFlag flags) +// { +// list.add(new TranslationTextComponent("message.fancyblock")); +// } + +// @Override +// public int getLightValue(BlockState state, IBlockReader world, BlockPos pos) +// { +// TileEntity te = world.getTileEntity(pos); +// if (te instanceof TileMimic) +// { +// BlockState mimic = ((TileMimic) te).getMimic(); +// if (mimic != null && !(mimic.getBlock() instanceof BlockMimic)) +// { +// return mimic.getLightValue(world, pos); +// } +// } +// return super.getLightValue(state, world, pos); +// } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader reader, BlockPos pos, ISelectionContext context) + { + TileEntity te = reader.getTileEntity(pos); + if (te instanceof TileMimic) + { + BlockState mimic = ((TileMimic) te).getMimic(); + if (mimic != null && !(mimic.getBlock() instanceof BlockMimic)) + { + return mimic.getShape(reader, pos, context); + } + } + return SHAPE; + } + + @Override + public boolean hasTileEntity(BlockState state) + { + return true; + } + + @Nullable + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) + { + return new TileMimic(); + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult trace) + { + TileMimic mimic = (TileMimic) world.getTileEntity(pos); + + return (mimic != null && mimic.onBlockActivated(world, pos, state, player, hand, player.getHeldItem(hand), trace.getFace())) + ? ActionResultType.SUCCESS + : ActionResultType.FAIL; +// ItemStack item = player.getHeldItem(hand); +// if (!item.isEmpty() && item.getItem() instanceof BlockItem) +// { +// if (!world.isRemote) +// { +// TileEntity te = world.getTileEntity(pos); +// if (te instanceof TileMimic) +// { +// BlockState mimicState = ((BlockItem) item.getItem()).getBlock().getDefaultState(); +// ((TileMimic) te).setMimic(mimicState); +// } +// } +// return ActionResultType.SUCCESS; +// } +// return super.onBlockActivated(state, world, pos, player, hand, trace); + } + +// public boolean canMimicBlock(World world, BlockPos pos, BlockState state) +// { +// return state.getBlock() +// } + + @Override + public void onPlayerDestroy(IWorld world, BlockPos blockPos, BlockState blockState) + { + TileMimic altar = (TileMimic) world.getTileEntity(blockPos); + if (altar != null) + altar.dropItems(); + + super.onPlayerDestroy(world, blockPos, blockState); + } + + @Override + public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) + { + if (!state.isIn(newState.getBlock())) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + if (tileentity instanceof TileMimic) + { + ((TileMimic) tileentity).dropItems(); + } + + super.onReplaced(state, worldIn, pos, newState, isMoving); + } + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockNetherrackSoil.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockNetherrackSoil.java new file mode 100644 index 00000000..57efc20b --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockNetherrackSoil.java @@ -0,0 +1,156 @@ +package wayoftime.bloodmagic.common.block; + +import java.util.Random; + +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.FenceGateBlock; +import net.minecraft.block.MovingPistonBlock; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.pathfinding.PathType; +import net.minecraft.state.IntegerProperty; +import net.minecraft.state.StateContainer; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import wayoftime.bloodmagic.common.tags.BloodMagicTags; + +public class BlockNetherrackSoil extends Block +{ + public static final IntegerProperty MOISTURE = BlockStateProperties.MOISTURE_0_7; + protected static final VoxelShape SHAPE = Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 15.0D, 16.0D); + + public BlockNetherrackSoil(AbstractBlock.Properties builder) + { + super(builder); + this.setDefaultState(this.stateContainer.getBaseState().with(MOISTURE, Integer.valueOf(0))); + } + + /** + * Update the provided state given the provided neighbor facing 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 face passed in. + */ + public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) + { + if (facing == Direction.UP && !stateIn.isValidPosition(worldIn, currentPos)) + { + worldIn.getPendingBlockTicks().scheduleTick(currentPos, this, 1); + } + + return super.updatePostPlacement(stateIn, facing, facingState, worldIn, currentPos, facingPos); + } + + public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) + { + BlockState blockstate = worldIn.getBlockState(pos.up()); + return !blockstate.getMaterial().isSolid() || blockstate.getBlock() instanceof FenceGateBlock || blockstate.getBlock() instanceof MovingPistonBlock; + } + + public BlockState getStateForPlacement(BlockItemUseContext context) + { + return !this.getDefaultState().isValidPosition(context.getWorld(), context.getPos()) + ? Blocks.NETHERRACK.getDefaultState() + : super.getStateForPlacement(context); + } + + public boolean isTransparent(BlockState state) + { + return true; + } + + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) + { + return SHAPE; + } + + public void tick(BlockState state, ServerWorld worldIn, BlockPos pos, Random rand) + { + if (!state.isValidPosition(worldIn, pos)) + { + turnToDirt(state, worldIn, pos); + } + + } + + /** + * Performs a random tick on a block. + */ + public void randomTick(BlockState state, ServerWorld worldIn, BlockPos pos, Random random) + { + int i = state.get(MOISTURE); + if (!hasLifeEssence(worldIn, pos) && !worldIn.isRainingAt(pos.up())) + { + if (i > 0) + { + worldIn.setBlockState(pos, state.with(MOISTURE, Integer.valueOf(i - 1)), 2); + } else if (!hasCrops(worldIn, pos)) + { + turnToDirt(state, worldIn, pos); + } + } else if (i < 7) + { + worldIn.setBlockState(pos, state.with(MOISTURE, Integer.valueOf(7)), 2); + } + + } + +// /** +// * Block's chance to react to a living entity falling on it. +// */ +// public void onFallenUpon(World worldIn, BlockPos pos, Entity entityIn, float fallDistance) +// { +// if (!worldIn.isRemote && net.minecraftforge.common.ForgeHooks.onFarmlandTrample(worldIn, pos, Blocks.NETHERRACK.getDefaultState(), fallDistance, entityIn)) +// { // Forge: Move logic to Entity#canTrample +// turnToDirt(worldIn.getBlockState(pos), worldIn, pos); +// } +// +// super.onFallenUpon(worldIn, pos, entityIn, fallDistance); +// } + + public static void turnToDirt(BlockState state, World worldIn, BlockPos pos) + { + worldIn.setBlockState(pos, nudgeEntitiesWithNewState(state, Blocks.NETHERRACK.getDefaultState(), worldIn, pos)); + } + + private boolean hasCrops(IBlockReader worldIn, BlockPos pos) + { + BlockState plant = worldIn.getBlockState(pos.up()); + BlockState state = worldIn.getBlockState(pos); + return plant.getBlock() instanceof net.minecraftforge.common.IPlantable && state.canSustainPlant(worldIn, pos, Direction.UP, (net.minecraftforge.common.IPlantable) plant.getBlock()); + } + + private static boolean hasLifeEssence(IWorldReader worldIn, BlockPos pos) + { + for (BlockPos blockpos : BlockPos.getAllInBoxMutable(pos.add(-4, 0, -4), pos.add(4, 1, 4))) + { + if (worldIn.getFluidState(blockpos).isTagged(BloodMagicTags.LIFE_ESSENCE)) + { + return true; + } + } + + return false; + } + + protected void fillStateContainer(StateContainer.Builder builder) + { + builder.add(MOISTURE); + } + + public boolean allowsMovement(BlockState state, IBlockReader worldIn, BlockPos pos, PathType type) + { + return false; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockPath.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockPath.java new file mode 100644 index 00000000..d0888152 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockPath.java @@ -0,0 +1,24 @@ +package wayoftime.bloodmagic.common.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import wayoftime.bloodmagic.api.compat.IIncensePath; + +public class BlockPath extends Block implements IIncensePath +{ + protected final int pathLevel; + + public BlockPath(int pathLevel, Properties properties) + { + super(properties); + this.pathLevel = pathLevel; + } + + @Override + public int getLevelOfPath(World world, BlockPos pos, BlockState state) + { + return pathLevel; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockRitualStone.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockRitualStone.java new file mode 100644 index 00000000..8a806c55 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockRitualStone.java @@ -0,0 +1,89 @@ +package wayoftime.bloodmagic.common.block; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraftforge.common.ToolType; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.ritual.IRitualStone; + +public class BlockRitualStone extends Block implements IRitualStone +{ + private final EnumRuneType type; + + public BlockRitualStone(EnumRuneType type) + { + super(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool()); + this.type = type; + } + + @Override + public void addInformation(ItemStack stack, @Nullable IBlockReader world, List tooltip, ITooltipFlag flag) + { + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.decoration.safe")); + super.addInformation(stack, world, tooltip, flag); + } + +// @Override +// public int damageDropped(BlockState state) +// { +// return 0; +// } +// +// @Override +// public boolean canSilkHarvest(World world, BlockPos pos, BlockState state, PlayerEntity player) +// { +// return false; +// } + + @Override + public boolean isRuneType(World world, BlockPos pos, EnumRuneType runeType) + { + return type.equals(runeType); + } + + @Override + public void setRuneType(World world, BlockPos pos, EnumRuneType runeType) + { + Block runeBlock = this; + switch (runeType) + { + case AIR: + runeBlock = BloodMagicBlocks.AIR_RITUAL_STONE.get(); + break; + case BLANK: + runeBlock = BloodMagicBlocks.BLANK_RITUAL_STONE.get(); + break; + case DAWN: + runeBlock = BloodMagicBlocks.DAWN_RITUAL_STONE.get(); + break; + case DUSK: + runeBlock = BloodMagicBlocks.DUSK_RITUAL_STONE.get(); + break; + case EARTH: + runeBlock = BloodMagicBlocks.EARTH_RITUAL_STONE.get(); + break; + case FIRE: + runeBlock = BloodMagicBlocks.FIRE_RITUAL_STONE.get(); + break; + case WATER: + runeBlock = BloodMagicBlocks.WATER_RITUAL_STONE.get(); + break; + } + + BlockState newState = runeBlock.getDefaultState(); + world.setBlockState(pos, newState); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockShapedExplosive.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockShapedExplosive.java new file mode 100644 index 00000000..84019156 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockShapedExplosive.java @@ -0,0 +1,135 @@ +package wayoftime.bloodmagic.common.block; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.state.EnumProperty; +import net.minecraft.state.StateContainer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; +import wayoftime.bloodmagic.tile.TileExplosiveCharge; +import wayoftime.bloodmagic.tile.TileShapedExplosive; + +public class BlockShapedExplosive extends Block +{ + private static final VoxelShape UP = Block.makeCuboidShape(2, 0, 2, 14, 7, 14); + private static final VoxelShape DOWN = Block.makeCuboidShape(2, 9, 2, 14, 16, 14); + private static final VoxelShape NORTH = Block.makeCuboidShape(2, 2, 7, 14, 14, 16); + private static final VoxelShape SOUTH = Block.makeCuboidShape(2, 2, 0, 14, 14, 7); + private static final VoxelShape EAST = Block.makeCuboidShape(0, 2, 2, 7, 14, 14); + private static final VoxelShape WEST = Block.makeCuboidShape(16, 2, 2, 9, 14, 14); + + public static final EnumProperty ATTACHED = EnumProperty.create("attached", Direction.class); + protected final int explosionSize; + + public BlockShapedExplosive(int explosionSize, Properties properties) + { + super(properties); + this.explosionSize = explosionSize; + + this.setDefaultState(this.stateContainer.getBaseState().with(ATTACHED, Direction.UP)); + } + + public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) + { + return facing.getOpposite() == stateIn.get(ATTACHED) && !stateIn.isValidPosition(worldIn, currentPos) + ? Blocks.AIR.getDefaultState() + : stateIn; + } + + @Nullable + public BlockState getStateForPlacement(BlockItemUseContext context) + { + BlockState blockstate = this.getDefaultState(); + IWorldReader iworldreader = context.getWorld(); + BlockPos blockpos = context.getPos(); + Direction[] adirection = context.getNearestLookingDirections(); + + for (Direction direction : adirection) + { + Direction direction1 = direction.getOpposite(); + blockstate = blockstate.with(ATTACHED, direction1); + if (blockstate.isValidPosition(iworldreader, blockpos)) + { + return blockstate; + } + } + + return null; + } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) + { + builder.add(ATTACHED); + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) + { + switch (state.get(ATTACHED)) + { + case DOWN: + return DOWN; + case NORTH: + return NORTH; + case SOUTH: + return SOUTH; + case EAST: + return EAST; + case WEST: + return WEST; + case UP: + default: + return UP; + } + } + + @Override + public boolean hasTileEntity(BlockState state) + { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) + { + return new TileShapedExplosive(); + } + + @Override + public void onBlockHarvested(World world, BlockPos blockPos, BlockState blockState, PlayerEntity player) + { + TileExplosiveCharge tile = (TileExplosiveCharge) world.getTileEntity(blockPos); + if (tile != null && !world.isRemote) + tile.dropSelf(); + + super.onBlockHarvested(world, blockPos, blockState, player); + } + +// @Override +// public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) +// { +// if (!state.isIn(newState.getBlock())) +// { +// TileEntity tileentity = worldIn.getTileEntity(pos); +// if (tileentity instanceof TileShapedExplosive) +// { +// ((TileShapedExplosive) tileentity).dropSelf(); +// } +// +// super.onReplaced(state, worldIn, pos, newState, isMoving); +// } +// } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockSoulForge.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockSoulForge.java new file mode 100644 index 00000000..dba36a9a --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockSoulForge.java @@ -0,0 +1,98 @@ +package wayoftime.bloodmagic.common.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; +import net.minecraftforge.common.ToolType; +import net.minecraftforge.fml.network.NetworkHooks; +import wayoftime.bloodmagic.tile.TileSoulForge; + +public class BlockSoulForge extends Block// implements IBMBlock +{ + protected static final VoxelShape BODY = Block.makeCuboidShape(1, 0, 1, 15, 12, 15); + + public BlockSoulForge() + { + super(Properties.create(Material.IRON).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(1)); + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) + { + return BODY; + } + + @Override + public boolean hasTileEntity(BlockState state) + { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) + { + return new TileSoulForge(); + } + + @Override + public BlockRenderType getRenderType(BlockState state) + { + return BlockRenderType.MODEL; + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult blockRayTraceResult) + { + if (world.isRemote) + return ActionResultType.SUCCESS; + + TileEntity tile = world.getTileEntity(pos); + if (!(tile instanceof TileSoulForge)) + return ActionResultType.FAIL; + + NetworkHooks.openGui((ServerPlayerEntity) player, (INamedContainerProvider) tile, pos); +// player.openGui(BloodMagic.instance, Constants.Gui.SOUL_FORGE_GUI, world, pos.getX(), pos.getY(), pos.getZ()); + + return ActionResultType.SUCCESS; + } + + @Override + public void onPlayerDestroy(IWorld world, BlockPos blockPos, BlockState blockState) + { + TileSoulForge forge = (TileSoulForge) world.getTileEntity(blockPos); + if (forge != null) + forge.dropItems(); + + super.onPlayerDestroy(world, blockPos, blockState); + } + + @Override + public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) + { + if (!state.isIn(newState.getBlock())) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + if (tileentity instanceof TileSoulForge) + { + ((TileSoulForge) tileentity).dropItems(); + worldIn.updateComparatorOutputLevel(pos, this); + } + + super.onReplaced(state, worldIn, pos, newState, isMoving); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockVeinMineCharge.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockVeinMineCharge.java new file mode 100644 index 00000000..dc3e8f04 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockVeinMineCharge.java @@ -0,0 +1,20 @@ +package wayoftime.bloodmagic.common.block; + +import net.minecraft.block.BlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockReader; +import wayoftime.bloodmagic.tile.TileVeinMineCharge; + +public class BlockVeinMineCharge extends BlockShapedExplosive +{ + public BlockVeinMineCharge(int explosionSize, Properties properties) + { + super(explosionSize, properties); + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) + { + return new TileVeinMineCharge(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BloodMagicBlocks.java b/src/main/java/wayoftime/bloodmagic/common/block/BloodMagicBlocks.java new file mode 100644 index 00000000..0b74f6c0 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BloodMagicBlocks.java @@ -0,0 +1,206 @@ +package wayoftime.bloodmagic.common.block; + +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.AbstractBlock.Properties; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.FenceGateBlock; +import net.minecraft.block.FlowingFluidBlock; +import net.minecraft.block.RotatedPillarBlock; +import net.minecraft.block.SoundType; +import net.minecraft.block.StairsBlock; +import net.minecraft.block.WallBlock; +import net.minecraft.block.material.Material; +import net.minecraft.fluid.FlowingFluid; +import net.minecraft.fluid.Fluid; +import net.minecraft.inventory.container.ContainerType; +import net.minecraft.item.BucketItem; +import net.minecraft.item.Item; +import net.minecraft.item.Items; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockReader; +import net.minecraftforge.common.ToolType; +import net.minecraftforge.common.extensions.IForgeContainerType; +import net.minecraftforge.fluids.FluidAttributes; +import net.minecraftforge.fluids.ForgeFlowingFluid; +import net.minecraftforge.fml.RegistryObject; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.block.enums.BloodRuneType; +import wayoftime.bloodmagic.common.block.base.BlockPillarCap; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.item.inventory.ContainerHolding; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.tile.container.ContainerAlchemicalReactionChamber; +import wayoftime.bloodmagic.tile.container.ContainerAlchemyTable; +import wayoftime.bloodmagic.tile.container.ContainerSoulForge; + +public class BloodMagicBlocks +{ + public static final ResourceLocation FLUID_STILL = new ResourceLocation("bloodmagic:block/lifeessencestill"); + public static final ResourceLocation FLUID_FLOWING = new ResourceLocation("bloodmagic:block/lifeessenceflowing"); + + public static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, BloodMagic.MODID); + public static final DeferredRegister BASICBLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, BloodMagic.MODID); + public static final DeferredRegister DUNGEONBLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, BloodMagic.MODID); + public static final DeferredRegister ITEMS = BloodMagicItems.ITEMS; + public static final DeferredRegister FLUIDS = DeferredRegister.create(ForgeRegistries.FLUIDS, BloodMagic.MODID); + public static final DeferredRegister> CONTAINERS = DeferredRegister.create(ForgeRegistries.CONTAINERS, BloodMagic.MODID); + +// public static final RegistryObject BLOODSTONE = BASICBLOCKS.register("ruby_block", BloodstoneBlock::new); + public static final RegistryObject SOUL_FORGE = BLOCKS.register("soulforge", BlockSoulForge::new); + public static final RegistryObject INCENSE_ALTAR = BLOCKS.register("incensealtar", BlockIncenseAltar::new); + public static final RegistryObject ALCHEMY_ARRAY = BLOCKS.register("alchemyarray", BlockAlchemyArray::new); + public static final RegistryObject BLANK_RUNE = BASICBLOCKS.register("blankrune", () -> new BlockBloodRune(BloodRuneType.BLANK)); + public static final RegistryObject SPEED_RUNE = BASICBLOCKS.register("speedrune", () -> new BlockBloodRune(BloodRuneType.SPEED)); + public static final RegistryObject SACRIFICE_RUNE = BASICBLOCKS.register("sacrificerune", () -> new BlockBloodRune(BloodRuneType.SACRIFICE)); + public static final RegistryObject SELF_SACRIFICE_RUNE = BASICBLOCKS.register("selfsacrificerune", () -> new BlockBloodRune(BloodRuneType.SELF_SACRIFICE)); + public static final RegistryObject DISPLACEMENT_RUNE = BASICBLOCKS.register("dislocationrune", () -> new BlockBloodRune(BloodRuneType.DISPLACEMENT)); + public static final RegistryObject CAPACITY_RUNE = BASICBLOCKS.register("altarcapacityrune", () -> new BlockBloodRune(BloodRuneType.CAPACITY)); + public static final RegistryObject AUGMENTED_CAPACITY_RUNE = BASICBLOCKS.register("bettercapacityrune", () -> new BlockBloodRune(BloodRuneType.AUGMENTED_CAPACITY)); + public static final RegistryObject ORB_RUNE = BASICBLOCKS.register("orbcapacityrune", () -> new BlockBloodRune(BloodRuneType.ORB)); + public static final RegistryObject ACCELERATION_RUNE = BASICBLOCKS.register("accelerationrune", () -> new BlockBloodRune(BloodRuneType.ACCELERATION)); + public static final RegistryObject CHARGING_RUNE = BASICBLOCKS.register("chargingrune", () -> new BlockBloodRune(BloodRuneType.CHARGING)); + + public static final RegistryObject BLOOD_ALTAR = BLOCKS.register("altar", () -> new BlockAltar()); + public static final RegistryObject BLOOD_LIGHT = BLOCKS.register("bloodlight", () -> new BlockBloodLight()); + + public static final RegistryObject BLANK_RITUAL_STONE = BLOCKS.register("ritualstone", () -> new BlockRitualStone(EnumRuneType.BLANK)); + public static final RegistryObject AIR_RITUAL_STONE = BLOCKS.register("airritualstone", () -> new BlockRitualStone(EnumRuneType.AIR)); + public static final RegistryObject WATER_RITUAL_STONE = BLOCKS.register("waterritualstone", () -> new BlockRitualStone(EnumRuneType.WATER)); + public static final RegistryObject FIRE_RITUAL_STONE = BLOCKS.register("fireritualstone", () -> new BlockRitualStone(EnumRuneType.FIRE)); + public static final RegistryObject EARTH_RITUAL_STONE = BLOCKS.register("earthritualstone", () -> new BlockRitualStone(EnumRuneType.EARTH)); + public static final RegistryObject DUSK_RITUAL_STONE = BLOCKS.register("duskritualstone", () -> new BlockRitualStone(EnumRuneType.DUSK)); + public static final RegistryObject DAWN_RITUAL_STONE = BLOCKS.register("lightritualstone", () -> new BlockRitualStone(EnumRuneType.DAWN)); + + public static final RegistryObject BLOODSTONE = BASICBLOCKS.register("largebloodstonebrick", () -> new Block(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(1))); + public static final RegistryObject BLOODSTONE_BRICK = BASICBLOCKS.register("bloodstonebrick", () -> new Block(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(1))); + + public static final RegistryObject MASTER_RITUAL_STONE = BASICBLOCKS.register("masterritualstone", () -> new BlockMasterRitualStone(false)); + + public static final RegistryObject ALCHEMICAL_REACTION_CHAMBER = BLOCKS.register("alchemicalreactionchamber", () -> new BlockAlchemicalReactionChamber()); + public static final RegistryObject ALCHEMY_TABLE = BLOCKS.register("alchemytable", () -> new BlockAlchemyTable()); + + public static final RegistryObject DEMON_CRUCIBLE = BLOCKS.register("demoncrucible", () -> new BlockDemonCrucible()); + public static final RegistryObject DEMON_CRYSTALLIZER = BLOCKS.register("demoncrystallizer", () -> new BlockDemonCrystallizer()); + + public static final RegistryObject RAW_CRYSTAL_BLOCK = BLOCKS.register("rawdemoncrystal", () -> new BlockDemonCrystal(EnumDemonWillType.DEFAULT)); + public static final RegistryObject CORROSIVE_CRYSTAL_BLOCK = BLOCKS.register("corrosivedemoncrystal", () -> new BlockDemonCrystal(EnumDemonWillType.CORROSIVE)); + public static final RegistryObject DESTRUCTIVE_CRYSTAL_BLOCK = BLOCKS.register("destructivedemoncrystal", () -> new BlockDemonCrystal(EnumDemonWillType.DESTRUCTIVE)); + public static final RegistryObject VENGEFUL_CRYSTAL_BLOCK = BLOCKS.register("vengefuldemoncrystal", () -> new BlockDemonCrystal(EnumDemonWillType.VENGEFUL)); + public static final RegistryObject STEADFAST_CRYSTAL_BLOCK = BLOCKS.register("steadfastdemoncrystal", () -> new BlockDemonCrystal(EnumDemonWillType.STEADFAST)); + + public static final RegistryObject WOOD_PATH = BASICBLOCKS.register("woodbrickpath", () -> new BlockPath(2, AbstractBlock.Properties.create(Material.WOOD).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.AXE).harvestLevel(0))); + public static final RegistryObject WOOD_TILE_PATH = BASICBLOCKS.register("woodtilepath", () -> new BlockPath(2, AbstractBlock.Properties.create(Material.WOOD).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.AXE).harvestLevel(0))); + public static final RegistryObject STONE_PATH = BASICBLOCKS.register("stonebrickpath", () -> new BlockPath(4, AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(0))); + public static final RegistryObject STONE_TILE_PATH = BASICBLOCKS.register("stonetilepath", () -> new BlockPath(4, AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(0))); + public static final RegistryObject WORN_STONE_PATH = BASICBLOCKS.register("wornstonebrickpath", () -> new BlockPath(6, AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(0))); + public static final RegistryObject WORN_STONE_TILE_PATH = BASICBLOCKS.register("wornstonetilepath", () -> new BlockPath(6, AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(0))); + public static final RegistryObject OBSIDIAN_PATH = BASICBLOCKS.register("obsidianbrickpath", () -> new BlockPath(8, AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(3))); + public static final RegistryObject OBSIDIAN_TILE_PATH = BASICBLOCKS.register("obsidiantilepath", () -> new BlockPath(8, AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(3))); + + public static final RegistryObject MIMIC = BLOCKS.register("mimic", () -> new BlockMimic(Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(2.0f).setOpaque(BloodMagicBlocks::isntSolid).setSuffocates(BloodMagicBlocks::isntSolid).setBlocksVision(BloodMagicBlocks::isntSolid).notSolid())); + public static final RegistryObject ETHEREAL_MIMIC = BLOCKS.register("ethereal_mimic", () -> new BlockMimic(Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(2.0f).setOpaque(BloodMagicBlocks::isntSolid).setSuffocates(BloodMagicBlocks::isntSolid).setBlocksVision(BloodMagicBlocks::isntSolid).notSolid().doesNotBlockMovement())); + + private static ForgeFlowingFluid.Properties makeLifeEssenceProperties() + { + return new ForgeFlowingFluid.Properties(LIFE_ESSENCE_FLUID, LIFE_ESSENCE_FLUID_FLOWING, FluidAttributes.builder(FLUID_STILL, FLUID_FLOWING).overlay(new ResourceLocation("block/water_overlay")).viscosity(1).sound(SoundEvents.ITEM_BUCKET_FILL, SoundEvents.ITEM_BUCKET_EMPTY)).bucket(LIFE_ESSENCE_BUCKET).block(LIFE_ESSENCE_BLOCK); + } + + public static final ResourceLocation DOUBT_STILL_RESOURCE = new ResourceLocation("bloodmagic:block/liquid_doubt_still"); + public static final ResourceLocation DOUBT_FLOWING_RESOURCE = new ResourceLocation("bloodmagic:block/liquid_doubt_flowing"); + + private static ForgeFlowingFluid.Properties makeDoubtProperties() + { + return new ForgeFlowingFluid.Properties(DOUBT_FLUID, DOUBT_FLUID_FLOWING, FluidAttributes.builder(DOUBT_STILL_RESOURCE, DOUBT_FLOWING_RESOURCE).overlay(new ResourceLocation("block/water_overlay")).viscosity(1).sound(SoundEvents.ITEM_BUCKET_FILL, SoundEvents.ITEM_BUCKET_EMPTY)).bucket(DOUBT_BUCKET).block(DOUBT_BLOCK); + } + + public static RegistryObject LIFE_ESSENCE_FLUID = FLUIDS.register("life_essence_fluid", () -> new ForgeFlowingFluid.Source(makeLifeEssenceProperties())); + public static RegistryObject LIFE_ESSENCE_FLUID_FLOWING = FLUIDS.register("life_essence_fluid_flowing", () -> new ForgeFlowingFluid.Flowing(makeLifeEssenceProperties())); + public static RegistryObject DOUBT_FLUID = FLUIDS.register("doubt_fluid", () -> new ForgeFlowingFluid.Source(makeDoubtProperties())); + public static RegistryObject DOUBT_FLUID_FLOWING = FLUIDS.register("doubt_fluid_flowing", () -> new ForgeFlowingFluid.Flowing(makeDoubtProperties())); + + public static RegistryObject LIFE_ESSENCE_BLOCK = BLOCKS.register("life_essence_block", () -> new FlowingFluidBlock(LIFE_ESSENCE_FLUID, Block.Properties.create(net.minecraft.block.material.Material.WATER).doesNotBlockMovement().hardnessAndResistance(100.0F).noDrops())); + public static RegistryObject DOUBT_BLOCK = BLOCKS.register("doubt_block", () -> new FlowingFluidBlock(DOUBT_FLUID, Block.Properties.create(net.minecraft.block.material.Material.WATER).doesNotBlockMovement().hardnessAndResistance(100.0F).noDrops())); + public static RegistryObject LIFE_ESSENCE_BUCKET = ITEMS.register("life_essence_bucket", () -> new BucketItem(LIFE_ESSENCE_FLUID, new Item.Properties().containerItem(Items.BUCKET).maxStackSize(1).group(BloodMagic.TAB))); + public static RegistryObject DOUBT_BUCKET = ITEMS.register("doubt_bucket", () -> new BucketItem(DOUBT_FLUID, new Item.Properties().containerItem(Items.BUCKET).maxStackSize(1).group(BloodMagic.TAB))); + + public static final RegistryObject> SOUL_FORGE_CONTAINER = CONTAINERS.register("soul_forge_container", () -> IForgeContainerType.create(ContainerSoulForge::new)); + public static final RegistryObject> ARC_CONTAINER = CONTAINERS.register("arc_container", () -> IForgeContainerType.create(ContainerAlchemicalReactionChamber::new)); + public static final RegistryObject> ALCHEMY_TABLE_CONTAINER = CONTAINERS.register("alchemy_table_container", () -> IForgeContainerType.create(ContainerAlchemyTable::new)); + public static final RegistryObject> HOLDING_CONTAINER = CONTAINERS.register("holding_container", () -> IForgeContainerType.create(ContainerHolding::new)); + + // Dungeon Blocks + public static final RegistryObject DUNGEON_BRICK_1 = DUNGEONBLOCKS.register("dungeon_brick1", () -> new Block(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool())); + public static final RegistryObject DUNGEON_BRICK_2 = DUNGEONBLOCKS.register("dungeon_brick2", () -> new Block(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool())); + public static final RegistryObject DUNGEON_BRICK_3 = DUNGEONBLOCKS.register("dungeon_brick3", () -> new Block(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool())); + public static final RegistryObject DUNGEON_ORE = DUNGEONBLOCKS.register("dungeon_ore", () -> new Block(Properties.create(Material.ROCK).hardnessAndResistance(3.0F, 3.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool())); + + public static final RegistryObject DUNGEON_STONE = BLOCKS.register("dungeon_stone", () -> new Block(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool())); + public static final RegistryObject DUNGEON_EYE = DUNGEONBLOCKS.register("dungeon_eye", () -> new Block(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool().setLightLevel((state) -> { + return 15; + }))); + public static final RegistryObject DUNGEON_POLISHED_STONE = DUNGEONBLOCKS.register("dungeon_polished", () -> new Block(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool())); + public static final RegistryObject DUNGEON_TILE = DUNGEONBLOCKS.register("dungeon_tile", () -> new Block(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool())); + public static final RegistryObject DUNGEON_SMALL_BRICK = DUNGEONBLOCKS.register("dungeon_smallbrick", () -> new Block(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool())); + public static final RegistryObject DUNGEON_TILE_SPECIAL = DUNGEONBLOCKS.register("dungeon_tilespecial", () -> new Block(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool())); + + public static final RegistryObject DUNGEON_BRICK_ASSORTED = BLOCKS.register("dungeon_brick_assorted", () -> new Block(Properties.create(Material.ROCK).hardnessAndResistance(20.0F, 50.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(3).setRequiresTool())); + + public static final RegistryObject DUNGEON_BRICK_STAIRS = BLOCKS.register("dungeon_brick_stairs", () -> new StairsBlock(() -> DUNGEON_BRICK_1.get().getDefaultState(), Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool())); + public static final RegistryObject DUNGEON_POLISHED_STAIRS = BLOCKS.register("dungeon_polished_stairs", () -> new StairsBlock(() -> DUNGEON_POLISHED_STONE.get().getDefaultState(), Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool())); + + public static final RegistryObject DUNGEON_PILLAR_CENTER = BLOCKS.register("dungeon_pillar_center", () -> new RotatedPillarBlock(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool())); + public static final RegistryObject DUNGEON_PILLAR_SPECIAL = BLOCKS.register("dungeon_pillar_special", () -> new RotatedPillarBlock(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool())); + public static final RegistryObject DUNGEON_PILLAR_CAP = BLOCKS.register("dungeon_pillar_cap", () -> new BlockPillarCap(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool())); + + public static final RegistryObject DUNGEON_BRICK_WALL = BLOCKS.register("dungeon_brick_wall", () -> new WallBlock(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool())); + public static final RegistryObject DUNGEON_POLISHED_WALL = BLOCKS.register("dungeon_polished_wall", () -> new WallBlock(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool())); + public static final RegistryObject DUNGEON_BRICK_GATE = BLOCKS.register("dungeon_brick_gate", () -> new FenceGateBlock(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool())); + public static final RegistryObject DUNGEON_POLISHED_GATE = BLOCKS.register("dungeon_polished_gate", () -> new FenceGateBlock(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool())); + + public static final RegistryObject HELLFORGED_BLOCK = DUNGEONBLOCKS.register("dungeon_metal", () -> new Block(Properties.create(Material.IRON).hardnessAndResistance(5.0F, 6.0F).sound(SoundType.METAL).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool())); + + public static final RegistryObject NETHER_SOIL = BLOCKS.register("nether_soil", () -> new BlockNetherrackSoil(Properties.create(Material.EARTH).hardnessAndResistance(0.4F, 0.4F).sound(SoundType.NETHERRACK).harvestTool(ToolType.PICKAXE).tickRandomly())); + + public static final RegistryObject GROWING_DOUBT = BLOCKS.register("creeping_doubt", () -> new BlockGrowingDoubt(Properties.create(Material.PLANTS).doesNotBlockMovement().tickRandomly().zeroHardnessAndResistance().sound(SoundType.CROP))); + + private static boolean isntSolid(BlockState state, IBlockReader reader, BlockPos pos) + { + return false; + } + + public static final RegistryObject SHAPED_CHARGE = BLOCKS.register("shaped_charge", () -> new BlockShapedExplosive(3, Properties.create(Material.IRON).hardnessAndResistance(5.0F, 6.0F).sound(SoundType.METAL).harvestTool(ToolType.PICKAXE).harvestLevel(1).setRequiresTool())); + public static final RegistryObject DEFORESTER_CHARGE = BLOCKS.register("deforester_charge", () -> new BlockDeforesterCharge(3, Properties.create(Material.IRON).hardnessAndResistance(5.0F, 6.0F).sound(SoundType.METAL).harvestTool(ToolType.PICKAXE).harvestLevel(1).setRequiresTool())); + public static final RegistryObject VEINMINE_CHARGE = BLOCKS.register("veinmine_charge", () -> new BlockVeinMineCharge(3, Properties.create(Material.IRON).hardnessAndResistance(5.0F, 6.0F).sound(SoundType.METAL).harvestTool(ToolType.PICKAXE).harvestLevel(1).setRequiresTool())); + public static final RegistryObject FUNGAL_CHARGE = BLOCKS.register("fungal_charge", () -> new BlockFungalCharge(3, Properties.create(Material.IRON).hardnessAndResistance(5.0F, 6.0F).sound(SoundType.METAL).harvestTool(ToolType.PICKAXE).harvestLevel(1).setRequiresTool())); + + // +//// private static RegistryObject register(String name, Supplier sup, Function, Supplier> itemCreator) +//// { +//// RegistryObject ret = registerNoItem(name, sup); +//// ITEMS.register(name, itemCreator.apply(ret)); +//// return ret; +//// } +// +// private static RegistryObject register(String name, Supplier sup, Function, Supplier> itemCreator) +// { +// RegistryObject ret = registerNoItem(name, sup); +// ITEMS.register(name, itemCreator.apply(ret)); +// return ret; +// } +// +// private static RegistryObject registerNoItem(String name, Supplier sup) +// { +// return BLOCKS.register(name, sup); +// } + +// private static Supplier item(final RegistryObject block, final Supplier> renderMethod) +// { +// return () -> new BlockItem(block.get(), new Item.Properties().group(IronChests.IRONCHESTS_ITEM_GROUP).setISTER(renderMethod)); +// } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BloodstoneBlock.java b/src/main/java/wayoftime/bloodmagic/common/block/BloodstoneBlock.java new file mode 100644 index 00000000..ad4a9a4e --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BloodstoneBlock.java @@ -0,0 +1,13 @@ +package wayoftime.bloodmagic.common.block; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; + +public class BloodstoneBlock extends Block +{ + public BloodstoneBlock() + { + super(Properties.create(Material.ROCK)); + // TODO Auto-generated constructor stub + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/base/BlockPillarCap.java b/src/main/java/wayoftime/bloodmagic/common/block/base/BlockPillarCap.java new file mode 100644 index 00000000..f82a16af --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/base/BlockPillarCap.java @@ -0,0 +1,58 @@ +package wayoftime.bloodmagic.common.block.base; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.state.DirectionProperty; +import net.minecraft.state.StateContainer; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; + +public class BlockPillarCap extends Block +{ + public static final DirectionProperty FACING = BlockStateProperties.FACING; + + public BlockPillarCap(Properties prop) + { + super(prop); + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) + { + return this.getDefaultState().with(FACING, context.getFace()); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If + * inapplicable, returns the passed blockstate. + * + * @deprecated call via {@link IBlockState#withRotation(Rotation)} whenever + * possible. Implementing/overriding is fine. + */ + @Override + public BlockState rotate(BlockState state, Rotation rot) + { + return state.with(FACING, rot.rotate(state.get(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If + * inapplicable, returns the passed blockstate. + * + * @deprecated call via {@link IBlockState#withMirror(Mirror)} whenever + * possible. Implementing/overriding is fine. + */ + @Override + public BlockState mirror(BlockState state, Mirror mirrorIn) + { + return state.rotate(mirrorIn.toRotation(state.get(FACING))); + } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) + { + builder.add(FACING); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorBaseRecipes.java b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorBaseRecipes.java new file mode 100644 index 00000000..aa6df377 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorBaseRecipes.java @@ -0,0 +1,119 @@ +package wayoftime.bloodmagic.common.data; + +import java.util.function.Consumer; + +import net.minecraft.block.Blocks; +import net.minecraft.data.CookingRecipeBuilder; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.IFinishedRecipe; +import net.minecraft.data.ShapedRecipeBuilder; +import net.minecraft.data.ShapelessRecipeBuilder; +import net.minecraft.item.Items; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.tags.ItemTags; +import net.minecraftforge.common.Tags; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.data.recipe.BaseRecipeProvider; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.tags.BloodMagicTags; +import wayoftime.bloodmagic.core.recipe.IngredientBloodOrb; + +public class GeneratorBaseRecipes extends BaseRecipeProvider +{ + public GeneratorBaseRecipes(DataGenerator gen) + { + super(gen, BloodMagic.MODID); + } + + @Override + protected void registerRecipes(Consumer consumer) + { + addVanillaRecipes(consumer); + addVanillaSmithingRecipes(consumer); + addBloodOrbRecipes(consumer); + } + + private void addVanillaRecipes(Consumer consumer) + { +// ConditionalRecipe.builder().addRecipe(ShapedRecipeBuilder.shapedRecipe(BloodMagicItems.SACRIFICIAL_DAGGER.get()).key('g', Tags.Items.GLASS).key('G', Tags.Items.INGOTS_GOLD).key('i', Tags.Items.INGOTS_IRON).patternLine("ggg").patternLine(" Gg").patternLine("i g").addCriterion("has_glass", hasItem(Items.GLASS))::build); + ShapedRecipeBuilder.shapedRecipe(BloodMagicItems.CORRUPTED_DUST.get()).key('s', BloodMagicTags.TINYDUST_CORRUPTED).patternLine("sss").patternLine("sss").patternLine("sss").addCriterion("has_tiny", hasItem(BloodMagicItems.CORRUPTED_DUST_TINY.get())).build(consumer, BloodMagic.rl("corrupted_dust")); + ShapedRecipeBuilder.shapedRecipe(BloodMagicItems.HELLFORGED_BLOCK.get()).key('s', BloodMagicTags.INGOT_HELLFORGED).patternLine("sss").patternLine("sss").patternLine("sss").addCriterion("has_hellforged", hasItem(BloodMagicItems.HELLFORGED_INGOT.get())).build(consumer, BloodMagic.rl("hellforged_block")); + ShapedRecipeBuilder.shapedRecipe(BloodMagicItems.SACRIFICIAL_DAGGER.get()).key('g', Tags.Items.GLASS).key('G', Tags.Items.INGOTS_GOLD).key('i', Tags.Items.INGOTS_IRON).patternLine("ggg").patternLine(" Gg").patternLine("i g").addCriterion("has_glass", hasItem(Items.GLASS)).build(consumer, BloodMagic.rl("sacrificial_dagger")); + ShapedRecipeBuilder.shapedRecipe(BloodMagicItems.BASE_RITUAL_DIVINER.get()).key('a', BloodMagicItems.AIR_INSCRIPTION_TOOL.get()).key('s', Tags.Items.RODS_WOODEN).key('d', Tags.Items.GEMS_DIAMOND).key('e', BloodMagicItems.EARTH_INSCRIPTION_TOOL.get()).key('f', BloodMagicItems.FIRE_INSCRIPTION_TOOL.get()).key('w', BloodMagicItems.WATER_INSCRIPTION_TOOL.get()).patternLine("dfd").patternLine("ase").patternLine("dwd").addCriterion("has_scribe", hasItem(BloodMagicItems.AIR_INSCRIPTION_TOOL.get())).build(consumer, BloodMagic.rl("ritual_diviner_0")); + ShapedRecipeBuilder.shapedRecipe(BloodMagicItems.DUSK_RITUAL_DIVINER.get()).key('S', BloodMagicItems.DEMONIC_SLATE.get()).key('t', BloodMagicItems.DUSK_INSCRIPTION_TOOL.get()).key('d', BloodMagicItems.BASE_RITUAL_DIVINER.get()).patternLine(" S ").patternLine("tdt").patternLine(" S ").addCriterion("has_demon_slate", hasItem(BloodMagicItems.DEMONIC_SLATE.get())).build(consumer, BloodMagic.rl("ritual_diviner_1")); + ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.BLOODSTONE_BRICK.get(), 4).key('s', BloodMagicBlocks.BLOODSTONE.get()).patternLine("ss").patternLine("ss").addCriterion("has_weak_shard", hasItem(BloodMagicItems.WEAK_BLOOD_SHARD.get())).build(consumer, BloodMagic.rl("bloodstonebrick")); + ShapelessRecipeBuilder.shapelessRecipe(BloodMagicBlocks.BLOODSTONE.get(), 8).addIngredient(Tags.Items.STONE).addIngredient(BloodMagicItems.WEAK_BLOOD_SHARD.get()).addCriterion("has_weak_shard", hasItem(BloodMagicItems.WEAK_BLOOD_SHARD.get())).build(consumer, BloodMagic.rl("largebloodstonebrick")); + + ShapelessRecipeBuilder.shapelessRecipe(BloodMagicBlocks.WOOD_TILE_PATH.get(), 4).addIngredient(BloodMagicBlocks.WOOD_PATH.get()).addIngredient(BloodMagicBlocks.WOOD_PATH.get()).addIngredient(BloodMagicBlocks.WOOD_PATH.get()).addIngredient(BloodMagicBlocks.WOOD_PATH.get()).addCriterion("has_apprentice_orb", hasItem(BloodMagicItems.APPRENTICE_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("path/path_woodtile")); + ShapelessRecipeBuilder.shapelessRecipe(BloodMagicBlocks.STONE_TILE_PATH.get(), 4).addIngredient(BloodMagicBlocks.STONE_PATH.get()).addIngredient(BloodMagicBlocks.STONE_PATH.get()).addIngredient(BloodMagicBlocks.STONE_PATH.get()).addIngredient(BloodMagicBlocks.STONE_PATH.get()).addCriterion("has_magician_orb", hasItem(BloodMagicItems.MAGICIAN_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("path/path_stonetile")); + ShapelessRecipeBuilder.shapelessRecipe(BloodMagicBlocks.WORN_STONE_TILE_PATH.get(), 4).addIngredient(BloodMagicBlocks.WORN_STONE_PATH.get()).addIngredient(BloodMagicBlocks.WORN_STONE_PATH.get()).addIngredient(BloodMagicBlocks.WORN_STONE_PATH.get()).addIngredient(BloodMagicBlocks.WORN_STONE_PATH.get()).addCriterion("has_master_orb", hasItem(BloodMagicItems.MASTER_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("path/path_wornstonetile")); + + // Changed Recipes + { +// ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.BLOOD_ALTAR.get()).key('a', Tags.Items.STONE).key('b', Items.FURNACE).key('c', Tags.Items.INGOTS_GOLD).key('d', BloodMagicItems.MONSTER_SOUL_RAW.get()).patternLine("a a").patternLine("aba").patternLine("cdc").addCriterion("has_will", hasItem(BloodMagicItems.MONSTER_SOUL_RAW.get())).build(consumer, BloodMagic.rl("blood_altar")); +// ShapedRecipeBuilder.shapedRecipe(BloodMagicItems.SOUL_SNARE.get(), 4).key('r', Tags.Items.DUSTS_REDSTONE).key('s', Tags.Items.STRING).key('i', Tags.Items.INGOTS_IRON).patternLine("sis").patternLine("iri").patternLine("sis").addCriterion("has_redstone", hasItem(Items.REDSTONE)).build(consumer, BloodMagic.rl("soul_snare")); +// ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.SOUL_FORGE.get()).key('s', Tags.Items.STONE).key('g', Tags.Items.INGOTS_GOLD).key('i', Tags.Items.INGOTS_IRON).key('o', Tags.Items.STORAGE_BLOCKS_IRON).patternLine("i i").patternLine("sgs").patternLine("sos").addCriterion("has_gold", hasItem(Items.GOLD_INGOT)).build(consumer, BloodMagic.rl("soul_forge")); + } + { + ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.BLOOD_ALTAR.get()).key('a', Tags.Items.STONE).key('b', Items.FURNACE).key('c', Tags.Items.INGOTS_GOLD).key('d', Items.GOLD_INGOT).patternLine("a a").patternLine("aba").patternLine("cdc").addCriterion("has_gold", hasItem(Items.GOLD_INGOT)).build(consumer, BloodMagic.rl("blood_altar")); + ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.ALCHEMY_TABLE.get()).key('b', Tags.Items.INGOTS_IRON).key('s', Tags.Items.STONE).key('w', ItemTags.PLANKS).key('g', Tags.Items.INGOTS_GOLD).key('o', BloodMagicItems.SLATE.get()).patternLine("sss").patternLine("wbw").patternLine("gog").addCriterion("has_blank_slate", hasItem(BloodMagicItems.SLATE.get())).build(consumer, BloodMagic.rl("alchemy_table")); + ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.SOUL_FORGE.get()).key('s', Tags.Items.STONE).key('S', BloodMagicItems.SLATE.get()).key('i', Tags.Items.INGOTS_IRON).key('o', Tags.Items.STORAGE_BLOCKS_IRON).patternLine("i i").patternLine("sSs").patternLine("sos").addCriterion("has_blank_slate", hasItem(BloodMagicItems.SLATE.get())).build(consumer, BloodMagic.rl("soul_forge")); + } + } + + private void addVanillaSmithingRecipes(Consumer consumer) + { + String basePath = "smelting/"; + CookingRecipeBuilder.smeltingRecipe(Ingredient.fromTag(BloodMagicTags.DUST_IRON), Items.IRON_INGOT, 0, 200).addCriterion("has_iron_sand", hasItem(BloodMagicItems.IRON_SAND.get())).build(consumer, BloodMagic.rl(basePath + "ingot_iron")); + CookingRecipeBuilder.smeltingRecipe(Ingredient.fromTag(BloodMagicTags.DUST_GOLD), Items.GOLD_INGOT, 0, 200).addCriterion("has_gold_sand", hasItem(BloodMagicItems.GOLD_SAND.get())).build(consumer, BloodMagic.rl(basePath + "ingot_gold")); + CookingRecipeBuilder.smeltingRecipe(Ingredient.fromTag(BloodMagicTags.DUST_NETHERITE_SCRAP), Items.NETHERITE_SCRAP, 0, 200).addCriterion("has_netherite_dust", hasItem(BloodMagicItems.NETHERITE_SCRAP_SAND.get())).build(consumer, BloodMagic.rl(basePath + "ingot_netherite_scrap")); + CookingRecipeBuilder.smeltingRecipe(Ingredient.fromTag(BloodMagicTags.DUST_HELLFORGED), BloodMagicItems.HELLFORGED_INGOT.get(), 0, 200).addCriterion("has_hellforged_dust", hasItem(BloodMagicItems.HELLFORGED_SAND.get())).build(consumer, BloodMagic.rl(basePath + "ingot_hellforged")); + } + + private void addBloodOrbRecipes(Consumer consumer) + { + ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.INCENSE_ALTAR.get()).key('s', Tags.Items.STONE).key('c', Tags.Items.COBBLESTONE).key('h', Items.CHARCOAL).key('o', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_WEAK.get())).patternLine("s s").patternLine("shs").patternLine("coc").addCriterion("has_weak_orb", hasItem(BloodMagicItems.WEAK_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("incense_altar")); + + ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.BLANK_RUNE.get()).key('a', Tags.Items.STONE).key('s', Ingredient.fromItems(BloodMagicItems.SLATE.get())).key('o', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_WEAK.get())).patternLine("asa").patternLine("aoa").patternLine("aaa").addCriterion("has_weak_orb", hasItem(BloodMagicItems.WEAK_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("blood_rune_blank")); + ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.SPEED_RUNE.get()).key('a', Tags.Items.STONE).key('b', Ingredient.fromItems(BloodMagicItems.SLATE.get())).key('c', Ingredient.fromItems(Items.SUGAR)).key('d', BloodMagicBlocks.BLANK_RUNE.get()).patternLine("aba").patternLine("cdc").patternLine("aba").addCriterion("has_blank_rune", hasItem(BloodMagicItems.BLANK_RUNE_ITEM.get())).build(consumer, BloodMagic.rl("blood_rune_speed")); + ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.SACRIFICE_RUNE.get()).key('a', Tags.Items.STONE).key('b', BloodMagicItems.REINFORCED_SLATE.get()).key('c', Tags.Items.INGOTS_GOLD).key('d', BloodMagicBlocks.BLANK_RUNE.get()).key('e', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_APPRENTICE.get())).patternLine("aba").patternLine("cdc").patternLine("aea").addCriterion("has_apprentice_orb", hasItem(BloodMagicItems.APPRENTICE_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("blood_rune_sacrifice")); + ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.SELF_SACRIFICE_RUNE.get()).key('a', Tags.Items.STONE).key('b', Ingredient.fromItems(BloodMagicItems.REINFORCED_SLATE.get())).key('c', Ingredient.fromItems(Items.GLOWSTONE_DUST)).key('d', Ingredient.fromItems(BloodMagicItems.BLANK_RUNE_ITEM.get())).key('e', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_APPRENTICE.get())).patternLine("aba").patternLine("cdc").patternLine("aea").addCriterion("has_apprentice_orb", hasItem(BloodMagicItems.APPRENTICE_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("blood_rune_self_sacrifice")); + ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.CAPACITY_RUNE.get()).key('a', Tags.Items.STONE).key('b', Items.BUCKET).key('c', BloodMagicBlocks.BLANK_RUNE.get()).key('d', BloodMagicItems.IMBUED_SLATE.get()).patternLine("aba").patternLine("bcb").patternLine("ada").addCriterion("has_imbued_slate", hasItem(BloodMagicItems.IMBUED_SLATE.get())).build(consumer, BloodMagic.rl("blood_rune_capacity")); + ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.ORB_RUNE.get()).key('a', Tags.Items.STONE).key('b', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_WEAK.get())).key('c', BloodMagicBlocks.BLANK_RUNE.get()).key('d', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_MASTER.get())).patternLine("aba").patternLine("cdc").patternLine("aba").addCriterion("has_master_orb", hasItem(BloodMagicItems.MASTER_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("blood_rune_orb")); + ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.CHARGING_RUNE.get()).key('R', Tags.Items.DUSTS_REDSTONE).key('r', BloodMagicBlocks.BLANK_RUNE.get()).key('s', BloodMagicItems.DEMONIC_SLATE.get()).key('e', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_MASTER.get())).key('G', Tags.Items.DUSTS_GLOWSTONE).patternLine("RsR").patternLine("GrG").patternLine("ReR").addCriterion("has_master_orb", hasItem(BloodMagicItems.MASTER_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("blood_rune_charging")); + ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.DISPLACEMENT_RUNE.get()).key('a', Tags.Items.STONE).key('b', Items.WATER_BUCKET).key('c', BloodMagicBlocks.BLANK_RUNE.get()).key('d', BloodMagicItems.IMBUED_SLATE.get()).patternLine("aba").patternLine("bcb").patternLine("ada").addCriterion("has_imbued_slate", hasItem(BloodMagicItems.IMBUED_SLATE.get())).build(consumer, BloodMagic.rl("blood_rune_displacement")); + ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.AUGMENTED_CAPACITY_RUNE.get()).key('a', Tags.Items.OBSIDIAN).key('b', BloodMagicItems.DEMONIC_SLATE.get()).key('c', Items.BUCKET).key('d', BloodMagicBlocks.CAPACITY_RUNE.get()).key('e', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_MASTER.get())).patternLine("aba").patternLine("cdc").patternLine("aea").addCriterion("has_master_orb", hasItem(BloodMagicItems.MASTER_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("blood_rune_aug_capacity")); + ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.ACCELERATION_RUNE.get()).key('a', Items.BUCKET).key('b', BloodMagicItems.DEMONIC_SLATE.get()).key('c', Tags.Items.INGOTS_GOLD).key('d', BloodMagicBlocks.SPEED_RUNE.get()).key('e', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_MASTER.get())).patternLine("aba").patternLine("cdc").patternLine("aea").addCriterion("has_master_orb", hasItem(BloodMagicItems.MASTER_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("blood_rune_acceleration")); + + ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.BLANK_RITUAL_STONE.get(), 4).key('a', Tags.Items.OBSIDIAN).key('b', BloodMagicItems.REINFORCED_SLATE.get()).key('c', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_APPRENTICE.get())).patternLine("aba").patternLine("bcb").patternLine("aba").addCriterion("has_apprentice_orb", hasItem(BloodMagicItems.APPRENTICE_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("ritual_stone_blank")); + ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.MASTER_RITUAL_STONE.get()).key('a', Tags.Items.OBSIDIAN).key('b', BloodMagicBlocks.BLANK_RITUAL_STONE.get()).key('c', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_MAGICIAN.get())).patternLine("aba").patternLine("bcb").patternLine("aba").addCriterion("has_magician_orb", hasItem(BloodMagicItems.MAGICIAN_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("ritual_stone_master")); + + ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.ALCHEMICAL_REACTION_CHAMBER.get()).key('s', Tags.Items.STONE).key('f', Blocks.FURNACE).key('o', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_MAGICIAN.get())).key('I', Tags.Items.STORAGE_BLOCKS_IRON).key('S', BloodMagicItems.IMBUED_SLATE.get()).patternLine("sss").patternLine("SoS").patternLine("IfI").addCriterion("has_magician_orb", hasItem(BloodMagicItems.MAGICIAN_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("arc")); + + ShapedRecipeBuilder.shapedRecipe(BloodMagicItems.PRIMITIVE_FURNACE_CELL.get()).key('c', Tags.Items.COBBLESTONE).key('f', Tags.Items.STORAGE_BLOCKS_COAL).key('s', Ingredient.fromItems(BloodMagicItems.SLATE.get())).key('o', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_MAGICIAN.get())).patternLine("csc").patternLine("cfc").patternLine("coc").addCriterion("has_magician_orb", hasItem(BloodMagicItems.MAGICIAN_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("primitive_furnace_cell")); + ShapedRecipeBuilder.shapedRecipe(BloodMagicItems.LAVA_CRYSTAL.get()).key('a', Tags.Items.GLASS).key('b', Items.LAVA_BUCKET).key('c', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_WEAK.get())).key('d', Tags.Items.OBSIDIAN).key('e', Tags.Items.GEMS_DIAMOND).patternLine("aba").patternLine("bcb").patternLine("ded").addCriterion("has_weak_orb", hasItem(BloodMagicItems.WEAK_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("lava_crystal")); + + ShapedRecipeBuilder.shapedRecipe(BloodMagicItems.PRIMITIVE_HYDRATION_CELL.get()).key('B', Items.WATER_BUCKET).key('c', Tags.Items.COBBLESTONE).key('o', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_MAGICIAN.get())).key('s', BloodMagicItems.SLATE.get()).patternLine("csc").patternLine("cBc").patternLine("coc").addCriterion("has_magician_orb", hasItem(BloodMagicItems.MAGICIAN_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("primitive_hydration_cell")); + + ShapelessRecipeBuilder.shapelessRecipe(BloodMagicBlocks.WOOD_PATH.get(), 4).addIngredient(ItemTags.PLANKS).addIngredient(ItemTags.PLANKS).addIngredient(ItemTags.PLANKS).addIngredient(ItemTags.PLANKS).addIngredient(IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_APPRENTICE.get())).addCriterion("has_apprentice_orb", hasItem(BloodMagicItems.APPRENTICE_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("path/path_wood")); + ShapelessRecipeBuilder.shapelessRecipe(BloodMagicBlocks.STONE_PATH.get(), 4).addIngredient(Tags.Items.STONE).addIngredient(Tags.Items.STONE).addIngredient(Tags.Items.STONE).addIngredient(Tags.Items.STONE).addIngredient(IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_MAGICIAN.get())).addCriterion("has_magician_orb", hasItem(BloodMagicItems.MAGICIAN_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("path/path_stone")); + ShapelessRecipeBuilder.shapelessRecipe(BloodMagicBlocks.WORN_STONE_PATH.get(), 4).addIngredient(BloodMagicBlocks.STONE_PATH.get()).addIngredient(BloodMagicBlocks.STONE_PATH.get()).addIngredient(BloodMagicBlocks.STONE_PATH.get()).addIngredient(BloodMagicBlocks.STONE_PATH.get()).addIngredient(IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_MASTER.get())).addCriterion("has_master_orb", hasItem(BloodMagicItems.MASTER_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("path/path_wornstone")); + + ShapedRecipeBuilder.shapedRecipe(BloodMagicItems.RITUAL_READER.get()).key('s', BloodMagicItems.DEMONIC_SLATE.get()).key('g', Tags.Items.GLASS).key('i', Tags.Items.INGOTS_GOLD).key('o', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_MASTER.get())).patternLine("gog").patternLine("isi").patternLine(" s ").addCriterion("has_master_orb", hasItem(BloodMagicItems.MASTER_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("ritual_reader")); + + ShapedRecipeBuilder.shapedRecipe(BloodMagicItems.EXPERIENCE_TOME.get()).key('b', Items.ENCHANTED_BOOK).key('s', Tags.Items.STRING).key('e', Tags.Items.STORAGE_BLOCKS_LAPIS).key('g', Tags.Items.INGOTS_GOLD).key('l', BloodMagicItems.IMBUED_SLATE.get()).key('o', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_MAGICIAN.get())).patternLine("ses").patternLine("lbl").patternLine("gog").addCriterion("has_magician_orb", hasItem(BloodMagicItems.MAGICIAN_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("experience_tome")); +// ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.MIMIC.get()).key('b', itemIn) +// ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.SPEED_RUNE.get()).key('s', Items.GLASS).key('o', Ingredient.fromItems(Items.DIAMOND)).patternLine("sss").patternLine("sos").patternLine("sss").addCriterion("has_diamond", hasItem(Items.DIAMOND)).build(consumer, new ResourceLocation(BloodMagic.MODID, "speed_rune_from_standard")); +// ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.SPEED_RUNE.get()).key('s', Items.GLASS).key('o', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_WEAK.get())).patternLine("sss").patternLine("sos").patternLine("sss").addCriterion("has_diamond", hasItem(Items.DIAMOND)).build(consumer, new ResourceLocation(BloodMagic.MODID, "speed_rune_from_orb")); + + // Changed Recipes + { +// ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.ALCHEMY_TABLE.get()).key('b', Tags.Items.RODS_BLAZE).key('s', Tags.Items.STONE).key('w', ItemTags.PLANKS).key('g', Tags.Items.INGOTS_GOLD).key('o', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_WEAK.get())).patternLine("sss").patternLine("wbw").patternLine("gog").addCriterion("has_weak_orb", hasItem(BloodMagicItems.WEAK_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("alchemy_table")); + + } + { + + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorBlockStates.java b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorBlockStates.java new file mode 100644 index 00000000..3e2ee25f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorBlockStates.java @@ -0,0 +1,357 @@ +package wayoftime.bloodmagic.common.data; + +import net.minecraft.block.Block; +import net.minecraft.block.CropsBlock; +import net.minecraft.block.FenceGateBlock; +import net.minecraft.block.RotatedPillarBlock; +import net.minecraft.block.StairsBlock; +import net.minecraft.block.WallBlock; +import net.minecraft.data.DataGenerator; +import net.minecraft.state.IntegerProperty; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.generators.BlockModelBuilder; +import net.minecraftforge.client.model.generators.BlockStateProvider; +import net.minecraftforge.client.model.generators.ConfiguredModel; +import net.minecraftforge.client.model.generators.ConfiguredModel.Builder; +import net.minecraftforge.client.model.generators.ModelBuilder.ElementBuilder; +import net.minecraftforge.client.model.generators.ModelBuilder.FaceRotation; +import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.client.model.generators.MultiPartBlockStateBuilder; +import net.minecraftforge.client.model.generators.MultiPartBlockStateBuilder.PartBuilder; +import net.minecraftforge.client.model.generators.VariantBlockStateBuilder; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.fml.RegistryObject; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.block.BlockAlchemicalReactionChamber; +import wayoftime.bloodmagic.common.block.BlockDemonCrystal; +import wayoftime.bloodmagic.common.block.BlockShapedExplosive; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.block.base.BlockPillarCap; + +public class GeneratorBlockStates extends BlockStateProvider +{ + public GeneratorBlockStates(DataGenerator gen, ExistingFileHelper exFileHelper) + { + super(gen, BloodMagic.MODID, exFileHelper); + } + + @Override + protected void registerStatesAndModels() + { +// buildCubeAll(BloodMagicBlocks.TARTARICFORGE.get()); +// buildCubeAll(BloodMagicBlocks.SPEED_RUNE.get()); + + for (RegistryObject block : BloodMagicBlocks.BASICBLOCKS.getEntries()) + { + buildCubeAll(block.get()); + } + + for (RegistryObject block : BloodMagicBlocks.DUNGEONBLOCKS.getEntries()) + { + buildDungeonBlock(block.get()); + } + + buildCubeAll(BloodMagicBlocks.BLOOD_LIGHT.get()); + buildCubeAll(BloodMagicBlocks.BLANK_RITUAL_STONE.get()); + buildCubeAll(BloodMagicBlocks.AIR_RITUAL_STONE.get()); + buildCubeAll(BloodMagicBlocks.WATER_RITUAL_STONE.get()); + buildCubeAll(BloodMagicBlocks.FIRE_RITUAL_STONE.get()); + buildCubeAll(BloodMagicBlocks.EARTH_RITUAL_STONE.get()); + buildCubeAll(BloodMagicBlocks.DUSK_RITUAL_STONE.get()); + buildCubeAll(BloodMagicBlocks.DAWN_RITUAL_STONE.get()); + buildFarmland(BloodMagicBlocks.NETHER_SOIL.get(), BloodMagic.rl("block/nether_soil"), new ResourceLocation("block/netherrack")); + + buildFurnace(BloodMagicBlocks.ALCHEMICAL_REACTION_CHAMBER.get()); + + buildCrystal(BloodMagicBlocks.RAW_CRYSTAL_BLOCK.get(), "defaultcrystal"); + buildCrystal(BloodMagicBlocks.CORROSIVE_CRYSTAL_BLOCK.get(), "corrosivecrystal"); + buildCrystal(BloodMagicBlocks.DESTRUCTIVE_CRYSTAL_BLOCK.get(), "destructivecrystal"); + buildCrystal(BloodMagicBlocks.VENGEFUL_CRYSTAL_BLOCK.get(), "vengefulcrystal"); + buildCrystal(BloodMagicBlocks.STEADFAST_CRYSTAL_BLOCK.get(), "steadfastcrystal"); + + buildRandomStone(BloodMagicBlocks.DUNGEON_STONE.get(), BloodMagic.rl("block/dungeon/dungeon_stone")); + stairsBlock((StairsBlock) BloodMagicBlocks.DUNGEON_BRICK_STAIRS.get(), BloodMagic.rl("block/dungeon/dungeon_brick1")); + stairsBlock((StairsBlock) BloodMagicBlocks.DUNGEON_POLISHED_STAIRS.get(), BloodMagic.rl("block/dungeon/dungeon_polished")); + buildPillarCenter(BloodMagicBlocks.DUNGEON_PILLAR_CENTER.get(), BloodMagic.rl("block/dungeon/dungeon_pillar"), BloodMagic.rl("block/dungeon/dungeon_pillarheart")); + buildPillarCenter(BloodMagicBlocks.DUNGEON_PILLAR_SPECIAL.get(), BloodMagic.rl("block/dungeon/dungeon_pillarspecial"), BloodMagic.rl("block/dungeon/dungeon_pillarheart")); + buildWallInventory((WallBlock) BloodMagicBlocks.DUNGEON_BRICK_WALL.get(), BloodMagic.rl("block/dungeon/dungeon_brick1")); + buildWallInventory((WallBlock) BloodMagicBlocks.DUNGEON_POLISHED_WALL.get(), BloodMagic.rl("block/dungeon/dungeon_polished")); + fenceGateBlock((FenceGateBlock) BloodMagicBlocks.DUNGEON_BRICK_GATE.get(), BloodMagic.rl("block/dungeon/dungeon_brick1")); + fenceGateBlock((FenceGateBlock) BloodMagicBlocks.DUNGEON_POLISHED_GATE.get(), BloodMagic.rl("block/dungeon/dungeon_polished")); + + buildPillarCap(BloodMagicBlocks.DUNGEON_PILLAR_CAP.get(), BloodMagic.rl("block/dungeon/dungeon_pillarheart"), BloodMagic.rl("block/dungeon/dungeon_pillarbottom"), BloodMagic.rl("block/dungeon/dungeon_pillartop")); + + buildAssortedBlock(BloodMagicBlocks.DUNGEON_BRICK_ASSORTED.get(), modLoc("dungeon_brick1"), modLoc("dungeon_brick2"), modLoc("dungeon_brick3")); + + buildCubeAllWithTextureName("etherealopaquemimic"); + buildCubeAllWithTextureName("sentientmimic"); + buildCubeAllWithTextureName("solidclearmimic"); + buildCubeAllWithTextureName("solidlightmimic"); + buildCubeAllWithTextureName("solidopaquemimic"); + + buildCrop(BloodMagicBlocks.GROWING_DOUBT.get(), CropsBlock.AGE, 7, BloodMagic.rl("block/creeping_doubt_1"), BloodMagic.rl("block/creeping_doubt_2"), BloodMagic.rl("block/creeping_doubt_3"), BloodMagic.rl("block/creeping_doubt_4"), BloodMagic.rl("block/creeping_doubt_5"), BloodMagic.rl("block/creeping_doubt_6"), BloodMagic.rl("block/creeping_doubt_7"), BloodMagic.rl("block/creeping_doubt_8")); + + buildOrientable(BloodMagicBlocks.SHAPED_CHARGE.get(), "shaped_charge", modLoc("block/sub/shaped_charge"), modLoc("block/dungeon/dungeon_stone"), modLoc("block/dungeon/dungeon_tile"), modLoc("block/blankrune"), modLoc("block/largebloodstonebrick"), modLoc("models/defaultcrystal")); + buildOrientable(BloodMagicBlocks.DEFORESTER_CHARGE.get(), "deforester_charge", modLoc("block/sub/shaped_charge"), new ResourceLocation("block/oak_log_top"), new ResourceLocation("block/oak_log_top"), modLoc("block/blankrune"), new ResourceLocation("block/oak_planks"), modLoc("models/defaultcrystal")); + buildOrientable(BloodMagicBlocks.VEINMINE_CHARGE.get(), "veinmine_charge", modLoc("block/sub/shaped_charge"), new ResourceLocation("block/sandstone_bottom"), new ResourceLocation("block/sandstone_bottom"), modLoc("block/blankrune"), new ResourceLocation("block/sand"), modLoc("models/defaultcrystal")); + buildOrientable(BloodMagicBlocks.FUNGAL_CHARGE.get(), "fungal_charge", modLoc("block/sub/shaped_charge"), new ResourceLocation("block/nether_wart_block"), new ResourceLocation("block/crimson_planks"), modLoc("block/blankrune"), new ResourceLocation("block/crimson_stem"), modLoc("models/defaultcrystal")); + } + + private void buildOrientable(Block block, String name, ResourceLocation modelPath, ResourceLocation base, ResourceLocation edges, ResourceLocation centerCap, ResourceLocation binding, ResourceLocation core) + { +// ModelFile furnace_off = models().orientableWithBottom("alchemicalreactionchamber", BloodMagic.rl("block/arc_side"), BloodMagic.rl("block/arc_front"), BloodMagic.rl("block/arc_bottom"), BloodMagic.rl("block/arc_top")); +// getVariantBuilder(block).addModels(block.getDefaultState().with(BlockAlchemicalReactionChamber.FACING, Direction.NORTH).with(BlockAlchemicalReactionChamber.LIT, false), furnaceModel); + ModelFile model = models().withExistingParent(name, modelPath).texture("1", edges).texture("3", base).texture("4", centerCap).texture("5", binding).texture("6", core).texture("particle", core); + + VariantBlockStateBuilder builder = getVariantBuilder(block); + + builder.partialState().with(BlockShapedExplosive.ATTACHED, Direction.UP).modelForState().modelFile(model).addModel(); + builder.partialState().with(BlockShapedExplosive.ATTACHED, Direction.DOWN).modelForState().modelFile(model).rotationX(180).addModel(); + builder.partialState().with(BlockShapedExplosive.ATTACHED, Direction.EAST).modelForState().modelFile(model).rotationX(90).rotationY(90).addModel(); + builder.partialState().with(BlockShapedExplosive.ATTACHED, Direction.WEST).modelForState().modelFile(model).rotationX(90).rotationY(270).addModel(); + builder.partialState().with(BlockShapedExplosive.ATTACHED, Direction.NORTH).modelForState().modelFile(model).rotationX(90).addModel(); + builder.partialState().with(BlockShapedExplosive.ATTACHED, Direction.SOUTH).modelForState().modelFile(model).rotationX(270).addModel(); + } + + private void buildCrop(Block block, IntegerProperty prop, int maxAge, ResourceLocation... textures) + { + String basePath = block.getRegistryName().getPath(); + VariantBlockStateBuilder builder = getVariantBuilder(block); + + for (int i = 0; i <= maxAge; i++) + { + ModelFile modelFile = models().crop(basePath + "_" + (i + 1), textures[i]); + builder.partialState().with(prop, i).modelForState().modelFile(modelFile).addModel(); + } + } + + private void buildFarmland(Block block, ResourceLocation top, ResourceLocation side) + { + String basePath = block.getRegistryName().getPath(); + getVariantBuilder(block).forAllStates(state -> { + Builder builder = ConfiguredModel.builder(); + + ModelFile file = models().withExistingParent(basePath, "template_farmland").texture("top", top).texture("dirt", side); + + return builder.modelFile(file).build(); + }); + } + + private void buildCubeAllWithTextureName(String texture) + { + models().cubeAll(texture, BloodMagic.rl("block/" + texture)).assertExistence(); + } + + private void buildAssortedBlock(Block block, ResourceLocation... modelResources) + { + getVariantBuilder(block).forAllStates(state -> { + Builder builder = ConfiguredModel.builder(); + + for (int i = 0; i < modelResources.length; i++) + { + ResourceLocation location = modelResources[i]; + ModelFile file = models().getExistingFile(location); + if (i < modelResources.length - 1) + { + builder = builder.modelFile(file).nextModel(); + } else + { + builder = builder.modelFile(file); + } + } + + return builder.build(); + }); + } + + private void buildRandomStone(Block block, ResourceLocation texture) + { + String basePath = block.getRegistryName().getPath(); + ModelFile modelFile = models().cubeAll(basePath, texture); + ModelFile modelFile_mirrored = models().withExistingParent(basePath + "_mirrored", "cube_mirrored_all").texture("all", texture); + getVariantBuilder(block).forAllStates(state -> ConfiguredModel.builder().modelFile(modelFile).nextModel().modelFile(modelFile_mirrored).nextModel().modelFile(modelFile).rotationY(180).nextModel().modelFile(modelFile_mirrored).rotationY(180).build()); + } + + private void buildWallInventory(WallBlock block, ResourceLocation texture) + { + String basePath = block.getRegistryName().getPath(); + wallBlock(block, texture); + ModelFile file = models().wallInventory(basePath + "_inventory", texture); + file.assertExistence(); + } + + private void buildDungeonBlock(Block block) + { + String basePath = block.getRegistryName().getPath(); + ModelFile modelFile = models().cubeAll(basePath, BloodMagic.rl("block/dungeon/" + basePath)); + getVariantBuilder(block).forAllStates(state -> ConfiguredModel.builder().modelFile(modelFile).build()); +// ModelFile furnace_off = models().cubeAll(block.getRegistryName().toString(), texture)\ + } + + private void buildPillarCenter(Block block, ResourceLocation side, ResourceLocation pillarEnd) + { + String basePath = block.getRegistryName().getPath(); + ModelFile yModel = models().cubeColumn(basePath, side, pillarEnd); + + ElementBuilder xElementBuilder = models().withExistingParent(basePath + "_x", "cube").texture("particle", side).texture("end", pillarEnd).texture("side", side).element(); + xElementBuilder.face(Direction.UP).uvs(0, 0, 16, 16).texture("#side").rotation(FaceRotation.COUNTERCLOCKWISE_90).end(); + xElementBuilder.face(Direction.DOWN).uvs(0, 0, 16, 16).texture("#side").rotation(FaceRotation.COUNTERCLOCKWISE_90).end(); + xElementBuilder.face(Direction.NORTH).uvs(0, 0, 16, 16).texture("#side").rotation(FaceRotation.COUNTERCLOCKWISE_90).end(); + xElementBuilder.face(Direction.SOUTH).uvs(0, 0, 16, 16).texture("#side").rotation(FaceRotation.COUNTERCLOCKWISE_90).end(); + xElementBuilder.face(Direction.WEST).uvs(16, 0, 0, 16).texture("#end").end(); + xElementBuilder.face(Direction.EAST).uvs(16, 0, 0, 16).texture("#end").end(); + ModelFile xModel = xElementBuilder.end(); + + ElementBuilder zElementBuilder = models().withExistingParent(basePath + "_z", "cube").texture("particle", side).texture("end", pillarEnd).texture("side", side).element(); + zElementBuilder.face(Direction.UP).uvs(0, 0, 16, 16).texture("#side").end(); + zElementBuilder.face(Direction.DOWN).uvs(0, 0, 16, 16).texture("#side").end(); + zElementBuilder.face(Direction.NORTH).uvs(0, 0, 16, 16).texture("#end").end(); + zElementBuilder.face(Direction.SOUTH).uvs(0, 0, 16, 16).texture("#end").end(); + zElementBuilder.face(Direction.WEST).uvs(16, 0, 0, 16).texture("#side").rotation(FaceRotation.COUNTERCLOCKWISE_90).end(); + zElementBuilder.face(Direction.EAST).uvs(16, 0, 0, 16).texture("#side").rotation(FaceRotation.COUNTERCLOCKWISE_90).end(); + ModelFile zModel = zElementBuilder.end(); + + VariantBlockStateBuilder builder = getVariantBuilder(block); + builder.partialState().with(RotatedPillarBlock.AXIS, Direction.Axis.X).modelForState().modelFile(xModel).addModel(); + builder.partialState().with(RotatedPillarBlock.AXIS, Direction.Axis.Y).modelForState().modelFile(yModel).addModel(); + builder.partialState().with(RotatedPillarBlock.AXIS, Direction.Axis.Z).modelForState().modelFile(zModel).addModel(); + } + + private void buildPillarCap(Block block, ResourceLocation pillarEnd, ResourceLocation sideBottom, ResourceLocation sideTop) + { + String basePath = block.getRegistryName().getPath(); + ModelFile upModel = models().cubeBottomTop(basePath, sideTop, pillarEnd, pillarEnd); + ModelFile downModel = models().cubeBottomTop(basePath + "_down", sideBottom, pillarEnd, pillarEnd); + + ElementBuilder northElementBuilder = models().withExistingParent(basePath + "_north", "cube").texture("particle", pillarEnd).texture("sideBottom", sideBottom).texture("end", pillarEnd).texture("sideTop", sideTop).element(); + northElementBuilder.face(Direction.UP).uvs(0, 0, 16, 16).texture("#sideTop").end(); + northElementBuilder.face(Direction.DOWN).uvs(0, 0, 16, 16).texture("#sideBottom").end(); + northElementBuilder.face(Direction.NORTH).uvs(0, 0, 16, 16).texture("#end").end(); + northElementBuilder.face(Direction.SOUTH).uvs(0, 0, 16, 16).texture("#end").end(); + northElementBuilder.face(Direction.WEST).uvs(16, 0, 0, 16).texture("#sideTop").rotation(FaceRotation.COUNTERCLOCKWISE_90).end(); + northElementBuilder.face(Direction.EAST).uvs(16, 0, 0, 16).texture("#sideBottom").rotation(FaceRotation.COUNTERCLOCKWISE_90).end(); + ModelFile northModel = northElementBuilder.end(); + + ElementBuilder southElementBuilder = models().withExistingParent(basePath + "_south", "cube").texture("particle", pillarEnd).texture("sideBottom", sideBottom).texture("end", pillarEnd).texture("sideTop", sideTop).element(); + southElementBuilder.face(Direction.UP).uvs(0, 0, 16, 16).texture("#sideBottom").end(); + southElementBuilder.face(Direction.DOWN).uvs(0, 0, 16, 16).texture("#sideTop").end(); + southElementBuilder.face(Direction.NORTH).uvs(0, 0, 16, 16).texture("#end").end(); + southElementBuilder.face(Direction.SOUTH).uvs(0, 0, 16, 16).texture("#end").end(); + southElementBuilder.face(Direction.WEST).uvs(16, 0, 0, 16).texture("#sideBottom").rotation(FaceRotation.COUNTERCLOCKWISE_90).end(); + southElementBuilder.face(Direction.EAST).uvs(16, 0, 0, 16).texture("#sideTop").rotation(FaceRotation.COUNTERCLOCKWISE_90).end(); + ModelFile southModel = southElementBuilder.end(); + + ElementBuilder westElementBuilder = models().withExistingParent(basePath + "_west", "cube").texture("particle", pillarEnd).texture("sideBottom", sideBottom).texture("end", pillarEnd).texture("sideTop", sideTop).element(); + westElementBuilder.face(Direction.UP).uvs(0, 0, 16, 16).texture("#sideTop").rotation(FaceRotation.COUNTERCLOCKWISE_90).end(); + westElementBuilder.face(Direction.DOWN).uvs(0, 0, 16, 16).texture("#sideTop").rotation(FaceRotation.COUNTERCLOCKWISE_90).end(); + westElementBuilder.face(Direction.NORTH).uvs(0, 0, 16, 16).texture("#sideBottom").rotation(FaceRotation.COUNTERCLOCKWISE_90).end(); + westElementBuilder.face(Direction.SOUTH).uvs(0, 0, 16, 16).texture("#sideTop").rotation(FaceRotation.COUNTERCLOCKWISE_90).end(); + westElementBuilder.face(Direction.WEST).uvs(16, 0, 0, 16).texture("#end").end(); + westElementBuilder.face(Direction.EAST).uvs(16, 0, 0, 16).texture("#end").end(); + ModelFile westModel = westElementBuilder.end(); + + ElementBuilder eastElementBuilder = models().withExistingParent(basePath + "_east", "cube").texture("particle", pillarEnd).texture("sideBottom", sideBottom).texture("end", pillarEnd).texture("sideTop", sideTop).element(); + eastElementBuilder.face(Direction.UP).uvs(0, 0, 16, 16).texture("#sideBottom").rotation(FaceRotation.COUNTERCLOCKWISE_90).end(); + eastElementBuilder.face(Direction.DOWN).uvs(0, 0, 16, 16).texture("#sideBottom").rotation(FaceRotation.COUNTERCLOCKWISE_90).end(); + eastElementBuilder.face(Direction.NORTH).uvs(0, 0, 16, 16).texture("#sideTop").rotation(FaceRotation.COUNTERCLOCKWISE_90).end(); + eastElementBuilder.face(Direction.SOUTH).uvs(0, 0, 16, 16).texture("#sideBottom").rotation(FaceRotation.COUNTERCLOCKWISE_90).end(); + eastElementBuilder.face(Direction.WEST).uvs(16, 0, 0, 16).texture("#end").end(); + eastElementBuilder.face(Direction.EAST).uvs(16, 0, 0, 16).texture("#end").end(); + ModelFile eastModel = eastElementBuilder.end(); + + VariantBlockStateBuilder builder = getVariantBuilder(block); + builder.partialState().with(BlockPillarCap.FACING, Direction.UP).modelForState().modelFile(upModel).addModel(); + builder.partialState().with(BlockPillarCap.FACING, Direction.DOWN).modelForState().modelFile(downModel).addModel(); + builder.partialState().with(BlockPillarCap.FACING, Direction.NORTH).modelForState().modelFile(northModel).addModel(); + builder.partialState().with(BlockPillarCap.FACING, Direction.SOUTH).modelForState().modelFile(southModel).addModel(); + builder.partialState().with(BlockPillarCap.FACING, Direction.WEST).modelForState().modelFile(westModel).addModel(); + builder.partialState().with(BlockPillarCap.FACING, Direction.EAST).modelForState().modelFile(eastModel).addModel(); + } + + private BlockModelBuilder rotateTextureFace(BlockModelBuilder file, Direction face, FaceRotation rotation, String texture) + { +// BiConsumer.ElementBuilder.FaceBuilder> biCon = (fc, rot) -> { +// rot.rotation(rotation).texture(texture); +// }; + return file.element().face(face).uvs(16, 0, 0, 16).rotation(rotation).texture("#east").end().end(); +// return file.element().faces(biCon).texture("#east").end(); + } + + private void buildCubeAll(Block block) + { + getVariantBuilder(block).forAllStates(state -> ConfiguredModel.builder().modelFile(cubeAll(block)).build()); + } + +// private void buildStairs(StairsBlock block, ResourceLocation texture) +// { +// getVariantBuilder(block).forAllStates(state -> ConfiguredModel.builder().modelFile(stairsBlock(block, texture)).build()); +// } + + private void buildCrystal(Block block, String name) + { + MultiPartBlockStateBuilder builder = getMultipartBuilder(block); + + ModelFile[] crystalModels = new ModelFile[7]; + for (int i = 0; i < 7; i++) + { + crystalModels[i] = models().withExistingParent("block/crystal/" + name + (i + 1), modLoc("crystal" + (i + 1))).texture("crystal", modLoc("models/" + name)); + } + + for (int i = 0; i < 7; i++) + { + Integer[] intArray = new Integer[7 - i]; + for (int j = i; j < 7; j++) + { + intArray[j - i] = j; + } + + for (Direction direction : Direction.values()) + { + Builder partBuilder = builder.part().modelFile(crystalModels[i]); + switch (direction) + { + case UP: + break; + case DOWN: + partBuilder = partBuilder.rotationX(180); + break; + case EAST: + partBuilder = partBuilder.rotationX(90).rotationY(90); + break; + case WEST: + partBuilder = partBuilder.rotationX(90).rotationY(270); + break; + case NORTH: + partBuilder = partBuilder.rotationX(90); + break; + case SOUTH: + partBuilder = partBuilder.rotationX(270); + break; + } + + partBuilder.addModel().condition(BlockDemonCrystal.AGE, intArray).condition(BlockDemonCrystal.ATTACHED, direction).end(); + } + } + } + + private void buildFurnace(Block block) + { +// ConfiguredModel[] furnaceModel = ConfiguredModel.builder().modelFile().build(); + ModelFile furnace_off = models().orientableWithBottom("alchemicalreactionchamber", BloodMagic.rl("block/arc_side"), BloodMagic.rl("block/arc_front"), BloodMagic.rl("block/arc_bottom"), BloodMagic.rl("block/arc_top")); +// getVariantBuilder(block).addModels(block.getDefaultState().with(BlockAlchemicalReactionChamber.FACING, Direction.NORTH).with(BlockAlchemicalReactionChamber.LIT, false), furnaceModel); + + VariantBlockStateBuilder builder = getVariantBuilder(block); + + builder.partialState().with(BlockAlchemicalReactionChamber.FACING, Direction.NORTH).with(BlockAlchemicalReactionChamber.LIT, false).modelForState().modelFile(furnace_off).addModel(); + builder.partialState().with(BlockAlchemicalReactionChamber.FACING, Direction.EAST).with(BlockAlchemicalReactionChamber.LIT, false).modelForState().modelFile(furnace_off).rotationY(90).addModel(); + builder.partialState().with(BlockAlchemicalReactionChamber.FACING, Direction.SOUTH).with(BlockAlchemicalReactionChamber.LIT, false).modelForState().modelFile(furnace_off).rotationY(180).addModel(); + builder.partialState().with(BlockAlchemicalReactionChamber.FACING, Direction.WEST).with(BlockAlchemicalReactionChamber.LIT, false).modelForState().modelFile(furnace_off).rotationY(270).addModel(); + builder.partialState().with(BlockAlchemicalReactionChamber.FACING, Direction.NORTH).with(BlockAlchemicalReactionChamber.LIT, true).modelForState().modelFile(furnace_off).addModel(); + builder.partialState().with(BlockAlchemicalReactionChamber.FACING, Direction.EAST).with(BlockAlchemicalReactionChamber.LIT, true).modelForState().modelFile(furnace_off).rotationY(90).addModel(); + builder.partialState().with(BlockAlchemicalReactionChamber.FACING, Direction.SOUTH).with(BlockAlchemicalReactionChamber.LIT, true).modelForState().modelFile(furnace_off).rotationY(180).addModel(); + builder.partialState().with(BlockAlchemicalReactionChamber.FACING, Direction.WEST).with(BlockAlchemicalReactionChamber.LIT, true).modelForState().modelFile(furnace_off).rotationY(270).addModel(); + +// getVariantBuilder(block). + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorBlockTags.java b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorBlockTags.java new file mode 100644 index 00000000..1e464bc6 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorBlockTags.java @@ -0,0 +1,48 @@ +package wayoftime.bloodmagic.common.data; + +import java.nio.file.Path; + +import net.minecraft.block.Blocks; +import net.minecraft.data.BlockTagsProvider; +import net.minecraft.data.DataGenerator; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.data.ExistingFileHelper; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.tags.BloodMagicTags; + +public class GeneratorBlockTags extends BlockTagsProvider +{ + public GeneratorBlockTags(DataGenerator generatorIn, ExistingFileHelper exFileHelper) + { + super(generatorIn, BloodMagic.MODID, exFileHelper); + } + + @Override + public void registerTags() + { + this.getOrCreateBuilder(BlockTags.WALLS).add(BloodMagicBlocks.DUNGEON_BRICK_WALL.get()); + this.getOrCreateBuilder(BlockTags.WALLS).add(BloodMagicBlocks.DUNGEON_POLISHED_WALL.get()); + this.getOrCreateBuilder(BloodMagicTags.Blocks.MUSHROOM_STEM).add(Blocks.MUSHROOM_STEM).add(Blocks.CRIMSON_STEM).add(Blocks.WARPED_STEM); + this.getOrCreateBuilder(BloodMagicTags.Blocks.MUSHROOM_HYPHAE).add(Blocks.BROWN_MUSHROOM_BLOCK).add(Blocks.RED_MUSHROOM_BLOCK).add(Blocks.CRIMSON_HYPHAE).add(Blocks.WARPED_HYPHAE).add(Blocks.STRIPPED_CRIMSON_HYPHAE).add(Blocks.STRIPPED_WARPED_HYPHAE).add(Blocks.NETHER_WART_BLOCK).add(Blocks.WARPED_WART_BLOCK).add(Blocks.SHROOMLIGHT); + } + + /** + * Resolves a Path for the location to save the given tag. + */ + @Override + protected Path makePath(ResourceLocation id) + { + return this.generator.getOutputFolder().resolve("data/" + id.getNamespace() + "/tags/blocks/" + id.getPath() + ".json"); + } + + /** + * Gets a name for this provider, to use in logging. + */ + @Override + public String getName() + { + return "Block Tags"; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorFluidTags.java b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorFluidTags.java new file mode 100644 index 00000000..df5c4ac1 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorFluidTags.java @@ -0,0 +1,22 @@ +package wayoftime.bloodmagic.common.data; + +import net.minecraft.data.DataGenerator; +import net.minecraft.data.FluidTagsProvider; +import net.minecraftforge.common.data.ExistingFileHelper; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.tags.BloodMagicTags; + +public class GeneratorFluidTags extends FluidTagsProvider +{ + public GeneratorFluidTags(DataGenerator generatorIn, ExistingFileHelper existingFileHelper) + { + super(generatorIn, BloodMagic.MODID, existingFileHelper); + } + + @Override + public void registerTags() + { + this.getOrCreateBuilder(BloodMagicTags.LIFE_ESSENCE).add(BloodMagicBlocks.LIFE_ESSENCE_FLUID.get(), BloodMagicBlocks.LIFE_ESSENCE_FLUID_FLOWING.get()); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorItemModels.java b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorItemModels.java new file mode 100644 index 00000000..47d9f125 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorItemModels.java @@ -0,0 +1,221 @@ +package wayoftime.bloodmagic.common.data; + +import net.minecraft.block.Block; +import net.minecraft.data.DataGenerator; +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 wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.item.BloodMagicItems; + +public class GeneratorItemModels extends ItemModelProvider +{ + public GeneratorItemModels(DataGenerator generator, ExistingFileHelper existingFileHelper) + { + super(generator, BloodMagic.MODID, existingFileHelper); + } + + @Override + protected void registerModels() + { +// registerBlockModel(BloodMagicBlocks.TARTARICFORGE.get()); +// registerBlockModel(BloodMagicBlocks.SPEED_RUNE.get()); + + for (RegistryObject item : BloodMagicItems.BASICITEMS.getEntries()) + { + registerBasicItem(item.get()); + } + + for (RegistryObject block : BloodMagicBlocks.BASICBLOCKS.getEntries()) + { + registerBlockModel(block.get()); + } + + for (RegistryObject block : BloodMagicBlocks.DUNGEONBLOCKS.getEntries()) + { + registerBlockModel(block.get()); + } + + registerBlockModel(BloodMagicBlocks.BLANK_RITUAL_STONE.get()); + registerBlockModel(BloodMagicBlocks.AIR_RITUAL_STONE.get()); + registerBlockModel(BloodMagicBlocks.WATER_RITUAL_STONE.get()); + registerBlockModel(BloodMagicBlocks.FIRE_RITUAL_STONE.get()); + registerBlockModel(BloodMagicBlocks.EARTH_RITUAL_STONE.get()); + registerBlockModel(BloodMagicBlocks.DUSK_RITUAL_STONE.get()); + registerBlockModel(BloodMagicBlocks.DAWN_RITUAL_STONE.get()); + registerBlockModel(BloodMagicBlocks.ALCHEMICAL_REACTION_CHAMBER.get()); + registerBlockModel(BloodMagicBlocks.NETHER_SOIL.get()); + + registerCustomBlockPath(BloodMagicBlocks.RAW_CRYSTAL_BLOCK.get(), "crystal/defaultcrystal1"); + registerCustomBlockPath(BloodMagicBlocks.CORROSIVE_CRYSTAL_BLOCK.get(), "crystal/corrosivecrystal1"); + registerCustomBlockPath(BloodMagicBlocks.DESTRUCTIVE_CRYSTAL_BLOCK.get(), "crystal/destructivecrystal1"); + registerCustomBlockPath(BloodMagicBlocks.VENGEFUL_CRYSTAL_BLOCK.get(), "crystal/vengefulcrystal1"); + registerCustomBlockPath(BloodMagicBlocks.STEADFAST_CRYSTAL_BLOCK.get(), "crystal/steadfastcrystal1"); + + registerCustomBlockPath(BloodMagicBlocks.DUNGEON_BRICK_ASSORTED.get(), "dungeon_brick1"); + registerBlockModel(BloodMagicBlocks.DUNGEON_STONE.get()); + registerBlockModel(BloodMagicBlocks.DUNGEON_BRICK_STAIRS.get()); + registerBlockModel(BloodMagicBlocks.DUNGEON_POLISHED_STAIRS.get()); + registerBlockModel(BloodMagicBlocks.DUNGEON_PILLAR_CENTER.get()); + registerBlockModel(BloodMagicBlocks.DUNGEON_PILLAR_SPECIAL.get()); + registerBlockModel(BloodMagicBlocks.DUNGEON_PILLAR_CAP.get()); + registerCustomBlockPath(BloodMagicBlocks.DUNGEON_BRICK_WALL.get(), "dungeon_brick_wall_inventory"); + registerCustomBlockPath(BloodMagicBlocks.DUNGEON_POLISHED_WALL.get(), "dungeon_polished_wall_inventory"); + registerBlockModel(BloodMagicBlocks.DUNGEON_BRICK_GATE.get()); + registerBlockModel(BloodMagicBlocks.DUNGEON_POLISHED_GATE.get()); + + registerToggleableItem(BloodMagicItems.GREEN_GROVE_SIGIL.get()); + registerToggleableItem(BloodMagicItems.FAST_MINER_SIGIL.get()); + registerToggleableItem(BloodMagicItems.MAGNETISM_SIGIL.get()); + registerToggleableItem(BloodMagicItems.ICE_SIGIL.get()); + registerDemonWillVariantItem(BloodMagicItems.PETTY_GEM.get()); + registerDemonWillVariantItem(BloodMagicItems.LESSER_GEM.get()); + registerDemonWillVariantItem(BloodMagicItems.COMMON_GEM.get()); + registerDemonWillVariantItem(BloodMagicItems.GREATER_GEM.get()); + registerDemonSword(BloodMagicItems.SENTIENT_SWORD.get()); + registerDemonTool(BloodMagicItems.SENTIENT_AXE.get()); + registerDemonTool(BloodMagicItems.SENTIENT_PICKAXE.get()); + registerDemonTool(BloodMagicItems.SENTIENT_SHOVEL.get()); + registerDemonTool(BloodMagicItems.SENTIENT_SCYTHE.get()); + registerSacrificialKnife(BloodMagicItems.SACRIFICIAL_DAGGER.get()); + + registerCustomFullTexture(BloodMagicBlocks.MIMIC.get(), "solidopaquemimic"); + registerCustomFullTexture(BloodMagicBlocks.ETHEREAL_MIMIC.get(), "etherealopaquemimic"); + this.crop(BloodMagicBlocks.GROWING_DOUBT.get().getRegistryName().getPath(), modLoc("block/creeping_doubt_8")); + + registerBlockModel(BloodMagicBlocks.SHAPED_CHARGE.get()); + registerBlockModel(BloodMagicBlocks.DEFORESTER_CHARGE.get()); + registerBlockModel(BloodMagicBlocks.VEINMINE_CHARGE.get()); + registerBlockModel(BloodMagicBlocks.FUNGAL_CHARGE.get()); + + registerMultiLayerItem(BloodMagicItems.SLATE_VIAL.get(), modLoc("item/alchemic_vial"), modLoc("item/alchemic_ribbon")); + registerMultiLayerItem(BloodMagicItems.MELEE_DAMAGE_ANOINTMENT.get(), modLoc("item/alchemic_vial"), modLoc("item/alchemic_liquid"), modLoc("item/alchemic_ribbon")); + registerMultiLayerItem(BloodMagicItems.SILK_TOUCH_ANOINTMENT.get(), modLoc("item/alchemic_vial"), modLoc("item/alchemic_liquid"), modLoc("item/alchemic_ribbon")); + registerMultiLayerItem(BloodMagicItems.FORTUNE_ANOINTMENT.get(), modLoc("item/alchemic_vial"), modLoc("item/alchemic_liquid"), modLoc("item/alchemic_ribbon")); + registerMultiLayerItem(BloodMagicItems.HOLY_WATER_ANOINTMENT.get(), modLoc("item/alchemic_vial"), modLoc("item/alchemic_liquid"), modLoc("item/alchemic_ribbon")); + registerMultiLayerItem(BloodMagicItems.HIDDEN_KNOWLEDGE_ANOINTMENT.get(), modLoc("item/alchemic_vial"), modLoc("item/alchemic_liquid"), modLoc("item/alchemic_ribbon")); + registerMultiLayerItem(BloodMagicItems.QUICK_DRAW_ANOINTMENT.get(), modLoc("item/alchemic_vial"), modLoc("item/alchemic_liquid"), modLoc("item/alchemic_ribbon")); + registerMultiLayerItem(BloodMagicItems.LOOTING_ANOINTMENT.get(), modLoc("item/alchemic_vial"), modLoc("item/alchemic_liquid"), modLoc("item/alchemic_ribbon")); + registerMultiLayerItem(BloodMagicItems.BOW_POWER_ANOINTMENT.get(), modLoc("item/alchemic_vial"), modLoc("item/alchemic_liquid"), modLoc("item/alchemic_ribbon")); + registerMultiLayerItem(BloodMagicItems.WILL_POWER_ANOINTMENT.get(), modLoc("item/alchemic_vial_will"), modLoc("item/alchemic_liquid"), modLoc("item/alchemic_ribbon_will")); + registerMultiLayerItem(BloodMagicItems.SMELTING_ANOINTMENT.get(), modLoc("item/alchemic_vial"), modLoc("item/alchemic_liquid"), modLoc("item/alchemic_ribbon")); + + } + + private void registerCustomFullTexture(Block block, String texturePath) + { + String path = block.getRegistryName().getPath(); + getBuilder(path).parent(new ModelFile.UncheckedModelFile(modLoc("block/" + texturePath))); + } + + private void registerCustomBlockPath(Block block, String newPath) + { + String path = block.getRegistryName().getPath(); + getBuilder(path).parent(new ModelFile.UncheckedModelFile(modLoc("block/" + newPath))); + } + + private void registerBlockModel(Block block) + { + String path = block.getRegistryName().getPath(); + getBuilder(path).parent(new ModelFile.UncheckedModelFile(modLoc("block/" + path))); + } + + private void registerBasicItem(Item item) + { + String path = item.getRegistryName().getPath(); + singleTexture(path, mcLoc("item/generated"), "layer0", modLoc("item/" + path)); + } + + private void registerMultiLayerItem(Item item, ResourceLocation... locations) + { + String path = item.getRegistryName().getPath(); + ItemModelBuilder builder = getBuilder(path).parent(getExistingFile(mcLoc("item/generated"))); +// ModelFile model = withExistingParent(path, mcLoc("item/handheld")); + + for (int i = 0; i < locations.length; i++) + { + builder.texture("layer" + i, locations[i]); + } + + builder.assertExistence(); + } + + private void registerToggleableItem(Item item) + { + String path = item.getRegistryName().getPath(); + ModelFile activatedFile = singleTexture("item/variants/" + path + "_activated", mcLoc("item/handheld"), "layer0", modLoc("item/" + path + "_activated")); + ModelFile deactivatedFile = singleTexture("item/variants/" + path + "_deactivated", mcLoc("item/handheld"), "layer0", modLoc("item/" + path + "_deactivated")); + getBuilder(path).override().predicate(BloodMagic.rl("active"), 0).model(deactivatedFile).end().override().predicate(BloodMagic.rl("active"), 1).model(activatedFile).end(); + } + + private void registerDemonWillVariantItem(Item item) + { + String path = item.getRegistryName().getPath(); + ItemModelBuilder builder = getBuilder(path); + + for (EnumDemonWillType type : EnumDemonWillType.values()) + { + String name = ""; + if (type.ordinal() != 0) + { + name = "_" + type.name().toLowerCase(); + } + ModelFile willFile = singleTexture("item/variants/" + path + name, mcLoc("item/handheld"), "layer0", modLoc("item/" + path + name)); + builder = builder.override().predicate(BloodMagic.rl("type"), type.ordinal()).model(willFile).end(); + } + } + + private void registerDemonSword(Item item) + { + String path = item.getRegistryName().getPath(); + ItemModelBuilder builder = getBuilder(path); + + for (int i = 0; i <= 1; i++) + { + for (EnumDemonWillType type : EnumDemonWillType.values()) + { + String name = i == 0 ? "_deactivated" : "_activated"; + if (type.ordinal() != 0) + { + name = "_" + type.name().toLowerCase() + name; + } + ModelFile willFile = singleTexture("item/variants/" + path + name, mcLoc("item/handheld"), "layer0", modLoc("item/" + path + name)); + builder = builder.override().predicate(BloodMagic.rl("type"), type.ordinal()).predicate(BloodMagic.rl("active"), i).model(willFile).end(); + } + } + } + + private void registerDemonTool(Item item) + { + String path = item.getRegistryName().getPath(); + ItemModelBuilder builder = getBuilder(path); + + for (EnumDemonWillType type : EnumDemonWillType.values()) + { + String name = ""; + if (type.ordinal() != 0) + { + name = "_" + type.name().toLowerCase() + name; + } + ModelFile willFile = singleTexture("item/variants/" + path + name, mcLoc("item/handheld"), "layer0", modLoc("item/" + path + name)); + builder = builder.override().predicate(BloodMagic.rl("type"), type.ordinal()).model(willFile).end(); + + } + } + + private void registerSacrificialKnife(Item item) + { + String path = item.getRegistryName().getPath(); + ItemModelBuilder builder = getBuilder(path); + + ModelFile baseKnifeFile = singleTexture("item/variants/" + path, mcLoc("item/handheld"), "layer0", modLoc("item/" + path)); + ModelFile ceremonialKnifeFile = singleTexture("item/variants/" + path + "_ceremonial", mcLoc("item/handheld"), "layer0", modLoc("item/" + path + "_ceremonial")); + builder = builder.override().predicate(BloodMagic.rl("incense"), 0).model(baseKnifeFile).end().override().predicate(BloodMagic.rl("incense"), 1).model(ceremonialKnifeFile).end(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorItemTags.java b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorItemTags.java new file mode 100644 index 00000000..80508474 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorItemTags.java @@ -0,0 +1,164 @@ +package wayoftime.bloodmagic.common.data; + +import java.nio.file.Path; + +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.INamedTag; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.data.ExistingFileHelper; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.tags.BloodMagicTags; + +public class GeneratorItemTags extends ItemTagsProvider +{ + public GeneratorItemTags(DataGenerator dataGenerator, BlockTagsProvider blockTagProvider, ExistingFileHelper existingFileHelper) + { + super(dataGenerator, blockTagProvider, BloodMagic.MODID, existingFileHelper); + } + + @Override + public void registerTags() + { + registerIngots(); + registerOres(); + registerDusts(); + registerFragments(); + registerGravels(); + + registerFurnaceCells(); + registerReverters(); + registerSieves(); + registerExplosives(); + registerHydration(); + registerResonators(); + registerCuttingFluids(); + + this.getOrCreateBuilder(BloodMagicTags.DUST_SULFUR).add(BloodMagicItems.SULFUR.get()); + this.getOrCreateBuilder(BloodMagicTags.DUST_SALTPETER).add(BloodMagicItems.SALTPETER.get()); + this.getOrCreateBuilder(BloodMagicTags.ARC_TOOL).addTag(BloodMagicTags.ARC_TOOL_FURNACE); + this.getOrCreateBuilder(BloodMagicTags.ARC_TOOL).addTag(BloodMagicTags.ARC_TOOL_REVERTER); + this.getOrCreateBuilder(BloodMagicTags.ARC_TOOL).addTag(BloodMagicTags.ARC_TOOL_SIEVE); + this.getOrCreateBuilder(BloodMagicTags.ARC_TOOL).addTag(BloodMagicTags.ARC_TOOL_EXPLOSIVE); + this.getOrCreateBuilder(BloodMagicTags.ARC_TOOL).addTag(BloodMagicTags.ARC_TOOL_HYDRATE); + this.getOrCreateBuilder(BloodMagicTags.ARC_TOOL).addTag(BloodMagicTags.ARC_TOOL_RESONATOR); + this.getOrCreateBuilder(BloodMagicTags.ARC_TOOL).addTag(BloodMagicTags.ARC_TOOL_CUTTINGFLUID); + + this.getOrCreateBuilder(BloodMagicTags.CRYSTAL_DEMON).add(BloodMagicItems.RAW_CRYSTAL.get()); + this.getOrCreateBuilder(BloodMagicTags.CRYSTAL_DEMON).add(BloodMagicItems.CORROSIVE_CRYSTAL.get()); + this.getOrCreateBuilder(BloodMagicTags.CRYSTAL_DEMON).add(BloodMagicItems.DESTRUCTIVE_CRYSTAL.get()); + this.getOrCreateBuilder(BloodMagicTags.CRYSTAL_DEMON).add(BloodMagicItems.VENGEFUL_CRYSTAL.get()); + this.getOrCreateBuilder(BloodMagicTags.CRYSTAL_DEMON).add(BloodMagicItems.STEADFAST_CRYSTAL.get()); + + this.copy(BloodMagicTags.Blocks.MUSHROOM_STEM, BloodMagicTags.MUSHROOM_STEM); + this.copy(BloodMagicTags.Blocks.MUSHROOM_HYPHAE, BloodMagicTags.MUSHROOM_HYPHAE); + +// this.getOrCreateBuilder(GOORESISTANT).addTag(BlockTags.DOORS); +// this.getOrCreateBuilder(GOORESISTANT).addTag(BlockTags.BEDS); +// this.getOrCreateBuilder(GOORESISTANT).add(Blocks.PISTON, Blocks.PISTON_HEAD, Blocks.STICKY_PISTON, Blocks.MOVING_PISTON); + + } + + private void registerIngots() + { + getOrCreateBuilder(BloodMagicTags.INGOT_HELLFORGED).add(BloodMagicItems.HELLFORGED_INGOT.get()); + } + + private void registerOres() + { + getOrCreateBuilder(BloodMagicTags.ORE_COPPER); + getOrCreateBuilder(BloodMagicTags.ORE_LEAD); + getOrCreateBuilder(BloodMagicTags.ORE_OSMIUM); + getOrCreateBuilder(BloodMagicTags.ORE_SILVER); + getOrCreateBuilder(BloodMagicTags.ORE_TIN); + } + + private void registerDusts() + { + getOrCreateBuilder(BloodMagicTags.DUST_IRON).add(BloodMagicItems.IRON_SAND.get()); + getOrCreateBuilder(BloodMagicTags.DUST_GOLD).add(BloodMagicItems.GOLD_SAND.get()); + getOrCreateBuilder(BloodMagicTags.DUST_COAL).add(BloodMagicItems.COAL_SAND.get()); + getOrCreateBuilder(BloodMagicTags.DUST_NETHERITE_SCRAP).add(BloodMagicItems.NETHERITE_SCRAP_SAND.get()); + getOrCreateBuilder(BloodMagicTags.DUST_HELLFORGED).add(BloodMagicItems.HELLFORGED_SAND.get()); + getOrCreateBuilder(BloodMagicTags.DUST_CORRUPTED).add(BloodMagicItems.CORRUPTED_DUST.get()); + getOrCreateBuilder(BloodMagicTags.TINYDUST_CORRUPTED).add(BloodMagicItems.CORRUPTED_DUST_TINY.get()); + } + + private void registerFragments() + { + getOrCreateBuilder(BloodMagicTags.FRAGMENT_IRON).add(BloodMagicItems.IRON_FRAGMENT.get()); + getOrCreateBuilder(BloodMagicTags.FRAGMENT_GOLD).add(BloodMagicItems.GOLD_FRAGMENT.get()); + getOrCreateBuilder(BloodMagicTags.FRAGMENT_NETHERITE_SCRAP).add(BloodMagicItems.NETHERITE_SCRAP_FRAGMENT.get()); + } + + private void registerGravels() + { + getOrCreateBuilder(BloodMagicTags.GRAVEL_IRON).add(BloodMagicItems.IRON_GRAVEL.get()); + getOrCreateBuilder(BloodMagicTags.GRAVEL_GOLD).add(BloodMagicItems.GOLD_GRAVEL.get()); + getOrCreateBuilder(BloodMagicTags.GRAVEL_NETHERITE_SCRAP).add(BloodMagicItems.NETHERITE_SCRAP_GRAVEL.get()); + } + + private void registerFurnaceCells() + { + this.registerTool(BloodMagicItems.PRIMITIVE_FURNACE_CELL.get(), BloodMagicTags.ARC_TOOL_FURNACE); + this.registerTool(BloodMagicItems.LAVA_CRYSTAL.get(), BloodMagicTags.ARC_TOOL_FURNACE); + } + + private void registerReverters() + { + this.registerTool(BloodMagicItems.SANGUINE_REVERTER.get(), BloodMagicTags.ARC_TOOL_REVERTER); + } + + private void registerSieves() + { + this.registerTool(BloodMagicItems.AIR_INSCRIPTION_TOOL.get(), BloodMagicTags.ARC_TOOL_SIEVE); + } + + private void registerExplosives() + { + this.registerTool(BloodMagicItems.EXPLOSIVE_POWDER.get(), BloodMagicTags.ARC_TOOL_EXPLOSIVE); + this.registerTool(BloodMagicItems.PRIMITIVE_EXPLOSIVE_CELL.get(), BloodMagicTags.ARC_TOOL_EXPLOSIVE); + } + + private void registerHydration() + { + this.registerTool(BloodMagicItems.PRIMITIVE_HYDRATION_CELL.get(), BloodMagicTags.ARC_TOOL_HYDRATE); + } + + private void registerResonators() + { + this.registerTool(BloodMagicItems.PRIMITIVE_CRYSTALLINE_RESONATOR.get(), BloodMagicTags.ARC_TOOL_RESONATOR); + this.registerTool(BloodMagicItems.CRYSTALLINE_RESONATOR.get(), BloodMagicTags.ARC_TOOL_RESONATOR); + } + + private void registerCuttingFluids() + { + this.registerTool(BloodMagicItems.BASIC_CUTTING_FLUID.get(), BloodMagicTags.ARC_TOOL_CUTTINGFLUID); + } + + public void registerTool(Item item, INamedTag tag) + { + this.getOrCreateBuilder(tag).add(item); + } + + /** + * Resolves a Path for the location to save the given tag. + */ + @Override + protected Path makePath(ResourceLocation id) + { + return this.generator.getOutputFolder().resolve("data/" + id.getNamespace() + "/tags/items/" + id.getPath() + ".json"); + } + + /** + * Gets a name for this provider, to use in logging. + */ + @Override + public String getName() + { + return "Item Tags"; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java new file mode 100644 index 00000000..b579d029 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java @@ -0,0 +1,626 @@ +package wayoftime.bloodmagic.common.data; + +import net.minecraft.data.DataGenerator; +import net.minecraftforge.common.data.LanguageProvider; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.item.BloodMagicItems; + +public class GeneratorLanguage extends LanguageProvider +{ + public GeneratorLanguage(DataGenerator gen) + { + super(gen, BloodMagic.MODID, "en_us"); + } + + @Override + protected void addTranslations() + { + // HUD + add("hud.bloodmagic.inactive", "Inactive"); + + // Creative Tab + add("itemGroup.bloodmagic.creativeTab", "Blood Magic"); + + add("chat.bloodmagic.damageSource", "%s's soul became too weak"); + + // Tile Entitites + add("tile.bloodmagic.soulforge.name", "Hellfire Forge"); + add("tile.bloodmagic.arc.name", "Alchemical Reaction Chamber"); + add("tile.bloodmagic.alchemytable.name", "Alchemy Table"); + + // Blood Orb tooltips + add("tooltip.bloodmagic.extraInfo", "&9-Hold shift for more info-"); + add("tooltip.bloodmagic.orb.desc", "Stores raw Life Essence"); + add("tooltip.bloodmagic.orb.owner", "Added by: %s"); + add("tooltip.bloodmagic.currentOwner", "Current owner: %s"); + add("tooltip.bloodmagic.currentTier", "Current tier: %d"); + add("tooltip.bloodmagic.config.disabled", "Currently disabled in the Config"); + add("tooltip.bloodmagic.tier", "Tier %d"); + + // Sigil tooltips + add("tooltip.bloodmagic.sigil.divination.desc", "Peer into the soul"); + add("tooltip.bloodmagic.sigil.divination.otherNetwork", "Peering into the soul of %s"); + add("tooltip.bloodmagic.sigil.divination.currentAltarTier", "Current Tier: %d"); + add("tooltip.bloodmagic.sigil.divination.currentEssence", "Current Essence: %d LP"); + add("tooltip.bloodmagic.sigil.divination.currentAltarCapacity", "Current Capacity: %d LP"); + add("tooltip.bloodmagic.sigil.divination.currentTranquility", "Current Tranquility: %d"); +// add("tooltip.bloodmagic.sigil.divination.currentInversion", "Current Inversion: %d"); + add("tooltip.bloodmagic.sigil.divination.currentBonus", "Current Bonus: +%d%%"); + + add("tooltip.bloodmagic.sigil.seer.desc", "When seeing all is not enough"); + add("tooltip.bloodmagic.sigil.seer.currentAltarProgress", "Current Progress: %d LP/ %s LP"); + add("tooltip.bloodmagic.sigil.seer.currentAltarProgress.percent", "Current Progress: %s"); + add("tooltip.bloodmagic.sigil.seer.currentAltarConsumptionRate", "Consumption Rate: %d LP"); + add("tooltip.bloodmagic.sigil.seer.currentAltarTier", "Current Tier: %d"); + add("tooltip.bloodmagic.sigil.seer.currentEssence", "Current Essence: %d LP"); + add("tooltip.bloodmagic.sigil.seer.currentAltarCapacity", "Current Capacity: %d LP"); + add("tooltip.bloodmagic.sigil.seer.currentCharge", "Current Charge: %d"); + add("tooltip.bloodmagic.sigil.seer.currentTranquility", "Current Tranquility: %d"); + add("tooltip.bloodmagic.sigil.seer.currentBonus", "Current Bonus: +%d%%"); + + add("tooltip.bloodmagic.sigil.holding.press", "Press %s to modify"); + add("tooltip.bloodmagic.sigil.holding.desc", "Sigil-ception"); + add("tooltip.bloodmagic.sigil.holding.sigilInSlot", "Slot %d: %s"); + + add("tooltip.bloodmagic.activated", "Activated"); + add("tooltip.bloodmagic.deactivated", "Deactivated"); + + add("tooltip.bloodmagic.decoration.safe", "Safe for decoration"); + add("tooltip.bloodmagic.decoration.notSafe", "Dangerous for decoration"); + + // General Tooltips + add("tooltip.bloodmagic.arcaneAshes", "Ashes used to draw an alchemy circle"); + add("tooltip.bloodmagic.will", "Will Quality: %s"); + add("tooltip.bloodmagic.sentientSword.desc", "Uses demon will to unleash its full potential."); + add("tooltip.bloodmagic.sentientAxe.desc", "Uses demon will to unleash its full potential."); + add("tooltip.bloodmagic.sentientPickaxe.desc", "Uses demon will to unleash its full potential."); + add("tooltip.bloodmagic.sentientShovel.desc", "Uses demon will to unleash its full potential."); + add("tooltip.bloodmagic.soulGem.petty", "A gem used to contain a little will"); + add("tooltip.bloodmagic.soulGem.lesser", "A gem used to contain some will"); + add("tooltip.bloodmagic.soulGem.common", "A gem used to contain more will"); + add("tooltip.bloodmagic.soulGem.greater", "A gem used to contain a greater amount of will"); + add("tooltip.bloodmagic.soulGem.grand", "A gem used to contain a large amount of will"); + add("tooltip.bloodmagic.soulSnare.desc", "Throw at a monster and then kill them to obtain their demonic will"); + + add("tooltip.bloodmagic.currentType.default", "Contains: Raw Will"); + add("tooltip.bloodmagic.currentType.corrosive", "Contains: Corrosive Will"); + add("tooltip.bloodmagic.currentType.destructive", "Contains: Destructive Will"); + add("tooltip.bloodmagic.currentType.vengeful", "Contains: Vengeful Will"); + add("tooltip.bloodmagic.currentType.steadfast", "Contains: Steadfast Will"); + + add("tooltip.bloodmagic.currentBaseType.default", "Raw"); + add("tooltip.bloodmagic.currentBaseType.corrosive", "Corrosive"); + add("tooltip.bloodmagic.currentBaseType.destructive", "Destructive"); + add("tooltip.bloodmagic.currentBaseType.vengeful", "Vengeful"); + add("tooltip.bloodmagic.currentBaseType.steadfast", "Steadfast"); + add("tooltip.bloodmagic.sacrificialdagger.desc", "Just a prick of the finger will suffice..."); + add("tooltip.bloodmagic.slate.desc", "Infused stone inside of a Blood Altar"); + add("tooltip.bloodmagic.inscriber.desc", "The writing is on the wall..."); + + add("tooltip.bloodmagic.sigil.water.desc", "Infinite water, anyone?"); + add("tooltip.bloodmagic.sigil.lava.desc", "HOT! DO NOT EAT"); + add("tooltip.bloodmagic.sigil.void.desc", "Better than a Swiffer®!"); + add("tooltip.bloodmagic.sigil.greengrove.desc", "Environmentally friendly"); + add("tooltip.bloodmagic.sigil.magnetism.desc", "I have a very magnetic personality"); + add("tooltip.bloodmagic.sigil.fastminer.desc", "Keep mining, and mining..."); + add("tooltip.bloodmagic.sigil.air.desc", "I feel lighter already..."); + add("tooltip.bloodmagic.sigil.bloodlight.desc", "I see a light!"); + + add("tooltip.bloodmagic.activationcrystal.weak", "Activates low-level rituals"); + add("tooltip.bloodmagic.activationcrystal.awakened", "Activates more powerful rituals"); + add("tooltip.bloodmagic.activationcrystal.creative", "Creative Only - Activates any ritual"); + + add("tooltip.bloodmagic.arctool.additionaldrops", "Increases chance of additional outputs by: x%s"); + add("tooltip.bloodmagic.arctool.uses", "Uses remaining: %s"); + + add("itemGroup.bloodmagictab", "Blood Magic"); + + add("tooltip.bloodmagic.experienceTome", "A book used to store experience"); + add("tooltip.bloodmagic.experienceTome.exp", "Exp: %0.3f"); + add("tooltip.bloodmagic.experienceTome.expLevel", "Level: %d"); + + add("tooltip.bloodmagic.throwing_dagger.desc", "Not to be used in the kitchen"); + + add("key.bloodmagic.category", "Blood Magic"); + + // Ritual info + add("tooltip.bloodmagic.diviner.currentRitual", "Current Ritual: %s"); + add("tooltip.bloodmagic.diviner.blankRune", "Blank Runes: %d"); + add("tooltip.bloodmagic.diviner.waterRune", "Water Runes: %d"); + add("tooltip.bloodmagic.diviner.airRune", "Air Runes: %d"); + add("tooltip.bloodmagic.diviner.fireRune", "Fire Runes: %d"); + add("tooltip.bloodmagic.diviner.earthRune", "Earth Runes: %d"); + add("tooltip.bloodmagic.diviner.duskRune", "Dusk Runes: %d"); + add("tooltip.bloodmagic.diviner.dawnRune", "Dawn Runes: %d"); + add("tooltip.bloodmagic.diviner.totalRune", "Total Runes: %d"); + add("tooltip.bloodmagic.diviner.extraInfo", "Press shift for extra info"); + add("tooltip.bloodmagic.diviner.extraExtraInfo", "-Hold shift + alt for augmentation info-"); + add("tooltip.bloodmagic.diviner.currentDirection", "Current Direction: %s"); + + add("tooltip.bloodmagic.holdShiftForInfo", "Press shift for extra info"); + + add("ritual.bloodmagic.blockRange.tooBig", "The block range given is too big! Needs to be at most %s blocks."); + add("ritual.bloodmagic.blockRange.tooFar", "The block range given is too far! Needs to be within a vertical range of %s blocks and a horizontal range of %s blocks."); + add("ritual.bloodmagic.blockRange.inactive", "The ritual stone is currently inactive, and cannot have its range modified."); + add("ritual.bloodmagic.blockRange.noRange", "The range was not properly chosen."); + add("ritual.bloodmagic.blockRange.firstBlock", "First block for new range stored."); + add("ritual.bloodmagic.blockRange.success", "New range successfully set!"); + add("ritual.bloodmagic.willConfig.set", "The ritual will use these Demon Will types: %s"); + add("ritual.bloodmagic.willConfig.void", "The ritual no longer uses Demon Will"); + + add("ritual.bloodmagic.testRitual", "Test Ritual"); + add("ritual.bloodmagic.waterRitual", "Ritual of the Full Spring"); + add("ritual.bloodmagic.lavaRitual", "Serenade of the Nether"); + add("ritual.bloodmagic.greenGroveRitual", "Ritual of the Green Grove"); + add("ritual.bloodmagic.jumpRitual", "Ritual of the High Jump"); + add("ritual.bloodmagic.wellOfSufferingRitual", "Well of Suffering"); + add("ritual.bloodmagic.featheredKnifeRitual", "Ritual of the Feathered Knife"); + add("ritual.bloodmagic.regenerationRitual", "Ritual of Regeneration"); + add("ritual.bloodmagic.harvestRitual", "Reap of the Harvest Moon"); + add("ritual.bloodmagic.magneticRitual", "Ritual of Magnetism"); + add("ritual.bloodmagic.crushingRitual", "Ritual of the Crusher"); + add("ritual.bloodmagic.fullStomachRitual", "Ritual of the Satiated Stomach"); + add("ritual.bloodmagic.interdictionRitual", "Ritual of Interdiction"); + add("ritual.bloodmagic.containmentRitual", "Ritual of Containment"); + add("ritual.bloodmagic.speedRitual", "Ritual of Speed"); + add("ritual.bloodmagic.suppressionRitual", "Ritual of Suppression"); + add("ritual.bloodmagic.expulsionRitual", "Aura of Expulsion"); + add("ritual.bloodmagic.zephyrRitual", "Call of the Zephyr"); + add("ritual.bloodmagic.upgradeRemoveRitual", "Sound of the Cleansing Soul"); + add("ritual.bloodmagic.armourEvolveRitual", "Ritual of Living Evolution"); + add("ritual.bloodmagic.animalGrowthRitual", "Ritual of the Shepherd"); + add("ritual.bloodmagic.crystalHarvestRitual", "Crack of the Fractured Crystal"); + add("ritual.bloodmagic.forsakenSoulRitual", "Gathering of the Forsaken Souls"); + add("ritual.bloodmagic.crystalSplitRitual", "Resonance of the Faceted Crystal"); + add("ritual.bloodmagic.ellipseRitual", "Focus of the Ellipsoid"); + + add("ritual.bloodmagic.cobblestoneRitual", "Le Vulcanos Frigius"); + add("ritual.bloodmagic.placerRitual", "The Filler"); + add("ritual.bloodmagic.fellingRitual", "The Timberman"); + add("ritual.bloodmagic.pumpRitual", "Hymn of Siphoning"); + add("ritual.bloodmagic.altarBuilderRitual", "The Assembly of the High Altar"); + add("ritual.bloodmagic.portalRitual", "The Gate of the Fold"); + + add("ritual.bloodmagic.waterRitual.info", "Generates a source of water from the master ritual stone."); + add("ritual.bloodmagic.lavaRitual.info", "Generates a source of lava from the master ritual stone."); + add("ritual.bloodmagic.lavaRitual.default.info", "(Raw) Decreases the LP cost of placing lava and allows lava to be placed insided of a linked container."); + add("ritual.bloodmagic.lavaRitual.corrosive.info", "(Corrosive) Entities within range that are immune to fire are damaged severely."); + add("ritual.bloodmagic.lavaRitual.destructive.info", "(Destructive) Lava placement range is increased based on total Will."); + add("ritual.bloodmagic.lavaRitual.vengeful.info", "(Vengeful) Entities within range have Fire Fuse applied to them."); + add("ritual.bloodmagic.lavaRitual.steadfast.info", "(Steadfast) Players within a designated range have Fire Resistance applied to them."); + + add("ritual.bloodmagic.greenGroveRitual.info", "Grows crops within its area."); + add("ritual.bloodmagic.jumpRitual.info", "Causes entities to leap up into the air."); + add("ritual.bloodmagic.wellOfSufferingRitual.info", "Attacks mobs within its damage zone and puts the LP into a nearby blood altar."); + add("ritual.bloodmagic.featheredKnifeRitual.info", "Drains health from players in its area and puts the LP into a nearby blood altar."); + add("ritual.bloodmagic.regenerationRitual.info", "Casts regeneration on entities within its range if they are missing health."); + add("ritual.bloodmagic.regenerationRitual.default.info", "(Raw)"); + add("ritual.bloodmagic.regenerationRitual.corrosive.info", "(Corrosive) Steals health from non-players inside of its Vampirism range and directly heals players."); + add("ritual.bloodmagic.regenerationRitual.destructive.info", "(Destructive)"); + add("ritual.bloodmagic.regenerationRitual.vengeful.info", "(Vengeful)"); + add("ritual.bloodmagic.regenerationRitual.steadfast.info", "(Steadfast)"); + add("ritual.bloodmagic.harvestRitual.info", "Harvests plants within its range, dropping the results on the ground."); + add("ritual.bloodmagic.magneticRitual.info", "Pulls up ores from the ground and puts them into its placement range."); + add("ritual.bloodmagic.crushingRitual.info", "Breaks blocks within its crushing range and places the items into the linked chest."); + add("ritual.bloodmagic.crushingRitual.destructive.info", "(Destructive) Blocks are broken down forcefully: all blocks broken are affected by Fortune III."); + add("ritual.bloodmagic.crushingRitual.steadfast.info", "(Steadfast) Causes all blocks that are broken to be picked up with silk touch. Overrides Fortune where applicable."); + add("ritual.bloodmagic.crushingRitual.corrosive.info", "(Corrosive) All blocks are broken to be processed with a form of cutting fluid. Overrides Silk Touch where applicable."); + add("ritual.bloodmagic.crushingRitual.vengeful.info", "(Vengeful) Compresses the inventory on successful operation. Currently only does one compression per operation."); + add("ritual.bloodmagic.crushingRitual.default.info", "(Raw) Increases the speed of the ritual based on total Will."); + add("ritual.bloodmagic.greenGroveRitual.corrosive.info", "(Corrosive) Entities within range are attacked by nearby plants, leeching away their life."); + add("ritual.bloodmagic.greenGroveRitual.default.info", "(Raw) Increases the speed of all of the ritual operations depending on the total Will in the Aura."); + add("ritual.bloodmagic.greenGroveRitual.vengeful.info", "(Vengeful) Increases the rate that a growth tick is successful."); + add("ritual.bloodmagic.greenGroveRitual.steadfast.info", "(Steadfast) Seeds are replanted and blocks are hydrated within the Hydration range."); + add("ritual.bloodmagic.greenGroveRitual.destructive.info", "(Destructive) Growing range is increased based on total Will."); + add("ritual.bloodmagic.featheredKnifeRitual.default.info", "(Raw) Increases the speed of the ritual based on the total Will in the Aura."); + add("ritual.bloodmagic.featheredKnifeRitual.destructive.info", "(Destructive) Increases the yield of the ritual based on total Will."); + add("ritual.bloodmagic.featheredKnifeRitual.vengeful.info", "(Vengeful) Sets the minimum health for sacrificing to 10%%. Overridden by Steadfast for the Owner if active."); + add("ritual.bloodmagic.featheredKnifeRitual.corrosive.info", "(Corrosive) Uses the player's Incense to increase the yield."); + add("ritual.bloodmagic.featheredKnifeRitual.steadfast.info", "(Steadfast) Sets the minimum health for sacrificing from 30%% to 70%%."); + add("ritual.bloodmagic.speedRitual.default.info", "(Raw) Increases the velocity caused by the ritual based on total Will."); + add("ritual.bloodmagic.speedRitual.vengeful.info", "(Vengeful) Prevents adult mobs and players from being transported. Players are transported if paired with Destructive."); + add("ritual.bloodmagic.speedRitual.destructive.info", "(Destructive) Prevents child mobs and players from being transported. Players are transported if paired with Vengeful."); + add("ritual.bloodmagic.animalGrowthRitual.vengeful.info", "(Vengeful) Decreases the time it takes for adults to breed again."); + add("ritual.bloodmagic.animalGrowthRitual.steadfast.info", "(Steadfast) Automatically breeds adults within its area using items in the connected chest."); + add("ritual.bloodmagic.animalGrowthRitual.default.info", "(Raw) Increases the speed of the ritual based on the total Will in the Aura."); + add("ritual.bloodmagic.animalGrowthRitual.destructive.info", "(Destructive) Causes adults that have not bred lately to run at mobs and explode."); + add("ritual.bloodmagic.animalGrowthRitual.corrosive.info", "(Corrosive) Unimplemented."); + add("ritual.bloodmagic.groundingRitual.info", "Forces entities on the ground and prevents jumping."); + add("ritual.bloodmagic.groundingRitual.default.info", "(Raw) Affects players."); + add("ritual.bloodmagic.groundingRitual.corrosive.info", "(Corrosive) Disables gravity (+Vengeful) Applies Levitation."); + add("ritual.bloodmagic.groundingRitual.destructive.info", "(Destructive) Applies Heavy Heart (increases fall damage) (+Vengeful) Stronger effect."); + add("ritual.bloodmagic.groundingRitual.steadfast.info", "(Steadfast) Affects Bosses. Doesn't affect bosses that are immune against motion change or immune against potions (except Wither and Ender Dragon)."); + add("ritual.bloodmagic.groundingRitual.vengeful.info", "(Vengeful) Makes effects stronger. (+Corrosive) Applies Levitation. (+Destructive) Higher Heavy Heart amplifier."); + add("ritual.bloodmagic.condorRitual.info", "Provides flight in an area around the ritual."); + add("ritual.bloodmagic.eternalSoulRitual.info", "Capable of transferring Life Essence from a Network back into an Altar at a cost."); + + add("ritual.bloodmagic.crystalSplitRitual.info", "Splits apart a well-grown Raw crystal cluster into seperal aspected crystal clusters."); + add("ritual.bloodmagic.fullStomachRitual.info", "Takes food from the linked chest and fills the player's saturation with it."); + add("ritual.bloodmagic.interdictionRitual.info", "Pushes all mobs within its area away from the master ritual stone."); + add("ritual.bloodmagic.containmentRitual.info", "Pulls all mobs within its area towards the master ritual stone."); + add("ritual.bloodmagic.speedRitual.info", "Launches players within its range in the direction of the ritual."); + add("ritual.bloodmagic.suppressionRitual.info", "Suppresses fluids within its range - deactivating the ritual returns the fluids back to the world."); + add("ritual.bloodmagic.expulsionRitual.info", "Expels players from its range that are neither the owner nor have a bound blood orb in the chest on top of the master ritual stone."); + add("ritual.bloodmagic.zephyrRitual.info", "Picks up items within its range and places them into the linked chest."); + add("ritual.bloodmagic.upgradeRemoveRitual.info", "Removes all upgrades (and downgrades) from your Living Armor and gives you the corresponding Upgrade (and Downgrade) Tomes. These Tomes can be used to be applied to your Living Armor again."); + add("ritual.bloodmagic.armourEvolveRitual.info", "Increases the amount of maximum Upgrade Points on your Living Armor to 300."); + add("ritual.bloodmagic.animalGrowthRitual.info", "Increases the maturity rate of baby animals within its range."); + add("ritual.bloodmagic.forsakenSoulRitual.info", "Damages mobs within its damage range and when the mob dies a demon crystal within its crystal range will be grown."); + add("ritual.bloodmagic.crystalHarvestRitual.info", "Breaks Demon Will crystal clusters within its range, dropping the results on top of the crystals."); + add("ritual.bloodmagic.placerRitual.info", "Grabs blocks that are inside of the connected inventory and places them into the world."); + add("ritual.bloodmagic.fellingRitual.info", "A standard tree-cutting machine, this ritual will cut down all trees and leaves within its area and collect the drops."); + add("ritual.bloodmagic.pumpRitual.info", "Looks around the world and grabs fluids from the defined area. Will only remove and put the fluid into the connected tank if the tank has at least a bucket's worth of the same fluid."); + add("ritual.bloodmagic.altarBuilderRitual.info", "Builds an altar out of the components inside of the connected inventory."); + add("ritual.bloodmagic.portalRitual.info", "Creates a portal network based on the activator and the immediately surrounding blocks. Blocks can be changed after activation without changing the network of portals, and portals with the same \"key\" will link together."); + add("ritual.bloodmagic.meteorRitual.info", "Consumes an item inside of its item range to summon a meteor full of resources from the sky, aimed directly at the ritual."); + + add("ritual.bloodmagic.waterRitual.waterRange.info", "(Water) The area that the ritual will place water source blocks."); + add("ritual.bloodmagic.waterRitual.waterTank.info", "(Raw) The tank that the ritual will place water into."); + add("ritual.bloodmagic.lavaRitual.lavaRange.info", "(Lava) The area that the ritual will place lava source blocks."); + add("ritual.bloodmagic.lavaRitual.lavaTank.info", "(Raw) The tank that the ritual will place lava into."); + add("ritual.bloodmagic.lavaRitual.fireFuse.info", "(Vengeful) Entities in this range are afflicted by Fire Fuse."); + add("ritual.bloodmagic.lavaRitual.fireResist.info", "(Steadfast) Players in this range have Fire Resist applied."); + add("ritual.bloodmagic.lavaRitual.fireDamage.info", "(Corrosive) Entities within this range that are immune to fire damage are hurt proportional to the Will."); + add("ritual.bloodmagic.greenGroveRitual.growing.info", "(Growth) The area that the ritual will grow plants in."); + add("ritual.bloodmagic.greenGroveRitual.leech.info", "(Corrosive) Entities in this area have their life drained to grow nearby crops."); + add("ritual.bloodmagic.greenGroveRitual.hydrate.info", "(Steadfast) Blocks within this range are rehydrated into farmland, and seeds within the area are planted nearby."); + add("ritual.bloodmagic.jumpRitual.jumpRange.info", "(Jumping) Entities in this range will be launched in the air."); + add("ritual.bloodmagic.wellOfSufferingRitual.altar.info", "(Altar) This range defines the area that the ritual searches for the blood altar. Changing this will either expand or limit the range to a certain region."); + add("ritual.bloodmagic.wellOfSufferingRitual.damage.info", "(Damage) This defines where the ritual will damage a mob. All mobs inside of this range (except for players) will receive damage over time."); + add("ritual.bloodmagic.featheredKnifeRitual.altar.info", "(Altar) This range defines the area that the ritual searches for the blood altar. Changing this will either expand or limit the range to a certain region."); + add("ritual.bloodmagic.featheredKnifeRitual.damage.info", "(Damage) This defines where the ritual will damage a player. Players inside of this range will receive damage over time up to the specified limit."); + add("ritual.bloodmagic.regenerationRitual.heal.info", "(Healing) Entities within this range will receive a regeneration buff."); + add("ritual.bloodmagic.regenerationRitual.vampire.info", "(Vampirism) Mobs within this range have their health syphoned to heal players in the Healing range."); + add("ritual.bloodmagic.harvestRitual.harvestRange.info", "(Harvesting) Plants within this range will be harvested."); + add("ritual.bloodmagic.magneticRitual.placementRange.info", "(Placement) The range that the ritual will place the grabbed ores into."); + add("ritual.bloodmagic.crushingRitual.crushingRange.info", "(Crushing) The blocks that the ritual will break."); + add("ritual.bloodmagic.crushingRitual.chest.info", "(Chest) The location of the inventory that the ritual will place the broken blocks into."); + add("ritual.bloodmagic.fullStomachRitual.fillRange.info", "(Feeding) The range that the ritual will look at to feed players."); + add("ritual.bloodmagic.fullStomachRitual.chest.info", "(Chest) The location of the inventory that the ritual will grab food from to feed players in range."); + add("ritual.bloodmagic.interdictionRitual.interdictionRange.info", "(Push) The area of the ritual where mobs will be pushed. All mobs are pushed away from the master ritual stone, regardless of where this area is."); + add("ritual.bloodmagic.containmentRitual.containmentRange.info", "(Containment) The area of the ritual where mobs will be pulled. All mobs are pulled towards the master ritual stone, regardless of where this area is."); + add("ritual.bloodmagic.speedRitual.sanicRange.info", "(Speed) All entities within this area are launched in the direction of the arrow formed by the ritual."); + add("ritual.bloodmagic.suppressionRitual.suppressionRange.info", "(Suppress) All liquids within the range are suppressed."); + add("ritual.bloodmagic.expulsionRitual.expulsionRange.info", "(Expulsion) The area from which players that are not owner or have an orb in the chest will be teleported away from."); + add("ritual.bloodmagic.zephyrRitual.zephyrRange.info", "(Suction) Items within this range will be sucked into the linked chest."); + add("ritual.bloodmagic.zephyrRitual.chest.info", "(Chest) The location of the inventory that the ritual will place the picked up items into."); + add("ritual.bloodmagic.animalGrowthRitual.growing.info", "(Growth) Animals within this range will grow much faster."); + add("ritual.bloodmagic.animalGrowthRitual.chest.info", "(Chest) Chest for breeding items if properly augmented."); + add("ritual.bloodmagic.forsakenSoulRitual.crystal.info", "(Crystal) Demon Crystals in this range receive an increase in growth speed when a mob is killed by the ritual."); + add("ritual.bloodmagic.forsakenSoulRitual.damage.info", "(Damage) Mobs within this range will be slowly damaged, and when killed will grow the crystals."); + add("ritual.bloodmagic.crystalHarvestRitual.crystal.info", "(Crystal) All Demon Will crystal clusters have a single crystal broken off, spawning the crystal into the world. If there is only one crystal on the cluster, it will not break it."); + + add("ritual.bloodmagic.ellipseRitual.info", "Creates a hollow spheroid around the ritual using the blocks in the attached chest."); + add("ritual.bloodmagic.ellipseRitual.spheroidRange.info", "(Placement) The range that the ritual will place its blocks in. Spheroid is centered on the ritual - if one side is shorter than the side opposite the spheroid is truncated."); + add("ritual.bloodmagic.ellipseRitual.chest.info", "(Chest) The location of the inventory that the ritual will grab blocks from to place in the world."); + + add("ritual.bloodmagic.placerRitual.placerRange.info", "(Placement) The range that the ritual will place its blocks in."); + add("ritual.bloodmagic.placerRitual.chest.info", "(Chest) The location of the inventory that the ritual will grab blocks from to place in the world."); + add("ritual.bloodmagic.fellingRitual.fellingRange.info", "(Cutting) The range that the ritual will search out logs and leaves in order to cut down."); + add("ritual.bloodmagic.fellingRitual.chest.info", "(Chest) The location of the inventory that the ritual will place the results into."); + add("ritual.bloodmagic.pumpRitual.pumpRange.info", "(Pump) The region that the ritual will look for fluids to grab from the world."); + + add("tooltip.bloodmagic.ritualReader.currentState", "Current mode: %s"); + add("tooltip.bloodmagic.ritualReader.set_area", "Define Area"); + add("tooltip.bloodmagic.ritualReader.information", "Information"); + add("tooltip.bloodmagic.ritualReader.set_will_types", "Set Will Consumed"); + add("tooltip.bloodmagic.ritualReader.desc.set_area", "Right click on an active Master Ritual stone to cycle what area of the ritual you want to modify. Then click on the two corners of the new range you want to set the range."); + add("tooltip.bloodmagic.ritualReader.desc.information", "Right click on an active Master Ritual Stone to gather basic information about the ritual."); + add("tooltip.bloodmagic.ritualReader.desc.set_will_types", "Set the types of demon will that the ritual will consume from the aura by right clicking on the MRS with the same types of crystals on your hotbar."); + + // Living Armour - the 'u' is important, TehNut! + add("living_upgrade.bloodmagic.arrow_protect", "Pin Cushion"); + add("living_upgrade.bloodmagic.speed", "Quick Feet"); + add("living_upgrade.bloodmagic.digging", "Dwarven Might"); + add("living_upgrade.bloodmagic.poison_resist", "Poison Resistance"); + add("living_upgrade.bloodmagic.fire_resist", "Gift of Ignis"); + add("living_upgrade.bloodmagic.self_sacrifice", "Tough Palms"); + add("living_upgrade.bloodmagic.knockback_resist", "Body Builder"); + add("living_upgrade.bloodmagic.physical_protect", "Tough"); + add("living_upgrade.bloodmagic.health", "Healthy"); + add("living_upgrade.bloodmagic.melee_damage", "Fierce Strike"); + add("living_upgrade.bloodmagic.arrow_shot", "Trick Shot"); + add("living_upgrade.bloodmagic.step_assist", "Step Assist"); + add("living_upgrade.bloodmagic.grim_reaper", "Grim Reaper's Sprint"); + add("living_upgrade.bloodmagic.solar_powered", "Solar Powered"); + add("living_upgrade.bloodmagic.thaumRunicShielding", "Runic Shielding"); + add("living_upgrade.bloodmagic.revealing", "Revealing"); + add("living_upgrade.bloodmagic.experienced", "Experienced"); + add("living_upgrade.bloodmagic.jump", "Strong Legs"); + add("living_upgrade.bloodmagic.fall_protect", "Soft Fall"); + add("living_upgrade.bloodmagic.grave_digger", "Grave Digger"); + add("living_upgrade.bloodmagic.sprint_attack", "Charging Strike"); + add("living_upgrade.bloodmagic.critical_strike", "True Strike"); + add("living_upgrade.bloodmagic.elytra", "Elytra"); + add("living_upgrade.bloodmagic.night_sight", "Nocturnal Prowess"); + add("living_upgrade.bloodmagic.repair", "Repairing"); + + add("living_upgrade.bloodmagic.slowness", "Limp Leg"); + add("living_upgrade.bloodmagic.crippledArm", "Crippled Arm"); + add("living_upgrade.bloodmagic.slippery", "Loose Traction"); + add("living_upgrade.bloodmagic.battleHunger", "Battle Hungry"); + add("living_upgrade.bloodmagic.quenched", "Quenched"); + add("living_upgrade.bloodmagic.meleeDecrease", "Dulled Blade"); + add("living_upgrade.bloodmagic.digSlowdown", "Weakened Pick"); + add("living_upgrade.bloodmagic.stormTrooper", "Storm Trooper"); + add("living_upgrade.bloodmagic.slowHeal", "Diseased"); + add("living_upgrade.bloodmagic.disoriented", "Disoriented"); + + add("tooltip.bloodmagic.livingarmour.upgrade.level", "%s (Level %d)"); + add("tooltip.bloodmagic.livingarmour.upgrade.progress", "%s (%d/100)"); + add("tooltip.bloodmagic.livingarmour.upgrade.points", "Upgrade points: %s / %s"); + + add("tooltip.bloodmagic.livingarmour.extraExtraInfo", "&9-Hold shift + M for progress info-"); + + add("tooltip.bloodmagic.slate_vial", "A glass vial infused with a simple slate"); + add("tooltip.bloodmagic.blood_provider.slate.desc", "A simple ampoule containing 500LP"); + + add("chat.bloodmagic.living_upgrade_level_increase", "%s has leveled up to %d"); + + // Anointments. Doesn't have any spelling to be pedantic about. + add("anointment.bloodmagic.melee_damage", "Whetstone"); + add("anointment.bloodmagic.silk_touch", "Soft Touch"); + add("anointment.bloodmagic.fortune", "Fortunate"); + add("anointment.bloodmagic.holy_water", "Holy Light"); + add("anointment.bloodmagic.hidden_knowledge", "Miner's Secrets"); + add("anointment.bloodmagic.quick_draw", "Deft Hands"); + add("anointment.bloodmagic.bow_power", "Heavy Shot"); + add("anointment.bloodmagic.looting", "Plundering"); + add("anointment.bloodmagic.smelting", "Heated Tool"); + + // Guide + add("guide.bloodmagic.name", "Sanguine Scientiem"); + add("guide.bloodmagic.landing_text", "\"It is my dear hope that by holding this tome in your hands, I may impart the knowledge of the lost art that is Blood Magic\"$(br)$(o)- Magus Arcana$()"); + + // Keybinds + add("bloodmagic.keybind.open_holding", "Open Sigil of Holding"); + add("bloodmagic.keybind.cycle_holding_pos", "Cycle Sigil (+)"); + add("bloodmagic.keybind.cycle_holding_neg", "Cycle Sigil (-)"); + + // Block names + addBlock(BloodMagicBlocks.BLANK_RUNE, "Blank Rune"); + addBlock(BloodMagicBlocks.SPEED_RUNE, "Speed Rune"); + addBlock(BloodMagicBlocks.SACRIFICE_RUNE, "Rune of Sacrifice"); + addBlock(BloodMagicBlocks.SELF_SACRIFICE_RUNE, "Rune of Self Sacrifice"); + addBlock(BloodMagicBlocks.DISPLACEMENT_RUNE, "Displacement Rune"); + addBlock(BloodMagicBlocks.CAPACITY_RUNE, "Rune of Capacity"); + addBlock(BloodMagicBlocks.AUGMENTED_CAPACITY_RUNE, "Rune of Augmented Capacity"); + addBlock(BloodMagicBlocks.ORB_RUNE, "Rune of the Orb"); + addBlock(BloodMagicBlocks.ACCELERATION_RUNE, "Acceleration Rune"); + addBlock(BloodMagicBlocks.CHARGING_RUNE, "Charging Rune"); + addBlock(BloodMagicBlocks.BLOOD_ALTAR, "Blood Altar"); + addBlock(BloodMagicBlocks.SOUL_FORGE, "Hellfire Forge"); + addBlock(BloodMagicBlocks.BLANK_RITUAL_STONE, "Ritual Stone"); + addBlock(BloodMagicBlocks.AIR_RITUAL_STONE, "Air Ritual Stone"); + addBlock(BloodMagicBlocks.WATER_RITUAL_STONE, "Water Ritual Stone"); + addBlock(BloodMagicBlocks.FIRE_RITUAL_STONE, "Fire Ritual Stone"); + addBlock(BloodMagicBlocks.EARTH_RITUAL_STONE, "Earth Ritual Stone"); + addBlock(BloodMagicBlocks.DUSK_RITUAL_STONE, "Dusk Ritual Stone"); + addBlock(BloodMagicBlocks.DAWN_RITUAL_STONE, "Dawn Ritual Stone"); + addBlock(BloodMagicBlocks.MASTER_RITUAL_STONE, "Master Ritual Stone"); + + addBlock(BloodMagicBlocks.ALCHEMICAL_REACTION_CHAMBER, "Alchemical Reaction Chamber"); + addBlock(BloodMagicBlocks.ALCHEMY_TABLE, "Alchemy Table"); + addBlock(BloodMagicBlocks.INCENSE_ALTAR, "Incense Altar"); + + addBlock(BloodMagicBlocks.BLOODSTONE, "Large Bloodstone Brick"); + addBlock(BloodMagicBlocks.BLOODSTONE_BRICK, "Bloodstone Brick"); + + addBlock(BloodMagicBlocks.RAW_CRYSTAL_BLOCK, "Raw Crystal Cluster"); + addBlock(BloodMagicBlocks.CORROSIVE_CRYSTAL_BLOCK, "Corrosive Crystal Cluster"); + addBlock(BloodMagicBlocks.DESTRUCTIVE_CRYSTAL_BLOCK, "Destructive Crystal Cluster"); + addBlock(BloodMagicBlocks.VENGEFUL_CRYSTAL_BLOCK, "Vengeful Crystal Cluster"); + addBlock(BloodMagicBlocks.STEADFAST_CRYSTAL_BLOCK, "Steadfast Crystal Cluster"); + + addBlock(BloodMagicBlocks.DEMON_CRUCIBLE, "Demon Crucible"); + addBlock(BloodMagicBlocks.DEMON_CRYSTALLIZER, "Demon Crystallizer"); + + addBlock(BloodMagicBlocks.WOOD_PATH, "Wooden Path"); + addBlock(BloodMagicBlocks.WOOD_TILE_PATH, "Tiled Wooden Path"); + addBlock(BloodMagicBlocks.STONE_PATH, "Stone Path"); + addBlock(BloodMagicBlocks.STONE_TILE_PATH, "Tiled Stone Path"); + addBlock(BloodMagicBlocks.WORN_STONE_PATH, "Worn Stone Path"); + addBlock(BloodMagicBlocks.WORN_STONE_TILE_PATH, "Tiled Worn Stone Path"); + addBlock(BloodMagicBlocks.OBSIDIAN_PATH, "Obsidian Path"); + addBlock(BloodMagicBlocks.OBSIDIAN_TILE_PATH, "Tiled Obsidian Path"); + + addBlock(BloodMagicBlocks.DUNGEON_BRICK_1, "Demon Bricks"); + addBlock(BloodMagicBlocks.DUNGEON_BRICK_2, "Offset Demon Bricks"); + addBlock(BloodMagicBlocks.DUNGEON_BRICK_3, "Long Demon Bricks"); + addBlock(BloodMagicBlocks.DUNGEON_SMALL_BRICK, "Small Demon Bricks"); + addBlock(BloodMagicBlocks.DUNGEON_BRICK_ASSORTED, "Assorted Demon Bricks"); + + addBlock(BloodMagicBlocks.DUNGEON_STONE, "Demon Stone"); + addBlock(BloodMagicBlocks.DUNGEON_POLISHED_STONE, "Polished Demon Stone"); + addBlock(BloodMagicBlocks.DUNGEON_TILE, "Demon Stone Tiles"); + addBlock(BloodMagicBlocks.DUNGEON_TILE_SPECIAL, "Accented Demon Stone Tiles"); + + addBlock(BloodMagicBlocks.DUNGEON_BRICK_GATE, "Demon Brick Gate"); + addBlock(BloodMagicBlocks.DUNGEON_POLISHED_GATE, "Demon Stone Gate"); + + addBlock(BloodMagicBlocks.DUNGEON_BRICK_STAIRS, "Demon Brick Stairs"); + addBlock(BloodMagicBlocks.DUNGEON_POLISHED_STAIRS, "Demon Stone Stairs"); + + addBlock(BloodMagicBlocks.DUNGEON_BRICK_WALL, "Demon Brick Wall"); + addBlock(BloodMagicBlocks.DUNGEON_POLISHED_WALL, "Demon Stone Wall"); + + addBlock(BloodMagicBlocks.DUNGEON_PILLAR_CAP, "Demon Stone Pillar Cap"); + addBlock(BloodMagicBlocks.DUNGEON_PILLAR_CENTER, "Demon Stone Pillar"); + addBlock(BloodMagicBlocks.DUNGEON_PILLAR_SPECIAL, "Accented Demon Stone Pillar"); + addBlock(BloodMagicBlocks.DUNGEON_EYE, "Demon Eye"); + + addBlock(BloodMagicBlocks.DUNGEON_ORE, "Demonite"); + + addBlock(BloodMagicBlocks.SHAPED_CHARGE, "Shaped Charge"); + addBlock(BloodMagicBlocks.DEFORESTER_CHARGE, "Deforester Charge"); + addBlock(BloodMagicBlocks.VEINMINE_CHARGE, "Controlled Charge"); + addBlock(BloodMagicBlocks.FUNGAL_CHARGE, "Fungal Charge"); + + // Item names + addItem(BloodMagicItems.WEAK_BLOOD_ORB, "Weak Blood Orb"); + addItem(BloodMagicItems.APPRENTICE_BLOOD_ORB, "Apprentice Blood Orb"); + addItem(BloodMagicItems.MAGICIAN_BLOOD_ORB, "Magician Blood Orb"); + addItem(BloodMagicItems.MASTER_BLOOD_ORB, "Master Blood Orb"); + addItem(BloodMagicItems.DIVINATION_SIGIL, "Divination Sigil"); + addItem(BloodMagicItems.WATER_SIGIL, "Water Sigil"); + addItem(BloodMagicItems.LAVA_SIGIL, "Lava Sigil"); + addItem(BloodMagicItems.VOID_SIGIL, "Void Sigil"); + addItem(BloodMagicItems.GREEN_GROVE_SIGIL, "Sigil of the Green Grove"); + addItem(BloodMagicItems.FAST_MINER_SIGIL, "Sigil of the Fast Miner"); + addItem(BloodMagicItems.MAGNETISM_SIGIL, "Sigil of Magnetism"); + addItem(BloodMagicItems.ICE_SIGIL, "Sigil of the Frozen Lake"); + addItem(BloodMagicItems.AIR_SIGIL, "Air Sigil"); + addItem(BloodMagicItems.BLOOD_LIGHT_SIGIL, "Sigil of the Blood Lamp"); + addItem(BloodMagicItems.SEER_SIGIL, "Seer's Sigil"); + addItem(BloodMagicItems.HOLDING_SIGIL, "Sigil of Holding"); + + addItem(BloodMagicBlocks.LIFE_ESSENCE_BUCKET, "Bucket of Life"); + addItem(BloodMagicItems.ARCANE_ASHES, "Arcane Ashes"); + addItem(BloodMagicItems.SLATE, "Blank Slate"); + addItem(BloodMagicItems.REINFORCED_SLATE, "Reinforced Slate"); + addItem(BloodMagicItems.IMBUED_SLATE, "Imbued Slate"); + addItem(BloodMagicItems.DEMONIC_SLATE, "Demonic Slate"); + addItem(BloodMagicItems.ETHEREAL_SLATE, "Ethereal Slate"); + + addItem(BloodMagicItems.DAGGER_OF_SACRIFICE, "Dagger of Sacrifice"); + addItem(BloodMagicItems.SACRIFICIAL_DAGGER, "Sacrificial Knife"); + addItem(BloodMagicItems.LAVA_CRYSTAL, "Lava Crystal"); + + addItem(BloodMagicItems.REAGENT_WATER, "Water Reagent"); + addItem(BloodMagicItems.REAGENT_LAVA, "Lava Reagent"); + addItem(BloodMagicItems.REAGENT_FAST_MINER, "Mining Reagent"); + addItem(BloodMagicItems.REAGENT_GROWTH, "Growth Reagent"); + addItem(BloodMagicItems.REAGENT_VOID, "Void Reagent"); + addItem(BloodMagicItems.REAGENT_MAGNETISM, "Magnetism Reagent"); + addItem(BloodMagicItems.REAGENT_AIR, "Air Reagent"); + addItem(BloodMagicItems.REAGENT_BLOOD_LIGHT, "Blood Lamp Reagent"); + addItem(BloodMagicItems.REAGENT_SIGHT, "Sight Reagent"); + addItem(BloodMagicItems.REAGENT_BINDING, "Binding Reagent"); + addItem(BloodMagicItems.REAGENT_HOLDING, "Holding Reagent"); + + addItem(BloodMagicItems.PETTY_GEM, "Petty Tartaric Gem"); + addItem(BloodMagicItems.LESSER_GEM, "Lesser Tartaric Gem"); + addItem(BloodMagicItems.COMMON_GEM, "Common Tartaric Gem"); + addItem(BloodMagicItems.GREATER_GEM, "Greater Tartaric Gem"); + addItem(BloodMagicItems.MONSTER_SOUL_RAW, "Demon Will"); + addItem(BloodMagicItems.MONSTER_SOUL_CORROSIVE, "Demon Will"); + addItem(BloodMagicItems.MONSTER_SOUL_DESTRUCTIVE, "Demon Will"); + addItem(BloodMagicItems.MONSTER_SOUL_STEADFAST, "Demon Will"); + addItem(BloodMagicItems.MONSTER_SOUL_VENGEFUL, "Demon Will"); + addItem(BloodMagicItems.SOUL_SNARE, "Soul Snare"); + addItem(BloodMagicItems.SENTIENT_SWORD, "Sentient Sword"); + addItem(BloodMagicItems.SENTIENT_AXE, "Sentient Axe"); + addItem(BloodMagicItems.SENTIENT_PICKAXE, "Sentient Pickaxe"); + addItem(BloodMagicItems.SENTIENT_SHOVEL, "Sentient Shovel"); + addItem(BloodMagicItems.SENTIENT_SCYTHE, "Sentient Scythe"); + + addItem(BloodMagicItems.WEAK_ACTIVATION_CRYSTAL, "Weak Activation Crystal"); + addItem(BloodMagicItems.AWAKENED_ACTIVATION_CRYSTAL, "Awakened Activation Crystal"); + addItem(BloodMagicItems.CREATIVE_ACTIVATION_CRYSTAL, "Creative Activation Crystal"); + addItem(BloodMagicItems.WATER_INSCRIPTION_TOOL, "Inscription Tool: Water"); + addItem(BloodMagicItems.FIRE_INSCRIPTION_TOOL, "Inscription Tool: Fire"); + addItem(BloodMagicItems.EARTH_INSCRIPTION_TOOL, "Inscription Tool: Earth"); + addItem(BloodMagicItems.AIR_INSCRIPTION_TOOL, "Inscription Tool: Air"); + addItem(BloodMagicItems.DUSK_INSCRIPTION_TOOL, "Inscription Tool: Dusk"); + + addItem(BloodMagicItems.BASE_RITUAL_DIVINER, "Ritual Diviner"); + addItem(BloodMagicItems.DUSK_RITUAL_DIVINER, "Ritual Diviner [Dusk]"); + addItem(BloodMagicItems.RITUAL_READER, "Ritual Tinkerer"); + + addItem(BloodMagicItems.WEAK_BLOOD_SHARD, "Weak Blood Shard"); + addItem(BloodMagicItems.RAW_CRYSTAL, "Demon Will Crystal"); + addItem(BloodMagicItems.CORROSIVE_CRYSTAL, "Corrosive Will Crystal"); + addItem(BloodMagicItems.DESTRUCTIVE_CRYSTAL, "Destructive Will Crystal"); + addItem(BloodMagicItems.VENGEFUL_CRYSTAL, "Vengeful Will Crystal"); + addItem(BloodMagicItems.STEADFAST_CRYSTAL, "Steadfast Will Crystal"); + + addItem(BloodMagicItems.SANGUINE_REVERTER, "Sanguine Reverter"); + addItem(BloodMagicItems.PRIMITIVE_FURNACE_CELL, "Primitive Fuel Cell"); + + addItem(BloodMagicItems.PRIMITIVE_CRYSTALLINE_RESONATOR, "Primitive Resonator"); + addItem(BloodMagicItems.CRYSTALLINE_RESONATOR, "Crystalline Resonator"); + + addItem(BloodMagicItems.PRIMITIVE_HYDRATION_CELL, "Primitive Hydration Cell"); + addItem(BloodMagicItems.PRIMITIVE_EXPLOSIVE_CELL, "Primitive Explosive Cell"); + addItem(BloodMagicItems.EXPLOSIVE_POWDER, "Explosive Powder"); + + addItem(BloodMagicItems.BASIC_CUTTING_FLUID, "Basic Cutting Fluid"); + + addItem(BloodMagicItems.EXPERIENCE_TOME, "Tome of Peritia"); + + addItem(BloodMagicItems.LIVING_HELMET, "Living Helmet"); + addItem(BloodMagicItems.LIVING_PLATE, "Living Chestplate"); + addItem(BloodMagicItems.LIVING_LEGGINGS, "Living Leggings"); + addItem(BloodMagicItems.LIVING_BOOTS, "Living Boots"); + + addItem(BloodMagicItems.LIVING_TOME, "Living Armour Upgrade Tome"); + + addItem(BloodMagicItems.THROWING_DAGGER, "Iron Throwing Dagger"); + addItem(BloodMagicItems.THROWING_DAGGER_SYRINGE, "Syringe Throwing Dagger"); + addItem(BloodMagicItems.SLATE_AMPOULE, "Slate Ampoule"); + + // Anointment Items + addItem(BloodMagicItems.SLATE_VIAL, "Slate-infused Vial"); + addItem(BloodMagicItems.MELEE_DAMAGE_ANOINTMENT, "Honing Oil"); + addItem(BloodMagicItems.SILK_TOUCH_ANOINTMENT, "Soft Coating"); + addItem(BloodMagicItems.FORTUNE_ANOINTMENT, "Fortuna Extract"); + addItem(BloodMagicItems.HOLY_WATER_ANOINTMENT, "Holy Water"); + addItem(BloodMagicItems.HIDDEN_KNOWLEDGE_ANOINTMENT, "Miner's Secrets"); + addItem(BloodMagicItems.QUICK_DRAW_ANOINTMENT, "Dexterity Alkahest"); + addItem(BloodMagicItems.BOW_POWER_ANOINTMENT, "Iron Tip"); + addItem(BloodMagicItems.LOOTING_ANOINTMENT, "Plunderer's Glint"); + addItem(BloodMagicItems.SMELTING_ANOINTMENT, "Slow-burning Oil"); + + // Alchemy Items + addItem(BloodMagicItems.PLANT_OIL, "Plant Oil"); + + // Sands + addItem(BloodMagicItems.COAL_SAND, "Coal Sand"); + addItem(BloodMagicItems.IRON_SAND, "Iron Sand"); + addItem(BloodMagicItems.GOLD_SAND, "Gold Sand"); + addItem(BloodMagicItems.NETHERITE_SCRAP_SAND, "Netherite Scrap Sand"); + addItem(BloodMagicItems.SULFUR, "Sulfur"); + addItem(BloodMagicItems.SALTPETER, "Saltpeter"); + + // Fragments + addItem(BloodMagicItems.IRON_FRAGMENT, "Iron Ore Fragment"); + addItem(BloodMagicItems.GOLD_FRAGMENT, "Gold Ore Fragment"); + addItem(BloodMagicItems.NETHERITE_SCRAP_FRAGMENT, "Ancient Debris Fragment"); + + // Gravels + addItem(BloodMagicItems.IRON_GRAVEL, "Iron Gravel"); + addItem(BloodMagicItems.GOLD_GRAVEL, "Gold Gravel"); + addItem(BloodMagicItems.NETHERITE_SCRAP_GRAVEL, "Ancient Debris Gravel"); + +// addItem(BloodMagicItems , ""); + + // JEI + add("jei.bloodmagic.recipe.minimumsouls", "Minimum: %s Will"); + add("jei.bloodmagic.recipe.soulsdrained", "Drained: %s Will"); + add("jei.bloodmagic.recipe.requiredlp", "LP: %d"); + add("jei.bloodmagic.recipe.requiredtier", "Tier: %d"); + add("jei.bloodmagic.recipe.consumptionrate", "Consumption: %s LP/t"); + add("jei.bloodmagic.recipe.drainrate", "Drain: %s LP/t"); + + add("jei.bloodmagic.recipe.lpDrained", "Drained: %s LP"); + add("jei.bloodmagic.recipe.ticksRequired", "Time: %sTicks"); + + add("jei.bloodmagic.recipe.altar", "Blood Altar"); + add("jei.bloodmagic.recipe.soulforge", "Hellfire Forge"); + add("jei.bloodmagic.recipe.alchemyarraycrafting", "Alchemy Array"); + add("jei.bloodmagic.recipe.arc", "ARC Recipe"); + add("jei.bloodmagic.recipe.arcfurnace", "ARC Furnace Recipe"); + add("jei.bloodmagic.recipe.alchemytable", "Alchemy Table"); + + // Chat + add("chat.bloodmagic.ritual.weak", "You feel a push, but are too weak to perform this ritual."); + add("chat.bloodmagic.ritual.prevent", "The ritual is actively resisting you!"); + add("chat.bloodmagic.ritual.activate", "A rush of energy flows through the ritual!"); + add("chat.bloodmagic.ritual.notValid", "You feel that these runes are not configured correctly..."); + + // GUI + add("gui.bloodmagic.empty", "Empty"); + + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLootTable.java b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLootTable.java new file mode 100644 index 00000000..e2a6c743 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLootTable.java @@ -0,0 +1,190 @@ +package wayoftime.bloodmagic.common.data; + +import java.util.List; +import java.util.Map; +import java.util.function.BiConsumer; +import java.util.function.Consumer; +import java.util.function.Supplier; +import java.util.stream.Collectors; + +import com.google.common.collect.ImmutableList; +import com.mojang.datafixers.util.Pair; + +import net.minecraft.advancements.criterion.StatePropertiesPredicate; +import net.minecraft.block.Block; +import net.minecraft.block.Blocks; +import net.minecraft.block.CropsBlock; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.LootTableProvider; +import net.minecraft.data.loot.BlockLootTables; +import net.minecraft.data.loot.ChestLootTables; +import net.minecraft.item.Item; +import net.minecraft.item.Items; +import net.minecraft.loot.ConstantRange; +import net.minecraft.loot.ItemLootEntry; +import net.minecraft.loot.LootParameterSet; +import net.minecraft.loot.LootParameterSets; +import net.minecraft.loot.LootPool; +import net.minecraft.loot.LootTable; +import net.minecraft.loot.LootTableManager; +import net.minecraft.loot.ValidationTracker; +import net.minecraft.loot.conditions.BlockStateProperty; +import net.minecraft.loot.conditions.ILootCondition; +import net.minecraft.loot.functions.EnchantWithLevels; +import net.minecraft.loot.functions.SetCount; +import net.minecraft.state.Property; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.RegistryObject; +import net.minecraftforge.registries.ForgeRegistries; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.block.BlockDemonCrystal; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.item.BloodMagicItems; + +public class GeneratorLootTable extends LootTableProvider +{ + public GeneratorLootTable(DataGenerator dataGeneratorIn) + { + super(dataGeneratorIn); + } + + @Override + protected List>>, LootParameterSet>> getTables() + { + return ImmutableList.of(Pair.of(BMBlocks::new, LootParameterSets.BLOCK), Pair.of(BMLootTables::new, LootParameterSets.CHEST)); + } + + private static class BMLootTables extends ChestLootTables + { + @Override + public void accept(BiConsumer acceptor) + { + acceptor.accept(BloodMagic.rl("test"), testLootTableGeneration()); + } + + private LootTable.Builder testLootTableGeneration() + { + LootTable.Builder table = LootTable.builder(); + LootPool.Builder pool = LootPool.builder().name("test").addEntry(ItemLootEntry.builder(Items.BOOK).weight(10).acceptFunction(EnchantWithLevels.func_215895_a(ConstantRange.of(30)).func_216059_e())); + + table.addLootPool(pool); +// table.build(); + + return table; + } + } + + private static class BMBlocks extends BlockLootTables + { + @Override + protected void addTables() + { + for (RegistryObject block : BloodMagicBlocks.BASICBLOCKS.getEntries()) + { + this.registerDropSelfLootTable(block.get()); + } + + for (RegistryObject block : BloodMagicBlocks.DUNGEONBLOCKS.getEntries()) + { + this.registerDropSelfLootTable(block.get()); + } + + registerDropSelfLootTable(BloodMagicBlocks.BLOOD_ALTAR.get()); + registerNoDropLootTable(BloodMagicBlocks.ALCHEMY_ARRAY.get()); + registerNoDropLootTable(BloodMagicBlocks.BLOOD_LIGHT.get()); + registerDropSelfLootTable(BloodMagicBlocks.SOUL_FORGE.get()); + registerDropSelfLootTable(BloodMagicBlocks.BLANK_RITUAL_STONE.get()); + registerDropping(BloodMagicBlocks.AIR_RITUAL_STONE.get(), BloodMagicBlocks.BLANK_RITUAL_STONE.get()); + registerDropping(BloodMagicBlocks.WATER_RITUAL_STONE.get(), BloodMagicBlocks.BLANK_RITUAL_STONE.get()); + registerDropping(BloodMagicBlocks.FIRE_RITUAL_STONE.get(), BloodMagicBlocks.BLANK_RITUAL_STONE.get()); + registerDropping(BloodMagicBlocks.EARTH_RITUAL_STONE.get(), BloodMagicBlocks.BLANK_RITUAL_STONE.get()); + registerDropping(BloodMagicBlocks.DUSK_RITUAL_STONE.get(), BloodMagicBlocks.BLANK_RITUAL_STONE.get()); + registerDropping(BloodMagicBlocks.DAWN_RITUAL_STONE.get(), BloodMagicBlocks.BLANK_RITUAL_STONE.get()); + registerDropSelfLootTable(BloodMagicBlocks.ALCHEMY_TABLE.get()); + registerDropSelfLootTable(BloodMagicBlocks.ALCHEMICAL_REACTION_CHAMBER.get()); + registerDropSelfLootTable(BloodMagicBlocks.DEMON_CRUCIBLE.get()); + registerDropSelfLootTable(BloodMagicBlocks.DEMON_CRYSTALLIZER.get()); + registerDropSelfLootTable(BloodMagicBlocks.INCENSE_ALTAR.get()); +// registerNoDropLootTable(BloodMagicBlocks.RAW_CRYSTAL_BLOCK.get()); + registerDropping(BloodMagicBlocks.NETHER_SOIL.get(), Blocks.NETHERRACK); + + registerDropCrystalsLootTable(BloodMagicBlocks.RAW_CRYSTAL_BLOCK.get(), BloodMagicItems.RAW_CRYSTAL.get()); + registerDropCrystalsLootTable(BloodMagicBlocks.CORROSIVE_CRYSTAL_BLOCK.get(), BloodMagicItems.CORROSIVE_CRYSTAL.get()); + registerDropCrystalsLootTable(BloodMagicBlocks.DESTRUCTIVE_CRYSTAL_BLOCK.get(), BloodMagicItems.DESTRUCTIVE_CRYSTAL.get()); + registerDropCrystalsLootTable(BloodMagicBlocks.VENGEFUL_CRYSTAL_BLOCK.get(), BloodMagicItems.VENGEFUL_CRYSTAL.get()); + registerDropCrystalsLootTable(BloodMagicBlocks.STEADFAST_CRYSTAL_BLOCK.get(), BloodMagicItems.STEADFAST_CRYSTAL.get()); + + registerDropSelfLootTable(BloodMagicBlocks.DUNGEON_BRICK_ASSORTED.get()); + registerDropSelfLootTable(BloodMagicBlocks.DUNGEON_STONE.get()); + registerDropSelfLootTable(BloodMagicBlocks.DUNGEON_BRICK_STAIRS.get()); + registerDropSelfLootTable(BloodMagicBlocks.DUNGEON_POLISHED_STAIRS.get()); + registerDropSelfLootTable(BloodMagicBlocks.DUNGEON_PILLAR_CENTER.get()); + registerDropSelfLootTable(BloodMagicBlocks.DUNGEON_PILLAR_SPECIAL.get()); + registerDropSelfLootTable(BloodMagicBlocks.DUNGEON_PILLAR_CAP.get()); + registerDropSelfLootTable(BloodMagicBlocks.DUNGEON_BRICK_WALL.get()); + registerDropSelfLootTable(BloodMagicBlocks.DUNGEON_POLISHED_WALL.get()); + registerDropSelfLootTable(BloodMagicBlocks.DUNGEON_BRICK_GATE.get()); + registerDropSelfLootTable(BloodMagicBlocks.DUNGEON_POLISHED_GATE.get()); + + registerDropSelfLootTable(BloodMagicBlocks.MIMIC.get()); + registerDropSelfLootTable(BloodMagicBlocks.ETHEREAL_MIMIC.get()); + + registerCropDropLootTable(BloodMagicBlocks.GROWING_DOUBT.get(), BloodMagicItems.WEAK_BLOOD_SHARD.get()); + + registerNoDropLootTable(BloodMagicBlocks.SHAPED_CHARGE.get()); + registerNoDropLootTable(BloodMagicBlocks.DEFORESTER_CHARGE.get()); + registerNoDropLootTable(BloodMagicBlocks.VEINMINE_CHARGE.get()); + registerNoDropLootTable(BloodMagicBlocks.FUNGAL_CHARGE.get()); + } + + private void registerNoDropLootTable(Block block) + { + LootPool.Builder builder = LootPool.builder().name(block.getRegistryName().toString()); + this.registerLootTable(block, LootTable.builder().addLootPool(builder)); + } + + private void registerCropDropLootTable(Block block, Item item) + { + LootTable.Builder builder = LootTable.builder(); + + for (int i = 0; i < 7; i++) + { + ILootCondition.IBuilder harvestAge = BlockStateProperty.builder(block).fromProperties(StatePropertiesPredicate.Builder.newBuilder().withIntProp(CropsBlock.AGE, i)); + builder = builder.addLootPool(LootPool.builder().addEntry(ItemLootEntry.builder(item).acceptFunction(SetCount.builder(ConstantRange.of(1))).acceptCondition(harvestAge))); + } + + this.registerLootTable(block, builder); + } + + private void registerDropCrystalsLootTable(Block block, Item item) + { + LootTable.Builder builder = LootTable.builder(); + + for (int i = 0; i < 7; i++) + { + ILootCondition.IBuilder harvestAge = BlockStateProperty.builder(block).fromProperties(StatePropertiesPredicate.Builder.newBuilder().withIntProp(BlockDemonCrystal.AGE, i)); + builder = builder.addLootPool(LootPool.builder().addEntry(ItemLootEntry.builder(item).acceptFunction(SetCount.builder(ConstantRange.of(i + 1))).acceptCondition(harvestAge))); + } + + this.registerLootTable(block, builder); + } + + protected static & IStringSerializable> LootTable.Builder droppingWhen(Block block, Property property, T value) + { + return LootTable.builder().addLootPool(withSurvivesExplosion(block, LootPool.builder().rolls(ConstantRange.of(1)).addEntry(ItemLootEntry.builder(block).acceptCondition(BlockStateProperty.builder(block).fromProperties(StatePropertiesPredicate.Builder.newBuilder().withProp(property, value)))))); + } + + @Override + protected Iterable getKnownBlocks() + { + return ForgeRegistries.BLOCKS.getValues().stream().filter(b -> b.getRegistryName().getNamespace().equals(BloodMagic.MODID)).collect(Collectors.toList()); + } + } + + @Override + protected void validate(Map map, ValidationTracker validationtracker) + { + map.forEach((name, table) -> LootTableManager.validateLootTable(validationtracker, name, table)); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/data/recipe/BaseRecipeProvider.java b/src/main/java/wayoftime/bloodmagic/common/data/recipe/BaseRecipeProvider.java new file mode 100644 index 00000000..e8e9ead3 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/data/recipe/BaseRecipeProvider.java @@ -0,0 +1,44 @@ +package wayoftime.bloodmagic.common.data.recipe; + +import java.util.Collections; +import java.util.List; +import java.util.function.Consumer; + +import net.minecraft.data.DataGenerator; +import net.minecraft.data.IFinishedRecipe; +import net.minecraft.data.RecipeProvider; +import wayoftime.bloodmagic.common.recipe.ISubRecipeProvider; + +public abstract class BaseRecipeProvider extends RecipeProvider +{ + private final String modid; + + public BaseRecipeProvider(DataGenerator gen, String modid) + { + super(gen); + this.modid = modid; + } + + @Override + public String getName() + { + return super.getName() + modid; + } + + @Override + protected void registerRecipes(Consumer consumer) + { + getSubRecipeProviders().forEach(subRecipeProvider -> subRecipeProvider.addRecipes(consumer)); + } + + /** + * Gets all the sub/offloaded recipe providers that this recipe provider has. + * + * @implNote This is only called once per provider so there is no need to bother + * caching the list that this returns + */ + protected List getSubRecipeProviders() + { + return Collections.emptyList(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/data/recipe/BloodMagicRecipeBuilder.java b/src/main/java/wayoftime/bloodmagic/common/data/recipe/BloodMagicRecipeBuilder.java new file mode 100644 index 00000000..21098bdf --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/data/recipe/BloodMagicRecipeBuilder.java @@ -0,0 +1,145 @@ +package wayoftime.bloodmagic.common.data.recipe; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + +import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.AdvancementRewards; +import net.minecraft.advancements.ICriterionInstance; +import net.minecraft.advancements.IRequirementsStrategy; +import net.minecraft.advancements.criterion.RecipeUnlockedTrigger; +import net.minecraft.data.IFinishedRecipe; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.common.crafting.conditions.ICondition; +import net.minecraftforge.registries.ForgeRegistries; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.util.Constants; + +public abstract class BloodMagicRecipeBuilder> +{ + + protected static ResourceLocation bmSerializer(String name) + { + return new ResourceLocation(BloodMagic.MODID, name); + } + + protected final List conditions = new ArrayList<>(); + protected final Advancement.Builder advancementBuilder = Advancement.Builder.builder(); + protected final ResourceLocation serializerName; + + protected BloodMagicRecipeBuilder(ResourceLocation serializerName) + { + this.serializerName = serializerName; + } + + public BUILDER addCriterion(RecipeCriterion criterion) + { + return addCriterion(criterion.name, criterion.criterion); + } + + public BUILDER addCriterion(String name, ICriterionInstance criterion) + { + advancementBuilder.withCriterion(name, criterion); + return (BUILDER) this; + } + + public BUILDER addCondition(ICondition condition) + { + conditions.add(condition); + return (BUILDER) this; + } + + protected boolean hasCriteria() + { + return !advancementBuilder.getCriteria().isEmpty(); + } + + protected abstract RecipeResult getResult(ResourceLocation id); + + protected void validate(ResourceLocation id) + { + } + + public void build(Consumer consumer, ResourceLocation id) + { + validate(id); + if (hasCriteria()) + { + // If there is a way to "unlock" this recipe then add an advancement with the + // criteria + advancementBuilder.withParentId(new ResourceLocation("recipes/root")).withCriterion("has_the_recipe", RecipeUnlockedTrigger.create(id)).withRewards(AdvancementRewards.Builder.recipe(id)).withRequirementsStrategy(IRequirementsStrategy.OR); + } + consumer.accept(getResult(id)); + } + + protected abstract class RecipeResult implements IFinishedRecipe + { + + private final ResourceLocation id; + + public RecipeResult(ResourceLocation id) + { + this.id = id; + } + + @Override + public JsonObject getRecipeJson() + { + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty(Constants.JSON.TYPE, serializerName.toString()); + if (!conditions.isEmpty()) + { + JsonArray conditionsArray = new JsonArray(); + for (ICondition condition : conditions) + { + conditionsArray.add(CraftingHelper.serialize(condition)); + } + jsonObject.add(Constants.JSON.CONDITIONS, conditionsArray); + } + this.serialize(jsonObject); + return jsonObject; + } + + @Nonnull + @Override + public IRecipeSerializer getSerializer() + { + // Note: This may be null if something is screwed up but this method isn't + // actually used so it shouldn't matter + // and in fact it will probably be null if only the API is included. But again, + // as we manually just use + // the serializer's name this should not effect us + return ForgeRegistries.RECIPE_SERIALIZERS.getValue(serializerName); + } + + @Nonnull + @Override + public ResourceLocation getID() + { + return this.id; + } + + @Nullable + @Override + public JsonObject getAdvancementJson() + { + return hasCriteria() ? advancementBuilder.serialize() : null; + } + + @Nullable + @Override + public ResourceLocation getAdvancementID() + { + return new ResourceLocation(id.getNamespace(), "recipes/" + id.getPath()); + } + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/data/recipe/BloodMagicRecipeProvider.java b/src/main/java/wayoftime/bloodmagic/common/data/recipe/BloodMagicRecipeProvider.java new file mode 100644 index 00000000..af4c0c89 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/data/recipe/BloodMagicRecipeProvider.java @@ -0,0 +1,27 @@ +package wayoftime.bloodmagic.common.data.recipe; + +import java.util.Arrays; +import java.util.List; + +import net.minecraft.data.DataGenerator; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.recipe.ARCRecipeProvider; +import wayoftime.bloodmagic.common.recipe.AlchemyArrayRecipeProvider; +import wayoftime.bloodmagic.common.recipe.AlchemyTableRecipeProvider; +import wayoftime.bloodmagic.common.recipe.BloodAltarRecipeProvider; +import wayoftime.bloodmagic.common.recipe.ISubRecipeProvider; +import wayoftime.bloodmagic.common.recipe.TartaricForgeRecipeProvider; + +public class BloodMagicRecipeProvider extends BaseRecipeProvider +{ + public BloodMagicRecipeProvider(DataGenerator gen) + { + super(gen, BloodMagic.MODID); + } + + @Override + protected List getSubRecipeProviders() + { + return Arrays.asList(new BloodAltarRecipeProvider(), new AlchemyArrayRecipeProvider(), new TartaricForgeRecipeProvider(), new ARCRecipeProvider(), new AlchemyTableRecipeProvider()); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/data/recipe/RecipeCriterion.java b/src/main/java/wayoftime/bloodmagic/common/data/recipe/RecipeCriterion.java new file mode 100644 index 00000000..4418c70a --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/data/recipe/RecipeCriterion.java @@ -0,0 +1,20 @@ +package wayoftime.bloodmagic.common.data.recipe; + +import net.minecraft.advancements.ICriterionInstance; + +public class RecipeCriterion +{ + public final String name; + public final ICriterionInstance criterion; + + private RecipeCriterion(String name, ICriterionInstance criterion) + { + this.name = name; + this.criterion = criterion; + } + + public static RecipeCriterion of(String name, ICriterionInstance criterion) + { + return new RecipeCriterion(name, criterion); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/data/recipe/builder/ARCRecipeBuilder.java b/src/main/java/wayoftime/bloodmagic/common/data/recipe/builder/ARCRecipeBuilder.java new file mode 100644 index 00000000..cda7631a --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/data/recipe/builder/ARCRecipeBuilder.java @@ -0,0 +1,109 @@ +package wayoftime.bloodmagic.common.data.recipe.builder; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nonnull; + +import org.apache.commons.lang3.tuple.Pair; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidStack; +import wayoftime.bloodmagic.recipe.helper.SerializerHelper; +import wayoftime.bloodmagic.recipe.helper.FluidStackIngredient; +import wayoftime.bloodmagic.recipe.RecipeARC; +import wayoftime.bloodmagic.common.data.recipe.BloodMagicRecipeBuilder; +import wayoftime.bloodmagic.util.Constants; + +public class ARCRecipeBuilder extends BloodMagicRecipeBuilder +{ + private final Ingredient input; + private final Ingredient arcTool; + private final FluidStackIngredient inputFluid; + private final ItemStack output; + private final FluidStack outputFluid; + private final List> addedItems = new ArrayList>(); + private final boolean consumeIngredient; + + protected ARCRecipeBuilder(Ingredient input, Ingredient arcTool, FluidStackIngredient inputFluid, ItemStack output, FluidStack outputFluid, boolean consumeIngredient) + { + super(bmSerializer("arc")); + this.input = input; + this.arcTool = arcTool; + this.inputFluid = inputFluid; + this.output = output; + this.outputFluid = outputFluid == null ? FluidStack.EMPTY : outputFluid; + this.consumeIngredient = consumeIngredient; + } + + public static ARCRecipeBuilder arc(Ingredient input, Ingredient arcTool, FluidStackIngredient inputFluid, ItemStack output, FluidStack outputFluid) + { + return new ARCRecipeBuilder(input, arcTool, inputFluid, output, outputFluid, false); + } + + public static ARCRecipeBuilder arcConsume(Ingredient input, Ingredient arcTool, FluidStackIngredient inputFluid, ItemStack output, FluidStack outputFluid) + { + return new ARCRecipeBuilder(input, arcTool, inputFluid, output, outputFluid, true); + } + + public ARCRecipeBuilder addRandomOutput(ItemStack stack, double chance) + { + if (addedItems.size() >= RecipeARC.MAX_RANDOM_OUTPUTS) + { + return this; + } + + addedItems.add(Pair.of(stack, chance)); + + return this; + } + + @Override + protected ARCRecipeResult getResult(ResourceLocation id) + { + return new ARCRecipeResult(id); + } + + public class ARCRecipeResult extends RecipeResult + { + protected ARCRecipeResult(ResourceLocation id) + { + super(id); + } + + @Override + public void serialize(@Nonnull JsonObject json) + { + json.add(Constants.JSON.INPUT, input.serialize()); + json.add(Constants.JSON.TOOL, arcTool.serialize()); + + if (inputFluid != null) + json.add(Constants.JSON.INPUT_FLUID, inputFluid.serialize()); + + if (addedItems.size() > 0) + { + JsonArray mainArray = new JsonArray(); + for (Pair pair : addedItems) + { + JsonObject jsonObj = new JsonObject(); + jsonObj.addProperty(Constants.JSON.CHANCE, pair.getValue().floatValue()); + jsonObj.add(Constants.JSON.TYPE, SerializerHelper.serializeItemStack(pair.getKey())); + mainArray.add(jsonObj); + } + + json.add(Constants.JSON.ADDEDOUTPUT, mainArray); + } + + if (outputFluid != null && !outputFluid.isEmpty()) + json.add(Constants.JSON.OUTPUT_FLUID, SerializerHelper.serializeFluidStack(outputFluid)); + + json.add(Constants.JSON.OUTPUT, SerializerHelper.serializeItemStack(output)); + json.addProperty("consumeingredient", consumeIngredient); + } + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/data/recipe/builder/AlchemyArrayRecipeBuilder.java b/src/main/java/wayoftime/bloodmagic/common/data/recipe/builder/AlchemyArrayRecipeBuilder.java new file mode 100644 index 00000000..429c8f58 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/data/recipe/builder/AlchemyArrayRecipeBuilder.java @@ -0,0 +1,58 @@ +package wayoftime.bloodmagic.common.data.recipe.builder; + +import javax.annotation.Nonnull; + +import com.google.gson.JsonObject; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.recipe.helper.SerializerHelper; +import wayoftime.bloodmagic.common.data.recipe.BloodMagicRecipeBuilder; +import wayoftime.bloodmagic.util.Constants; + +public class AlchemyArrayRecipeBuilder extends BloodMagicRecipeBuilder +{ + private final ResourceLocation texture; + private final Ingredient baseInput; + private final Ingredient addedInput; + private final ItemStack output; + + protected AlchemyArrayRecipeBuilder(ResourceLocation texture, Ingredient baseInput, Ingredient addedInput, ItemStack output) + { + super(bmSerializer("array")); + this.texture = texture; + this.baseInput = baseInput; + this.addedInput = addedInput; + this.output = output; + } + + public static AlchemyArrayRecipeBuilder array(ResourceLocation texture, Ingredient baseInput, Ingredient addedInput, ItemStack output) + { + return new AlchemyArrayRecipeBuilder(texture, baseInput, addedInput, output); + } + + @Override + protected AlchemyArrayRecipeResult getResult(ResourceLocation id) + { + return new AlchemyArrayRecipeResult(id); + } + + public class AlchemyArrayRecipeResult extends RecipeResult + { + protected AlchemyArrayRecipeResult(ResourceLocation id) + { + super(id); + } + + @Override + public void serialize(@Nonnull JsonObject json) + { + json.addProperty(Constants.JSON.TEXTURE, texture.toString()); +// JSONUtils.getString(json, ); + json.add(Constants.JSON.BASEINPUT, baseInput.serialize()); + json.add(Constants.JSON.ADDEDINPUT, addedInput.serialize()); + json.add(Constants.JSON.OUTPUT, SerializerHelper.serializeItemStack(output)); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/data/recipe/builder/AlchemyTableRecipeBuilder.java b/src/main/java/wayoftime/bloodmagic/common/data/recipe/builder/AlchemyTableRecipeBuilder.java new file mode 100644 index 00000000..19384024 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/data/recipe/builder/AlchemyTableRecipeBuilder.java @@ -0,0 +1,90 @@ +package wayoftime.bloodmagic.common.data.recipe.builder; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nonnull; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.recipe.helper.SerializerHelper; +import wayoftime.bloodmagic.recipe.RecipeAlchemyTable; +import wayoftime.bloodmagic.common.data.recipe.BloodMagicRecipeBuilder; +import wayoftime.bloodmagic.util.Constants; + +public class AlchemyTableRecipeBuilder extends BloodMagicRecipeBuilder +{ + private final List input; + private final ItemStack output; + private final int syphon; + private final int ticks; + private final int minimumTier; + + protected AlchemyTableRecipeBuilder(List input, ItemStack output, int syphon, int ticks, int minimumTier) + { + super(bmSerializer("alchemytable")); + this.input = input; + this.output = output; + this.syphon = syphon; + this.ticks = ticks; + this.minimumTier = minimumTier; + } + + public static AlchemyTableRecipeBuilder alchemyTable(ItemStack output, int syphon, int ticks, int minimumTier) + { + List inputList = new ArrayList(); + + return new AlchemyTableRecipeBuilder(inputList, output, syphon, ticks, minimumTier); + } + + public AlchemyTableRecipeBuilder addIngredient(Ingredient ing) + { + if (input.size() < RecipeAlchemyTable.MAX_INPUTS) + { + input.add(ing); + } + + return this; + } + + @Override + protected AlchemyTableRecipeResult getResult(ResourceLocation id) + { + return new AlchemyTableRecipeResult(id); + } + + public class AlchemyTableRecipeResult extends RecipeResult + { + protected AlchemyTableRecipeResult(ResourceLocation id) + { + super(id); + } + + @Override + public void serialize(@Nonnull JsonObject json) + { + if (input.size() > 0) + { + JsonArray mainArray = new JsonArray(); + for (Ingredient ing : input) + { + JsonElement jsonObj = ing.serialize(); + + mainArray.add(jsonObj); + } + + json.add(Constants.JSON.INPUT, mainArray); + } + + json.add(Constants.JSON.OUTPUT, SerializerHelper.serializeItemStack(output)); + json.addProperty(Constants.JSON.SYPHON, syphon); + json.addProperty(Constants.JSON.TICKS, ticks); + json.addProperty(Constants.JSON.ALTAR_TIER, minimumTier); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/data/recipe/builder/BloodAltarRecipeBuilder.java b/src/main/java/wayoftime/bloodmagic/common/data/recipe/builder/BloodAltarRecipeBuilder.java new file mode 100644 index 00000000..9abb52ea --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/data/recipe/builder/BloodAltarRecipeBuilder.java @@ -0,0 +1,63 @@ +package wayoftime.bloodmagic.common.data.recipe.builder; + +import javax.annotation.Nonnull; + +import com.google.gson.JsonObject; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.recipe.helper.SerializerHelper; +import wayoftime.bloodmagic.common.data.recipe.BloodMagicRecipeBuilder; +import wayoftime.bloodmagic.util.Constants; + +public class BloodAltarRecipeBuilder extends BloodMagicRecipeBuilder +{ + private final Ingredient input; + private final ItemStack output; + private final int minimumTier; + private final int syphon; + private final int consumeRate; + private final int drainRate; + + protected BloodAltarRecipeBuilder(Ingredient input, ItemStack output, int minimumTier, int syphon, int consumeRate, int drainRate) + { + super(bmSerializer("altar")); + this.input = input; + this.output = output; + this.minimumTier = minimumTier; + this.syphon = syphon; + this.consumeRate = consumeRate; + this.drainRate = drainRate; + } + + public static BloodAltarRecipeBuilder altar(Ingredient input, ItemStack output, int minimumTier, int syphon, int consumeRate, int drainRate) + { + return new BloodAltarRecipeBuilder(input, output, minimumTier, syphon, consumeRate, drainRate); + } + + @Override + protected BloodAltarRecipeResult getResult(ResourceLocation id) + { + return new BloodAltarRecipeResult(id); + } + + public class BloodAltarRecipeResult extends RecipeResult + { + protected BloodAltarRecipeResult(ResourceLocation id) + { + super(id); + } + + @Override + public void serialize(@Nonnull JsonObject json) + { + json.add(Constants.JSON.INPUT, input.serialize()); + json.add(Constants.JSON.OUTPUT, SerializerHelper.serializeItemStack(output)); + json.addProperty(Constants.JSON.ALTAR_TIER, minimumTier); + json.addProperty(Constants.JSON.ALTAR_SYPHON, syphon); + json.addProperty(Constants.JSON.ALTAR_CONSUMPTION_RATE, consumeRate); + json.addProperty(Constants.JSON.ALTAR_DRAIN_RATE, drainRate); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/data/recipe/builder/TartaricForgeRecipeBuilder.java b/src/main/java/wayoftime/bloodmagic/common/data/recipe/builder/TartaricForgeRecipeBuilder.java new file mode 100644 index 00000000..2813fbeb --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/data/recipe/builder/TartaricForgeRecipeBuilder.java @@ -0,0 +1,75 @@ +package wayoftime.bloodmagic.common.data.recipe.builder; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nonnull; + +import com.google.gson.JsonObject; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.recipe.helper.SerializerHelper; +import wayoftime.bloodmagic.common.data.recipe.BloodMagicRecipeBuilder; +import wayoftime.bloodmagic.util.Constants; + +public class TartaricForgeRecipeBuilder extends BloodMagicRecipeBuilder +{ + private final List input; + private final ItemStack output; + private final double minimumSouls; + private final double soulDrain; + + protected TartaricForgeRecipeBuilder(List input, ItemStack output, double minimumSouls, double soulDrain) + { + super(bmSerializer("soulforge")); + this.input = input; + this.output = output; + this.minimumSouls = minimumSouls; + this.soulDrain = soulDrain; + } + + public static TartaricForgeRecipeBuilder tartaricForge(List input, ItemStack output, double minimumSouls, double soulDrain) + { + return new TartaricForgeRecipeBuilder(input, output, minimumSouls, soulDrain); + } + + public static TartaricForgeRecipeBuilder tartaricForge(ItemStack output, double minimumSouls, double soulDrain, Ingredient... inputArray) + { + List inputList = new ArrayList(); + for (int i = 0; i < inputArray.length; i++) + { + inputList.add(inputArray[i]); + } + return new TartaricForgeRecipeBuilder(inputList, output, minimumSouls, soulDrain); + } + + @Override + protected TartaricForgeRecipeResult getResult(ResourceLocation id) + { + return new TartaricForgeRecipeResult(id); + } + + public class TartaricForgeRecipeResult extends RecipeResult + { + protected TartaricForgeRecipeResult(ResourceLocation id) + { + super(id); + } + + @Override + public void serialize(@Nonnull JsonObject json) + { + for (int i = 0; i < Math.min(input.size(), 4); i++) + { + json.add(Constants.JSON.INPUT + i, input.get(i).serialize()); + } + + json.add(Constants.JSON.OUTPUT, SerializerHelper.serializeItemStack(output)); + json.addProperty(Constants.JSON.TARTARIC_MINIMUM, (float) minimumSouls); + json.addProperty(Constants.JSON.TARTARIC_DRAIN, (float) soulDrain); + + } + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ArmorMaterialLiving.java b/src/main/java/wayoftime/bloodmagic/common/item/ArmorMaterialLiving.java new file mode 100644 index 00000000..20f04529 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ArmorMaterialLiving.java @@ -0,0 +1,59 @@ +package wayoftime.bloodmagic.common.item; + +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.ArmorMaterial; +import net.minecraft.item.IArmorMaterial; +import net.minecraft.item.crafting.Ingredient; + +public class ArmorMaterialLiving implements IArmorMaterial +{ + public static final IArmorMaterial INSTANCE = new ArmorMaterialLiving(); + + @Override + public int getDurability(EquipmentSlotType slot) + { + return ArmorMaterial.IRON.getDurability(slot); + } + + @Override + public int getDamageReductionAmount(EquipmentSlotType slot) + { + return ArmorMaterial.IRON.getDamageReductionAmount(slot); + } + + @Override + public int getEnchantability() + { + return ArmorMaterial.IRON.getEnchantability(); + } + + @Override + public net.minecraft.util.SoundEvent getSoundEvent() + { + return ArmorMaterial.IRON.getSoundEvent(); + } + + @Override + public Ingredient getRepairMaterial() + { + return ArmorMaterial.IRON.getRepairMaterial(); + } + + @Override + public String getName() + { + return "livingarmour"; + } + + @Override + public float getToughness() + { + return ArmorMaterial.IRON.getToughness(); + } + + @Override + public float getKnockbackResistance() + { + return ArmorMaterial.IRON.getKnockbackResistance(); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/BMItemTier.java b/src/main/java/wayoftime/bloodmagic/common/item/BMItemTier.java new file mode 100644 index 00000000..9da76ed4 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/BMItemTier.java @@ -0,0 +1,62 @@ +package wayoftime.bloodmagic.common.item; + +import java.util.function.Supplier; + +import net.minecraft.item.IItemTier; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.LazyValue; + +public enum BMItemTier implements IItemTier +{ + SENTIENT(4, 512, 6.0F, 2.0F, 50, () -> { + return Ingredient.fromItems(BloodMagicItems.IMBUED_SLATE.get()); + }); + + private final int harvestLevel; + private final int maxUses; + private final float efficiency; + private final float attackDamage; + private final int enchantability; + private final LazyValue repairMaterial; + + private BMItemTier(int harvestLevelIn, int maxUsesIn, float efficiencyIn, float attackDamageIn, int enchantabilityIn, Supplier repairMaterialIn) + { + this.harvestLevel = harvestLevelIn; + this.maxUses = maxUsesIn; + this.efficiency = efficiencyIn; + this.attackDamage = attackDamageIn; + this.enchantability = enchantabilityIn; + this.repairMaterial = new LazyValue<>(repairMaterialIn); + } + + public int getMaxUses() + { + return this.maxUses; + } + + public float getEfficiency() + { + return this.efficiency; + } + + public float getAttackDamage() + { + return this.attackDamage; + } + + public int getHarvestLevel() + { + return this.harvestLevel; + } + + public int getEnchantability() + { + return this.enchantability; + } + + public Ingredient getRepairMaterial() + { + return this.repairMaterial.getValue(); + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/BloodMagicItems.java b/src/main/java/wayoftime/bloodmagic/common/item/BloodMagicItems.java new file mode 100644 index 00000000..74a7e183 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/BloodMagicItems.java @@ -0,0 +1,291 @@ +package wayoftime.bloodmagic.common.item; + +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.RegistryObject; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.item.arc.ItemARCToolBase; +import wayoftime.bloodmagic.common.item.block.ItemBlockAlchemyTable; +import wayoftime.bloodmagic.common.item.block.ItemBlockMimic; +import wayoftime.bloodmagic.common.item.block.ItemBlockShapedCharge; +import wayoftime.bloodmagic.common.item.sigil.ItemSigilAir; +import wayoftime.bloodmagic.common.item.sigil.ItemSigilBloodLight; +import wayoftime.bloodmagic.common.item.sigil.ItemSigilDivination; +import wayoftime.bloodmagic.common.item.sigil.ItemSigilFastMiner; +import wayoftime.bloodmagic.common.item.sigil.ItemSigilFrost; +import wayoftime.bloodmagic.common.item.sigil.ItemSigilGreenGrove; +import wayoftime.bloodmagic.common.item.sigil.ItemSigilHolding; +import wayoftime.bloodmagic.common.item.sigil.ItemSigilLava; +import wayoftime.bloodmagic.common.item.sigil.ItemSigilMagnetism; +import wayoftime.bloodmagic.common.item.sigil.ItemSigilVoid; +import wayoftime.bloodmagic.common.item.sigil.ItemSigilWater; +import wayoftime.bloodmagic.common.item.soul.ItemMonsterSoul; +import wayoftime.bloodmagic.common.item.soul.ItemSentientAxe; +import wayoftime.bloodmagic.common.item.soul.ItemSentientPickaxe; +import wayoftime.bloodmagic.common.item.soul.ItemSentientShovel; +import wayoftime.bloodmagic.common.item.soul.ItemSentientSword; +import wayoftime.bloodmagic.common.item.soul.ItemSoulGem; +import wayoftime.bloodmagic.common.item.soul.ItemSoulSnare; +import wayoftime.bloodmagic.common.registration.impl.BloodOrbDeferredRegister; +import wayoftime.bloodmagic.common.registration.impl.BloodOrbRegistryObject; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.structures.ItemDungeonTester; + +public class BloodMagicItems +{ +// public static Item.ToolMaterial SOUL_TOOL_MATERIAL = EnumHelper.addToolMaterial("demonic", 4, 520, 7, 8, 50); +// public static final BloodOrb WEAK_ORB_INSTANCE = new BloodOrb(new ResourceLocation(BloodMagic.MODID, "weakbloodorb"), 0, 5000, 10); + public static final BloodOrbDeferredRegister BLOOD_ORBS = new BloodOrbDeferredRegister(BloodMagic.MODID); + public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, BloodMagic.MODID); + public static final DeferredRegister BASICITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, BloodMagic.MODID); + + public static final BloodOrbRegistryObject ORB_WEAK = BLOOD_ORBS.register("weakbloodorb", () -> new BloodOrb(new ResourceLocation(BloodMagic.MODID, "weakbloodorb"), 1, 5000, 2)); + public static final BloodOrbRegistryObject ORB_APPRENTICE = BLOOD_ORBS.register("apprenticebloodorb", () -> new BloodOrb(new ResourceLocation(BloodMagic.MODID, "apprenticebloodorb"), 2, 25000, 5)); + public static final BloodOrbRegistryObject ORB_MAGICIAN = BLOOD_ORBS.register("magicianbloodorb", () -> new BloodOrb(new ResourceLocation(BloodMagic.MODID, "magicianbloodorb"), 3, 150000, 15)); + public static final BloodOrbRegistryObject ORB_MASTER = BLOOD_ORBS.register("masterbloodorb", () -> new BloodOrb(new ResourceLocation(BloodMagic.MODID, "masterbloodorb"), 4, 1000000, 25)); + public static final BloodOrbRegistryObject ORB_ARCHMAGE = BLOOD_ORBS.register("archmagebloodorb", () -> new BloodOrb(new ResourceLocation(BloodMagic.MODID, "archmagebloodorb"), 5, 10000000, 50)); +// public static final DeferredRegister BLOOD_ORBS = DeferredRegister.create(RegistrarBloodMagic.BLOOD_ORBS, BloodMagic.MODID); + +// public static final RegistryObject BLOODSTONE_ITEM = ITEMS.register("ruby_block", () -> new BlockItem(BloodMagicBlocks.BLOODSTONE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject SOUL_FORGE_ITEM = ITEMS.register("soulforge", () -> new BlockItem(BloodMagicBlocks.SOUL_FORGE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject BLANK_RUNE_ITEM = ITEMS.register("blankrune", () -> new BlockItem(BloodMagicBlocks.BLANK_RUNE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject SPEED_RUNE_ITEM = ITEMS.register("speedrune", () -> new BlockItem(BloodMagicBlocks.SPEED_RUNE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject SACRIFICE_RUNE_ITEM = ITEMS.register("sacrificerune", () -> new BlockItem(BloodMagicBlocks.SACRIFICE_RUNE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject SELF_SACRIFICE_RUNE_ITEM = ITEMS.register("selfsacrificerune", () -> new BlockItem(BloodMagicBlocks.SELF_SACRIFICE_RUNE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DISPLACEMENT_RUNE_ITEM = ITEMS.register("dislocationrune", () -> new BlockItem(BloodMagicBlocks.DISPLACEMENT_RUNE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject CAPACITY_RUNE_ITEM = ITEMS.register("altarcapacityrune", () -> new BlockItem(BloodMagicBlocks.CAPACITY_RUNE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject AUGMENTED_CAPACITY_RUNE_ITEM = ITEMS.register("bettercapacityrune", () -> new BlockItem(BloodMagicBlocks.AUGMENTED_CAPACITY_RUNE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject ORB_RUNE_ITEM = ITEMS.register("orbcapacityrune", () -> new BlockItem(BloodMagicBlocks.ORB_RUNE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject ACCELERATION_RUNE_ITEM = ITEMS.register("accelerationrune", () -> new BlockItem(BloodMagicBlocks.ACCELERATION_RUNE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject CHARGING_RUNE_ITEM = ITEMS.register("chargingrune", () -> new BlockItem(BloodMagicBlocks.CHARGING_RUNE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject BLANK_RITUAL_STONE_ITEM = ITEMS.register("ritualstone", () -> new BlockItem(BloodMagicBlocks.BLANK_RITUAL_STONE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject AIR_RITUAL_STONE_ITEM = ITEMS.register("airritualstone", () -> new BlockItem(BloodMagicBlocks.AIR_RITUAL_STONE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject WATER_RITUAL_STONE_ITEM = ITEMS.register("waterritualstone", () -> new BlockItem(BloodMagicBlocks.WATER_RITUAL_STONE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject FIRE_RITUAL_STONE_ITEM = ITEMS.register("fireritualstone", () -> new BlockItem(BloodMagicBlocks.FIRE_RITUAL_STONE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject EARTH_RITUAL_STONE_ITEM = ITEMS.register("earthritualstone", () -> new BlockItem(BloodMagicBlocks.EARTH_RITUAL_STONE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DUSK_RITUAL_STONE_ITEM = ITEMS.register("duskritualstone", () -> new BlockItem(BloodMagicBlocks.DUSK_RITUAL_STONE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DAWN_RITUAL_STONE_ITEM = ITEMS.register("lightritualstone", () -> new BlockItem(BloodMagicBlocks.DAWN_RITUAL_STONE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject ALCHEMICAL_REACTION_CHAMBER_ITEM = ITEMS.register("alchemicalreactionchamber", () -> new BlockItem(BloodMagicBlocks.ALCHEMICAL_REACTION_CHAMBER.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DEMON_CRUCIBLE_ITEM = ITEMS.register("demoncrucible", () -> new BlockItem(BloodMagicBlocks.DEMON_CRUCIBLE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DEMON_CRYSTALLIZER_ITEM = ITEMS.register("demoncrystallizer", () -> new BlockItem(BloodMagicBlocks.DEMON_CRYSTALLIZER.get(), new Item.Properties().group(BloodMagic.TAB))); + + public static final RegistryObject BLOODSTONE_ITEM = ITEMS.register("largebloodstonebrick", () -> new BlockItem(BloodMagicBlocks.BLOODSTONE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject BLOODSTONE_BRICK_ITEM = ITEMS.register("bloodstonebrick", () -> new BlockItem(BloodMagicBlocks.BLOODSTONE_BRICK.get(), new Item.Properties().group(BloodMagic.TAB))); + + public static final RegistryObject MASTER_RITUAL_STONE_ITEM = ITEMS.register("masterritualstone", () -> new BlockItem(BloodMagicBlocks.MASTER_RITUAL_STONE.get(), new Item.Properties().group(BloodMagic.TAB))); + + public static final RegistryObject BLOOD_ALTAR_ITEM = ITEMS.register("altar", () -> new BlockItem(BloodMagicBlocks.BLOOD_ALTAR.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject ALCHEMY_TABLE_ITEM = ITEMS.register("alchemytable", () -> new ItemBlockAlchemyTable(BloodMagicBlocks.ALCHEMY_TABLE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject INCENSE_ALTAR_ITEM = ITEMS.register("incensealtar", () -> new BlockItem(BloodMagicBlocks.INCENSE_ALTAR.get(), new Item.Properties().group(BloodMagic.TAB))); + + public static final RegistryObject WOOD_PATH_ITEM = ITEMS.register("woodbrickpath", () -> new BlockItem(BloodMagicBlocks.WOOD_PATH.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject WOOD_TILE_PATH_ITEM = ITEMS.register("woodtilepath", () -> new BlockItem(BloodMagicBlocks.WOOD_TILE_PATH.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject STONE_PATH_ITEM = ITEMS.register("stonebrickpath", () -> new BlockItem(BloodMagicBlocks.STONE_PATH.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject STONE_TILE_PATH_ITEM = ITEMS.register("stonetilepath", () -> new BlockItem(BloodMagicBlocks.STONE_TILE_PATH.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject WORN_STONE_PATH_ITEM = ITEMS.register("wornstonebrickpath", () -> new BlockItem(BloodMagicBlocks.WORN_STONE_PATH.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject WORN_STONE_TILE_PATH_ITEM = ITEMS.register("wornstonetilepath", () -> new BlockItem(BloodMagicBlocks.WORN_STONE_TILE_PATH.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject OBSIDIAN_PATH_ITEM = ITEMS.register("obsidianbrickpath", () -> new BlockItem(BloodMagicBlocks.OBSIDIAN_PATH.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject OBSIDIAN_TILE_PATH_ITEM = ITEMS.register("obsidiantilepath", () -> new BlockItem(BloodMagicBlocks.OBSIDIAN_TILE_PATH.get(), new Item.Properties().group(BloodMagic.TAB))); + + public static final RegistryObject MIMIC_ITEM = ITEMS.register("mimic", () -> new ItemBlockMimic(BloodMagicBlocks.MIMIC.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject MIMIC_ETHEREAL_ITEM = ITEMS.register("ethereal_mimic", () -> new ItemBlockMimic(BloodMagicBlocks.ETHEREAL_MIMIC.get(), new Item.Properties().group(BloodMagic.TAB))); + + public static final RegistryObject NETHE_SOIL_ITEM = ITEMS.register("nether_soil", () -> new BlockItem(BloodMagicBlocks.NETHER_SOIL.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject GROWING_DOUBT_ITEM = ITEMS.register("growing_doubt", () -> new BlockItem(BloodMagicBlocks.GROWING_DOUBT.get(), new Item.Properties().group(BloodMagic.TAB))); + + public static final RegistryObject SHAPED_CHARGE_ITEM = ITEMS.register("shaped_charge", () -> new ItemBlockShapedCharge(BloodMagicBlocks.SHAPED_CHARGE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DEFORESTER_CHARGE_ITEM = ITEMS.register("deforester_charge", () -> new ItemBlockShapedCharge(BloodMagicBlocks.DEFORESTER_CHARGE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject VEINMINE_CHARGE_ITEM = ITEMS.register("veinmine_charge", () -> new ItemBlockShapedCharge(BloodMagicBlocks.VEINMINE_CHARGE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject FUNGAL_CHARGE_ITEM = ITEMS.register("fungal_charge", () -> new ItemBlockShapedCharge(BloodMagicBlocks.FUNGAL_CHARGE.get(), new Item.Properties().group(BloodMagic.TAB))); + // TODO: Need to rework the above instantiations for the ItemBlocks so that it's + // done with the Blocks. + +// public static final RegistryObject WEAK_BLOOD_ORB = BASICITEMS.register("weakbloodorb", ItemBloodOrb::new); +// public static final RegistryObject WEAK_BLOOD_ORB = BASICITEMS.register("weakbloodorb", () -> new ItemBloodOrb(WEAK_ORB_INSTANCE)); + public static final RegistryObject WEAK_BLOOD_ORB = BASICITEMS.register("weakbloodorb", () -> new ItemBloodOrb(ORB_WEAK)); + public static final RegistryObject APPRENTICE_BLOOD_ORB = BASICITEMS.register("apprenticebloodorb", () -> new ItemBloodOrb(ORB_APPRENTICE)); + public static final RegistryObject MAGICIAN_BLOOD_ORB = BASICITEMS.register("magicianbloodorb", () -> new ItemBloodOrb(ORB_MAGICIAN)); + public static final RegistryObject MASTER_BLOOD_ORB = BASICITEMS.register("masterbloodorb", () -> new ItemBloodOrb(ORB_MASTER)); + + public static final RegistryObject DIVINATION_SIGIL = BASICITEMS.register("divinationsigil", () -> new ItemSigilDivination(true)); + public static final RegistryObject SEER_SIGIL = BASICITEMS.register("seersigil", () -> new ItemSigilDivination(false)); + public static final RegistryObject SACRIFICIAL_DAGGER = BASICITEMS.register("sacrificialdagger", () -> new ItemSacrificialDagger()); + public static final RegistryObject SLATE = BASICITEMS.register("blankslate", () -> new ItemBase()); + public static final RegistryObject REINFORCED_SLATE = BASICITEMS.register("reinforcedslate", () -> new ItemBase()); + public static final RegistryObject IMBUED_SLATE = BASICITEMS.register("infusedslate", () -> new ItemBase()); + public static final RegistryObject DEMONIC_SLATE = BASICITEMS.register("demonslate", () -> new ItemBase()); + public static final RegistryObject ETHEREAL_SLATE = BASICITEMS.register("etherealslate", () -> new ItemBase()); + public static final RegistryObject WATER_SIGIL = BASICITEMS.register("watersigil", () -> new ItemSigilWater()); + public static final RegistryObject VOID_SIGIL = BASICITEMS.register("voidsigil", () -> new ItemSigilVoid()); + public static final RegistryObject LAVA_SIGIL = BASICITEMS.register("lavasigil", () -> new ItemSigilLava()); + public static final RegistryObject GREEN_GROVE_SIGIL = ITEMS.register("growthsigil", () -> new ItemSigilGreenGrove()); + public static final RegistryObject FAST_MINER_SIGIL = ITEMS.register("miningsigil", () -> new ItemSigilFastMiner()); + public static final RegistryObject MAGNETISM_SIGIL = ITEMS.register("sigilofmagnetism", () -> new ItemSigilMagnetism()); + public static final RegistryObject ICE_SIGIL = ITEMS.register("icesigil", () -> new ItemSigilFrost()); + public static final RegistryObject AIR_SIGIL = BASICITEMS.register("airsigil", ItemSigilAir::new); + public static final RegistryObject BLOOD_LIGHT_SIGIL = BASICITEMS.register("bloodlightsigil", ItemSigilBloodLight::new); + public static final RegistryObject HOLDING_SIGIL = BASICITEMS.register("sigilofholding", ItemSigilHolding::new); + + public static final RegistryObject ARCANE_ASHES = BASICITEMS.register("arcaneashes", () -> new ItemArcaneAshes()); + public static final RegistryObject DAGGER_OF_SACRIFICE = BASICITEMS.register("daggerofsacrifice", () -> new ItemDaggerOfSacrifice()); + public static final RegistryObject LAVA_CRYSTAL = BASICITEMS.register("lavacrystal", () -> new ItemLavaCrystal()); + public static final RegistryObject WEAK_BLOOD_SHARD = BASICITEMS.register("weakbloodshard", () -> new ItemBase()); + public static final RegistryObject EXPERIENCE_TOME = BASICITEMS.register("experiencebook", () -> new ItemExperienceBook()); + + public static final RegistryObject LIVING_HELMET = BASICITEMS.register("livinghelmet", () -> new ItemLivingArmor(EquipmentSlotType.HEAD)); + public static final RegistryObject LIVING_PLATE = BASICITEMS.register("livingplate", () -> new ItemLivingArmor(EquipmentSlotType.CHEST)); + public static final RegistryObject LIVING_LEGGINGS = BASICITEMS.register("livingleggings", () -> new ItemLivingArmor(EquipmentSlotType.LEGS)); + public static final RegistryObject LIVING_BOOTS = BASICITEMS.register("livingboots", () -> new ItemLivingArmor(EquipmentSlotType.FEET)); + + public static final RegistryObject LIVING_TOME = BASICITEMS.register("upgradetome", () -> new ItemLivingTome()); + + // Ritual stuffs + public static final RegistryObject WEAK_ACTIVATION_CRYSTAL = BASICITEMS.register("activationcrystalweak", () -> new ItemActivationCrystal(ItemActivationCrystal.CrystalType.WEAK)); + public static final RegistryObject AWAKENED_ACTIVATION_CRYSTAL = BASICITEMS.register("activationcrystalawakened", () -> new ItemActivationCrystal(ItemActivationCrystal.CrystalType.AWAKENED)); + public static final RegistryObject CREATIVE_ACTIVATION_CRYSTAL = BASICITEMS.register("activationcrystalcreative", () -> new ItemActivationCrystal(ItemActivationCrystal.CrystalType.CREATIVE)); + + public static final RegistryObject AIR_INSCRIPTION_TOOL = BASICITEMS.register("airscribetool", () -> new ItemInscriptionTool(EnumRuneType.AIR)); + public static final RegistryObject FIRE_INSCRIPTION_TOOL = BASICITEMS.register("firescribetool", () -> new ItemInscriptionTool(EnumRuneType.FIRE)); + public static final RegistryObject WATER_INSCRIPTION_TOOL = BASICITEMS.register("waterscribetool", () -> new ItemInscriptionTool(EnumRuneType.WATER)); + public static final RegistryObject EARTH_INSCRIPTION_TOOL = BASICITEMS.register("earthscribetool", () -> new ItemInscriptionTool(EnumRuneType.EARTH)); + public static final RegistryObject DUSK_INSCRIPTION_TOOL = BASICITEMS.register("duskscribetool", () -> new ItemInscriptionTool(EnumRuneType.DUSK)); + + public static final RegistryObject BASE_RITUAL_DIVINER = BASICITEMS.register("ritualdiviner", () -> new ItemRitualDiviner(0)); + public static final RegistryObject DUSK_RITUAL_DIVINER = BASICITEMS.register("ritualdivinerdusk", () -> new ItemRitualDiviner(1)); + + public static final RegistryObject RITUAL_READER = BASICITEMS.register("ritualtinkerer", ItemRitualReader::new); + + // Reagents used to make the Sigils + public static final RegistryObject REAGENT_WATER = BASICITEMS.register("reagentwater", () -> new ItemBase()); + public static final RegistryObject REAGENT_LAVA = BASICITEMS.register("reagentlava", () -> new ItemBase()); + public static final RegistryObject REAGENT_VOID = BASICITEMS.register("reagentvoid", () -> new ItemBase()); + public static final RegistryObject REAGENT_GROWTH = BASICITEMS.register("reagentgrowth", () -> new ItemBase()); + public static final RegistryObject REAGENT_FAST_MINER = BASICITEMS.register("reagentfastminer", () -> new ItemBase()); + public static final RegistryObject REAGENT_MAGNETISM = BASICITEMS.register("reagentmagnetism", () -> new ItemBase()); + public static final RegistryObject REAGENT_AIR = BASICITEMS.register("reagentair", () -> new ItemBase()); + public static final RegistryObject REAGENT_BLOOD_LIGHT = BASICITEMS.register("reagentbloodlight", () -> new ItemBase()); + public static final RegistryObject REAGENT_SIGHT = BASICITEMS.register("reagentsight", () -> new ItemBase()); + public static final RegistryObject REAGENT_BINDING = BASICITEMS.register("reagentbinding", () -> new ItemBase()); + public static final RegistryObject REAGENT_HOLDING = BASICITEMS.register("reagentholding", () -> new ItemBase()); + + // Tartaric Gems + public static final RegistryObject PETTY_GEM = ITEMS.register("soulgempetty", () -> new ItemSoulGem("petty", 64)); + public static final RegistryObject LESSER_GEM = ITEMS.register("soulgemlesser", () -> new ItemSoulGem("lesser", 256)); + public static final RegistryObject COMMON_GEM = ITEMS.register("soulgemcommon", () -> new ItemSoulGem("common", 1024)); + public static final RegistryObject GREATER_GEM = ITEMS.register("soulgemgreater", () -> new ItemSoulGem("greater", 4096)); + + public static final RegistryObject MONSTER_SOUL_RAW = BASICITEMS.register("basemonstersoul", () -> new ItemMonsterSoul(EnumDemonWillType.DEFAULT)); + public static final RegistryObject MONSTER_SOUL_CORROSIVE = BASICITEMS.register("basemonstersoul_corrosive", () -> new ItemMonsterSoul(EnumDemonWillType.CORROSIVE)); + public static final RegistryObject MONSTER_SOUL_DESTRUCTIVE = BASICITEMS.register("basemonstersoul_destructive", () -> new ItemMonsterSoul(EnumDemonWillType.DESTRUCTIVE)); + public static final RegistryObject MONSTER_SOUL_STEADFAST = BASICITEMS.register("basemonstersoul_steadfast", () -> new ItemMonsterSoul(EnumDemonWillType.STEADFAST)); + public static final RegistryObject MONSTER_SOUL_VENGEFUL = BASICITEMS.register("basemonstersoul_vengeful", () -> new ItemMonsterSoul(EnumDemonWillType.VENGEFUL)); + + public static final RegistryObject SOUL_SNARE = BASICITEMS.register("soulsnare", ItemSoulSnare::new); + public static final RegistryObject SENTIENT_SWORD = ITEMS.register("soulsword", () -> new ItemSentientSword()); + public static final RegistryObject SENTIENT_AXE = ITEMS.register("soulaxe", () -> new ItemSentientAxe()); + public static final RegistryObject SENTIENT_PICKAXE = ITEMS.register("soulpickaxe", () -> new ItemSentientPickaxe()); + public static final RegistryObject SENTIENT_SHOVEL = ITEMS.register("soulshovel", () -> new ItemSentientShovel()); + public static final RegistryObject SENTIENT_SCYTHE = ITEMS.register("soulscythe", () -> new ItemSentientScythe()); + + public static final RegistryObject RAW_CRYSTAL_BLOCK_ITEM = ITEMS.register("rawdemoncrystal", () -> new BlockItem(BloodMagicBlocks.RAW_CRYSTAL_BLOCK.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject CORROSIVE_CRYSTAL_BLOCK_ITEM = ITEMS.register("corrosivedemoncrystal", () -> new BlockItem(BloodMagicBlocks.CORROSIVE_CRYSTAL_BLOCK.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DESTRUCTIVE_CRYSTAL_BLOCK_ITEM = ITEMS.register("destructivedemoncrystal", () -> new BlockItem(BloodMagicBlocks.DESTRUCTIVE_CRYSTAL_BLOCK.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject VENGEFUL_CRYSTAL_BLOCK_ITEM = ITEMS.register("vengefuldemoncrystal", () -> new BlockItem(BloodMagicBlocks.VENGEFUL_CRYSTAL_BLOCK.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject STEADFAST_CRYSTAL_BLOCK_ITEM = ITEMS.register("steadfastdemoncrystal", () -> new BlockItem(BloodMagicBlocks.STEADFAST_CRYSTAL_BLOCK.get(), new Item.Properties().group(BloodMagic.TAB))); + + public static final RegistryObject RAW_CRYSTAL = BASICITEMS.register("defaultcrystal", () -> new ItemDemonCrystal(EnumDemonWillType.DEFAULT)); + public static final RegistryObject CORROSIVE_CRYSTAL = BASICITEMS.register("corrosivecrystal", () -> new ItemDemonCrystal(EnumDemonWillType.CORROSIVE)); + public static final RegistryObject VENGEFUL_CRYSTAL = BASICITEMS.register("vengefulcrystal", () -> new ItemDemonCrystal(EnumDemonWillType.VENGEFUL)); + public static final RegistryObject DESTRUCTIVE_CRYSTAL = BASICITEMS.register("destructivecrystal", () -> new ItemDemonCrystal(EnumDemonWillType.DESTRUCTIVE)); + public static final RegistryObject STEADFAST_CRYSTAL = BASICITEMS.register("steadfastcrystal", () -> new ItemDemonCrystal(EnumDemonWillType.STEADFAST)); + + public static final RegistryObject DEMON_WILL_GAUGE = BASICITEMS.register("demonwillgauge", ItemDemonWillGauge::new); + + // ARC Tools + public static final RegistryObject SANGUINE_REVERTER = BASICITEMS.register("sanguinereverter", () -> new ItemARCToolBase(32, 2)); + public static final RegistryObject PRIMITIVE_FURNACE_CELL = BASICITEMS.register("furnacecell_primitive", () -> new ItemARCToolBase(128, 1.25)); + public static final RegistryObject PRIMITIVE_EXPLOSIVE_CELL = BASICITEMS.register("primitive_explosive_cell", () -> new ItemARCToolBase(256, 1.25)); + public static final RegistryObject PRIMITIVE_HYDRATION_CELL = BASICITEMS.register("primitive_hydration_cell", () -> new ItemARCToolBase(128, 1.25)); + public static final RegistryObject PRIMITIVE_CRYSTALLINE_RESONATOR = BASICITEMS.register("primitive_crystalline_resonator", () -> new ItemARCToolBase(128, 1.25)); + public static final RegistryObject CRYSTALLINE_RESONATOR = BASICITEMS.register("crystalline_resonator", () -> new ItemARCToolBase(512, 2, 2)); + + // Alchemy Table items + public static final RegistryObject BASIC_CUTTING_FLUID = BASICITEMS.register("basiccuttingfluid", () -> new ItemARCToolBase(64, 1)); + public static final RegistryObject EXPLOSIVE_POWDER = BASICITEMS.register("explosivepowder", () -> new ItemARCToolBase(64, 1)); + + public static final RegistryObject SULFUR = BASICITEMS.register("sulfur", () -> new ItemBase()); + public static final RegistryObject SALTPETER = BASICITEMS.register("saltpeter", () -> new ItemBase()); + public static final RegistryObject PLANT_OIL = BASICITEMS.register("plantoil", () -> new ItemBase()); + + public static final RegistryObject THROWING_DAGGER = BASICITEMS.register("throwing_dagger", ItemThrowingDagger::new); + public static final RegistryObject THROWING_DAGGER_SYRINGE = BASICITEMS.register("throwing_dagger_syringe", ItemThrowingDaggerSyringe::new); + public static final RegistryObject SLATE_AMPOULE = BASICITEMS.register("slate_ampoule", () -> new ItemBloodProvider("slate", 500)); + + // Anointments + public static final RegistryObject SLATE_VIAL = ITEMS.register("slate_vial", () -> new ItemBase(16, "slate_vial")); + public static final RegistryObject MELEE_DAMAGE_ANOINTMENT = ITEMS.register("melee_anointment", () -> new ItemAnointmentProvider(BloodMagic.rl("melee_damage"), 0xFF0000, 1, 256)); + public static final RegistryObject SILK_TOUCH_ANOINTMENT = ITEMS.register("silk_touch_anointment", () -> new ItemAnointmentProvider(BloodMagic.rl("silk_touch"), 0x00B0FF, 1, 256)); + public static final RegistryObject FORTUNE_ANOINTMENT = ITEMS.register("fortune_anointment", () -> new ItemAnointmentProvider(BloodMagic.rl("fortune"), 3381504, 1, 256)); + public static final RegistryObject HOLY_WATER_ANOINTMENT = ITEMS.register("holy_water_anointment", () -> new ItemAnointmentProvider(BloodMagic.rl("holy_water"), 0xC6E6FB, 1, 256)); + public static final RegistryObject HIDDEN_KNOWLEDGE_ANOINTMENT = ITEMS.register("hidden_knowledge_anointment", () -> new ItemAnointmentProvider(BloodMagic.rl("hidden_knowledge"), 0xC8F902, 1, 256)); + public static final RegistryObject QUICK_DRAW_ANOINTMENT = ITEMS.register("quick_draw_anointment", () -> new ItemBowAnointmentProvider(BloodMagic.rl("quick_draw"), 0xF0E130, 1, 256, true)); + public static final RegistryObject LOOTING_ANOINTMENT = ITEMS.register("looting_anointment", () -> new ItemAnointmentProvider(BloodMagic.rl("looting"), 0x6D2AFF, 1, 256)); + public static final RegistryObject BOW_POWER_ANOINTMENT = ITEMS.register("bow_power_anointment", () -> new ItemBowAnointmentProvider(BloodMagic.rl("bow_power"), 0xD8D8D8, 1, 256, true)); + public static final RegistryObject WILL_POWER_ANOINTMENT = ITEMS.register("will_power_anointment", () -> new ItemAnointmentProvider(BloodMagic.rl("will_power"), 0xD8D8D8, 1, 256)); + public static final RegistryObject SMELTING_ANOINTMENT = ITEMS.register("smelting_anointment", () -> new ItemAnointmentProvider(BloodMagic.rl("smelting"), 0xCE2029, 1, 256)); + + // Fragments + public static final RegistryObject IRON_FRAGMENT = BASICITEMS.register("ironfragment", () -> new ItemBase()); + public static final RegistryObject GOLD_FRAGMENT = BASICITEMS.register("goldfragment", () -> new ItemBase()); + public static final RegistryObject NETHERITE_SCRAP_FRAGMENT = BASICITEMS.register("fragment_netherite_scrap", () -> new ItemBase()); + + // Gravels + public static final RegistryObject IRON_GRAVEL = BASICITEMS.register("irongravel", () -> new ItemBase()); + public static final RegistryObject GOLD_GRAVEL = BASICITEMS.register("goldgravel", () -> new ItemBase()); + public static final RegistryObject NETHERITE_SCRAP_GRAVEL = BASICITEMS.register("gravel_netherite_scrap", () -> new ItemBase()); + + // Sands + public static final RegistryObject IRON_SAND = BASICITEMS.register("ironsand", () -> new ItemBase()); + public static final RegistryObject GOLD_SAND = BASICITEMS.register("goldsand", () -> new ItemBase()); + public static final RegistryObject COAL_SAND = BASICITEMS.register("coalsand", () -> new ItemBase()); + public static final RegistryObject NETHERITE_SCRAP_SAND = BASICITEMS.register("sand_netherite", () -> new ItemBase()); + public static final RegistryObject CORRUPTED_DUST = BASICITEMS.register("corrupted_dust", () -> new ItemBase()); + public static final RegistryObject CORRUPTED_DUST_TINY = BASICITEMS.register("corrupted_tinydust", () -> new ItemBase()); + public static final RegistryObject HELLFORGED_SAND = BASICITEMS.register("sand_hellforged", () -> new ItemBase()); + + // Dungeons + public static final RegistryObject HELLFORGED_INGOT = BASICITEMS.register("ingot_hellforged", () -> new ItemBase()); + + public static final RegistryObject DUNGEON_BRICK_1_BLOCK = ITEMS.register("dungeon_brick1", () -> new BlockItem(BloodMagicBlocks.DUNGEON_BRICK_1.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DUNGEON_BRICK_2_BLOCK = ITEMS.register("dungeon_brick2", () -> new BlockItem(BloodMagicBlocks.DUNGEON_BRICK_2.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DUNGEON_BRICK_3_BLOCK = ITEMS.register("dungeon_brick3", () -> new BlockItem(BloodMagicBlocks.DUNGEON_BRICK_3.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DUNGEON_BRICK_ASSORTED_BLOCK = ITEMS.register("dungeon_brick_assorted", () -> new BlockItem(BloodMagicBlocks.DUNGEON_BRICK_ASSORTED.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DUNGEON_STONE_BLOCK = ITEMS.register("dungeon_stone", () -> new BlockItem(BloodMagicBlocks.DUNGEON_STONE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DUNGEON_EYE = ITEMS.register("dungeon_eye", () -> new BlockItem(BloodMagicBlocks.DUNGEON_EYE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DUNGEON_POLISHED_STONE_BLOCK = ITEMS.register("dungeon_polished", () -> new BlockItem(BloodMagicBlocks.DUNGEON_POLISHED_STONE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DUNGEON_TILE_BLOCK = ITEMS.register("dungeon_tile", () -> new BlockItem(BloodMagicBlocks.DUNGEON_TILE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DUNGEON_TILE_SPECIAL_BLOCK = ITEMS.register("dungeon_tilespecial", () -> new BlockItem(BloodMagicBlocks.DUNGEON_TILE_SPECIAL.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DUNGEON_SMALL_BRICK_BLOCK = ITEMS.register("dungeon_smallbrick", () -> new BlockItem(BloodMagicBlocks.DUNGEON_SMALL_BRICK.get(), new Item.Properties().group(BloodMagic.TAB))); + + public static final RegistryObject DUNGEON_BRICK_STAIRS_BLOCK = ITEMS.register("dungeon_brick_stairs", () -> new BlockItem(BloodMagicBlocks.DUNGEON_BRICK_STAIRS.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DUNGEON_POLISHED_STAIRS_BLOCK = ITEMS.register("dungeon_polished_stairs", () -> new BlockItem(BloodMagicBlocks.DUNGEON_POLISHED_STAIRS.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DUNGEON_PILLAR_CENTER_BLOCK = ITEMS.register("dungeon_pillar_center", () -> new BlockItem(BloodMagicBlocks.DUNGEON_PILLAR_CENTER.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DUNGEON_PILLAR_SPECIAL_BLOCK = ITEMS.register("dungeon_pillar_special", () -> new BlockItem(BloodMagicBlocks.DUNGEON_PILLAR_SPECIAL.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DUNGEON_PILLAR_CAP_BLOCK = ITEMS.register("dungeon_pillar_cap", () -> new BlockItem(BloodMagicBlocks.DUNGEON_PILLAR_CAP.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DUNGEON_BRICK_WALL_BLOCK = ITEMS.register("dungeon_brick_wall", () -> new BlockItem(BloodMagicBlocks.DUNGEON_BRICK_WALL.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DUNGEON_POLISHED_WALL_BLOCK = ITEMS.register("dungeon_polished_wall", () -> new BlockItem(BloodMagicBlocks.DUNGEON_POLISHED_WALL.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DUNGEON_BRICK_GATE_BLOCK = ITEMS.register("dungeon_brick_gate", () -> new BlockItem(BloodMagicBlocks.DUNGEON_BRICK_GATE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DUNGEON_POLISHED_GATE_BLOCK = ITEMS.register("dungeon_polished_gate", () -> new BlockItem(BloodMagicBlocks.DUNGEON_POLISHED_GATE.get(), new Item.Properties().group(BloodMagic.TAB))); + + public static final RegistryObject DUNGEON_ORE_BLOCK = ITEMS.register("dungeon_ore", () -> new BlockItem(BloodMagicBlocks.DUNGEON_ORE.get(), new Item.Properties().group(BloodMagic.TAB))); + + public static final RegistryObject HELLFORGED_BLOCK = ITEMS.register("dungeon_metal", () -> new BlockItem(BloodMagicBlocks.HELLFORGED_BLOCK.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject DUNGEON_TESTER = BASICITEMS.register("dungeon_tester", ItemDungeonTester::new); + +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/BloodOrb.java b/src/main/java/wayoftime/bloodmagic/common/item/BloodOrb.java new file mode 100644 index 00000000..a0a88332 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/BloodOrb.java @@ -0,0 +1,61 @@ +package wayoftime.bloodmagic.common.item; + +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.registries.ForgeRegistryEntry; + +/** + * Base Blood Orb class object for blood orbs + */ +public final class BloodOrb extends ForgeRegistryEntry +{ + private final ResourceLocation name; + private final int tier; + private final int capacity; + private final int fillRate; + + /** + * A base object for BloodOrbs. A bit cleaner than the old way through + * EnergyItems. + * + * @param name - A name for the Orb. Gets put into an unlocalized name. + * @param tier - The tier of the Orb. + * @param capacity - The max amount of LP the Orb can store. + * @param fillRate - The amount of LP per tick the Altar can fill the network + * with. + */ + public BloodOrb(ResourceLocation name, int tier, int capacity, int fillRate) + { + this.name = name; + this.tier = tier; + this.capacity = capacity; + this.fillRate = fillRate; + } + + public ResourceLocation getResourceLocation() + { + return name; + } + + public int getTier() + { + return tier; + } + + public int getCapacity() + { + return capacity; + } + + public int getFillRate() + { + return fillRate; + } + + @Override + public String toString() + { +// return "BloodOrb{" + "name='" + name + '\'' + ", tier=" + tier + ", capacity=" + capacity + ", owner=" +// + getRegistryName() + '}'; + return "BloodOrb{" + "name='" + name + '\'' + ", tier=" + tier + ", capacity=" + capacity + '}'; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ExpandedArmor.java b/src/main/java/wayoftime/bloodmagic/common/item/ExpandedArmor.java new file mode 100644 index 00000000..39a45a5f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ExpandedArmor.java @@ -0,0 +1,20 @@ +package wayoftime.bloodmagic.common.item; + +import com.google.common.collect.Multimap; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.ai.attributes.Attribute; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; + +public interface ExpandedArmor +{ + +// Multimap getAttributeModifiers(EquipmentSlotType slot, ItemStack stack); + + void damageArmor(LivingEntity livingEntity, ItemStack stack, DamageSource source, float damage, EquipmentSlotType slot); + + Multimap getAttributeModifiers(EquipmentSlotType slot, ItemStack stack); +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/IActivatable.java b/src/main/java/wayoftime/bloodmagic/common/item/IActivatable.java new file mode 100644 index 00000000..096e30b6 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/IActivatable.java @@ -0,0 +1,32 @@ +package wayoftime.bloodmagic.common.item; + +import javax.annotation.Nonnull; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import wayoftime.bloodmagic.util.Constants; + +/** + * Interface for activatable Items + */ +public interface IActivatable +{ + default boolean getActivated(ItemStack stack) + { + return !stack.isEmpty() && stack.hasTag() && stack.getTag().getBoolean(Constants.NBT.ACTIVATED); + } + + @Nonnull + default ItemStack setActivatedState(ItemStack stack, boolean activated) + { + if (!stack.isEmpty()) + { + if (!stack.hasTag()) + stack.setTag(new CompoundNBT()); + + stack.getTag().putBoolean(Constants.NBT.ACTIVATED, activated); + } + + return stack; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/IBindable.java b/src/main/java/wayoftime/bloodmagic/common/item/IBindable.java new file mode 100644 index 00000000..95017ea7 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/IBindable.java @@ -0,0 +1,40 @@ +package wayoftime.bloodmagic.common.item; + +import javax.annotation.Nullable; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import wayoftime.bloodmagic.core.data.Binding; + +/** + * Implement this interface on any Item that can be bound to a player. + */ +public interface IBindable +{ + /** + * Gets an object that stores who this item is bound to. + *

+ * If the item is not bound, this will be null. + * + * @param stack - The owned ItemStack + * @return - The binding object + */ + @Nullable + default Binding getBinding(ItemStack stack) + { + Binding binding = Binding.fromStack(stack); + return !stack.isEmpty() && binding != null ? binding : null; + } + + /** + * Called when the player attempts to bind the item. + * + * @param player - The Player attempting to bind the item + * @param stack - The ItemStack to attempt binding + * @return If binding was successful. + */ + default boolean onBind(PlayerEntity player, ItemStack stack) + { + return true; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/IBloodOrb.java b/src/main/java/wayoftime/bloodmagic/common/item/IBloodOrb.java new file mode 100644 index 00000000..903467a1 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/IBloodOrb.java @@ -0,0 +1,15 @@ +package wayoftime.bloodmagic.common.item; + +import javax.annotation.Nullable; + +import net.minecraft.item.ItemStack; + +/** + * Interface for any items that are Blood Orbs + * TODO: Should either merge this implementation with BloodOrb or clean it up idk + */ +public interface IBloodOrb +{ + @Nullable + BloodOrb getOrb(ItemStack stack); +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemActivationCrystal.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemActivationCrystal.java new file mode 100644 index 00000000..8d3244d0 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemActivationCrystal.java @@ -0,0 +1,72 @@ +package wayoftime.bloodmagic.common.item; + +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.core.data.Binding; + +public class ItemActivationCrystal extends Item implements IBindable +{ + final CrystalType type; + + public ItemActivationCrystal(CrystalType type) + { + super(new Item.Properties().maxStackSize(1).group(BloodMagic.TAB)); + this.type = type; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.activationcrystal." + type.name().toLowerCase()).mergeStyle(TextFormatting.GRAY)); + + if (!stack.hasTag()) + return; + + Binding binding = getBinding(stack); + if (binding != null) + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.currentOwner", binding.getOwnerName()).mergeStyle(TextFormatting.GRAY)); + + super.addInformation(stack, world, tooltip, flag); + } + + public int getCrystalLevel(ItemStack stack) + { + return this.type.equals(CrystalType.CREATIVE) ? Integer.MAX_VALUE : type.ordinal() + 1; + } + + public enum CrystalType + { + WEAK, AWAKENED, CREATIVE,; + + @Nonnull + public static ItemStack getStack(int level) + { + if (level < 0) + { + level = 0; + } + switch (level) + { + case 0: + return new ItemStack(BloodMagicItems.WEAK_ACTIVATION_CRYSTAL.get()); + case 1: + return new ItemStack(BloodMagicItems.AWAKENED_ACTIVATION_CRYSTAL.get()); + default: + return new ItemStack(BloodMagicItems.CREATIVE_ACTIVATION_CRYSTAL.get()); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemAnointmentProvider.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemAnointmentProvider.java new file mode 100644 index 00000000..f9042b42 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemAnointmentProvider.java @@ -0,0 +1,131 @@ +package wayoftime.bloodmagic.common.item; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.SwordItem; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.SoundEvents; +import net.minecraft.world.World; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.anointment.AnointmentData; +import wayoftime.bloodmagic.anointment.AnointmentHolder; +import wayoftime.bloodmagic.core.AnointmentRegistrar; + +public class ItemAnointmentProvider extends Item +{ +// public Anointment anointment; + public ResourceLocation anointRL; + private int colour; + private int level; + private int maxDamage; + + public ItemAnointmentProvider(ResourceLocation anointRL, int colour, int level, int maxDamage) + { + super(new Item.Properties().maxStackSize(16).group(BloodMagic.TAB)); + this.anointRL = anointRL; + this.colour = colour; + this.level = level; + this.maxDamage = maxDamage; +// this.anointment = anointment; + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + ItemStack stack = player.getHeldItem(hand); + ItemStack weaponStack = player.getHeldItem(hand == Hand.MAIN_HAND ? Hand.OFF_HAND : Hand.MAIN_HAND); +// if (world.isRemote && !unusable) +// { +// Vector3d vec = player.getLookVec(); +// double wantedVelocity = 1.7; +// +// // TODO - Revisit after potions +//// if (player.isPotionActive(RegistrarBloodMagic.BOOST)) +//// { +//// int amplifier = player.getActivePotionEffect(RegistrarBloodMagic.BOOST).getAmplifier(); +//// wantedVelocity += (1 + amplifier) * (0.35); +//// } +// +// player.setMotion(vec.x * wantedVelocity, vec.y * wantedVelocity, vec.z * wantedVelocity); +// } +// +// world.playSound(player, player.getPosX(), player.getPosY(), player.getPosZ(), SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) +// * 0.8F); + + if (!world.isRemote) + { + if (!weaponStack.isEmpty() && isItemValidForApplication(weaponStack)) + { + AnointmentHolder holder = AnointmentHolder.fromItemStack(weaponStack); + if (holder == null) + { + holder = new AnointmentHolder(); + } + + if (holder.applyAnointment(weaponStack, AnointmentRegistrar.ANOINTMENT_MAP.get(anointRL), new AnointmentData(level, 0, maxDamage))) + { +// if (world instanceof ServerWorld) + { + SoundEvent soundevent = SoundEvents.ITEM_BOTTLE_EMPTY; + world.playSound(null, player.getPosition(), soundevent, SoundCategory.BLOCKS, 1.0F, 1.0F); + } + stack.shrink(1); + holder.toItemStack(weaponStack); + return ActionResult.resultConsume(stack); + } + } + } else + { + if (!weaponStack.isEmpty() && isItemValidForApplication(weaponStack)) + { + AnointmentHolder holder = AnointmentHolder.fromItemStack(weaponStack); + if (holder == null) + { + holder = new AnointmentHolder(); + } + if (holder.canApplyAnointment(weaponStack, AnointmentRegistrar.ANOINTMENT_MAP.get(anointRL), new AnointmentData(level, 0, maxDamage))) + { + boolean flag1 = false; + double d0 = (double) (colour >> 16 & 255) / 255.0D; + double d1 = (double) (colour >> 8 & 255) / 255.0D; + double d2 = (double) (colour >> 0 & 255) / 255.0D; + for (int i = 0; i < 16; i++) + { + world.addParticle(flag1 ? ParticleTypes.AMBIENT_ENTITY_EFFECT + : ParticleTypes.ENTITY_EFFECT, player.getPosXRandom(0.3D), player.getPosYRandom(), player.getPosZRandom(0.3D), d0, d1, d2); + } + + return ActionResult.resultConsume(stack); + } + } + } + + return super.onItemRightClick(world, player, hand); + } + + public boolean isItemValidForApplication(ItemStack stack) + { + return isItemTool(stack) || isItemSword(stack); + } + + public static boolean isItemTool(ItemStack stack) + { + return !stack.getItem().getToolTypes(stack).isEmpty(); + } + + public static boolean isItemSword(ItemStack stack) + { + return stack.getItem() instanceof SwordItem; + } + + public int getColor() + { + return colour; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemArcaneAshes.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemArcaneAshes.java new file mode 100644 index 00000000..bb7f4844 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemArcaneAshes.java @@ -0,0 +1,99 @@ +package wayoftime.bloodmagic.common.item; + +import java.util.List; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUseContext; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.tile.TileAlchemyArray; + +public class ItemArcaneAshes extends Item +{ + public ItemArcaneAshes() + { + super(new Item.Properties().maxStackSize(1).group(BloodMagic.TAB).maxDamage(20)); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.arcaneAshes").mergeStyle(TextFormatting.GRAY)); + } + + @Override + public ActionResultType onItemUse(ItemUseContext context) + { + ItemStack stack = context.getItem(); + BlockPos newPos = context.getPos().offset(context.getFace()); + World world = context.getWorld(); + PlayerEntity player = context.getPlayer(); + + if (world.isAirBlock(newPos)) + { + if (!world.isRemote) + { + Direction rotation = Direction.fromAngle(player.getRotationYawHead()); + world.setBlockState(newPos, BloodMagicBlocks.ALCHEMY_ARRAY.get().getDefaultState()); + TileEntity tile = world.getTileEntity(newPos); + if (tile instanceof TileAlchemyArray) + { + ((TileAlchemyArray) tile).setRotation(rotation); + } + +// PickaxeItem d; + stack.damageItem(1, player, (entity) -> { + entity.sendBreakAnimation(EquipmentSlotType.MAINHAND); + }); + + } + + return ActionResultType.SUCCESS; + } + + return ActionResultType.FAIL; + } + +// @Override +// public ActionResultType onItemUse(PlayerEntity player, World world, BlockPos blockPos, Hand hand, Direction side, float hitX, float hitY, float hitZ) +// { +// ItemStack stack = player.getHeldItem(hand); +// BlockPos newPos = blockPos.offset(side); +// +// if (world.isAirBlock(newPos)) +// { +// if (!world.isRemote) +// { +// Direction rotation = Direction.fromAngle(player.getRotationYawHead()); +// world.setBlockState(newPos, RegistrarBloodMagicBlocks.ALCHEMY_ARRAY.getDefaultState()); +// TileEntity tile = world.getTileEntity(newPos); +// if (tile instanceof TileAlchemyArray) +// { +// ((TileAlchemyArray) tile).setRotation(rotation); +// } +// +// stack.damageItem(1, player); +// } +// +// return ActionResultType.SUCCESS; +// } +// +// return ActionResultType.FAIL; +// } + +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemBase.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemBase.java new file mode 100644 index 00000000..f2b157c9 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemBase.java @@ -0,0 +1,49 @@ +package wayoftime.bloodmagic.common.item; + +import java.util.List; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; + +public class ItemBase extends Item +{ + private final String desc; + + public ItemBase() + { + this(""); + } + + public ItemBase(String desc) + { + this(64, desc); + } + + public ItemBase(int stackSize) + { + this(stackSize, ""); + } + + public ItemBase(int stackSize, String desc) + { + super(new Item.Properties().maxStackSize(stackSize).group(BloodMagic.TAB)); + this.desc = desc; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + if (!desc.isEmpty()) + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic." + desc).mergeStyle(TextFormatting.GRAY)); + + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemBindableBase.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemBindableBase.java new file mode 100644 index 00000000..5dcb6d1d --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemBindableBase.java @@ -0,0 +1,35 @@ +package wayoftime.bloodmagic.common.item; + +import java.util.List; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.core.data.Binding; + +public class ItemBindableBase extends Item implements IBindable +{ + public ItemBindableBase() + { + super(new Item.Properties().maxStackSize(1).group(BloodMagic.TAB)); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + if (!stack.hasTag()) + return; + + Binding binding = getBinding(stack); + if (binding != null) + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.currentOwner", binding.getOwnerName()).mergeStyle(TextFormatting.GRAY)); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemBloodOrb.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemBloodOrb.java new file mode 100644 index 00000000..198e16c5 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemBloodOrb.java @@ -0,0 +1,105 @@ +package wayoftime.bloodmagic.common.item; + +import java.util.List; +import java.util.function.Supplier; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.extensions.IForgeItem; +import wayoftime.bloodmagic.core.data.Binding; +import wayoftime.bloodmagic.core.data.SoulNetwork; +import wayoftime.bloodmagic.core.data.SoulTicket; +import wayoftime.bloodmagic.util.helper.NetworkHelper; +import wayoftime.bloodmagic.util.helper.PlayerHelper; + +public class ItemBloodOrb extends ItemBindableBase implements IBloodOrb, IForgeItem +{ + private final Supplier sup; + + public ItemBloodOrb(Supplier sup) + { + this.sup = sup; + } + + @Override + public BloodOrb getOrb(ItemStack stack) + { + return sup.get(); + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + ItemStack stack = player.getHeldItem(hand); + BloodOrb orb = getOrb(stack); + + if (orb == null) + return ActionResult.resultFail(stack); + + if (world == null) + return super.onItemRightClick(world, player, hand); + + world.playSound(null, player.getPosX(), player.getPosY(), player.getPosZ(), SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); + + if (PlayerHelper.isFakePlayer(player)) + return super.onItemRightClick(world, player, hand); + + if (!stack.hasTag()) + return super.onItemRightClick(world, player, hand); + + Binding binding = getBinding(stack); + if (binding == null) + return super.onItemRightClick(world, player, hand); + + if (world.isRemote) + return super.onItemRightClick(world, player, hand); + + SoulNetwork ownerNetwork = NetworkHelper.getSoulNetwork(binding); + if (binding.getOwnerId().equals(player.getGameProfile().getId())) + ownerNetwork.setOrbTier(orb.getTier()); + + ownerNetwork.add(SoulTicket.item(stack, world, player, 200), orb.getCapacity()); // Add LP to owner's network + ownerNetwork.hurtPlayer(player, 200); // Hurt whoever is using it + return super.onItemRightClick(world, player, hand); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, @Nullable World world, List tooltip, ITooltipFlag flag) + { + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.orb.desc").mergeStyle(TextFormatting.GRAY)); + + BloodOrb orb = getOrb(stack); + if (flag.isAdvanced() && orb != null) + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.orb.owner", stack.getItem().getRegistryName()).mergeStyle(TextFormatting.GRAY)); + + super.addInformation(stack, world, tooltip, flag); + } + +// + @Override + public ItemStack getContainerItem(ItemStack stack) + { + return stack.copy(); + } + + @Override + public boolean hasContainerItem(ItemStack stack) + { + return true; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemBloodProvider.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemBloodProvider.java new file mode 100644 index 00000000..8f466ec1 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemBloodProvider.java @@ -0,0 +1,82 @@ +package wayoftime.bloodmagic.common.item; + +import java.util.List; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.particles.RedstoneParticleData; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.altar.IBloodAltar; +import wayoftime.bloodmagic.util.helper.PlayerHelper; +import wayoftime.bloodmagic.util.helper.PlayerSacrificeHelper; + +public class ItemBloodProvider extends Item +{ + protected final String tooltipBase; + public final int lpProvided; + + public ItemBloodProvider(String name, int lpProvided) + { + super(new Item.Properties().maxStackSize(64).group(BloodMagic.TAB)); + + this.tooltipBase = "tooltip.bloodmagic.blood_provider." + name + "."; + this.lpProvided = lpProvided; + } + + public ItemBloodProvider(String name) + { + this(name, 0); + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + ItemStack stack = player.getHeldItem(hand); + if (PlayerHelper.isFakePlayer(player)) + return super.onItemRightClick(world, player, hand); + + IBloodAltar altarEntity = PlayerSacrificeHelper.getAltar(world, player.getPosition()); + if (altarEntity != null) + { + double posX = player.getPosX(); + double posY = player.getPosY(); + double posZ = player.getPosZ(); + world.playSound(player, posX, posY, posZ, SoundEvents.BLOCK_GLASS_BREAK, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); + + for (int l = 0; l < 8; ++l) + world.addParticle(RedstoneParticleData.REDSTONE_DUST, posX + Math.random() - Math.random(), posY + Math.random() - Math.random(), posZ + Math.random() - Math.random(), 0, 0, 0); + + if (!world.isRemote && PlayerHelper.isFakePlayer(player)) + return super.onItemRightClick(world, player, hand); + + altarEntity.fillMainTank(lpProvided); + if (!player.isCreative()) + { + stack.shrink(1); + } + } + + return super.onItemRightClick(world, player, hand); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + tooltip.add(new TranslationTextComponent(tooltipBase + "desc").mergeStyle(TextFormatting.ITALIC).mergeStyle(TextFormatting.GRAY)); + + super.addInformation(stack, world, tooltip, flag); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemBowAnointmentProvider.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemBowAnointmentProvider.java new file mode 100644 index 00000000..af9ab56f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemBowAnointmentProvider.java @@ -0,0 +1,32 @@ +package wayoftime.bloodmagic.common.item; + +import net.minecraft.item.BowItem; +import net.minecraft.item.CrossbowItem; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +public class ItemBowAnointmentProvider extends ItemAnointmentProvider +{ + boolean crossbowsValid; + + public ItemBowAnointmentProvider(ResourceLocation anointRL, int colour, int level, int maxDamage, boolean crossbowsValid) + { + super(anointRL, colour, level, maxDamage); + this.crossbowsValid = crossbowsValid; + } + + public boolean isItemValidForApplication(ItemStack stack) + { + return isItemBow(stack) || (crossbowsValid && isItemCrossbow(stack)); + } + + public static boolean isItemBow(ItemStack stack) + { + return (stack.getItem() instanceof BowItem); + } + + public static boolean isItemCrossbow(ItemStack stack) + { + return (stack.getItem() instanceof CrossbowItem); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemDaggerOfSacrifice.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemDaggerOfSacrifice.java new file mode 100644 index 00000000..f1ba5d85 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemDaggerOfSacrifice.java @@ -0,0 +1,75 @@ +package wayoftime.bloodmagic.common.item; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.monster.IMob; +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.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraftforge.common.util.FakePlayer; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.util.DamageSourceBloodMagic; +import wayoftime.bloodmagic.util.helper.PlayerSacrificeHelper; + +public class ItemDaggerOfSacrifice extends Item +{ + public ItemDaggerOfSacrifice() + { + super(new Item.Properties().maxStackSize(1).group(BloodMagic.TAB)); + } + + @Override + public boolean hitEntity(ItemStack stack, LivingEntity target, LivingEntity attacker) + { + if (attacker instanceof FakePlayer) + return false; + + if (target == null || attacker == null || attacker.getEntityWorld().isRemote + || (attacker instanceof PlayerEntity && !(attacker instanceof ServerPlayerEntity))) + return false; + + if (!target.isNonBoss()) + return false; + + if (target instanceof PlayerEntity) + return false; + + if (target.isChild() && !(target instanceof IMob)) + return false; + + if (!target.isAlive() || target.getHealth() < 0.5F) + return false; + +// EntityEntry entityEntry = EntityRegistry.getEntry(target.getClass()); +// if (entityEntry == null) +// return false; +// int lifeEssenceRatio = BloodMagicAPI.INSTANCE.getValueManager().getSacrificial().getOrDefault(entityEntry.getRegistryName(), 25); + int lifeEssenceRatio = 25; + + if (lifeEssenceRatio <= 0) + return false; + + int lifeEssence = (int) (lifeEssenceRatio * target.getHealth()); +// if (target instanceof AnimalEntity) +// { +// lifeEssence = (int) (lifeEssence * (1 + PurificationHelper.getCurrentPurity((AnimalEntity) target))); +// } + + if (target.isChild()) + { + lifeEssence *= 0.5F; + } + + if (PlayerSacrificeHelper.findAndFillAltar(attacker.getEntityWorld(), target, lifeEssence, true)) + { + target.getEntityWorld().playSound(null, target.getPosX(), target.getPosY(), target.getPosZ(), SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + + (target.getEntityWorld().rand.nextFloat() - target.getEntityWorld().rand.nextFloat()) * 0.8F); + target.setHealth(-1); + target.onDeath(DamageSourceBloodMagic.INSTANCE); + } + + return false; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemDemonCrystal.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemDemonCrystal.java new file mode 100644 index 00000000..8e36fe65 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemDemonCrystal.java @@ -0,0 +1,52 @@ +package wayoftime.bloodmagic.common.item; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.api.compat.IDiscreteDemonWill; + +public class ItemDemonCrystal extends Item implements IDiscreteDemonWill +{ + private EnumDemonWillType type; + + public ItemDemonCrystal(EnumDemonWillType type) + { + super(new Item.Properties().group(BloodMagic.TAB)); + this.type = type; + } + + @Override + public double getWill(ItemStack willStack) + { + return getDiscretization(willStack) * willStack.getCount(); + } + + @Override + public double drainWill(ItemStack willStack, double drainAmount) + { + double discretization = getDiscretization(willStack); + int drainedNumber = (int) Math.floor(Math.min(willStack.getCount() * discretization, drainAmount) + / discretization); + + if (drainedNumber > 0) + { + willStack.shrink(drainedNumber); + return drainedNumber * discretization; + } + + return 0; + } + + @Override + public double getDiscretization(ItemStack willStack) + { + return 50; + } + + @Override + public EnumDemonWillType getType(ItemStack willStack) + { + return type; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemDemonWillGauge.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemDemonWillGauge.java new file mode 100644 index 00000000..c44fe1aa --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemDemonWillGauge.java @@ -0,0 +1,54 @@ +package wayoftime.bloodmagic.common.item; + +import java.util.List; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.api.compat.IDemonWillViewer; +import wayoftime.bloodmagic.util.handler.event.GenericHandler; + +public class ItemDemonWillGauge extends Item implements IDemonWillViewer +{ + public ItemDemonWillGauge() + { + super(new Item.Properties().maxStackSize(1).group(BloodMagic.TAB)); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.willGauge").mergeStyle(TextFormatting.GRAY)); + } + + @Override + public boolean canSeeDemonWillAura(World world, ItemStack stack, PlayerEntity player) + { + return true; + } + + @Override + public int getDemonWillAuraResolution(World world, ItemStack stack, PlayerEntity player) + { + return 100; + } + + @Override + public void inventoryTick(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) + { + if (entityIn instanceof PlayerEntity && entityIn.ticksExisted % 50 == 0) + { + GenericHandler.sendPlayerDemonWillAura((PlayerEntity) entityIn); + } + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemExperienceBook.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemExperienceBook.java new file mode 100644 index 00000000..3c5bb6ba --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemExperienceBook.java @@ -0,0 +1,210 @@ +package wayoftime.bloodmagic.common.item; + +import java.util.List; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.ActionResult; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.util.BMLog; +import wayoftime.bloodmagic.util.helper.NBTHelper; + +public class ItemExperienceBook extends Item +{ + public ItemExperienceBook() + { + super(new Item.Properties().maxStackSize(1).group(BloodMagic.TAB)); + } + + @Override + @OnlyIn(Dist.CLIENT) + public boolean hasEffect(ItemStack stack) + { + return true; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.experienceTome").mergeStyle(TextFormatting.GRAY)); + + if (!stack.hasTag()) + return; + + double storedExp = getStoredExperience(stack); + + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.experienceTome.exp", (int) storedExp).mergeStyle(TextFormatting.GRAY)); + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.experienceTome.expLevel", getLevelForExperience(storedExp)).mergeStyle(TextFormatting.GRAY)); + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + ItemStack stack = player.getHeldItem(hand); + if (!world.isRemote) + { + if (player.isSneaking()) + absorbOneLevelExpFromPlayer(stack, player); + else + giveOneLevelExpToPlayer(stack, player); + } + + return new ActionResult<>(ActionResultType.SUCCESS, stack); + } + + public void giveOneLevelExpToPlayer(ItemStack stack, PlayerEntity player) + { + float progress = player.experience; + int expToNext = getExperienceForNextLevel(player.experienceLevel); + + int neededExp = (int) Math.ceil((1 - progress) * expToNext); + float containedExp = (float) getStoredExperience(stack); + + BMLog.DEBUG.info("Needed: " + neededExp + ", contained: " + containedExp + ", exp to next: " + expToNext); + + if (containedExp >= neededExp) + { + setStoredExperience(stack, containedExp - neededExp); + addPlayerXP(player, neededExp); + + if (player.experienceLevel % 5 == 0) + { + float f = player.experienceLevel > 30 ? 1.0F : (float) player.experienceLevel / 30.0F; + player.getEntityWorld().playSound(null, player.getPosX(), player.getPosY(), player.getPosZ(), SoundEvents.ENTITY_PLAYER_LEVELUP, player.getSoundCategory(), f * 0.75F, 1.0F); + } + } else + { + setStoredExperience(stack, 0); + addPlayerXP(player, (int) containedExp); + } + } + + public void absorbOneLevelExpFromPlayer(ItemStack stack, PlayerEntity player) + { + float progress = player.experience; + + if (progress > 0) + { + int expDeduction = (int) getExperienceAcquiredToNext(player); + if (expDeduction > 0) + { + addPlayerXP(player, -expDeduction); + addExperience(stack, expDeduction); + } + } else if (progress == 0 && player.experienceLevel > 0) + { + int expDeduction = getExperienceForNextLevel(player.experienceLevel - 1); + addPlayerXP(player, -expDeduction); + addExperience(stack, expDeduction); + } + } + + // Credits to Ender IO for some of the experience code, although now modified + // slightly for my convenience. + public static int getPlayerXP(PlayerEntity player) + { + return (int) (getExperienceForLevel(player.experienceLevel) + (player.experience * player.xpBarCap())); + } + + public static void addPlayerXP(PlayerEntity player, int amount) + { + int experience = Math.max(0, getPlayerXP(player) + amount); + player.experienceTotal = experience; + player.experienceLevel = getLevelForExperience(experience); + int expForLevel = getExperienceForLevel(player.experienceLevel); + player.experience = (float) (experience - expForLevel) / (float) player.xpBarCap(); + } + + public static void setStoredExperience(ItemStack stack, double exp) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble("experience", exp); + } + + public static double getStoredExperience(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + return tag.getDouble("experience"); + } + + public static void addExperience(ItemStack stack, double exp) + { + setStoredExperience(stack, getStoredExperience(stack) + exp); + } + + public static int getExperienceForNextLevel(int currentLevel) + { + if (currentLevel < 16) + { + return 2 * currentLevel + 7; + } else if (currentLevel < 31) + { + return 5 * currentLevel - 38; + } else + { + return 9 * currentLevel - 158; + } + } + + // TODO: Change to calculation form. + public static int getExperienceForLevel(int level) + { + if (level >= 21863) + { + return Integer.MAX_VALUE; + } + if (level == 0) + { + return 0; + } + int res = 0; + for (int i = 0; i < level; i++) + { + res += getExperienceForNextLevel(i); + } + return res; + } + + public static double getExperienceAcquiredToNext(PlayerEntity player) + { + return player.experience * player.xpBarCap(); + } + + public static int getLevelForExperience(double exp) + { + if (exp <= 352) + { + return (int) Math.floor(solveParabola(1, 6, -exp)); + } else if (exp <= 1507) + { + return (int) Math.floor(solveParabola(2.5, -40.5, 360 - exp)); + } else + { + return (int) Math.floor(solveParabola(4.5, -162.5, 2220 - exp)); + } + } + + public static double solveParabola(double a, double b, double c) + { + return (-b + Math.sqrt(b * b - 4 * a * c)) / (2 * a); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemInscriptionTool.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemInscriptionTool.java new file mode 100644 index 00000000..6d31a984 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemInscriptionTool.java @@ -0,0 +1,67 @@ +package wayoftime.bloodmagic.common.item; + +import java.util.List; + +import net.minecraft.block.BlockState; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUseContext; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.block.BlockRitualStone; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.util.helper.TextHelper; + +public class ItemInscriptionTool extends Item +{ + private final EnumRuneType type; + + public ItemInscriptionTool(EnumRuneType type) + { + super(new Item.Properties().maxStackSize(1).group(BloodMagic.TAB).maxDamage(40)); + + this.type = type; + } + + @Override + public ActionResultType onItemUse(ItemUseContext context) + { + ItemStack stack = context.getItem(); + BlockPos pos = context.getPos(); + World world = context.getWorld(); + PlayerEntity player = context.getPlayer(); + BlockState state = world.getBlockState(pos); + + if (state.getBlock() instanceof BlockRitualStone + && !((BlockRitualStone) state.getBlock()).isRuneType(world, pos, type)) + { + ((BlockRitualStone) state.getBlock()).setRuneType(world, pos, type); + if (!player.isCreative()) + { + stack.damageItem(1, player, (entity) -> { + entity.sendBreakAnimation(EquipmentSlotType.MAINHAND); + }); + } + return ActionResultType.SUCCESS; + } + + return ActionResultType.FAIL; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + tooltip.add(new TranslationTextComponent(TextHelper.localizeEffect("tooltip.bloodmagic.inscriber.desc")).mergeStyle(TextFormatting.GRAY)); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemLavaCrystal.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemLavaCrystal.java new file mode 100644 index 00000000..008e7dd8 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemLavaCrystal.java @@ -0,0 +1,129 @@ +package wayoftime.bloodmagic.common.item; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.Blocks; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUseContext; +import net.minecraft.potion.EffectInstance; +import net.minecraft.potion.Effects; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.common.thread.EffectiveSide; +import wayoftime.bloodmagic.core.data.Binding; +import wayoftime.bloodmagic.core.data.SoulTicket; +import wayoftime.bloodmagic.util.helper.NetworkHelper; +import wayoftime.bloodmagic.util.helper.PlayerHelper; + +//TODO: Make some hook somewhere that attaches the pos to the ticket otherwise the tickets are basically useless lmao +public class ItemLavaCrystal extends ItemBindableBase +{ + public ItemLavaCrystal() + { + super(); + } + + @Override + public ItemStack getContainerItem(ItemStack stack) + { + Binding binding = getBinding(stack); + if (binding != null) + NetworkHelper.getSoulNetwork(binding.getOwnerId()).syphon(SoulTicket.item(stack, 50)); + + ItemStack returnStack = new ItemStack(this); + returnStack.setTag(stack.getTag()); + return returnStack; + } + + @Override + public boolean hasContainerItem(ItemStack stack) + { + return true; + } + + @Override + public int getBurnTime(ItemStack stack) + { + Binding binding = getBinding(stack); + if (binding == null) + return -1; + + if (EffectiveSide.get().isServer()) + { + if (NetworkHelper.canSyphonFromContainer(stack, 50)) + return 200; + else + { + PlayerEntity player = PlayerHelper.getPlayerFromUUID(binding.getOwnerId()); + if (player != null) + { + player.addPotionEffect(new EffectInstance(Effects.NAUSEA, 99)); + } + } + } else + { + return 200; + } + + return -1; + } + +// @Nullable +// @Override +// public Binding getBinding(ItemStack stack) +// { +// if (stack.getTag() == null) // hasTagCompound doesn't work on empty stacks with tags +// return null; +// +// NBTBase bindingTag = stack.getTag().get("binding"); +// if (bindingTag == null || bindingTag.getId() != 10 || bindingTag.isEmpty()) // Make sure it's both a tag +// // compound and that it has actual +// // data. +// return null; +// +// NBTTagCompound nbt = (NBTTagCompound) bindingTag; +// return new Binding(NBTUtil.getUUIDFromTag(nbt.getCompoundTag("id")), nbt.getString("name")); +// } + + @Override + public ActionResultType onItemUse(ItemUseContext context) + { + BlockPos pos = context.getPos(); + Direction facing = context.getFace(); + pos = pos.offset(facing); + PlayerEntity player = context.getPlayer(); + Hand hand = context.getHand(); + ItemStack itemstack = player.getHeldItem(hand); + + Binding binding = getBinding(player.getHeldItem(hand)); + + if (binding == null) + return ActionResultType.FAIL; + + if (!player.canPlayerEdit(pos, facing, itemstack)) + return ActionResultType.FAIL; + + if (context.getWorld().isAirBlock(pos) && context.getWorld().isRemote) + { + context.getWorld().playSound(player, pos, SoundEvents.ITEM_FIRECHARGE_USE, SoundCategory.BLOCKS, 1.0F, random.nextFloat() * 0.4F + 0.8F); + return ActionResultType.SUCCESS; + } + + if (context.getWorld().isAirBlock(pos) && NetworkHelper.getSoulNetwork(binding).syphonAndDamage(player, SoulTicket.item(player.getHeldItem(hand), 100)).isSuccess()) + { + context.getWorld().playSound(player, pos, SoundEvents.ITEM_FIRECHARGE_USE, SoundCategory.BLOCKS, 1.0F, random.nextFloat() * 0.4F + 0.8F); + context.getWorld().setBlockState(pos, Blocks.FIRE.getDefaultState(), 11); + } else + return ActionResultType.FAIL; + + if (player instanceof ServerPlayerEntity) + CriteriaTriggers.PLACED_BLOCK.trigger((ServerPlayerEntity) player, pos, itemstack); + + return ActionResultType.SUCCESS; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemLivingArmor.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemLivingArmor.java new file mode 100644 index 00000000..3830ad32 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemLivingArmor.java @@ -0,0 +1,190 @@ +package wayoftime.bloodmagic.common.item; + +import java.util.List; +import java.util.UUID; +import java.util.function.Consumer; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; + +import net.minecraft.client.util.ITooltipFlag; +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.inventory.EquipmentSlotType; +import net.minecraft.item.ArmorItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.core.living.ILivingContainer; +import wayoftime.bloodmagic.core.living.LivingStats; + +public class ItemLivingArmor extends ArmorItem implements ILivingContainer, ExpandedArmor +{ + + private static final int MAX_ABSORPTION = 100000; + + public ItemLivingArmor(EquipmentSlotType slot) + { + super(ArmorMaterialLiving.INSTANCE, slot, new Item.Properties().maxStackSize(1).group(BloodMagic.TAB)); + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlotType slot, String type) + { + if (this == BloodMagicItems.LIVING_PLATE.get() || this == BloodMagicItems.LIVING_HELMET.get() || this == BloodMagicItems.LIVING_BOOTS.get()) + { + return "bloodmagic:models/armor/livingarmour_layer_1.png"; + } + + if (this == BloodMagicItems.LIVING_LEGGINGS.get()) + { + return "bloodmagic:models/armor/livingarmour_layer_2.png"; + } else + { + return null; + } + } + + @Override + public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) + { + return repair.getItem() == BloodMagicItems.REAGENT_BINDING.get() || super.getIsRepairable(toRepair, repair); + } + +// @Override +// public void setDamage(ItemStack stack, int damage) +// { +// this.damageItem(stack, amount, entity, onBroken) +// if (this.slot != EquipmentSlotType.CHEST) +// { +// return; +// } +// if (damage >= this.getMaxDamage(stack)) +// { +// super.setDamage(stack, this.getMaxDamage(stack) - 1); +// } +// } + + @Override + public int damageItem(ItemStack stack, int amount, T entity, Consumer onBroken) + { + return Math.min((stack.getMaxDamage() - 1) - stack.getDamage() - amount, 0); + } + + @Override + public Multimap getAttributeModifiers(EquipmentSlotType slot, ItemStack stack) + { +// Multimap modifiers = super.getAttributeModifiers(slot, stack); + Multimap modifiers = HashMultimap.create(); + modifiers.putAll(super.getAttributeModifiers(slot, stack)); + if (slot != EquipmentSlotType.CHEST) + return modifiers; + + LivingStats stats = getLivingStats(stack); + if (stats == null) + return modifiers; + + stats.getUpgrades().forEach((k, v) -> { + if (k.getAttributeProvider() != null) + k.getAttributeProvider().handleAttributes(stats, modifiers, UUID.nameUUIDFromBytes(k.getKey().toString().getBytes()), k, k.getLevel(v.intValue())); + }); + + return modifiers; + } + +// @Override +// public ArmorProperties getProperties(EntityLivingBase player, @Nonnull ItemStack armor, DamageSource source, double damage, int slot) { +// if (source == DamageSource.DROWN || source == DamageSource.OUT_OF_WORLD) +// return new ArmorProperties(-1, 0D, 0); +// +// double armorReduction; +// double damageAmount = 0.25; +// double armorPenetrationReduction = 0; +// +// if (armor.getItem() == RegistrarBloodMagicItems.LIVING_ARMOR_FEET || armor.getItem() == RegistrarBloodMagicItems.LIVING_ARMOR_HEAD) +// damageAmount = 3d / 20d * 0.6; +// else if (armor.getItem() == RegistrarBloodMagicItems.LIVING_ARMOR_LEGS) +// damageAmount = 6d / 20d * 0.6; +// else if (armor.getItem() == RegistrarBloodMagicItems.LIVING_ARMOR_CHEST) +// damageAmount = 0.64; +// +// if (armor.getItem() == RegistrarBloodMagicItems.LIVING_ARMOR_CHEST) { +// armorReduction = 0.24 / 0.64; // This values puts it at iron level +// +// if (!LivingUtil.hasFullSet((EntityPlayer) player)) +// return new ArmorProperties(-1, damageAmount * armorReduction, MAX_ABSORPTION); +// +// LivingStats stats = getLivingStats(armor); +// double protection = 1.0D; +// if (stats != null) +// for (Map.Entry entry : stats.getUpgrades().entrySet()) +// if (entry.getKey().getArmorProvider() != null) +// protection *= 1 - entry.getKey().getArmorProvider().getProtection((EntityPlayer) player, stats, source, entry.getKey().getLevel(entry.getValue())); +// +// armorReduction += (1 - protection) * (1 - armorReduction); +// damageAmount *= armorReduction; +// return new ArmorProperties(-1, source.isUnblockable() ? 1 - protection : damageAmount, MAX_ABSORPTION); +// } else if (source.isUnblockable()) +// return new ArmorProperties(-1, damageAmount * armorPenetrationReduction, MAX_ABSORPTION); +// +// return new ArmorProperties(-1, damageAmount, MAX_ABSORPTION); +// } + + @Override + public void fillItemGroup(ItemGroup group, NonNullList items) + { + if (!isInGroup(group)) + return; + + ItemStack stack = new ItemStack(this); + if (slot == EquipmentSlotType.CHEST) + updateLivingStats(stack, new LivingStats()); + + items.add(stack); + } + +// @Override +// public void fillItemGroup(ItemGroup group, NonNullList items) +// { +// if (this.isInGroup(group)) +// { +// for (EnumDemonWillType type : EnumDemonWillType.values()) +// { +// ItemStack stack = new ItemStack(this); +// this.setCurrentType(type, stack); +// this.setWill(type, stack, maxWill); +// items.add(stack); +// } +// } +// } + + @Override + public void damageArmor(LivingEntity livingEntity, ItemStack stack, DamageSource source, float damage, EquipmentSlotType slot) + { + if (slot == EquipmentSlotType.CHEST && damage > getMaxDamage() - stack.getDamage()) + { +// livingEntity.attackEntityFrom(source, amount) +// } + livingEntity.attackEntityFrom(DamageSource.MAGIC, 2.0F); + return; + } + +// stack.damage((int) damage, livingEntity, entity -> {}); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + ILivingContainer.appendLivingTooltip(getLivingStats(stack), tooltip, true); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemLivingTome.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemLivingTome.java new file mode 100644 index 00000000..fe6c0a32 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemLivingTome.java @@ -0,0 +1,105 @@ +package wayoftime.bloodmagic.common.item; + +import java.util.List; +import java.util.Map.Entry; + +import org.apache.commons.lang3.tuple.Pair; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +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 wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.core.LivingArmorRegistrar; +import wayoftime.bloodmagic.core.living.ILivingContainer; +import wayoftime.bloodmagic.core.living.LivingStats; +import wayoftime.bloodmagic.core.living.LivingUpgrade; +import wayoftime.bloodmagic.core.living.LivingUtil; + +public class ItemLivingTome extends Item implements ILivingContainer +{ + + public ItemLivingTome() + { + super(new Item.Properties().maxStackSize(1).group(BloodMagic.TAB)); + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + ItemStack held = player.getHeldItem(hand); + + LivingStats armorStats = LivingStats.fromPlayer(player, true); + if (armorStats == null) + return ActionResult.resultPass(held); + + LivingStats tomeStats = getLivingStats(held); + if (tomeStats == null) + return ActionResult.resultPass(held); + + boolean[] flag = new boolean[] { false }; + tomeStats.getUpgrades().forEach((k, v) -> { + if (armorStats.getLevel(k.getKey()) >= tomeStats.getLevel(k.getKey())) + return; + + Pair upgraded = LivingUtil.applyNewExperience(player, k, v); // FIXME set levels + // directly, don't add + // experience + flag[0] = flag[0] || upgraded.getRight(); + }); +// LivingStats.toPlayer(player, armorStats); + if (flag[0]) + { + held.shrink(1); + return ActionResult.resultSuccess(held); + } else + return ActionResult.resultPass(held); + } + + @Override + public void fillItemGroup(ItemGroup group, NonNullList items) + { + if (!isInGroup(group)) + return; + + for (Entry entry : LivingArmorRegistrar.UPGRADE_MAP.entrySet()) + { + LivingUpgrade upgrade = entry.getValue(); + int exp = 0; + + while ((exp = upgrade.getNextRequirement(exp)) != 0) + { + ItemStack tome = new ItemStack(this); + updateLivingStats(tome, new LivingStats().setMaxPoints(upgrade.getLevelCost(exp)).addExperience(upgrade.getKey(), exp)); + items.add(tome); + } + } + +// LivingArmorRegistrar.UPGRADE_MAP.forEach(upgrade -> { +// int exp = 0; +// +// while ((exp = upgrade.getNextRequirement(exp)) != 0) +// { +// ItemStack tome = new ItemStack(this); +// updateLivingStats(tome, new LivingStats().setMaxPoints(upgrade.getLevelCost(exp)).addExperience(upgrade.getKey(), exp)); +// display.add(tome); +// } +// }); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + ILivingContainer.appendLivingTooltip(getLivingStats(stack), tooltip, false); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemLivingTrainer.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemLivingTrainer.java new file mode 100644 index 00000000..241dd4dd --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemLivingTrainer.java @@ -0,0 +1,28 @@ +package wayoftime.bloodmagic.common.item; + +import java.util.List; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.core.living.ILivingContainer; + +public class ItemLivingTrainer extends Item implements ILivingContainer +{ + public ItemLivingTrainer() + { + super(new Item.Properties().maxStackSize(1).group(BloodMagic.TAB)); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + ILivingContainer.appendLivingTooltip(getLivingStats(stack), tooltip, false); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemRitualDiviner.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemRitualDiviner.java new file mode 100644 index 00000000..13f2c0a9 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemRitualDiviner.java @@ -0,0 +1,598 @@ +package wayoftime.bloodmagic.common.item; + +import java.util.Collections; +import java.util.List; + +import com.google.common.collect.Lists; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUseContext; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResult; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceContext; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.block.BlockRitualStone; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.ritual.RitualComponent; +import wayoftime.bloodmagic.tile.TileMasterRitualStone; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.Utils; +import wayoftime.bloodmagic.util.handler.event.ClientHandler; +import wayoftime.bloodmagic.util.helper.RitualHelper; +import wayoftime.bloodmagic.util.helper.TextHelper; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; + +public class ItemRitualDiviner extends Item +{ + final int type; + public static final String tooltipBase = "tooltip.bloodmagic.diviner."; + public static String[] names = + { "normal", "dusk", "dawn" }; + + public ItemRitualDiviner(int type) + { + super(new Item.Properties().maxStackSize(1).group(BloodMagic.TAB)); + this.type = type; + } + +// @Override +// public String getHighlightTip(ItemStack stack, String displayName) +// { +// if (Strings.isNullOrEmpty(getCurrentRitual(stack))) +// return displayName; +// +// Ritual ritual = BloodMagic.RITUAL_MANAGER.getRitual(getCurrentRitual(stack)); +// if (ritual == null) +// return displayName; +// +// return displayName + ": " + TextHelper.localize(ritual.getTranslationKey()); +// } + + @Override + public ActionResultType onItemUse(ItemUseContext context) + { + ItemStack stack = context.getPlayer().getHeldItem(context.getHand()); + if (context.getPlayer().isSneaking()) + { + if (context.getWorld().isRemote) + { + trySetDisplayedRitual(stack, context.getWorld(), context.getPos()); + } + + return ActionResultType.SUCCESS; + } else if (addRuneToRitual(stack, context.getWorld(), context.getPos(), context.getPlayer())) + { + if (context.getWorld().isRemote) + { + spawnParticles(context.getWorld(), context.getPos().offset(context.getFace()), 15); + } + + return ActionResultType.SUCCESS; + // TODO: Have the diviner automagically build the ritual + } + + return ActionResultType.PASS; + } + + /** + * Adds a single rune to the ritual. + * + * @param stack - The Ritual Diviner stack + * @param world - The World + * @param pos - Block Position of the MRS. + * @param player - The Player attempting to place the ritual + * @return - True if a rune was successfully added + */ + public boolean addRuneToRitual(ItemStack stack, World world, BlockPos pos, PlayerEntity player) + { + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof TileMasterRitualStone) + { + Ritual ritual = BloodMagic.RITUAL_MANAGER.getRitual(this.getCurrentRitual(stack)); + if (ritual != null) + { + Direction direction = getDirection(stack); + List components = Lists.newArrayList(); + ritual.gatherComponents(components::add); + for (RitualComponent component : components) + { + if (!canPlaceRitualStone(component.getRuneType(), stack)) + { + return false; + } + BlockPos offset = component.getOffset(direction); + BlockPos newPos = pos.add(offset); + BlockState state = world.getBlockState(newPos); + Block block = state.getBlock(); + if (RitualHelper.isRune(world, newPos)) + { + if (RitualHelper.isRuneType(world, newPos, component.getRuneType())) + { + if (world.isRemote) + { + undisplayHologram(); + } + } else + { + // Replace existing ritual stone + RitualHelper.setRuneType(world, newPos, component.getRuneType()); + return true; + } + } else if (block.isAir(state, world, newPos))// || block.isReplaceable(world, newPos)) + { + if (!consumeStone(stack, world, player)) + { + return false; + } + ((BlockRitualStone) BloodMagicBlocks.BLANK_RITUAL_STONE.get()).setRuneType(world, newPos, component.getRuneType()); + return true; + } else + { + return false; // TODO: Possibly replace the block with a + // ritual stone + } + } + } + } + + return false; + } + + @OnlyIn(Dist.CLIENT) + public void trySetDisplayedRitual(ItemStack itemStack, World world, BlockPos pos) + { + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof TileMasterRitualStone) + { + Ritual ritual = BloodMagic.RITUAL_MANAGER.getRitual(this.getCurrentRitual(itemStack)); + TileMasterRitualStone masterRitualStone = (TileMasterRitualStone) tile; + + if (ritual != null) + { + Direction direction = getDirection(itemStack); + ClientHandler.setRitualHolo(masterRitualStone, ritual, direction, true); + } + } + } + + @OnlyIn(Dist.CLIENT) + public void undisplayHologram() + { + ClientHandler.setRitualHoloToNull(); + } + + // TODO: Make this work for any IRitualStone + public boolean consumeStone(ItemStack stack, World world, PlayerEntity player) + { + if (player.isCreative()) + { + return true; + } + + NonNullList inventory = player.inventory.mainInventory; + for (ItemStack newStack : inventory) + { + if (newStack.isEmpty()) + { + + continue; + } + Item item = newStack.getItem(); + if (item instanceof BlockItem) + { + Block block = ((BlockItem) item).getBlock(); + if (block instanceof BlockRitualStone) + { + newStack.shrink(1); + return true; + } + } + } + + return false; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + if (!stack.hasTag()) + return; + + Ritual ritual = BloodMagic.RITUAL_MANAGER.getRitual(this.getCurrentRitual(stack)); + if (ritual != null) + { + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.diviner.currentRitual", new TranslationTextComponent(ritual.getTranslationKey()))); + + boolean sneaking = Screen.hasShiftDown(); +// boolean extraInfo = sneaking && Keyboard.isKeyDown(Keyboard.KEY_M); + boolean extraInfo = sneaking && Screen.hasAltDown(); + + if (extraInfo) + { + tooltip.add(new StringTextComponent("")); + + for (EnumDemonWillType type : EnumDemonWillType.values()) + { + if (TextHelper.canTranslate(ritual.getTranslationKey() + "." + type.name().toLowerCase() + ".info")) + { + tooltip.add(new TranslationTextComponent(ritual.getTranslationKey() + "." + type.name().toLowerCase() + ".info")); + } + } + } else if (sneaking) + { + tooltip.add(new TranslationTextComponent(tooltipBase + "currentDirection", Utils.toFancyCasing(getDirection(stack).name()))); + tooltip.add(new StringTextComponent("")); + List components = Lists.newArrayList(); + ritual.gatherComponents(components::add); + + int blankRunes = 0; + int airRunes = 0; + int waterRunes = 0; + int fireRunes = 0; + int earthRunes = 0; + int duskRunes = 0; + int dawnRunes = 0; + int totalRunes = components.size(); + + for (RitualComponent component : components) + { + switch (component.getRuneType()) + { + case BLANK: + blankRunes++; + break; + case AIR: + airRunes++; + break; + case EARTH: + earthRunes++; + break; + case FIRE: + fireRunes++; + break; + case WATER: + waterRunes++; + break; + case DUSK: + duskRunes++; + break; + case DAWN: + dawnRunes++; + break; + } + } + + if (blankRunes > 0) + tooltip.add(new TranslationTextComponent(tooltipBase + "blankRune", blankRunes).mergeStyle(EnumRuneType.BLANK.colorCode)); + if (waterRunes > 0) + tooltip.add(new TranslationTextComponent(tooltipBase + "waterRune", waterRunes).mergeStyle(EnumRuneType.WATER.colorCode)); + if (airRunes > 0) + tooltip.add(new TranslationTextComponent(tooltipBase + "airRune", airRunes).mergeStyle(EnumRuneType.AIR.colorCode)); + if (fireRunes > 0) + tooltip.add(new TranslationTextComponent(tooltipBase + "fireRune", fireRunes).mergeStyle(EnumRuneType.FIRE.colorCode)); + if (earthRunes > 0) + tooltip.add(new TranslationTextComponent(tooltipBase + "earthRune", earthRunes).mergeStyle(EnumRuneType.EARTH.colorCode)); + if (duskRunes > 0) + tooltip.add(new TranslationTextComponent(tooltipBase + "duskRune", duskRunes).mergeStyle(EnumRuneType.DUSK.colorCode)); + if (dawnRunes > 0) + tooltip.add(new TranslationTextComponent(tooltipBase + "dawnRune", dawnRunes).mergeStyle(EnumRuneType.DAWN.colorCode)); + + tooltip.add(new StringTextComponent("")); + tooltip.add(new TranslationTextComponent(tooltipBase + "totalRune", totalRunes)); + } else + { + tooltip.add(new StringTextComponent("")); + if (TextHelper.canTranslate(ritual.getTranslationKey() + ".info")) + { + tooltip.add(new TranslationTextComponent(ritual.getTranslationKey() + ".info")); + tooltip.add(new StringTextComponent("")); + } + + tooltip.add(new TranslationTextComponent(tooltipBase + "extraInfo").mergeStyle(TextFormatting.BLUE)); + tooltip.add(new TranslationTextComponent(tooltipBase + "extraExtraInfo").mergeStyle(TextFormatting.BLUE)); + } + } + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + ItemStack stack = player.getHeldItem(hand); + + RayTraceResult ray = rayTrace(world, player, RayTraceContext.FluidMode.NONE); + + if (ray != null && ray.getType() == RayTraceResult.Type.BLOCK) + { + return new ActionResult<>(ActionResultType.PASS, stack); + } + + if (player.isSneaking()) + { + if (!world.isRemote) + { + cycleRitual(stack, player, false); + } + + return new ActionResult<>(ActionResultType.SUCCESS, stack); + } else + { + if (!world.isRemote) + { + cycleDirection(stack, player); + } + } + + return new ActionResult<>(ActionResultType.PASS, stack); + } + + @Override + public void onUse(World worldIn, LivingEntity entityLiving, ItemStack stack, int count) + { + if (!entityLiving.world.isRemote && entityLiving instanceof PlayerEntity) + { + PlayerEntity player = (PlayerEntity) entityLiving; + + RayTraceResult ray = rayTrace(player.world, player, RayTraceContext.FluidMode.NONE); + + if (ray != null && ray.getType() == RayTraceResult.Type.BLOCK) + { + return; +// return false; + } + + if (!player.isSwingInProgress) + { + if (player.isSneaking()) + { + cycleRitual(stack, player, true); + } else + { + cycleDirection(stack, player); + } + } + } + +// return false; + } + + public void cycleDirection(ItemStack stack, PlayerEntity player) + { + Direction direction = getDirection(stack); + Direction newDirection; + switch (direction) + { + case NORTH: + newDirection = Direction.EAST; + break; + case EAST: + newDirection = Direction.SOUTH; + break; + case SOUTH: + newDirection = Direction.WEST; + break; + case WEST: + newDirection = Direction.NORTH; + break; + default: + newDirection = Direction.NORTH; + } + + setDirection(stack, newDirection); + notifyDirectionChange(newDirection, player); + } + + public void notifyDirectionChange(Direction direction, PlayerEntity player) + { + player.sendStatusMessage(new TranslationTextComponent(tooltipBase + "currentDirection", Utils.toFancyCasing(direction.name())), true); + } + + public void setDirection(ItemStack stack, Direction direction) + { + if (!stack.hasTag()) + { + stack.setTag(new CompoundNBT()); + } + + CompoundNBT tag = stack.getTag(); + + tag.putInt(Constants.NBT.DIRECTION, direction.getIndex()); + } + + public Direction getDirection(ItemStack stack) + { + if (!stack.hasTag()) + { + stack.setTag(new CompoundNBT()); + return Direction.NORTH; + } + + CompoundNBT tag = stack.getTag(); + + int dir = tag.getInt(Constants.NBT.DIRECTION); + if (dir == 0) + { + return Direction.NORTH; + } + + return Direction.values()[tag.getInt(Constants.NBT.DIRECTION)]; + } + + /** + * Cycles the ritual forward or backward + */ + public void cycleRitual(ItemStack stack, PlayerEntity player, boolean reverse) + { + String key = getCurrentRitual(stack); + List rituals = BloodMagic.RITUAL_MANAGER.getSortedRituals(); + if (reverse) + Collections.reverse(rituals = Lists.newArrayList(rituals)); + + String firstId = ""; + boolean foundId = false; + boolean foundFirst = false; + + for (Ritual ritual : rituals) + { + String id = BloodMagic.RITUAL_MANAGER.getId(ritual); + + if (!BloodMagic.RITUAL_MANAGER.enabled(id, false) || !canDivinerPerformRitual(stack, ritual)) + { + continue; + } + + if (!foundFirst) + { + firstId = id; + foundFirst = true; + } + + if (foundId) + { + setCurrentRitual(stack, id); + notifyRitualChange(id, player); + return; + } else if (id.equals(key)) + { + foundId = true; + } + } + + if (foundFirst) + { + setCurrentRitual(stack, firstId); + notifyRitualChange(firstId, player); + } + } + + public boolean canDivinerPerformRitual(ItemStack stack, Ritual ritual) + { + if (ritual == null) + { + return false; + } + + List components = Lists.newArrayList(); + ritual.gatherComponents(components::add); + for (RitualComponent component : components) + { + if (!canPlaceRitualStone(component.getRuneType(), stack)) + { + return false; + } + } + + return true; + } + + public void notifyRitualChange(String key, PlayerEntity player) + { + Ritual ritual = BloodMagic.RITUAL_MANAGER.getRitual(key); + if (ritual != null) + { + player.sendStatusMessage(new TranslationTextComponent(ritual.getTranslationKey()), true); + } + } + + public void setCurrentRitual(ItemStack stack, String key) + { + if (!stack.hasTag()) + { + stack.setTag(new CompoundNBT()); + } + + CompoundNBT tag = stack.getTag(); + + tag.putString("current_ritual", key); + } + + public String getCurrentRitual(ItemStack stack) + { + if (!stack.hasTag()) + { + stack.setTag(new CompoundNBT()); + } + + CompoundNBT tag = stack.getTag(); + return tag.getString("current_ritual"); + } + + public boolean canPlaceRitualStone(EnumRuneType rune, ItemStack stack) + { + int meta = type; + switch (rune) + { + case BLANK: + case AIR: + case EARTH: + case FIRE: + case WATER: + return true; + case DUSK: + return meta >= 1; + case DAWN: + return meta >= 2; + } + + return false; + } + + public static void spawnParticles(World worldIn, BlockPos pos, int amount) + { + BlockState state = worldIn.getBlockState(pos); + Block block = worldIn.getBlockState(pos).getBlock(); + + if (block.isAir(state, worldIn, pos)) + { + for (int i = 0; i < amount; ++i) + { + double d0 = random.nextGaussian() * 0.02D; + double d1 = random.nextGaussian() * 0.02D; + double d2 = random.nextGaussian() * 0.02D; + worldIn.addParticle(ParticleTypes.HAPPY_VILLAGER, (double) ((float) pos.getX() + + random.nextFloat()), (double) pos.getY() + + (double) random.nextFloat(), (double) ((float) pos.getZ() + + random.nextFloat()), d0, d1, d2); + } + } else + { + for (int i1 = 0; i1 < amount; ++i1) + { + double d0 = random.nextGaussian() * 0.02D; + double d1 = random.nextGaussian() * 0.02D; + double d2 = random.nextGaussian() * 0.02D; + worldIn.addParticle(ParticleTypes.HAPPY_VILLAGER, (double) ((float) pos.getX() + + random.nextFloat()), (double) pos.getY() + + (double) random.nextFloat() + * 1.0f, (double) ((float) pos.getZ() + random.nextFloat()), d0, d1, d2); + } + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemRitualReader.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemRitualReader.java new file mode 100644 index 00000000..04bfbae6 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemRitualReader.java @@ -0,0 +1,347 @@ +package wayoftime.bloodmagic.common.item; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUseContext; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResult; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceContext.FluidMode; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.demonaura.WorldDemonWillHandler; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.ritual.EnumRitualReaderState; +import wayoftime.bloodmagic.ritual.IMasterRitualStone; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.tile.TileMasterRitualStone; +import wayoftime.bloodmagic.util.ChatUtil; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.handler.event.ClientHandler; +import wayoftime.bloodmagic.util.helper.NBTHelper; +import wayoftime.bloodmagic.util.helper.TextHelper; +import wayoftime.bloodmagic.will.DemonWillHolder; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.api.compat.IDiscreteDemonWill; + +public class ItemRitualReader extends Item +{ + public static final String tooltipBase = "tooltip.bloodmagic.ritualReader."; + + public ItemRitualReader() + { + super(new Item.Properties().maxStackSize(1).group(BloodMagic.TAB)); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + if (!stack.hasTag()) + return; + + EnumRitualReaderState state = this.getState(stack); + tooltip.add(new TranslationTextComponent(tooltipBase + "currentState", TextHelper.localizeEffect(tooltipBase + state.toString().toLowerCase())).mergeStyle(TextFormatting.GRAY)); + + tooltip.add(new StringTextComponent("")); + + boolean sneaking = Screen.hasShiftDown(); + + if (sneaking) + { + tooltip.add(new TranslationTextComponent(tooltipBase + "desc." + state.toString().toLowerCase()).mergeStyle(TextFormatting.GRAY)); + } else + { + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.extraInfo").mergeStyle(TextFormatting.GRAY)); + } + + super.addInformation(stack, world, tooltip, flag); + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + ItemStack stack = player.getHeldItem(hand); + RayTraceResult ray = Item.rayTrace(world, player, FluidMode.NONE); + if (ray != null && ray.getType() == RayTraceResult.Type.BLOCK) + { + return new ActionResult<>(ActionResultType.PASS, stack); + } + + if (player.isSneaking()) + { + if (!world.isRemote) + { + cycleReader(stack, player); + } + + return new ActionResult<>(ActionResultType.SUCCESS, stack); + } + + return new ActionResult<>(ActionResultType.PASS, stack); + } + + @Override + public ActionResultType onItemUse(ItemUseContext context) + { + World world = context.getWorld(); + BlockPos pos = context.getPos(); + + PlayerEntity player = context.getPlayer(); + ItemStack stack = context.getItem(); + Hand hand = context.getHand(); + Direction direction = context.getFace(); + +// ItemStack stack = player.getHeldItem(hand); + if (!world.isRemote) + { + EnumRitualReaderState state = this.getState(stack); + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof IMasterRitualStone) + { + IMasterRitualStone master = (IMasterRitualStone) tile; + if (master.getCurrentRitual() == null) + super.onItemUse(context); + this.setMasterBlockPos(stack, pos); + this.setBlockPos(stack, BlockPos.ZERO); + + switch (state) + { + case INFORMATION: + master.provideInformationOfRitualToPlayer(player); + + break; + case SET_AREA: + if (player.isSneaking() && player.getHeldItem(Hand.OFF_HAND).getItem() instanceof ItemBloodOrb) + { + Ritual ritual = master.getCurrentRitual(); + for (String range : ritual.getListOfRanges()) + { + AreaDescriptor aabb = ritual.getBlockRange(range); + master.setBlockRange(range, aabb); + } + break; + } + + String range = this.getCurrentBlockRange(stack); + + if (range == null || range.isEmpty() || player.isSneaking()) + { + String newRange = master.getNextBlockRange(range); + range = newRange; + this.setCurrentBlockRange(stack, newRange); + } + + master.provideInformationOfRangeToPlayer(player, range); + + break; + case SET_WILL_TYPES: + List typeList = new ArrayList<>(); + NonNullList inv = player.inventory.mainInventory; + for (int i = 0; i < 9; i++) + { + ItemStack testStack = inv.get(i); + if (testStack.isEmpty()) + { + continue; + } + + if (testStack.getItem() instanceof IDiscreteDemonWill) + { + EnumDemonWillType type = ((IDiscreteDemonWill) testStack.getItem()).getType(testStack); + if (!typeList.contains(type)) + { + typeList.add(type); + } + } + } + + master.setActiveWillConfig(player, typeList); + master.provideInformationOfWillConfigToPlayer(player, typeList); + break; + } + + return ActionResultType.FAIL; + } else + { + if (state == EnumRitualReaderState.SET_AREA) + { + BlockPos masterPos = this.getMasterBlockPos(stack); + if (!masterPos.equals(BlockPos.ZERO)) + { + BlockPos containedPos = getBlockPos(stack); + if (containedPos.equals(BlockPos.ZERO)) + { + BlockPos pos1 = pos.subtract(masterPos); + this.setBlockPos(stack, pos1); + player.sendStatusMessage(new TranslationTextComponent("ritual.bloodmagic.blockRange.firstBlock"), true); + } else + { + tile = world.getTileEntity(masterPos); + if (tile instanceof IMasterRitualStone) + { + IMasterRitualStone master = (IMasterRitualStone) tile; + BlockPos pos2 = pos.subtract(masterPos); + String range = this.getCurrentBlockRange(stack); + if (range == null || range.isEmpty()) + { + String newRange = master.getNextBlockRange(range); + range = newRange; + this.setCurrentBlockRange(stack, newRange); + } + Ritual ritual = master.getCurrentRitual(); + List willConfig = master.getActiveWillConfig(); + DemonWillHolder holder = WorldDemonWillHandler.getWillHolder(master.getWorldObj(), master.getBlockPos()); + + int maxHorizontalRange = ritual.getMaxHorizontalRadiusForRange(range, willConfig, holder); + int maxVerticalRange = ritual.getMaxVerticalRadiusForRange(range, willConfig, holder); + int maxVolume = ritual.getMaxVolumeForRange(range, willConfig, holder); + + switch (master.setBlockRangeByBounds(player, range, containedPos, pos2)) + { + case SUCCESS: + player.sendStatusMessage(new TranslationTextComponent("ritual.bloodmagic.blockRange.success"), true); + break; + case NOT_WITHIN_BOUNDARIES: + player.sendStatusMessage(new TranslationTextComponent("ritual.bloodmagic.blockRange.tooFar", maxVerticalRange, maxHorizontalRange), false); + break; + case VOLUME_TOO_LARGE: + player.sendStatusMessage(new TranslationTextComponent("ritual.bloodmagic.blockRange.tooBig", maxVolume), false); + break; + default: + player.sendStatusMessage(new TranslationTextComponent("ritual.bloodmagic.blockRange.noRange"), false); + break; + } + } + this.setBlockPos(stack, BlockPos.ZERO); + } + } + } + } + } else + { + EnumRitualReaderState state = this.getState(stack); + + if (state == EnumRitualReaderState.SET_AREA) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileMasterRitualStone) + { + + System.out.println("Setting range holo... I think"); + ClientHandler.setRitualRangeHolo((TileMasterRitualStone) tile, true); + + } + } + + } + + return super.onItemUse(context); + } + + public BlockPos getBlockPos(ItemStack stack) + { + stack = NBTHelper.checkNBT(stack); + return new BlockPos(stack.getTag().getInt(Constants.NBT.X_COORD), stack.getTag().getInt(Constants.NBT.Y_COORD), stack.getTag().getInt(Constants.NBT.Z_COORD)); + } + + public ItemStack setBlockPos(ItemStack stack, BlockPos pos) + { + stack = NBTHelper.checkNBT(stack); + CompoundNBT itemTag = stack.getTag(); + itemTag.putInt(Constants.NBT.X_COORD, pos.getX()); + itemTag.putInt(Constants.NBT.Y_COORD, pos.getY()); + itemTag.putInt(Constants.NBT.Z_COORD, pos.getZ()); + return stack; + } + + public BlockPos getMasterBlockPos(ItemStack stack) + { + stack = NBTHelper.checkNBT(stack); + return new BlockPos(stack.getTag().getInt(Constants.NBT.X_COORD + "master"), stack.getTag().getInt(Constants.NBT.Y_COORD + "master"), stack.getTag().getInt(Constants.NBT.Z_COORD + "master")); + } + + public ItemStack setMasterBlockPos(ItemStack stack, BlockPos pos) + { + stack = NBTHelper.checkNBT(stack); + CompoundNBT itemTag = stack.getTag(); + itemTag.putInt(Constants.NBT.X_COORD + "master", pos.getX()); + itemTag.putInt(Constants.NBT.Y_COORD + "master", pos.getY()); + itemTag.putInt(Constants.NBT.Z_COORD + "master", pos.getZ()); + return stack; + } + + public String getCurrentBlockRange(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + return tag.getString("range"); + } + + public void setCurrentBlockRange(ItemStack stack, String range) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putString("range", range); + } + + public void cycleReader(ItemStack stack, PlayerEntity player) + { + EnumRitualReaderState prevState = getState(stack); + int val = prevState.ordinal(); + int nextVal = val + 1 >= EnumRitualReaderState.values().length ? 0 : val + 1; + EnumRitualReaderState nextState = EnumRitualReaderState.values()[nextVal]; + + setState(stack, nextState); + notifyPlayerOfStateChange(nextState, player); + } + + public void notifyPlayerOfStateChange(EnumRitualReaderState state, PlayerEntity player) + { + ChatUtil.sendNoSpam(player, new TranslationTextComponent(tooltipBase + "currentState", new TranslationTextComponent(tooltipBase + state.toString().toLowerCase()))); + } + + public void setState(ItemStack stack, EnumRitualReaderState state) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putInt(Constants.NBT.RITUAL_READER, state.ordinal()); + } + + public EnumRitualReaderState getState(ItemStack stack) + { + if (!stack.hasTag()) + { + stack.setTag(new CompoundNBT()); + return EnumRitualReaderState.INFORMATION; + } + + CompoundNBT tag = stack.getTag(); + + return EnumRitualReaderState.values()[tag.getInt(Constants.NBT.RITUAL_READER)]; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemSacrificialDagger.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemSacrificialDagger.java new file mode 100644 index 00000000..cc312150 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemSacrificialDagger.java @@ -0,0 +1,215 @@ +package wayoftime.bloodmagic.common.item; + +import java.util.List; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.UseAction; +import net.minecraft.particles.RedstoneParticleData; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.MinecraftForge; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.ConfigHandler; +import wayoftime.bloodmagic.event.SacrificeKnifeUsedEvent; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.DamageSourceBloodMagic; +import wayoftime.bloodmagic.util.helper.IncenseHelper; +import wayoftime.bloodmagic.util.helper.NBTHelper; +import wayoftime.bloodmagic.util.helper.PlayerHelper; +import wayoftime.bloodmagic.util.helper.PlayerSacrificeHelper; + +public class ItemSacrificialDagger extends Item +{ + + public ItemSacrificialDagger() + { + super(new Item.Properties().maxStackSize(1).group(BloodMagic.TAB)); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { +// tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.bloodmagic.sacrificialDagger.desc")))); + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.sacrificialdagger.desc").mergeStyle(TextFormatting.GRAY)); + +// if (stack.getItemDamage() == 1) +// list.add(TextHelper.localizeEffect("tooltip.bloodmagic.sacrificialDagger.creative")); + } + + @Override + public void onPlayerStoppedUsing(ItemStack stack, World worldIn, LivingEntity entityLiving, int timeLeft) + { + if (entityLiving instanceof PlayerEntity && !entityLiving.getEntityWorld().isRemote) + if (PlayerSacrificeHelper.sacrificePlayerHealth((PlayerEntity) entityLiving)) + IncenseHelper.setHasMaxIncense(stack, (PlayerEntity) entityLiving, false); + } + + @Override + public boolean hasEffect(ItemStack stack) + { + return IncenseHelper.getHasMaxIncense(stack) || super.hasEffect(stack); + } + + @Override + public int getUseDuration(ItemStack stack) + { + return 72000; + } + + @Override + public UseAction getUseAction(ItemStack stack) + { + return UseAction.BOW; + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + ItemStack stack = player.getHeldItem(hand); + if (PlayerHelper.isFakePlayer(player)) + return super.onItemRightClick(world, player, hand); + + if (this.canUseForSacrifice(stack)) + { + player.setActiveHand(hand); + return ActionResult.resultSuccess(stack); + } + + int lpAdded = ConfigHandler.values.sacrificialDaggerConversion * 2; + +// RayTraceResult rayTrace = rayTrace(world, player, false); +// if (rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.BLOCK) +// { +// TileEntity tile = world.getTileEntity(rayTrace.getBlockPos()); +// +// if (tile != null && tile instanceof TileAltar && stack.getItemDamage() == 1) +// lpAdded = ((TileAltar) tile).getCapacity(); +// } + + if (!player.abilities.isCreativeMode) + { + SacrificeKnifeUsedEvent evt = new SacrificeKnifeUsedEvent(player, true, true, 2, lpAdded); + if (MinecraftForge.EVENT_BUS.post(evt)) + return super.onItemRightClick(world, player, hand); + + if (evt.shouldDrainHealth) + { + player.hurtResistantTime = 0; + player.attackEntityFrom(DamageSourceBloodMagic.INSTANCE, 0.001F); + player.setHealth(Math.max(player.getHealth() - 1.998F, 0.0001f)); + if (player.getHealth() <= 0.001f && !world.isRemote) + { + player.onDeath(DamageSourceBloodMagic.INSTANCE); + player.setHealth(0); + } +// player.attackEntityFrom(BloodMagicAPI.getDamageSource(), 2.0F); + } + + if (!evt.shouldFillAltar) + return super.onItemRightClick(world, player, hand); + + lpAdded = evt.lpAdded; + } else if (player.isSneaking()) + { + lpAdded = Integer.MAX_VALUE; + } + + double posX = player.getPosX(); + double posY = player.getPosY(); + double posZ = player.getPosZ(); + world.playSound(player, posX, posY, posZ, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); + + for (int l = 0; l < 8; ++l) + world.addParticle(RedstoneParticleData.REDSTONE_DUST, posX + Math.random() - Math.random(), posY + Math.random() - Math.random(), posZ + Math.random() - Math.random(), 0, 0, 0); + + if (!world.isRemote && PlayerHelper.isFakePlayer(player)) + return super.onItemRightClick(world, player, hand); + + // TODO - Check if SoulFray is active + PlayerSacrificeHelper.findAndFillAltar(world, player, lpAdded, false); + + return super.onItemRightClick(world, player, hand); + } + + @Override + public void inventoryTick(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected) + { + if (!world.isRemote && entity instanceof PlayerEntity) + this.setUseForSacrifice(stack, this.isPlayerPreparedForSacrifice(world, (PlayerEntity) entity)); + } + + public boolean isPlayerPreparedForSacrifice(World world, PlayerEntity player) + { + return !world.isRemote && (PlayerSacrificeHelper.getPlayerIncense(player) > 0); + } + + public boolean canUseForSacrifice(ItemStack stack) + { + stack = NBTHelper.checkNBT(stack); + return stack.getTag().getBoolean(Constants.NBT.SACRIFICE); + } + + public void setUseForSacrifice(ItemStack stack, boolean sacrifice) + { + stack = NBTHelper.checkNBT(stack); + stack.getTag().putBoolean(Constants.NBT.SACRIFICE, sacrifice); + } + +// @Override +// @SideOnly(Side.CLIENT) +// public ItemMeshDefinition getMeshDefinition() +// { +// return stack -> { +// String variant = "type=normal"; +// if (stack.getItemDamage() != 0) +// variant = "type=creative"; +// +// if (canUseForSacrifice(stack)) +// variant = "type=ceremonial"; +// +// return new ModelResourceLocation(getRegistryName(), variant); +// }; +// } +// +// @Override +// public void gatherVariants(Consumer variants) +// { +// variants.accept("type=normal"); +// variants.accept("type=creative"); +// variants.accept("type=ceremonial"); +// } +// +// public enum DaggerType implements ISubItem +// { +// +// NORMAL, CREATIVE,; +// +// @Nonnull +// @Override +// public String getInternalName() +// { +// return name().toLowerCase(Locale.ROOT); +// } +// +// @Nonnull +// @Override +// public ItemStack getStack(int count) +// { +// return new ItemStack(RegistrarBloodMagicItems.SACRIFICIAL_DAGGER, count, ordinal()); +// } +// } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemSentientScythe.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemSentientScythe.java new file mode 100644 index 00000000..b9d6c59c --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemSentientScythe.java @@ -0,0 +1,843 @@ +package wayoftime.bloodmagic.common.item; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.UUID; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; + +import net.minecraft.block.BlockState; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.CreatureAttribute; +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.monster.IMob; +import net.minecraft.entity.monster.SlimeEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.HoeItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.network.play.server.SEntityVelocityPacket; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.potion.EffectInstance; +import net.minecraft.potion.Effects; +import net.minecraft.stats.Stats; +import net.minecraft.util.ActionResult; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityPredicates; +import net.minecraft.util.Hand; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.Difficulty; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.api.compat.IDemonWill; +import wayoftime.bloodmagic.api.compat.IDemonWillWeapon; +import wayoftime.bloodmagic.api.compat.IMultiWillTool; +import wayoftime.bloodmagic.common.tags.BloodMagicTags; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.helper.NBTHelper; +import wayoftime.bloodmagic.will.PlayerDemonWillHandler; + +public class ItemSentientScythe extends HoeItem implements IDemonWillWeapon, IMultiWillTool +{ + public static int[] soulBracket = new int[] { 16, 60, 200, 400, 1000 }; + public static double[] defaultDamageAdded = new double[] { 0.5, 1, 1.5, 2, 2.5 }; + public static double[] destructiveDamageAdded = new double[] { 1, 1.5, 2, 2.5, 3 }; + public static double[] vengefulDamageAdded = new double[] { 0, 0.5, 1, 1.5, 2 }; + public static double[] steadfastDamageAdded = new double[] { 0, 0.5, 1, 1.5, 2 }; + public static double[] defaultDigSpeedAdded = new double[] { 1, 1.5, 2, 3, 4 }; + public static double[] soulDrainPerSwing = new double[] { 0.05, 0.1, 0.2, 0.4, 0.75 }; + public static double[] soulDrop = new double[] { 2, 4, 7, 10, 13 }; + public static double[] staticDrop = new double[] { 1, 1, 2, 3, 3 }; + + public static double[] healthBonus = new double[] { 0, 0, 0, 0, 0 }; // TODO: Think of implementing this later + public static double[] vengefulAttackSpeed = new double[] { -3, -2.8, -2.7, -2.6, -2.5 }; + public static double[] destructiveAttackSpeed = new double[] { -3.1, -3.1, -3.2, -3.3, -3.3 }; + + public static int[] absorptionTime = new int[] { 200, 300, 400, 500, 600 }; + + public static double maxAbsorptionHearts = 10; + + public static int[] poisonTime = new int[] { 25, 50, 60, 80, 100 }; + public static int[] poisonLevel = new int[] { 0, 0, 0, 1, 1 }; + + public static double[] movementSpeed = new double[] { 0.05, 0.1, 0.15, 0.2, 0.25 }; + + public final static double baseAttackDamage = 4; + public final static double baseAttackSpeed = -3; + private static Map hitMap = new HashMap(); + + public ItemSentientScythe() + { + super(BMItemTier.SENTIENT, (int) baseAttackDamage, (float) baseAttackSpeed, new Item.Properties().maxDamage(520).group(BloodMagic.TAB)); +// super(RegistrarBloodMagicItems.SOUL_TOOL_MATERIAL, 8.0F, 3.1F); + } + + @Override + public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) + { + return BloodMagicTags.CRYSTAL_DEMON.contains(repair.getItem()) || super.getIsRepairable(toRepair, repair); + } + + @Override + public float getDestroySpeed(ItemStack stack, BlockState state) + { + float value = super.getDestroySpeed(stack, state); + if (value > 1) + { + return (float) (value + getDigSpeedOfSword(stack)); + } else + { + return value; + } + } + + public void recalculatePowers(ItemStack stack, World world, PlayerEntity player) + { + EnumDemonWillType type = PlayerDemonWillHandler.getLargestWillType(player); + double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); + this.setCurrentType(stack, soulsRemaining > 0 ? type : EnumDemonWillType.DEFAULT); + int level = getLevel(stack, soulsRemaining); + + double drain = level >= 0 ? soulDrainPerSwing[level] : 0; + double extraDamage = getExtraDamage(type, level); + + setDrainOfActivatedSword(stack, drain); + setDamageOfActivatedSword(stack, baseAttackDamage + extraDamage); + setStaticDropOfActivatedSword(stack, level >= 0 ? staticDrop[level] : 1); + setDropOfActivatedSword(stack, level >= 0 ? soulDrop[level] : 0); + setAttackSpeedOfSword(stack, level >= 0 ? getAttackSpeed(type, level) : baseAttackSpeed); + setHealthBonusOfSword(stack, level >= 0 ? getHealthBonus(type, level) : 0); + setSpeedOfSword(stack, level >= 0 ? getMovementSpeed(type, level) : 0); + setDigSpeedOfSword(stack, level >= 0 ? getDigSpeed(type, level) : 0); + } + + public double getExtraDamage(EnumDemonWillType type, int willBracket) + { + if (willBracket < 0) + { + return 0; + } + + switch (type) + { + case CORROSIVE: + case DEFAULT: + return defaultDamageAdded[willBracket]; + case DESTRUCTIVE: + return destructiveDamageAdded[willBracket]; + case VENGEFUL: + return vengefulDamageAdded[willBracket]; + case STEADFAST: + return steadfastDamageAdded[willBracket]; + } + + return 0; + } + + public double getAttackSpeed(EnumDemonWillType type, int willBracket) + { + switch (type) + { + case VENGEFUL: + return vengefulAttackSpeed[willBracket]; + case DESTRUCTIVE: + return destructiveAttackSpeed[willBracket]; + default: + return -2.9; + } + } + + public double getHealthBonus(EnumDemonWillType type, int willBracket) + { + switch (type) + { + case STEADFAST: + return healthBonus[willBracket]; + default: + return 0; + } + } + + public double getMovementSpeed(EnumDemonWillType type, int willBracket) + { + switch (type) + { + case VENGEFUL: + return movementSpeed[willBracket]; + default: + return 0; + } + } + + public double getDigSpeed(EnumDemonWillType type, int willBracket) + { + switch (type) + { + case VENGEFUL: +// return movementSpeed[willBracket]; + default: + return defaultDigSpeedAdded[willBracket]; + } + } + +// public void onLeftClickAir(ItemStack stack, LivingEntity attacker) +// { +// if (attacker instanceof PlayerEntity) +// { +// PlayerEntity attackerPlayer = (PlayerEntity) attacker; +// this.recalculatePowers(stack, attackerPlayer.getEntityWorld(), attackerPlayer); +// EnumDemonWillType type = this.getCurrentType(stack); +// double will = PlayerDemonWillHandler.getTotalDemonWill(type, attackerPlayer); +// int willBracket = this.getLevel(stack, will); +// +// this.recalculatePowers(stack, attacker.world, attackerPlayer); +// +//// applyEffectToEntity(type, willBracket, target, attackerPlayer); +// +// attackEntitiesInAreaExcludingEntity(stack, attackerPlayer, type, willBracket); +// } +// } + + @Override + public boolean onEntitySwing(ItemStack stack, LivingEntity attacker) + { + if (attacker instanceof PlayerEntity) + { + PlayerEntity attackerPlayer = (PlayerEntity) attacker; + this.recalculatePowers(stack, attackerPlayer.getEntityWorld(), attackerPlayer); + EnumDemonWillType type = this.getCurrentType(stack); + double will = PlayerDemonWillHandler.getTotalDemonWill(type, attackerPlayer); + int willBracket = this.getLevel(stack, will); + + this.recalculatePowers(stack, attacker.world, attackerPlayer); + +// applyEffectToEntity(type, willBracket, target, attackerPlayer); + + attackEntitiesInAreaExcludingEntity(stack, attackerPlayer, type, willBracket, null); + } + return false; + } + + public void attackEntitiesInAreaExcludingEntity(ItemStack stack, PlayerEntity attacker, EnumDemonWillType type, int willBracket, LivingEntity attackedEntity) + { +// System.out.println("Is client: " + attacker.world.isRemote); + double verticalRange = 2; + double horizontalRange = 2; + double range = 2; + + AxisAlignedBB aabb = null; + List list = null; + + if (attackedEntity != null) + { + aabb = attackedEntity.getBoundingBox().expand(horizontalRange, verticalRange, horizontalRange); + list = attacker.world.getEntitiesInAABBexcluding(attackedEntity, aabb, EntityPredicates.IS_ALIVE); + } else + { + Vector3d eyeVec = attacker.getEyePosition(1).add(attacker.getLookVec().scale(range)); + aabb = new AxisAlignedBB(eyeVec.getX() - horizontalRange, eyeVec.getY() - verticalRange, eyeVec.getZ() - horizontalRange, eyeVec.getX() + horizontalRange, eyeVec.getY() + verticalRange, eyeVec.getZ() + horizontalRange); +// List list = attacker.world.getEntitiesInAABBexcluding(attacker, aabb, EntityPredicates.IS_ALIVE); + list = attacker.world.getEntitiesInAABBexcluding(attacker, aabb, EntityPredicates.IS_ALIVE); + } + + list = attacker.world.getEntitiesWithinAABB(LivingEntity.class, aabb); + + // TODO: check if we actually hit something first, 'kay? + float f = (float) attacker.getAttributeValue(Attributes.ATTACK_DAMAGE); + + float f2 = attacker.getCooledAttackStrength(0.5F); +// float f2 = 1; + f = f * (0.2F + f2 * f2 * 0.8F); + attacker.resetCooldown(); +// f *= 5; + + boolean flag1 = false; + int i = 0; + i = i + EnchantmentHelper.getKnockbackModifier(attacker); + boolean flag = f2 > 0.9F; + + if (attacker.isSprinting() && flag) + { + attacker.world.playSound((PlayerEntity) null, attacker.getPosX(), attacker.getPosY(), attacker.getPosZ(), SoundEvents.ENTITY_PLAYER_ATTACK_KNOCKBACK, attacker.getSoundCategory(), 1.0F, 1.0F); + ++i; + flag1 = true; + } + + boolean didHit = false; + boolean strongAttackHit = false; + boolean weakAttackHit = false; + boolean noDamageHit = false; + + for (Entity targetEntity : list) + { + if (targetEntity.equals(attacker)) + { + continue; + } + + if (targetEntity.canBeAttackedWithItem()) + { + if (!targetEntity.hitByEntity(attacker)) + { + float f1; + if (targetEntity instanceof LivingEntity) + { + f1 = EnchantmentHelper.getModifierForCreature(stack, ((LivingEntity) targetEntity).getCreatureAttribute()); + } else + { + f1 = EnchantmentHelper.getModifierForCreature(stack, CreatureAttribute.UNDEFINED); + } + + f1 = f1 * f2; + + if (f > 0.0F || f1 > 0.0F) + { + boolean flag2 = flag && attacker.fallDistance > 0.0F && !attacker.isOnGround() && !attacker.isOnLadder() && !attacker.isInWater() && !attacker.isPotionActive(Effects.BLINDNESS) && !attacker.isPassenger() && targetEntity instanceof LivingEntity; + flag2 = flag2 && !attacker.isSprinting(); + net.minecraftforge.event.entity.player.CriticalHitEvent hitResult = net.minecraftforge.common.ForgeHooks.getCriticalHit(attacker, targetEntity, flag2, flag2 + ? 1.5F + : 1.0F); + flag2 = hitResult != null; + if (flag2) + { + f *= hitResult.getDamageModifier(); + } + + f = f + f1; + boolean flag3 = false; + double d0 = (double) (attacker.distanceWalkedModified - attacker.prevDistanceWalkedModified); + + float f4 = 0.0F; + boolean flag4 = false; + int j = EnchantmentHelper.getFireAspectModifier(attacker); + if (targetEntity instanceof LivingEntity) + { + f4 = ((LivingEntity) targetEntity).getHealth(); + if (j > 0 && !targetEntity.isBurning()) + { + flag4 = true; + targetEntity.setFire(1); + } + } + + Vector3d vector3d = targetEntity.getMotion(); + boolean flag5 = targetEntity.attackEntityFrom(DamageSource.causePlayerDamage(attacker), f); + + if (flag5) + { + didHit = true; + if (i > 0) + { + if (targetEntity instanceof LivingEntity) + { + ((LivingEntity) targetEntity).applyKnockback((float) i * 0.5F, (double) MathHelper.sin(attacker.rotationYaw * ((float) Math.PI / 180F)), (double) (-MathHelper.cos(attacker.rotationYaw * ((float) Math.PI / 180F)))); + } else + { + targetEntity.addVelocity((double) (-MathHelper.sin(attacker.rotationYaw * ((float) Math.PI / 180F)) * (float) i * 0.5F), 0.1D, (double) (MathHelper.cos(attacker.rotationYaw * ((float) Math.PI / 180F)) * (float) i * 0.5F)); + } + + } + +// if (flag3) +// { +// float f3 = 1.0F + EnchantmentHelper.getSweepingDamageRatio(attacker) * f; +// +// for (LivingEntity livingentity : this.world.getEntitiesWithinAABB(LivingEntity.class, targetEntity.getBoundingBox().grow(1.0D, 0.25D, 1.0D))) +// { +// if (livingentity != this && livingentity != targetEntity && !this.isOnSameTeam(livingentity) && (!(livingentity instanceof ArmorStandEntity) || !((ArmorStandEntity) livingentity).hasMarker()) && this.getDistanceSq(livingentity) < 9.0D) +// { +// livingentity.applyKnockback(0.4F, (double) MathHelper.sin(this.rotationYaw * ((float) Math.PI / 180F)), (double) (-MathHelper.cos(this.rotationYaw * ((float) Math.PI / 180F)))); +// livingentity.attackEntityFrom(DamageSource.causePlayerDamage(this), f3); +// } +// } +// +// this.world.playSound((PlayerEntity) null, this.getPosX(), this.getPosY(), this.getPosZ(), SoundEvents.ENTITY_PLAYER_ATTACK_SWEEP, this.getSoundCategory(), 1.0F, 1.0F); +// this.spawnSweepParticles(); +// } + + attacker.spawnSweepParticles(); + + if (targetEntity instanceof ServerPlayerEntity && targetEntity.velocityChanged) + { + ((ServerPlayerEntity) targetEntity).connection.sendPacket(new SEntityVelocityPacket(targetEntity)); + targetEntity.velocityChanged = false; + targetEntity.setMotion(vector3d); + } + + if (flag2) + { + attacker.onCriticalHit(targetEntity); + } + + if (!flag2 && !flag3) + { + if (flag) + { + strongAttackHit = true; + } else + { + weakAttackHit = true; + } + } + + if (f1 > 0.0F) + { + attacker.onEnchantmentCritical(targetEntity); + } + + attacker.setLastAttackedEntity(targetEntity); + if (targetEntity instanceof LivingEntity) + { + EnchantmentHelper.applyThornEnchantments((LivingEntity) targetEntity, attacker); + } + + EnchantmentHelper.applyArthropodEnchantments(attacker, targetEntity); + ItemStack itemstack1 = stack; + Entity entity = targetEntity; +// if (targetEntity instanceof EnderDragonPartEntity) +// { +// entity = ((EnderDragonPartEntity) targetEntity).dragon; +// } + + if (!attacker.world.isRemote && !itemstack1.isEmpty() && entity instanceof LivingEntity) + { + ItemStack copy = itemstack1.copy(); + itemstack1.hitEntity((LivingEntity) entity, attacker); + if (itemstack1.isEmpty()) + { + net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(attacker, copy, Hand.MAIN_HAND); + attacker.setHeldItem(Hand.MAIN_HAND, ItemStack.EMPTY); + } + } + + if (targetEntity instanceof LivingEntity) + { + float f5 = f4 - ((LivingEntity) targetEntity).getHealth(); + attacker.addStat(Stats.DAMAGE_DEALT, Math.round(f5 * 10.0F)); + if (j > 0) + { + targetEntity.setFire(j * 4); + } + + if (attacker.world instanceof ServerWorld && f5 > 2.0F) + { + int k = (int) ((double) f5 * 0.5D); + ((ServerWorld) attacker.world).spawnParticle(ParticleTypes.DAMAGE_INDICATOR, targetEntity.getPosX(), targetEntity.getPosYHeight(0.5D), targetEntity.getPosZ(), k, 0.1D, 0.0D, 0.1D, 0.2D); + } + + applyEffectToEntity(type, willBracket, (LivingEntity) targetEntity, attacker); + } + + } else + { + noDamageHit = true; + if (flag4) + { + targetEntity.extinguish(); + } + } + } + + } + } + } + + if (didHit) + { + if (flag1) + { + attacker.setMotion(attacker.getMotion().mul(0.6D, 1.0D, 0.6D)); + attacker.setSprinting(false); + } + + attacker.addExhaustion(0.1F); + + attacker.world.playSound((PlayerEntity) null, attacker.getPosX(), attacker.getPosY(), attacker.getPosZ(), SoundEvents.ENTITY_PLAYER_ATTACK_SWEEP, attacker.getSoundCategory(), 1.0F, 1.0F); + } + + if (noDamageHit) + { + attacker.world.playSound((PlayerEntity) null, attacker.getPosX(), attacker.getPosY(), attacker.getPosZ(), SoundEvents.ENTITY_PLAYER_ATTACK_NODAMAGE, attacker.getSoundCategory(), 1.0F, 1.0F); + } + + if (strongAttackHit) + { + attacker.world.playSound((PlayerEntity) null, attacker.getPosX(), attacker.getPosY(), attacker.getPosZ(), SoundEvents.ENTITY_PLAYER_ATTACK_STRONG, attacker.getSoundCategory(), 1.0F, 1.0F); + } + if (weakAttackHit) + { + attacker.world.playSound((PlayerEntity) null, attacker.getPosX(), attacker.getPosY(), attacker.getPosZ(), SoundEvents.ENTITY_PLAYER_ATTACK_WEAK, attacker.getSoundCategory(), 1.0F, 1.0F); + } + } + + public void applyEffectToEntity(EnumDemonWillType type, int willBracket, LivingEntity target, PlayerEntity attacker) + { + switch (type) + { + case CORROSIVE: + target.addPotionEffect(new EffectInstance(Effects.WITHER, poisonTime[willBracket], poisonLevel[willBracket])); + break; + case DEFAULT: + break; + case DESTRUCTIVE: + break; + case STEADFAST: + if (!target.isAlive()) + { + float absorption = attacker.getAbsorptionAmount(); + attacker.addPotionEffect(new EffectInstance(Effects.ABSORPTION, absorptionTime[willBracket], 127, true, false)); + attacker.setAbsorptionAmount((float) Math.min(absorption + target.getMaxHealth() * 0.05f, maxAbsorptionHearts)); + } + break; + case VENGEFUL: + break; + } + } + + @Override + public boolean hitEntity(ItemStack stack, LivingEntity target, LivingEntity attacker) + { + stack.damageItem(1, attacker, (entity) -> { + entity.sendBreakAnimation(EquipmentSlotType.MAINHAND); + }); + +// if (super.hitEntity(stack, target, attacker)) +// { + if (attacker instanceof PlayerEntity) + { + UUID id = attacker.getUniqueID(); + + PlayerEntity attackerPlayer = (PlayerEntity) attacker; + +// System.out.println("Hit map: " + hitMap.containsKey(id)); + + if (hitMap.containsKey(id) && hitMap.get(id)) + { + EnumDemonWillType type = this.getCurrentType(stack); + double will = PlayerDemonWillHandler.getTotalDemonWill(type, attackerPlayer); + int willBracket = this.getLevel(stack, will); + applyEffectToEntity(type, willBracket, target, attackerPlayer); + } else + { + this.recalculatePowers(stack, attackerPlayer.getEntityWorld(), attackerPlayer); + EnumDemonWillType type = this.getCurrentType(stack); + double will = PlayerDemonWillHandler.getTotalDemonWill(type, attackerPlayer); + int willBracket = this.getLevel(stack, will); + hitMap.put(id, true); + this.attackEntitiesInAreaExcludingEntity(stack, attackerPlayer, type, willBracket, target); + hitMap.remove(id); + } + } + + return true; +// } + +// return false; + } + + @Override + public EnumDemonWillType getCurrentType(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + if (!tag.contains(Constants.NBT.WILL_TYPE)) + { + return EnumDemonWillType.DEFAULT; + } + + return EnumDemonWillType.valueOf(tag.getString(Constants.NBT.WILL_TYPE).toUpperCase(Locale.ENGLISH)); + } + + public void setCurrentType(ItemStack stack, EnumDemonWillType type) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putString(Constants.NBT.WILL_TYPE, type.toString()); + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + recalculatePowers(player.getHeldItem(hand), world, player); + + return super.onItemRightClick(world, player, hand); + } + + @Override + public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) + { + return oldStack.getItem() != newStack.getItem(); + } + + private int getLevel(ItemStack stack, double soulsRemaining) + { + int lvl = -1; + for (int i = 0; i < soulBracket.length; i++) + { + if (soulsRemaining >= soulBracket[i]) + { + lvl = i; + } + } + + return lvl; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + if (!stack.hasTag()) + return; + + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.sentientAxe.desc").mergeStyle(TextFormatting.GRAY)); + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.currentType." + getCurrentType(stack).name().toLowerCase()).mergeStyle(TextFormatting.GRAY)); + } + + @Override + public boolean onLeftClickEntity(ItemStack stack, PlayerEntity player, Entity entity) + { + recalculatePowers(stack, player.getEntityWorld(), player); + + double drain = this.getDrainOfActivatedSword(stack); + if (drain > 0) + { + EnumDemonWillType type = getCurrentType(stack); + double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); + + if (drain > soulsRemaining) + { + return false; + } else + { + PlayerDemonWillHandler.consumeDemonWill(type, player, drain); + } + } + + return super.onLeftClickEntity(stack, player, entity); + } + + @Override + public List getRandomDemonWillDrop(LivingEntity killedEntity, LivingEntity attackingEntity, ItemStack stack, int looting) + { + List soulList = new ArrayList<>(); + + if (killedEntity.getEntityWorld().getDifficulty() != Difficulty.PEACEFUL && !(killedEntity instanceof IMob)) + { + return soulList; + } + + double willModifier = killedEntity instanceof SlimeEntity ? 0.67 : 1; + + IDemonWill soul; + + EnumDemonWillType type = this.getCurrentType(stack); + switch (type) + { + case CORROSIVE: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_CORROSIVE.get()); + break; + case DESTRUCTIVE: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_DESTRUCTIVE.get()); + break; + case STEADFAST: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_STEADFAST.get()); + break; + case VENGEFUL: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_VENGEFUL.get()); + break; + default: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_RAW.get()); + break; + } + + for (int i = 0; i <= looting; i++) + { + if (i == 0 || attackingEntity.getEntityWorld().rand.nextDouble() < 0.4) + { + ItemStack soulStack = soul.createWill(willModifier * (this.getDropOfActivatedSword(stack) * attackingEntity.getEntityWorld().rand.nextDouble() + this.getStaticDropOfActivatedSword(stack)) * killedEntity.getMaxHealth() / 20d); + soulList.add(soulStack); + } + } + + return soulList; + } + + // TODO: Change attack speed. + @Override + public Multimap getAttributeModifiers(EquipmentSlotType slot, ItemStack stack) + { + Multimap multimap = HashMultimap.create(); + if (slot == EquipmentSlotType.MAINHAND) + { + multimap.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getDamageOfActivatedSword(stack), AttributeModifier.Operation.ADDITION)); + multimap.put(Attributes.ATTACK_SPEED, new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", this.getAttackSpeedOfSword(stack), AttributeModifier.Operation.ADDITION)); + multimap.put(Attributes.MAX_HEALTH, new AttributeModifier(new UUID(0, 31818145), "Weapon modifier", this.getHealthBonusOfSword(stack), AttributeModifier.Operation.ADDITION)); + multimap.put(Attributes.MOVEMENT_SPEED, new AttributeModifier(new UUID(0, 4218052), "Weapon modifier", this.getSpeedOfSword(stack), AttributeModifier.Operation.ADDITION)); + } + + return multimap; + } + + public double getDamageOfActivatedSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_DAMAGE); + } + + public void setDamageOfActivatedSword(ItemStack stack, double damage) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_DAMAGE, damage); + } + + public double getDrainOfActivatedSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_ACTIVE_DRAIN); + } + + public void setDrainOfActivatedSword(ItemStack stack, double drain) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_ACTIVE_DRAIN, drain); + } + + public double getStaticDropOfActivatedSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_STATIC_DROP); + } + + public void setStaticDropOfActivatedSword(ItemStack stack, double drop) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_STATIC_DROP, drop); + } + + public double getDropOfActivatedSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_DROP); + } + + public void setDropOfActivatedSword(ItemStack stack, double drop) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_DROP, drop); + } + + public double getHealthBonusOfSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_HEALTH); + } + + public void setHealthBonusOfSword(ItemStack stack, double hp) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_HEALTH, hp); + } + + public double getAttackSpeedOfSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_ATTACK_SPEED); + } + + public void setAttackSpeedOfSword(ItemStack stack, double speed) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_ATTACK_SPEED, speed); + } + + public double getSpeedOfSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_SPEED); + } + + public void setSpeedOfSword(ItemStack stack, double speed) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_SPEED, speed); + } + + public double getDigSpeedOfSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_DIG_SPEED); + } + + public void setDigSpeedOfSword(ItemStack stack, double speed) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_DIG_SPEED, speed); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemSigil.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemSigil.java new file mode 100644 index 00000000..f609305f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemSigil.java @@ -0,0 +1,63 @@ +package wayoftime.bloodmagic.common.item; + +import java.util.List; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.core.data.Binding; +import wayoftime.bloodmagic.common.item.sigil.ISigil; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.helper.NBTHelper; + +/** + * Base class for all (static) sigils. + */ +public class ItemSigil extends Item implements IBindable, ISigil +{ + private int lpUsed; + + public ItemSigil(Properties prop, int lpUsed) + { + super(prop); + + this.lpUsed = lpUsed; + } + + public boolean isUnusable(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + return stack.getTag().getBoolean(Constants.NBT.UNUSABLE); + } + + public ItemStack setUnusable(ItemStack stack, boolean unusable) + { + NBTHelper.checkNBT(stack); + + stack.getTag().putBoolean(Constants.NBT.UNUSABLE, unusable); + return stack; + } + + public int getLpUsed() + { + return lpUsed; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + if (!stack.hasTag()) + return; + + Binding binding = getBinding(stack); + if (binding != null) + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.currentOwner", binding.getOwnerName())); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemThrowingDagger.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemThrowingDagger.java new file mode 100644 index 00000000..38370400 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemThrowingDagger.java @@ -0,0 +1,117 @@ +package wayoftime.bloodmagic.common.item; + +import java.util.List; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.entity.projectile.AbstractEntityThrowingDagger; +import wayoftime.bloodmagic.entity.projectile.EntityThrowingDagger; +import wayoftime.bloodmagic.will.PlayerDemonWillHandler; + +public class ItemThrowingDagger extends Item +{ + public static int[] soulBracket = new int[] { 1, 60, 200, 400, 1000, 2000, 4000 }; + + public static double[] soulDrop = new double[] { 2, 4, 7, 10, 13, 15, 18 }; + public static double[] staticDrop = new double[] { 1, 1, 2, 3, 3, 4, 4 }; + + public ItemThrowingDagger() + { + super(new Item.Properties().maxStackSize(64).group(BloodMagic.TAB)); + +// setTranslationKey(BloodMagic.MODID + ".soulSnare."); +// setCreativeTab(BloodMagic.TAB_BM); +// setHasSubtypes(true); +// setMaxStackSize(16); + } + + @Override + public ActionResult onItemRightClick(World worldIn, PlayerEntity playerIn, Hand hand) + { + ItemStack stack = playerIn.getHeldItem(hand); + if (!playerIn.isCreative()) + { + stack.shrink(1); + } + playerIn.getCooldownTracker().setCooldown(this, 50); + + worldIn.playSound((PlayerEntity) null, playerIn.getPosX(), playerIn.getPosY(), playerIn.getPosZ(), SoundEvents.ENTITY_SNOWBALL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (random.nextFloat() * 0.4F + 0.8F)); + + if (!worldIn.isRemote) + { +// System.out.println("Attempting to spawn"); +// EntitySoulSnare snare = new EntitySoulSnare(worldIn, playerIn); +// snare.func_234612_a_(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, 0.0F, 1.5F, 1.0F); +// worldIn.addEntity(snare); + EnumDemonWillType largestType = PlayerDemonWillHandler.getLargestWillType(playerIn); + double souls = PlayerDemonWillHandler.getTotalDemonWill(largestType, playerIn); + + ItemStack copyStack = stack.copy(); + copyStack.setCount(1); + AbstractEntityThrowingDagger dagger = getDagger(copyStack, worldIn, playerIn); + + int level = getLevel(souls); + if (level >= 0) + { + double willDrop = (soulDrop[level] * worldIn.rand.nextDouble() + staticDrop[level]); + dagger.setWillDrop(willDrop); + dagger.setWillType(largestType); + } + + worldIn.addEntity(dagger); +// +// SnowballEntity snowballentity = new SnowballEntity(worldIn, playerIn); +// snowballentity.setItem(itemstack); +// snowballentity.func_234612_a_(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, 0.0F, 1.5F, 1.0F); +// worldIn.addEntity(snowballentity); + } + + return new ActionResult<>(ActionResultType.SUCCESS, stack); + } + + public AbstractEntityThrowingDagger getDagger(ItemStack stack, World world, PlayerEntity player) + { + AbstractEntityThrowingDagger dagger = new EntityThrowingDagger(stack, world, player); + dagger.func_234612_a_(player, player.rotationPitch, player.rotationYaw, 0.0F, 3F, 0.5F); + dagger.setDamage(10); + return dagger; + } + + private int getLevel(double soulsRemaining) + { + int lvl = -1; + for (int i = 0; i < soulBracket.length; i++) + { + if (soulsRemaining >= soulBracket[i]) + { + lvl = i; + } + } + + return lvl; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.throwing_dagger.desc").mergeStyle(TextFormatting.ITALIC).mergeStyle(TextFormatting.GRAY)); + + super.addInformation(stack, world, tooltip, flag); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemThrowingDaggerSyringe.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemThrowingDaggerSyringe.java new file mode 100644 index 00000000..c9384df8 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemThrowingDaggerSyringe.java @@ -0,0 +1,19 @@ +package wayoftime.bloodmagic.common.item; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import wayoftime.bloodmagic.entity.projectile.AbstractEntityThrowingDagger; +import wayoftime.bloodmagic.entity.projectile.EntityThrowingDaggerSyringe; + +public class ItemThrowingDaggerSyringe extends ItemThrowingDagger +{ + @Override + public AbstractEntityThrowingDagger getDagger(ItemStack stack, World world, PlayerEntity player) + { + AbstractEntityThrowingDagger dagger = new EntityThrowingDaggerSyringe(stack, world, player); + dagger.func_234612_a_(player, player.rotationPitch, player.rotationYaw, 0.0F, 3F, 0.5F); + dagger.setDamage(8); + return dagger; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/arc/IARCTool.java b/src/main/java/wayoftime/bloodmagic/common/item/arc/IARCTool.java new file mode 100644 index 00000000..f4c094ba --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/arc/IARCTool.java @@ -0,0 +1,19 @@ +package wayoftime.bloodmagic.common.item.arc; + +import net.minecraft.item.ItemStack; + +/** + * Interface for items that affect ARC operation + */ +public interface IARCTool +{ + default double getCraftingSpeedMultiplier(ItemStack stack) + { + return 1; + } + + default double getAdditionalOutputChanceMultiplier(ItemStack stack) + { + return 1; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/arc/ItemARCToolBase.java b/src/main/java/wayoftime/bloodmagic/common/item/arc/ItemARCToolBase.java new file mode 100644 index 00000000..7867c6b5 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/arc/ItemARCToolBase.java @@ -0,0 +1,57 @@ +package wayoftime.bloodmagic.common.item.arc; + +import java.util.List; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.util.ChatUtil; + +public class ItemARCToolBase extends Item implements IARCTool +{ + private final double craftingMultiplier; + private final double additionalOutputChance; + + public ItemARCToolBase(int maxDamage, double craftingMultiplier) + { + this(maxDamage, craftingMultiplier, 1); + } + + public ItemARCToolBase(int maxDamage, double craftingMultiplier, double additionalOutputChance) + { + super(new Item.Properties().maxStackSize(1).group(BloodMagic.TAB).maxDamage(maxDamage)); + this.craftingMultiplier = craftingMultiplier; + this.additionalOutputChance = additionalOutputChance; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.arctool.uses", stack.getMaxDamage() - stack.getDamage()).mergeStyle(TextFormatting.GRAY)); + + if (getAdditionalOutputChanceMultiplier(stack) != 1) + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.arctool.additionaldrops", ChatUtil.DECIMAL_FORMAT.format(getAdditionalOutputChanceMultiplier(stack))).mergeStyle(TextFormatting.GRAY)); + + super.addInformation(stack, world, tooltip, flag); + } + + @Override + public double getCraftingSpeedMultiplier(ItemStack stack) + { + return craftingMultiplier; + } + + @Override + public double getAdditionalOutputChanceMultiplier(ItemStack stack) + { + return additionalOutputChance; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/block/ItemBlockAlchemyTable.java b/src/main/java/wayoftime/bloodmagic/common/item/block/ItemBlockAlchemyTable.java new file mode 100644 index 00000000..ee0aed2e --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/block/ItemBlockAlchemyTable.java @@ -0,0 +1,96 @@ +package wayoftime.bloodmagic.common.item.block; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.SoundType; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.item.BlockItem; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import wayoftime.bloodmagic.common.block.BlockAlchemyTable; +import wayoftime.bloodmagic.tile.TileAlchemyTable; + +public class ItemBlockAlchemyTable extends BlockItem +{ + public ItemBlockAlchemyTable(Block block, Properties properties) + { + super(block, properties); + } + + @Override + public ActionResultType tryPlace(BlockItemUseContext context) + { +// PlayerEntity player = context.getPlayer() +// float yaw = player.rotationYaw; + Direction direction = context.getPlacementHorizontalFacing(); + PlayerEntity player = context.getPlayer(); + + if (direction.getYOffset() != 0) + { + return ActionResultType.FAIL; + } + + World world = context.getWorld(); + BlockPos pos = context.getPos(); + + if (!world.isAirBlock(pos.offset(direction))) + { + return ActionResultType.FAIL; + } + + BlockState thisState = this.getBlock().getDefaultState().with(BlockAlchemyTable.DIRECTION, direction).with(BlockAlchemyTable.INVISIBLE, false); + BlockState newState = this.getBlock().getDefaultState().with(BlockAlchemyTable.DIRECTION, direction).with(BlockAlchemyTable.INVISIBLE, true); + + if (!this.canPlace(context, thisState) || !world.setBlockState(pos.offset(direction), newState, 3)) + { + return ActionResultType.FAIL; + } + + if (!world.setBlockState(pos, thisState, 3)) + { + return ActionResultType.FAIL; + } + + BlockState state = world.getBlockState(pos); + if (state.getBlock() == this.getBlock()) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileAlchemyTable) + { + ((TileAlchemyTable) tile).setInitialTableParameters(direction, false, pos.offset(direction)); + } + + TileEntity slaveTile = world.getTileEntity(pos.offset(direction)); + if (slaveTile instanceof TileAlchemyTable) + { + ((TileAlchemyTable) slaveTile).setInitialTableParameters(direction, true, pos); + } + + setTileEntityNBT(world, context.getPlayer(), pos, context.getItem()); + this.getBlock().onBlockPlacedBy(world, pos, state, context.getPlayer(), context.getItem()); + if (player instanceof ServerPlayerEntity) + { + CriteriaTriggers.PLACED_BLOCK.trigger((ServerPlayerEntity) player, pos, context.getItem()); + } + } + + SoundType soundtype = state.getSoundType(world, pos, context.getPlayer()); + world.playSound(player, pos, this.getPlaceSound(state, world, pos, context.getPlayer()), SoundCategory.BLOCKS, (soundtype.getVolume() + + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F); + if (player == null || !player.abilities.isCreativeMode) + { + context.getItem().shrink(1); + } + + return ActionResultType.func_233537_a_(world.isRemote); + +// return ActionResultType.SUCCESS; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/block/ItemBlockMimic.java b/src/main/java/wayoftime/bloodmagic/common/item/block/ItemBlockMimic.java new file mode 100644 index 00000000..3123a5f9 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/block/ItemBlockMimic.java @@ -0,0 +1,139 @@ +package wayoftime.bloodmagic.common.item.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.SoundType; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.BlockItem; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.ChestTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import wayoftime.bloodmagic.tile.TileMimic; + +public class ItemBlockMimic extends BlockItem +{ + public ItemBlockMimic(Block block, Properties prop) + { + super(block, prop); + } + + @Override + public ActionResultType tryPlace(BlockItemUseContext context) + { + PlayerEntity player = context.getPlayer(); + ItemStack stack = player.getHeldItem(context.getHand()); + + // If not sneaking, do normal item use + if (!player.isSneaking()) + { + return super.tryPlace(context); + } + + BlockPos pos = context.getPos().offset(context.getFace().getOpposite()); + World world = context.getWorld(); + Direction direction = context.getFace(); + + // IF sneaking and player has permission, replace the targeted block + if (player.canPlayerEdit(pos, direction, stack)) + { + // Store information about the block being replaced and its appropriate + // itemstack + BlockState replacedBlockstate = world.getBlockState(pos); + Block replacedBlock = replacedBlockstate.getBlock(); + ItemStack replacedStack = replacedBlock.getItem(world, pos, replacedBlockstate); + + // Get the state for the mimic + BlockState mimicBlockstate = this.getBlock().getDefaultState(); + + // Check if the block can be replaced + + if (!canReplaceBlock(world, pos, replacedBlockstate)) + { + return super.tryPlace(context); + } + + // Check if the tile entity, if any, can be replaced + TileEntity tileReplaced = world.getTileEntity(pos); + if (!canReplaceTile(tileReplaced)) + { + return ActionResultType.FAIL; + } + + // If tile can be replaced, store info about the tile + CompoundNBT tileTag = getTagFromTileEntity(tileReplaced); + if (tileReplaced != null) + { + CompoundNBT voidTag = new CompoundNBT(); + voidTag.putInt("x", pos.getX()); + voidTag.putInt("y", pos.getY()); + voidTag.putInt("z", pos.getZ()); + tileReplaced.deserializeNBT(voidTag); + } + + // Remove one item from stack + stack.shrink(1); + + // Replace the block + world.setBlockState(pos, mimicBlockstate, 3); + // Make placing sound + SoundType soundtype = mimicBlockstate.getSoundType(world, pos, context.getPlayer()); + world.playSound(player, pos, soundtype.getPlaceSound(), SoundCategory.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F); + + // Replace the tile entity + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileMimic) + { + TileMimic mimic = (TileMimic) tile; + mimic.tileTag = tileTag; +// mimic.setReplacedState(replacedBlockstate); + mimic.setMimic(replacedBlockstate); + mimic.setInventorySlotContents(0, replacedStack); + mimic.refreshTileEntity(); + + if (player.isCreative()) + { + mimic.dropItemsOnBreak = false; + } + } + return ActionResultType.SUCCESS; + } + + return ActionResultType.FAIL; + + } + + public boolean canReplaceTile(TileEntity tile) + { + if (tile instanceof ChestTileEntity) + { + return true; + } + + return tile == null; + } + + public boolean canReplaceBlock(World world, BlockPos pos, BlockState state) + { + return state.getBlockHardness(world, pos) != -1.0F; + } + + public CompoundNBT getTagFromTileEntity(TileEntity tile) + { + CompoundNBT tag = new CompoundNBT(); + + if (tile != null) + { + return tile.write(tag); + } + + return tag; + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/block/ItemBlockShapedCharge.java b/src/main/java/wayoftime/bloodmagic/common/item/block/ItemBlockShapedCharge.java new file mode 100644 index 00000000..1069a834 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/block/ItemBlockShapedCharge.java @@ -0,0 +1,71 @@ +package wayoftime.bloodmagic.common.item.block; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.BlockItem; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResult; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.world.World; +import wayoftime.bloodmagic.anointment.AnointmentHolder; +import wayoftime.bloodmagic.entity.projectile.EntityShapedCharge; +import wayoftime.bloodmagic.tile.TileExplosiveCharge; + +public class ItemBlockShapedCharge extends BlockItem +{ + public ItemBlockShapedCharge(Block blockIn, Properties builder) + { + super(blockIn, builder); + } + + @Override + public ActionResult onItemRightClick(World worldIn, PlayerEntity playerIn, Hand hand) + { + ItemStack stack = playerIn.getHeldItem(hand); + if (!playerIn.isCreative()) + { + stack.shrink(1); + } + + worldIn.playSound((PlayerEntity) null, playerIn.getPosX(), playerIn.getPosY(), playerIn.getPosZ(), SoundEvents.ENTITY_SNOWBALL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (random.nextFloat() * 0.4F + 0.8F)); + + if (!worldIn.isRemote) + { +// EntitySoulSnare snare = new EntitySoulSnare(worldIn, playerIn); + EntityShapedCharge charge = new EntityShapedCharge(worldIn, this.getBlock(), playerIn); + charge.func_234612_a_(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, 0.0F, 1.5F, 1.0F); + charge.setAnointmentHolder(AnointmentHolder.fromItemStack(stack)); + worldIn.addEntity(charge); +// +// SnowballEntity snowballentity = new SnowballEntity(worldIn, playerIn); +// snowballentity.setItem(itemstack); +// snowballentity.func_234612_a_(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, 0.0F, 1.5F, 1.0F); +// worldIn.addEntity(snowballentity); + } + + return new ActionResult<>(ActionResultType.SUCCESS, stack); + } + + @Override + public ActionResultType tryPlace(BlockItemUseContext context) + { + ActionResultType result = super.tryPlace(context); + + AnointmentHolder holder = AnointmentHolder.fromItemStack(context.getItem()); + if (holder != null) + { + TileEntity tile = context.getWorld().getTileEntity(context.getPos()); + if (tile instanceof TileExplosiveCharge) + { + ((TileExplosiveCharge) tile).setAnointmentHolder(holder); + } + } + + return result; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/inventory/ContainerHolding.java b/src/main/java/wayoftime/bloodmagic/common/item/inventory/ContainerHolding.java new file mode 100644 index 00000000..3e207e89 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/inventory/ContainerHolding.java @@ -0,0 +1,202 @@ +package wayoftime.bloodmagic.common.item.inventory; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fml.common.thread.EffectiveSide; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.item.sigil.ISigil; +import wayoftime.bloodmagic.common.item.sigil.ItemSigilHolding; + +public class ContainerHolding extends Container +{ + public final InventoryHolding inventoryHolding; + private final int PLAYER_INVENTORY_ROWS = 3; + private final int PLAYER_INVENTORY_COLUMNS = 9; + private final PlayerEntity player; + + public ContainerHolding(int windowId, PlayerInventory playerInventory, PacketBuffer extraData) + { + this(windowId, playerInventory.player, playerInventory, new InventoryHolding(extraData.readItemStack())); + } + + public ContainerHolding(int windowId, PlayerEntity player, PlayerInventory playerInventory, InventoryHolding inventoryHolding) + { + super(BloodMagicBlocks.HOLDING_CONTAINER.get(), windowId); + this.player = player; + this.inventoryHolding = inventoryHolding; + int currentSlotHeldIn = player.inventory.currentItem; + this.setup(playerInventory, currentSlotHeldIn); + } + + public void setup(PlayerInventory inventory, int currentSlotHeldIn) + { + for (int columnIndex = 0; columnIndex < ItemSigilHolding.inventorySize; ++columnIndex) + { + this.addSlot(new SlotHolding(this, inventoryHolding, player, columnIndex, 8 + columnIndex * 36, 17)); + } + + for (int rowIndex = 0; rowIndex < PLAYER_INVENTORY_ROWS; ++rowIndex) + { + for (int columnIndex = 0; columnIndex < PLAYER_INVENTORY_COLUMNS; ++columnIndex) + { + this.addSlot(new Slot(player.inventory, columnIndex + rowIndex * 9 + 9, 8 + columnIndex * 18, 41 + rowIndex * 18)); + } + } + + for (int actionBarIndex = 0; actionBarIndex < PLAYER_INVENTORY_COLUMNS; ++actionBarIndex) + { + if (actionBarIndex == currentSlotHeldIn) + { + this.addSlot(new SlotDisabled(player.inventory, actionBarIndex, 8 + actionBarIndex * 18, 99)); + } else + { + this.addSlot(new Slot(player.inventory, actionBarIndex, 8 + actionBarIndex * 18, 99)); + } + } + } + + @Override + public boolean canInteractWith(PlayerEntity entityPlayer) + { + return true; + } + + @Override + public void onContainerClosed(PlayerEntity entityPlayer) + { + super.onContainerClosed(entityPlayer); + + if (!entityPlayer.getEntityWorld().isRemote) + { + saveInventory(entityPlayer); + } + } + + @Override + public void detectAndSendChanges() + { + super.detectAndSendChanges(); + + if (!player.getEntityWorld().isRemote) + { + saveInventory(player); + } + } + + @Override + public ItemStack transferStackInSlot(PlayerEntity entityPlayer, int slotIndex) + { + ItemStack stack = ItemStack.EMPTY; + Slot slotObject = inventorySlots.get(slotIndex); + int slots = inventorySlots.size(); + + if (slotObject != null && slotObject.getHasStack()) + { + ItemStack stackInSlot = slotObject.getStack(); + stack = stackInSlot.copy(); + + if (stack.getItem() instanceof ISigil) + { + if (slotIndex < ItemSigilHolding.inventorySize) + { + if (!this.mergeItemStack(stackInSlot, ItemSigilHolding.inventorySize, slots, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stackInSlot, 0, ItemSigilHolding.inventorySize, false)) + { + return ItemStack.EMPTY; + } + } else if (stack.getItem() instanceof ItemSigilHolding) + { + if (slotIndex < ItemSigilHolding.inventorySize + (PLAYER_INVENTORY_ROWS * PLAYER_INVENTORY_COLUMNS)) + { + if (!this.mergeItemStack(stackInSlot, ItemSigilHolding.inventorySize + (PLAYER_INVENTORY_ROWS * PLAYER_INVENTORY_COLUMNS), inventorySlots.size(), false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stackInSlot, ItemSigilHolding.inventorySize, ItemSigilHolding.inventorySize + (PLAYER_INVENTORY_ROWS * PLAYER_INVENTORY_COLUMNS), false)) + { + return ItemStack.EMPTY; + } + } + + if (stackInSlot.isEmpty()) + { + slotObject.putStack(ItemStack.EMPTY); + } else + { + slotObject.onSlotChanged(); + } + + if (stackInSlot.getCount() == stack.getCount()) + { + return ItemStack.EMPTY; + } + + slotObject.onTake(player, stackInSlot); + } + + return stack; + } + + public void saveInventory(PlayerEntity entityPlayer) + { + inventoryHolding.onGuiSaved(entityPlayer); + } + + private class SlotHolding extends Slot + { + private final PlayerEntity player; + private ContainerHolding containerHolding; + + public SlotHolding(ContainerHolding containerHolding, IInventory inventory, PlayerEntity player, int slotIndex, int x, int y) + { + super(inventory, slotIndex, x, y); + this.player = player; + this.containerHolding = containerHolding; + } + + @Override + public void onSlotChanged() + { + super.onSlotChanged(); + + if (EffectiveSide.get().isServer()) + { + containerHolding.saveInventory(player); + } + } + + @Override + public boolean isItemValid(ItemStack itemStack) + { + return itemStack.getItem() instanceof ISigil && !(itemStack.getItem() instanceof ItemSigilHolding); + } + } + + private class SlotDisabled extends Slot + { + public SlotDisabled(IInventory inventory, int slotIndex, int x, int y) + { + super(inventory, slotIndex, x, y); + } + + @Override + public boolean isItemValid(ItemStack itemStack) + { + return false; + } + + @Override + public boolean canTakeStack(PlayerEntity player) + { + return false; + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/inventory/InventoryHolding.java b/src/main/java/wayoftime/bloodmagic/common/item/inventory/InventoryHolding.java new file mode 100644 index 00000000..218cd152 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/inventory/InventoryHolding.java @@ -0,0 +1,82 @@ +package wayoftime.bloodmagic.common.item.inventory; + +import java.util.UUID; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import wayoftime.bloodmagic.common.item.sigil.ISigil; +import wayoftime.bloodmagic.common.item.sigil.ItemSigilHolding; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.Utils; + +public class InventoryHolding extends ItemInventory +{ +// protected ItemStack[] inventory; + + public InventoryHolding(ItemStack itemStack) + { + super(itemStack, ItemSigilHolding.inventorySize, "SigilOfHolding"); + } + + public void onGuiSaved(PlayerEntity entityPlayer) + { + masterStack = findParentStack(entityPlayer); + + if (!masterStack.isEmpty()) + { + save(); + } + } + + public ItemStack findParentStack(PlayerEntity entityPlayer) + { + if (Utils.hasUUID(masterStack)) + { + UUID parentStackUUID = new UUID(masterStack.getTag().getLong(Constants.NBT.MOST_SIG), masterStack.getTag().getLong(Constants.NBT.LEAST_SIG)); + for (int i = 0; i < entityPlayer.inventory.getSizeInventory(); i++) + { + ItemStack itemStack = entityPlayer.inventory.getStackInSlot(i); + + if (!itemStack.isEmpty() && Utils.hasUUID(itemStack)) + { + if (itemStack.getTag().getLong(Constants.NBT.MOST_SIG) == parentStackUUID.getMostSignificantBits() && itemStack.getTag().getLong(Constants.NBT.LEAST_SIG) == parentStackUUID.getLeastSignificantBits()) + { + return itemStack; + } + } + } + } + + return ItemStack.EMPTY; + } + + public void save() + { + CompoundNBT nbtTagCompound = masterStack.getTag(); + + if (nbtTagCompound == null) + { + nbtTagCompound = new CompoundNBT(); + + UUID uuid = UUID.randomUUID(); + nbtTagCompound.putLong(Constants.NBT.MOST_SIG, uuid.getMostSignificantBits()); + nbtTagCompound.putLong(Constants.NBT.LEAST_SIG, uuid.getLeastSignificantBits()); + } + + writeToNBT(nbtTagCompound); + masterStack.setTag(nbtTagCompound); + } + + @Override + public boolean isItemValidForSlot(int slotIndex, ItemStack itemStack) + { + return itemStack.getItem() instanceof ISigil && !(itemStack.getItem() instanceof ItemSigilHolding); + } + + @Override + public int getInventoryStackLimit() + { + return 1; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/inventory/InventoryWrapper.java b/src/main/java/wayoftime/bloodmagic/common/item/inventory/InventoryWrapper.java new file mode 100644 index 00000000..26adf391 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/inventory/InventoryWrapper.java @@ -0,0 +1,101 @@ +package wayoftime.bloodmagic.common.item.inventory; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +public class InventoryWrapper implements IInventory +{ + protected int[] syncedSlots = new int[0]; + protected NonNullList inventory; + private int size; + + public InventoryWrapper(int size) + { + this.inventory = NonNullList.withSize(size, ItemStack.EMPTY); + this.size = size; + } + + @Override + public void clear() + { + this.inventory = NonNullList.withSize(size, ItemStack.EMPTY); + } + + @Override + public int getSizeInventory() + { + return size; + } + + @Override + public boolean isEmpty() + { + for (ItemStack stack : inventory) if (!stack.isEmpty()) + return false; + + return true; + } + + @Override + public ItemStack getStackInSlot(int index) + { + return inventory.get(index); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + if (!getStackInSlot(index).isEmpty()) + { + if (getStackInSlot(index).getCount() <= count) + { + ItemStack itemStack = inventory.get(index); + inventory.set(index, ItemStack.EMPTY); + markDirty(); + return itemStack; + } + + ItemStack itemStack = inventory.get(index).split(count); + markDirty(); + return itemStack; + } + + return ItemStack.EMPTY; + } + + @Override + public ItemStack removeStackFromSlot(int slot) + { + if (!inventory.get(slot).isEmpty()) + { + ItemStack itemStack = inventory.get(slot); + setInventorySlotContents(slot, ItemStack.EMPTY); + return itemStack; + } + return ItemStack.EMPTY; + } + + @Override + public void setInventorySlotContents(int slot, ItemStack stack) + { + inventory.set(slot, stack); + if (!stack.isEmpty() && stack.getCount() > getInventoryStackLimit()) + stack.setCount(getInventoryStackLimit()); + markDirty(); + } + + @Override + public void markDirty() + { + + } + + @Override + public boolean isUsableByPlayer(PlayerEntity player) + { + return false; + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/inventory/ItemInventory.java b/src/main/java/wayoftime/bloodmagic/common/item/inventory/ItemInventory.java new file mode 100644 index 00000000..2b739f8a --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/inventory/ItemInventory.java @@ -0,0 +1,252 @@ +package wayoftime.bloodmagic.common.item.inventory; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.NonNullList; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.helper.NBTHelper; + +public class ItemInventory implements IInventory +{ + protected int[] syncedSlots = new int[0]; + protected ItemStack masterStack; + private NonNullList inventory; + private int size; + private String name; + + public ItemInventory(ItemStack masterStack, int size, String name) + { + this.inventory = NonNullList.withSize(size, ItemStack.EMPTY); + this.size = size; + this.name = name; + this.masterStack = masterStack; + + if (!masterStack.isEmpty()) + this.readFromStack(masterStack); + } + + public void initializeInventory(ItemStack masterStack) + { + this.masterStack = masterStack; + this.clear(); + this.readFromStack(masterStack); + } + + private boolean isSyncedSlot(int slot) + { + for (int s : this.syncedSlots) + { + if (s == slot) + { + return true; + } + } + return false; + } + + public void readFromNBT(CompoundNBT tagCompound) + { + this.inventory = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + + ItemStackHelper.loadAllItems(tagCompound, this.inventory); + } + + public void writeToNBT(CompoundNBT tagCompound) + { + ItemStackHelper.saveAllItems(tagCompound, this.inventory); +// ListNBT tags = new ListNBT(); +// +// for (int i = 0; i < inventory.size(); i++) +// { +// if ((!inventory.get(i).isEmpty()) && !isSyncedSlot(i)) +// { +// CompoundNBT data = new CompoundNBT(); +// data.putByte(Constants.NBT.SLOT, (byte) i); +// inventory.get(i).write(data); +// tags.add(data); +//// tags.appendTag(data); +// } +// } +// +// tagCompound.put(Constants.NBT.ITEMS, tags); + } + + public void readFromStack(ItemStack masterStack) + { + if (masterStack != null) + { + NBTHelper.checkNBT(masterStack); + CompoundNBT tag = masterStack.getTag(); + readFromNBT(tag.getCompound(Constants.NBT.ITEM_INVENTORY)); + } + } + + public void writeToStack(ItemStack masterStack) + { + if (masterStack != null) + { + NBTHelper.checkNBT(masterStack); + CompoundNBT tag = masterStack.getTag(); + CompoundNBT invTag = new CompoundNBT(); + writeToNBT(invTag); + tag.put(Constants.NBT.ITEM_INVENTORY, invTag); + } + } + + @Override + public int getSizeInventory() + { + return size; + } + + @Override + public ItemStack getStackInSlot(int index) + { + return inventory.get(index); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + if (!inventory.get(index).isEmpty()) + { +// if (!worldObj.isRemote) +// worldObj.markBlockForUpdate(this.pos); + + if (inventory.get(index).getCount() <= count) + { + ItemStack itemStack = inventory.get(index); + inventory.set(index, ItemStack.EMPTY); + markDirty(); + return itemStack; + } + + ItemStack itemStack = inventory.get(index).split(count); + if (inventory.get(index).isEmpty()) + inventory.set(index, ItemStack.EMPTY); + + markDirty(); + return itemStack; + } + + return null; + } + + @Override + public ItemStack removeStackFromSlot(int slot) + { + if (!inventory.get(slot).isEmpty()) + { + ItemStack itemStack = inventory.get(slot); + setInventorySlotContents(slot, ItemStack.EMPTY); + return itemStack; + } + return ItemStack.EMPTY; + } + + @Override + public void setInventorySlotContents(int slot, ItemStack stack) + { + inventory.set(slot, stack); + if (stack.getCount() > getInventoryStackLimit()) + stack.setCount(getInventoryStackLimit()); + markDirty(); +// if (!worldObj.isRemote) +// worldObj.markBlockForUpdate(this.pos); + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean isUsableByPlayer(PlayerEntity player) + { + return true; + } + + @Override + public void openInventory(PlayerEntity player) + { + + } + + @Override + public void closeInventory(PlayerEntity player) + { + + } + + @Override + public boolean isItemValidForSlot(int index, ItemStack stack) + { + return true; + } + +// @Override +// public int getField(int id) +// { +// return 0; +// } +// +// @Override +// public void setField(int id, int value) +// { +// +// } +// +// @Override +// public int getFieldCount() +// { +// return 0; +// } + + @Override + public void clear() + { + this.inventory = NonNullList.withSize(getSizeInventory(), ItemStack.EMPTY); + } + +// @Override +// public String getName() +// { +// return name; +// } +// +// @Override +// public boolean hasCustomName() +// { +// return false; +// } +// +// @Override +// public ITextComponent getDisplayName() +// { +// return new StringTextComponent(getName()); +// } + + @Override + public void markDirty() + { + if (masterStack != null) + { + this.writeToStack(masterStack); + } + } + + @Override + public boolean isEmpty() + { + return false; + } + + public boolean canInventoryBeManipulated() + { + return masterStack != null; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ISigil.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ISigil.java new file mode 100644 index 00000000..b438154b --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ISigil.java @@ -0,0 +1,30 @@ +package wayoftime.bloodmagic.common.item.sigil; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * Used for all ItemSigils EXCEPT for Sigils of Holding. + */ +public interface ISigil +{ + default boolean performArrayEffect(World world, BlockPos pos) + { + return false; + } + + default boolean hasArrayEffect() + { + return false; + } + + interface Holding + { + @Nonnull + ItemStack getHeldItem(ItemStack holdingStack, PlayerEntity player); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilAir.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilAir.java new file mode 100644 index 00000000..3fca97f4 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilAir.java @@ -0,0 +1,61 @@ +package wayoftime.bloodmagic.common.item.sigil; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.World; +import wayoftime.bloodmagic.core.data.SoulTicket; +import wayoftime.bloodmagic.util.helper.NetworkHelper; +import wayoftime.bloodmagic.util.helper.PlayerHelper; + +public class ItemSigilAir extends ItemSigilBase +{ + public ItemSigilAir() + { + super("air", 50); + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + ItemStack stack = player.getHeldItem(hand); + if (stack.getItem() instanceof ISigil.Holding) + stack = ((Holding) stack.getItem()).getHeldItem(stack, player); + if (PlayerHelper.isFakePlayer(player)) + return ActionResult.resultFail(stack); + + boolean unusable = isUnusable(stack); + if (world.isRemote && !unusable) + { + Vector3d vec = player.getLookVec(); + double wantedVelocity = 1.7; + + // TODO - Revisit after potions +// if (player.isPotionActive(RegistrarBloodMagic.BOOST)) +// { +// int amplifier = player.getActivePotionEffect(RegistrarBloodMagic.BOOST).getAmplifier(); +// wantedVelocity += (1 + amplifier) * (0.35); +// } + + player.setMotion(vec.x * wantedVelocity, vec.y * wantedVelocity, vec.z * wantedVelocity); + } + + world.playSound(player, player.getPosX(), player.getPosY(), player.getPosZ(), SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) + * 0.8F); + + if (!world.isRemote) + { + if (!player.isCreative()) + this.setUnusable(stack, !NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()); + + if (!unusable) + player.fallDistance = 0; + } + + return super.onItemRightClick(world, player, hand); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilBase.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilBase.java new file mode 100644 index 00000000..b33d4c1c --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilBase.java @@ -0,0 +1,52 @@ +package wayoftime.bloodmagic.common.item.sigil; + +import java.util.List; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.item.ItemSigil; + +public class ItemSigilBase extends ItemSigil +{ + protected final String tooltipBase; +// private final String name; + + public ItemSigilBase(String name, int lpUsed) + { + super(new Item.Properties().maxStackSize(1).group(BloodMagic.TAB), lpUsed); +// super(lpUsed); + +// this.name = name; + this.tooltipBase = "tooltip.bloodmagic.sigil." + name + "."; + } + + public ItemSigilBase(String name) + { + this(name, 0); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + tooltip.add(new TranslationTextComponent(tooltipBase + "desc").mergeStyle(TextFormatting.ITALIC).mergeStyle(TextFormatting.GRAY)); +// if (TextHelper.canTranslate(tooltipBase + "desc")) +// tooltip.addAll(Arrays.asList(WordUtils.wrap(TextHelper.localizeEffect(tooltipBase +// + "desc"), 30, "/cut", false).split("/cut"))); + + super.addInformation(stack, world, tooltip, flag); + } + +// public String getName() +// { +// return name; +// } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilBloodLight.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilBloodLight.java new file mode 100644 index 00000000..e7245bae --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilBloodLight.java @@ -0,0 +1,103 @@ +package wayoftime.bloodmagic.common.item.sigil; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceContext; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.core.data.SoulNetwork; +import wayoftime.bloodmagic.core.data.SoulTicket; +import wayoftime.bloodmagic.entity.projectile.EntityBloodLight; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.helper.NBTHelper; +import wayoftime.bloodmagic.util.helper.NetworkHelper; +import wayoftime.bloodmagic.util.helper.PlayerHelper; + +public class ItemSigilBloodLight extends ItemSigilBase +{ + public ItemSigilBloodLight() + { + super("bloodlight", 10); + } + + @Override + public void inventoryTick(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) + { + if (getCooldownRemainder(stack) > 0) + reduceCooldown(stack); + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + ItemStack stack = player.getHeldItem(hand); + if (stack.getItem() instanceof ISigil.Holding) + stack = ((Holding) stack.getItem()).getHeldItem(stack, player); + if (PlayerHelper.isFakePlayer(player)) + return ActionResult.resultFail(stack); + + RayTraceResult mop = rayTrace(world, player, RayTraceContext.FluidMode.NONE); + + if (getCooldownRemainder(stack) > 0) + return super.onItemRightClick(world, player, hand); + + if (mop != null && mop.getType() == RayTraceResult.Type.BLOCK) + { + BlockRayTraceResult blockRayTrace = (BlockRayTraceResult) mop; + BlockPos blockPos = blockRayTrace.getPos().offset(blockRayTrace.getFace()); + + if (world.isAirBlock(blockPos)) + { + world.setBlockState(blockPos, BloodMagicBlocks.BLOOD_LIGHT.get().getDefaultState()); + if (!world.isRemote) + { + SoulNetwork network = NetworkHelper.getSoulNetwork(getBinding(stack)); + network.syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())); + } + resetCooldown(stack); + player.swingArm(hand); + return super.onItemRightClick(world, player, hand); + } + } else + { + if (!world.isRemote) + { + SoulNetwork network = NetworkHelper.getSoulNetwork(getBinding(stack)); + EntityBloodLight light = new EntityBloodLight(world, player); + light.func_234612_a_(player, player.rotationPitch, player.rotationYaw, 0.0F, 1.5F, 1.0F); + world.addEntity(light); + network.syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())); + } + resetCooldown(stack); + } + + return super.onItemRightClick(world, player, hand); + } + + @Override + public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) + { + return oldStack.getItem() != newStack.getItem(); + } + + public int getCooldownRemainder(ItemStack stack) + { + return NBTHelper.checkNBT(stack).getTag().getInt(Constants.NBT.TICKS_REMAINING); + } + + public void reduceCooldown(ItemStack stack) + { + NBTHelper.checkNBT(stack).getTag().putInt(Constants.NBT.TICKS_REMAINING, getCooldownRemainder(stack) - 1); + } + + public void resetCooldown(ItemStack stack) + { + NBTHelper.checkNBT(stack).getTag().putInt(Constants.NBT.TICKS_REMAINING, 10); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilDivination.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilDivination.java new file mode 100644 index 00000000..98591287 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilDivination.java @@ -0,0 +1,118 @@ +package wayoftime.bloodmagic.common.item.sigil; + +import java.util.List; + +import com.google.common.collect.Lists; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceContext.FluidMode; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import wayoftime.bloodmagic.altar.IBloodAltar; +import wayoftime.bloodmagic.core.data.Binding; +import wayoftime.bloodmagic.api.compat.IAltarReader; +import wayoftime.bloodmagic.tile.TileIncenseAltar; +import wayoftime.bloodmagic.util.ChatUtil; +import wayoftime.bloodmagic.util.helper.NetworkHelper; +import wayoftime.bloodmagic.util.helper.NumeralHelper; +import wayoftime.bloodmagic.util.helper.PlayerHelper; + +public class ItemSigilDivination extends ItemSigilBase implements IAltarReader +{ + private final boolean isSimple; + + public ItemSigilDivination(boolean simple) + { + super(simple ? "divination" : "seer"); + isSimple = simple; + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + ItemStack stack = player.getHeldItem(hand); + if (stack.getItem() instanceof ISigil.Holding) + stack = ((Holding) stack.getItem()).getHeldItem(stack, player); + if (PlayerHelper.isFakePlayer(player)) + return ActionResult.resultFail(stack); + + if (!world.isRemote) + { + RayTraceResult position = Item.rayTrace(world, player, FluidMode.NONE); + + if (position == null || position.getType() == RayTraceResult.Type.MISS) + { + super.onItemRightClick(world, player, hand); + + Binding binding = getBinding(stack); + if (isSimple && binding != null) + { + int currentEssence = NetworkHelper.getSoulNetwork(binding).getCurrentEssence(); + List toSend = Lists.newArrayList(); + if (!binding.getOwnerId().equals(player.getGameProfile().getId())) + toSend.add(new TranslationTextComponent(tooltipBase + "otherNetwork", binding.getOwnerName())); + toSend.add(new TranslationTextComponent(tooltipBase + "currentEssence", currentEssence)); + ChatUtil.sendNoSpam(player, toSend.toArray(new ITextComponent[toSend.size()])); + } + } else + { + if (position.getType() == RayTraceResult.Type.BLOCK) + { + TileEntity tile = world.getTileEntity(new BlockPos(position.getHitVec())); + + if (tile != null && tile instanceof IBloodAltar) + { + IBloodAltar altar = (IBloodAltar) tile; + int tier = altar.getTier(); + int currentEssence = altar.getCurrentBlood(); + int capacity = altar.getCapacity(); + altar.checkTier(); + if (isSimple) + { + ChatUtil.sendNoSpam(player, new TranslationTextComponent(tooltipBase + "currentAltarTier", NumeralHelper.toRoman(tier)), new TranslationTextComponent(tooltipBase + "currentEssence", currentEssence), new TranslationTextComponent(tooltipBase + "currentAltarCapacity", capacity)); + } else + { + ChatUtil.sendNoSpam(player, new TranslationTextComponent(tooltipBase + "currentAltarTier", NumeralHelper.toRoman(tier)), new TranslationTextComponent(tooltipBase + "currentEssence", currentEssence), new TranslationTextComponent(tooltipBase + "currentAltarCapacity", capacity)); + } + } else if (tile != null && tile instanceof TileIncenseAltar) + { + TileIncenseAltar altar = (TileIncenseAltar) tile; + altar.recheckConstruction(); + double tranquility = altar.tranquility; + ChatUtil.sendNoSpam(player, new TranslationTextComponent(tooltipBase + "currentTranquility", (int) ((100D * (int) (100 * tranquility)) / 100d)), new TranslationTextComponent(tooltipBase + "currentBonus", (int) (100 * altar.incenseAddition))); + } +// else if (tile != null && tile instanceof TileInversionPillar) +// { +// TileInversionPillar pillar = (TileInversionPillar) tile; +// double inversion = pillar.getCurrentInversion(); +// ChatUtil.sendNoSpam(player, new TextComponentTranslation(tooltipBase + "currentInversion", ((int) (10 * inversion)) / 10d)); +// } + else + { + Binding binding = getBinding(stack); + if (binding != null) + { + int currentEssence = NetworkHelper.getSoulNetwork(binding).getCurrentEssence(); + List toSend = Lists.newArrayList(); + if (!binding.getOwnerId().equals(player.getGameProfile().getId())) + toSend.add(new TranslationTextComponent(tooltipBase + "otherNetwork", binding.getOwnerName())); + toSend.add(new TranslationTextComponent(tooltipBase + "currentEssence", currentEssence)); + ChatUtil.sendNoSpam(player, toSend.toArray(new ITextComponent[toSend.size()])); + } + } + } + } + + } + + return super.onItemRightClick(world, player, hand); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilFastMiner.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilFastMiner.java new file mode 100644 index 00000000..5caaab09 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilFastMiner.java @@ -0,0 +1,61 @@ +package wayoftime.bloodmagic.common.item.sigil; + +import java.util.List; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.EffectInstance; +import net.minecraft.potion.Effects; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import wayoftime.bloodmagic.util.DamageSourceBloodMagic; +import wayoftime.bloodmagic.util.helper.PlayerHelper; + +public class ItemSigilFastMiner extends ItemSigilToggleableBase +{ + public ItemSigilFastMiner() + { + super("fast_miner", 100); + } + + @Override + public void onSigilUpdate(ItemStack stack, World world, PlayerEntity player, int itemSlot, boolean isSelected) + { + if (PlayerHelper.isFakePlayer(player)) + return; + player.addPotionEffect(new EffectInstance(Effects.HASTE, 2, 0, true, false)); + } + + @Override + public boolean performArrayEffect(World world, BlockPos pos) + { + double radius = 10; + int ticks = 600; + int potionPotency = 2; + + AxisAlignedBB bb = new AxisAlignedBB(pos).grow(radius); + List playerList = world.getEntitiesWithinAABB(PlayerEntity.class, bb); + for (PlayerEntity player : playerList) + { + if (!player.isPotionActive(Effects.HASTE) || (player.isPotionActive(Effects.HASTE) + && player.getActivePotionEffect(Effects.HASTE).getAmplifier() < potionPotency)) + { + player.addPotionEffect(new EffectInstance(Effects.HASTE, ticks, potionPotency)); + if (!player.isCreative()) + { + player.hurtResistantTime = 0; + player.attackEntityFrom(DamageSourceBloodMagic.INSTANCE, 1.0F); + } + } + } + + return false; + } + + @Override + public boolean hasArrayEffect() + { + return true; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilFluidBase.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilFluidBase.java new file mode 100644 index 00000000..4a9319e9 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilFluidBase.java @@ -0,0 +1,149 @@ +package wayoftime.bloodmagic.common.item.sigil; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidUtil; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; +import net.minecraftforge.fluids.capability.wrappers.BlockWrapper; + +public abstract class ItemSigilFluidBase extends ItemSigilBase +{ + // Class for sigils that interact with fluids, either creating or deleting them. + // Sigils still have to define their own onRightClick behavior, but the actual + // fluid-interacting code is largely limited to here. + public final FluidStack sigilFluid; + + public ItemSigilFluidBase(String name, int lpUsed, FluidStack fluid) + { + super(name, lpUsed); + sigilFluid = fluid; + } + + public ItemSigilFluidBase(String name, FluidStack fluid) + { + super(name); + sigilFluid = fluid; + } + + public ItemSigilFluidBase(String name) + { + super(name); + sigilFluid = null; + } + + // The following are handler functions for fluids, all genericized. + // They're all based off of the Forge FluidUtil methods, but directly taking the + // sigilFluid constant instead of getting an argument. + + /* + * Gets a fluid handler for the targeted block and siding. Works for both tile + * entity liquid containers and fluid blocks. This one is literally identical to + * the FluidUtil method of the same signature. + */ + @Nullable + protected IFluidHandler getFluidHandler(World world, BlockPos blockPos, @Nullable Direction side) + { + BlockState state = world.getBlockState(blockPos); + Block block = state.getBlock(); + + IFluidHandler targetFluidHandler = FluidUtil.getFluidHandler(world, blockPos, side).orElse(null); + + if (targetFluidHandler == null) + + { + + } + return targetFluidHandler; +// if (block instanceof IFluidBlock) +// return new FluidBlockWrapper((IFluidBlock) block, world, blockPos); +// else if (block instanceof BlockLiquid) +// return new BlockLiquidWrapper((BlockLiquid) block, world, blockPos); +// return null; + } + + /* + * Tries to insert fluid into a fluid handler. If doTransfer is false, only + * simulate the transfer. If true, actually do so. Returns true if the transfer + * is successful, false otherwise. + */ + protected boolean tryInsertSigilFluid(IFluidHandler destination, boolean doTransfer) + { + if (destination == null) + return false; + return destination.fill(sigilFluid, doTransfer ? FluidAction.EXECUTE : FluidAction.SIMULATE) > 0; + } + + /* + * Tries basically the oppostive of the above, removing fluids instead of adding + * them + */ + protected boolean tryRemoveFluid(IFluidHandler source, int amount, boolean doTransfer) + { + if (source == null) + return false; + return source.drain(amount, doTransfer ? FluidAction.EXECUTE : FluidAction.SIMULATE) != null; + } + + /* + * Tries to place a fluid block in the world. Returns true if successful, + * otherwise false. This is the big troublesome one, oddly enough. It's + * genericized in case anyone wants to create variant sigils with weird fluids. + */ + protected boolean tryPlaceSigilFluid(PlayerEntity player, World world, BlockPos blockPos) + { + BlockState state = sigilFluid.getFluid().getAttributes().getBlock(world, blockPos, sigilFluid.getFluid().getDefaultState()); + BlockWrapper wrapper = new BlockWrapper(state, world, blockPos); + return wrapper.fill(sigilFluid, FluidAction.EXECUTE) > 0; +// // Make sure world coordinants are valid +// if (world == null || blockPos == null) +// { +// return false; +// } +// // Make sure fluid is placeable +// Fluid fluid = sigilFluid.getFluid(); +// if (!fluid.getAttributes().canBePlacedInWorld(world, blockPos, sigilFluid)) +// { +// return false; +// } +// +// // Check if the block is an air block or otherwise replaceable +// BlockState state = world.getBlockState(blockPos); +// Material mat = state.getMaterial(); +// boolean isDestSolid = mat.isSolid(); +// boolean isDestReplaceable = state.getBlock().isReplaceable(state, fluid); +// if (!world.isAirBlock(blockPos) && isDestSolid && !isDestReplaceable) +// { +// return false; +// } +// +//// // If the fluid vaporizes, this exists here in the lava sigil solely so the code +//// // is usable for other fluids +//// if (world.provider.doesWaterVaporize() && fluid.doesVaporize(sigilFluid)) +//// { +//// fluid.vaporize(player, world, blockPos, sigilFluid); +//// return true; +//// } +// +// // Finally we've done enough checking to make sure everything at the end is +// // safe, let's place some fluid. +// IFluidHandler handler; +// Block block = fluid.getAttributes().getStateForPlacement(world, blockPos, sigilFluid).getBlockState().getBlock(); +// if (block instanceof IFluidBlock) +// { +// handler = new FluidBlockWrapper((IFluidBlock) block, world, blockPos); +// } else if (block instanceof BlockLiquid) +// handler = new BlockLiquidWrapper((BlockLiquid) block, world, blockPos); +// else +// handler = new BlockWrapper(block, world, blockPos); +// return tryInsertSigilFluid(handler, true); +//// return false; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilFrost.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilFrost.java new file mode 100644 index 00000000..622a25ed --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilFrost.java @@ -0,0 +1,24 @@ +package wayoftime.bloodmagic.common.item.sigil; + +import net.minecraft.enchantment.FrostWalkerEnchantment; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import wayoftime.bloodmagic.util.helper.PlayerHelper; + +public class ItemSigilFrost extends ItemSigilToggleableBase +{ + public ItemSigilFrost() + { + super("frost", 100); + } + + @Override + public void onSigilUpdate(ItemStack stack, World world, PlayerEntity player, int itemSlot, boolean isSelected) + { + if (PlayerHelper.isFakePlayer(player)) + return; + + FrostWalkerEnchantment.freezeNearby(player, world, player.getPosition(), 1); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilGreenGrove.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilGreenGrove.java new file mode 100644 index 00000000..fb71c50e --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilGreenGrove.java @@ -0,0 +1,114 @@ +package wayoftime.bloodmagic.common.item.sigil; + +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.IGrowable; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import wayoftime.bloodmagic.core.data.SoulTicket; +import wayoftime.bloodmagic.util.helper.NetworkHelper; +import wayoftime.bloodmagic.util.helper.PlayerHelper; + +public class ItemSigilGreenGrove extends ItemSigilToggleableBase +{ + public ItemSigilGreenGrove() + { + super("green_grove", 150); + } + + @Override + public boolean onSigilUse(ItemStack stack, PlayerEntity player, World world, BlockPos blockPos, Direction side, Vector3d vec) + { + if (PlayerHelper.isFakePlayer(player)) + return false; + + if (!world.isRemote && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess() && applyBonemeal(stack, world, blockPos, player)) + { + world.playEvent(2005, blockPos, 0); + return true; + } + + return false; + } + + @Override + public void onSigilUpdate(ItemStack stack, World worldIn, PlayerEntity player, int itemSlot, boolean isSelected) + { + if (PlayerHelper.isFakePlayer(player)) + return; + + int range = 3; + int verticalRange = 2; + int posX = (int) Math.round(player.getPosX() - 0.5f); + int posY = (int) player.getPosY(); + int posZ = (int) Math.round(player.getPosZ() - 0.5f); + if (worldIn instanceof ServerWorld) + { + ServerWorld serverWorld = (ServerWorld) worldIn; + for (int ix = posX - range; ix <= posX + range; ix++) + { + for (int iz = posZ - range; iz <= posZ + range; iz++) + { + for (int iy = posY - verticalRange; iy <= posY + verticalRange; iy++) + { + BlockPos blockPos = new BlockPos(ix, iy, iz); + BlockState state = worldIn.getBlockState(blockPos); + +// if (!BloodMagicAPI.INSTANCE.getBlacklist().getGreenGrove().contains(state)) + { + if (state.getBlock() instanceof IGrowable && state.getBlock() != Blocks.GRASS_BLOCK) + { + if (worldIn.rand.nextInt(50) == 0) + { + BlockState preBlockState = worldIn.getBlockState(blockPos); + if (((IGrowable) state.getBlock()).canGrow(serverWorld, blockPos, preBlockState, worldIn.isRemote)) + { + ((IGrowable) state.getBlock()).grow(serverWorld, worldIn.rand, blockPos, state); + + BlockState newState = worldIn.getBlockState(blockPos); + if (!newState.equals(preBlockState) && !worldIn.isRemote) + worldIn.playEvent(2005, blockPos, 0); + } + } + } + } + } + } + } + } + + } + + private static boolean applyBonemeal(ItemStack stack, World worldIn, BlockPos pos, PlayerEntity player) + { + BlockState blockstate = worldIn.getBlockState(pos); + int hook = net.minecraftforge.event.ForgeEventFactory.onApplyBonemeal(player, worldIn, pos, blockstate, stack); + if (hook != 0) + return hook > 0; + if (blockstate.getBlock() instanceof IGrowable) + { + IGrowable igrowable = (IGrowable) blockstate.getBlock(); + if (igrowable.canGrow(worldIn, pos, blockstate, worldIn.isRemote)) + { + if (worldIn instanceof ServerWorld) + { + if (igrowable.canUseBonemeal(worldIn, worldIn.rand, pos, blockstate)) + { + igrowable.grow((ServerWorld) worldIn, worldIn.rand, pos, blockstate); + } + + } + + return true; + } + } + + return false; + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilHolding.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilHolding.java new file mode 100644 index 00000000..c372b8c7 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilHolding.java @@ -0,0 +1,390 @@ +package wayoftime.bloodmagic.common.item.sigil; + +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUseContext; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.ActionResult; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.network.NetworkHooks; +import wayoftime.bloodmagic.api.compat.IAltarReader; +import wayoftime.bloodmagic.client.key.IKeybindable; +import wayoftime.bloodmagic.client.key.KeyBindings; +import wayoftime.bloodmagic.common.item.IBindable; +import wayoftime.bloodmagic.common.item.inventory.ContainerHolding; +import wayoftime.bloodmagic.common.item.inventory.InventoryHolding; +import wayoftime.bloodmagic.core.data.Binding; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.Utils; +import wayoftime.bloodmagic.util.helper.NBTHelper; +import wayoftime.bloodmagic.util.helper.PlayerHelper; + +public class ItemSigilHolding extends ItemSigilBase implements IKeybindable, IAltarReader, ISigil.Holding, INamedContainerProvider +{ + public static final int inventorySize = 5; + + public ItemSigilHolding() + { + super("holding"); + } + + @Override + public void onKeyPressed(ItemStack stack, PlayerEntity player, KeyBindings key, boolean showInChat) + { + System.out.println("Received key press on server."); + if (stack == player.getHeldItemMainhand() && stack.getItem() instanceof ItemSigilHolding && key.equals(KeyBindings.OPEN_HOLDING)) + { + Utils.setUUID(stack); + + if (player instanceof ServerPlayerEntity) + { + NetworkHooks.openGui((ServerPlayerEntity) player, this, buf -> buf.writeItemStack(stack, false)); + } +// player.openGui(BloodMagic.instance, Constants.Gui.SIGIL_HOLDING_GUI, player.getEntityWorld(), (int) player.posX, (int) player.posY, (int) player.posZ); + } + } + +// @Override +// public String getHighlightTip(ItemStack stack, String displayName) +// { +// List inv = getInternalInventory(stack); +// int currentSlot = getCurrentItemOrdinal(stack); +// ItemStack item = inv.get(currentSlot); +// +// if (item.isEmpty()) +// return displayName; +// else +// return TextHelper.localizeEffect("item.bloodmagic.sigil.holding.display", displayName, item.getDisplayName()); +// } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + super.addInformation(stack, world, tooltip, flag); + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.sigil.holding.press", new TranslationTextComponent(KeyBindings.OPEN_HOLDING.getKey().getTranslationKey()).mergeStyle(TextFormatting.ITALIC)).mergeStyle(TextFormatting.GRAY)); + + if (!stack.hasTag()) + return; + + List inv = getInternalInventory(stack); + int currentSlot = getCurrentItemOrdinal(stack); + ItemStack item = inv.get(currentSlot); + + for (int i = 0; i < inventorySize; i++) + { + ItemStack invStack = inv.get(i); + if (!invStack.isEmpty()) + if (!item.isEmpty() && invStack == item) + { + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.sigil.holding.sigilInSlot", i + 1, (invStack.getDisplayName().copyRaw()).mergeStyle(TextFormatting.ITALIC, TextFormatting.UNDERLINE))); +// tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.sigil.holding.sigilInSlot", i + 1, new TranslationTextComponent(invStack.getDisplayName()).mergeStyle(TextFormatting.ITALIC, TextFormatting.UNDERLINE))); + + } else + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.sigil.holding.sigilInSlot", i + 1, invStack.getDisplayName())); + } + } + + @Override + public ActionResultType onItemUse(ItemUseContext context) + { +// BlockPos pos = context.getPos(); +// Direction facing = context.getFace(); +// pos = pos.offset(facing); + PlayerEntity player = context.getPlayer(); + Hand hand = context.getHand(); + ItemStack stack = player.getHeldItem(hand); + +// ItemStack stack = player.getHeldItem(hand); + if (PlayerHelper.isFakePlayer(player)) + return ActionResultType.FAIL; + + int currentSlot = getCurrentItemOrdinal(stack); + NonNullList inv = getInternalInventory(stack); + ItemStack itemUsing = inv.get(currentSlot); + + if (itemUsing.isEmpty() || ((IBindable) itemUsing.getItem()).getBinding(itemUsing) == null) + return ActionResultType.PASS; + + ActionResultType result = itemUsing.getItem().onItemUse(context); + saveInventory(stack, inv); + + return result; + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + ItemStack stack = player.getHeldItem(hand); + if (PlayerHelper.isFakePlayer(player)) + return ActionResult.resultFail(stack); + + int currentSlot = getCurrentItemOrdinal(stack); + NonNullList inv = getInternalInventory(stack); + ItemStack itemUsing = inv.get(currentSlot); + + if (itemUsing.isEmpty() || ((IBindable) itemUsing.getItem()).getBinding(itemUsing) == null) + return ActionResult.resultPass(stack); + + itemUsing.getItem().onItemRightClick(world, player, hand); + + saveInventory(stack, inv); + + return ActionResult.resultPass(stack); + } + + @Nonnull + @Override + public ItemStack getHeldItem(ItemStack holdingStack, PlayerEntity player) + { + return getInternalInventory(holdingStack).get(getCurrentItemOrdinal(holdingStack)); + } + + public void saveInventory(ItemStack itemStack, NonNullList inventory) + { + CompoundNBT itemTag = itemStack.getTag(); + + if (itemTag == null) + itemStack.setTag(itemTag = new CompoundNBT()); + + ItemStackHelper.saveAllItems(itemTag, inventory); + +// CompoundNBT inventoryTag = new CompoundNBT(); +// ListNBT itemList = new ListNBT(); +// +// for (int i = 0; i < inventorySize; i++) +// { +// if (!inventory.get(i).isEmpty()) +// { +// CompoundNBT tag = new CompoundNBT(); +// tag.putByte(Constants.NBT.SLOT, (byte) i); +// inventory.get(i).writeToNBT(tag); +// itemList.appendTag(tag); +// } +// } +// +// inventoryTag.put(Constants.NBT.ITEMS, itemList); +// itemTag.put(Constants.NBT.ITEM_INVENTORY, inventoryTag); + } + + @Override + public void inventoryTick(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected) + { + if (stack.hasTag()) + tickInternalInventory(stack, world, entity, itemSlot, isSelected); + } + + public void tickInternalInventory(ItemStack itemStack, World world, Entity entity, int itemSlot, boolean isSelected) + { + for (ItemStack stack : getInternalInventory(itemStack)) + { + if (stack.isEmpty() || !(stack.getItem() instanceof IBindable) || !(stack.getItem() instanceof ISigil)) + continue; + + Binding binding = ((IBindable) stack.getItem()).getBinding(stack); + if (binding == null) + continue; + + stack.getItem().inventoryTick(stack, world, entity, itemSlot, isSelected); + } + } + +// @Override +// public void gatherVariants(@Nonnull Int2ObjectMap variants) +// { +// // No-op - Just here to stop the super from running since we're using a mesh +// // provider +// } + +// @Override +// public ItemMeshDefinition getMeshDefinition() +// { +// return stack -> { +// if (stack.hasTag() && stack.getTag().hasKey("color")) +// return new ModelResourceLocation(getRegistryName(), "type=color"); +// return new ModelResourceLocation(getRegistryName(), "type=normal"); +// }; +// } +// +// @Override +// public void gatherVariants(Consumer variants) +// { +// variants.accept("type=normal"); +// variants.accept("type=color"); +// } + + public static int next(int mode) + { + int index = mode + 1; + + if (index >= inventorySize) + { + index = 0; + } + + return index; + } + + public static int prev(int mode) + { + int index = mode - 1; + + if (index < 0) + { + index = inventorySize; + } + + return index; + } + + private static void initModeTag(ItemStack stack) + { + if (!stack.hasTag()) + { + stack = NBTHelper.checkNBT(stack); + stack.getTag().putInt(Constants.NBT.CURRENT_SIGIL, inventorySize); + } + } + + public static ItemStack getItemStackInSlot(ItemStack itemStack, int slot) + { + if (itemStack.getItem() instanceof ItemSigilHolding) + { + List inv = getInternalInventory(itemStack); + if (inv != null) + return inv.get(slot == 5 ? 4 : slot); + else + return ItemStack.EMPTY; + } + + return ItemStack.EMPTY; + } + + public static int getCurrentItemOrdinal(ItemStack stack) + { + if (stack.getItem() instanceof ItemSigilHolding) + { + initModeTag(stack); + int currentSigil = stack.getTag().getInt(Constants.NBT.CURRENT_SIGIL); + currentSigil = MathHelper.clamp(currentSigil, 0, inventorySize - 1); + return currentSigil; + } + + return 0; + } + + public static NonNullList getInternalInventory(ItemStack stack) + { + initModeTag(stack); + CompoundNBT tagCompound = stack.getTag(); + + if (tagCompound == null) + { + return NonNullList.withSize(inventorySize, ItemStack.EMPTY); + } + + NonNullList inv = NonNullList.withSize(inventorySize, ItemStack.EMPTY); + + ItemStackHelper.loadAllItems(tagCompound, inv); + +// CompoundNBT inventoryTag = tagCompound.getCompound(Constants.NBT.ITEM_INVENTORY); +// ListNBT tagList = inventoryTag.getList(Constants.NBT.ITEMS, 10); +// +// if (tagList.isEmpty()) +// { +// return NonNullList.withSize(inventorySize, ItemStack.EMPTY); +// } +// +// List inv = NonNullList.withSize(inventorySize, ItemStack.EMPTY); +// +// for (int i = 0; i < tagList.tagCount(); i++) +// { +// CompoundNBT data = tagList.getCompoundTagAt(i); +// byte j = data.getByte(Constants.NBT.SLOT); +// +// if (j >= 0 && j < inv.size()) +// { +// inv.set(j, new ItemStack(data)); +// } +// } + + return inv; + } + + public static void cycleToNextSigil(ItemStack itemStack, int mode) + { + if (itemStack.getItem() instanceof ItemSigilHolding) + { + initModeTag(itemStack); + + int index = mode; + if (mode == 120 || mode == -120) + { + int currentIndex = getCurrentItemOrdinal(itemStack); + ItemStack currentItemStack = getItemStackInSlot(itemStack, currentIndex); + if (currentItemStack.isEmpty()) + return; + if (mode < 0) + { + index = next(currentIndex); + currentItemStack = getItemStackInSlot(itemStack, index); + + while (currentItemStack.isEmpty()) + { + index = next(index); + currentItemStack = getItemStackInSlot(itemStack, index); + } + } else + { + index = prev(currentIndex); + currentItemStack = getItemStackInSlot(itemStack, index); + + while (currentItemStack.isEmpty()) + { + index = prev(index); + currentItemStack = getItemStackInSlot(itemStack, index); + } + } + } + + itemStack.getTag().putInt(Constants.NBT.CURRENT_SIGIL, index); + } + } + + @Override + public Container createMenu(int p_createMenu_1_, PlayerInventory p_createMenu_2_, PlayerEntity player) + { + // TODO Auto-generated method stub + assert player.getEntityWorld() != null; + return new ContainerHolding(p_createMenu_1_, player, p_createMenu_2_, new InventoryHolding(player.getHeldItemMainhand())); + } + + @Override + public ITextComponent getDisplayName() + { + // TODO Auto-generated method stub + return new StringTextComponent("Sigil of Holding"); + } + +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilLava.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilLava.java new file mode 100644 index 00000000..7affee21 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilLava.java @@ -0,0 +1,89 @@ +package wayoftime.bloodmagic.common.item.sigil; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.fluid.Fluids; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceContext; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; +import wayoftime.bloodmagic.core.data.SoulTicket; +import wayoftime.bloodmagic.util.helper.NetworkHelper; +import wayoftime.bloodmagic.util.helper.PlayerHelper; + +public class ItemSigilLava extends ItemSigilFluidBase +{ + public ItemSigilLava() + { + super("lava", 1000, new FluidStack(Fluids.LAVA, 10000)); + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + ItemStack stack = player.getHeldItem(hand); + if (stack.getItem() instanceof ISigil.Holding) + stack = ((Holding) stack.getItem()).getHeldItem(stack, player); + if (PlayerHelper.isFakePlayer(player)) + return ActionResult.resultFail(stack); + + if (!world.isRemote && !isUnusable(stack)) + { + RayTraceResult rayTrace = rayTrace(world, player, RayTraceContext.FluidMode.NONE); + + if (rayTrace == null || rayTrace.getType() != RayTraceResult.Type.BLOCK) + { + return ActionResult.resultFail(stack); + } + + BlockRayTraceResult blockRayTrace = (BlockRayTraceResult) rayTrace; + BlockPos blockPos = blockRayTrace.getPos(); + Direction sideHit = blockRayTrace.getFace(); + BlockPos blockpos1 = blockPos.offset(sideHit); + + if (world.isBlockModifiable(player, blockPos) && player.canPlayerEdit(blockpos1, sideHit, stack)) + { + + // Case for if block at blockPos is a fluid handler like a tank + // Try to put fluid into tank + IFluidHandler destination = getFluidHandler(world, blockPos, null); + if (destination != null && tryInsertSigilFluid(destination, false) + && NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) + { + boolean result = tryInsertSigilFluid(destination, true); + if (result) + return ActionResult.resultSuccess(stack); + } + // Do the same as above, but use sidedness to interact with the fluid handler. + IFluidHandler destinationSide = getFluidHandler(world, blockPos, sideHit); + if (destinationSide != null && tryInsertSigilFluid(destinationSide, false) + && NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) + { + boolean result = tryInsertSigilFluid(destinationSide, true); + if (result) + return ActionResult.resultSuccess(stack); + } + + // Case for if block at blockPos is not a tank + // Place fluid in world + if (destination == null && destinationSide == null) + { + BlockPos targetPos = blockPos.offset(sideHit); + if (tryPlaceSigilFluid(player, world, targetPos) + && NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) + { + return ActionResult.resultSuccess(stack); + } + } + } + } + + return super.onItemRightClick(world, player, hand); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilMagnetism.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilMagnetism.java new file mode 100644 index 00000000..b4cbea14 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilMagnetism.java @@ -0,0 +1,54 @@ +package wayoftime.bloodmagic.common.item.sigil; + +import java.util.List; + +import net.minecraft.entity.item.ExperienceOrbEntity; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.world.World; +import wayoftime.bloodmagic.util.helper.PlayerHelper; + +public class ItemSigilMagnetism extends ItemSigilToggleableBase +{ + public ItemSigilMagnetism() + { + super("magnetism", 50); + } + + @Override + public void onSigilUpdate(ItemStack stack, World world, PlayerEntity player, int itemSlot, boolean isSelected) + { + if (PlayerHelper.isFakePlayer(player)) + return; + + int range = 5; + int verticalRange = 5; + float posX = Math.round(player.getPosX()); + float posY = (float) (player.getPosY() - player.getEyeHeight()); + float posZ = Math.round(player.getPosZ()); + List entities = player.getEntityWorld().getEntitiesWithinAABB(ItemEntity.class, new AxisAlignedBB(posX + - 0.5f, posY - 0.5f, posZ + - 0.5f, posX + 0.5f, posY + 0.5f, posZ + 0.5f).expand(range, verticalRange, range)); + List xpOrbs = player.getEntityWorld().getEntitiesWithinAABB(ExperienceOrbEntity.class, new AxisAlignedBB(posX + - 0.5f, posY - 0.5f, posZ + - 0.5f, posX + 0.5f, posY + 0.5f, posZ + 0.5f).expand(range, verticalRange, range)); + + for (ItemEntity entity : entities) + { + if (entity != null && !world.isRemote && entity.isAlive()) + { + entity.onCollideWithPlayer(player); + } + } + + for (ExperienceOrbEntity xpOrb : xpOrbs) + { + if (xpOrb != null && !world.isRemote) + { + xpOrb.onCollideWithPlayer(player); + } + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilToggleable.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilToggleable.java new file mode 100644 index 00000000..7d583316 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilToggleable.java @@ -0,0 +1,118 @@ +package wayoftime.bloodmagic.common.item.sigil; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUseContext; +import net.minecraft.util.ActionResult; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.World; +import wayoftime.bloodmagic.common.item.ItemSigil; +import wayoftime.bloodmagic.core.data.Binding; +import wayoftime.bloodmagic.core.data.SoulTicket; +import wayoftime.bloodmagic.common.item.IActivatable; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.helper.NBTHelper; +import wayoftime.bloodmagic.util.helper.NetworkHelper; +import wayoftime.bloodmagic.util.helper.PlayerHelper; + +/** + * Base class for all toggleable sigils. + */ +public class ItemSigilToggleable extends ItemSigil implements IActivatable +{ + + public ItemSigilToggleable(Properties property, int lpUsed) + { + super(property, lpUsed); + } + + @Override + public boolean getActivated(ItemStack stack) + { + return !stack.isEmpty() && NBTHelper.checkNBT(stack).getTag().getBoolean(Constants.NBT.ACTIVATED); + } + + @Override + public ItemStack setActivatedState(ItemStack stack, boolean activated) + { + if (!stack.isEmpty()) + { + NBTHelper.checkNBT(stack).getTag().putBoolean(Constants.NBT.ACTIVATED, activated); + return stack; + } + + return stack; + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + ItemStack stack = player.getHeldItem(hand); + if (stack.getItem() instanceof ISigil.Holding) + stack = ((Holding) stack.getItem()).getHeldItem(stack, player); + if (PlayerHelper.isFakePlayer(player)) + return ActionResult.resultFail(stack); + + if (!world.isRemote && !isUnusable(stack)) + { + if (player.isSneaking()) + setActivatedState(stack, !getActivated(stack)); + if (getActivated(stack)) + return super.onItemRightClick(world, player, hand); + } + + return super.onItemRightClick(world, player, hand); + } + + @Override + public ActionResultType onItemUse(ItemUseContext context) + { + World world = context.getWorld(); + BlockPos blockpos = context.getPos(); + + PlayerEntity player = context.getPlayer(); + ItemStack stack = context.getItem(); + if (stack.getItem() instanceof ISigil.Holding) + stack = ((Holding) stack.getItem()).getHeldItem(stack, player); + + Binding binding = getBinding(stack); + if (binding == null || player.isSneaking()) // Make sure Sigils are bound before handling. Also ignores while + // toggling state + return ActionResultType.PASS; + + return onSigilUse(stack, player, world, blockpos, context.getFace(), context.getHitVec()) + ? ActionResultType.SUCCESS + : ActionResultType.FAIL; + } + + public boolean onSigilUse(ItemStack itemStack, PlayerEntity player, World world, BlockPos blockPos, Direction side, Vector3d hitVec) + { + return false; + } + + @Override + public void inventoryTick(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) + { + if (!worldIn.isRemote && entityIn instanceof PlayerEntity && getActivated(stack)) + { + if (entityIn.ticksExisted % 100 == 0) + { + if (!NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage((PlayerEntity) entityIn, SoulTicket.item(stack, worldIn, entityIn, getLpUsed())).isSuccess()) + { + setActivatedState(stack, false); + } + } + + onSigilUpdate(stack, worldIn, (PlayerEntity) entityIn, itemSlot, isSelected); + } + } + + public void onSigilUpdate(ItemStack stack, World world, PlayerEntity player, int itemSlot, boolean isSelected) + { + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilToggleableBase.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilToggleableBase.java new file mode 100644 index 00000000..8c57b170 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilToggleableBase.java @@ -0,0 +1,55 @@ +package wayoftime.bloodmagic.common.item.sigil; + +import java.util.List; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; + +public class ItemSigilToggleableBase extends ItemSigilToggleable// implements IMeshProvider +{ + protected final String tooltipBase; + private final String name; + + public ItemSigilToggleableBase(String name, int lpUsed) + { + super(new Item.Properties().maxStackSize(1).group(BloodMagic.TAB), lpUsed); + + this.name = name; + this.tooltipBase = "tooltip.bloodmagic.sigil." + name + "."; + + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + super.addInformation(stack, world, tooltip, flag); + if (!stack.hasTag()) + return; + + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic." + (getActivated(stack) ? "activated" + : "deactivated")).mergeStyle(TextFormatting.GRAY)); + } + +// @Override +// @SideOnly(Side.CLIENT) +// public ItemMeshDefinition getMeshDefinition() +// { +// return new CustomMeshDefinitionActivatable("sigil_" + name.toLowerCase(Locale.ROOT)); +// } +// +// @Override +// public void gatherVariants(Consumer variants) +// { +// variants.accept("active=false"); +// variants.accept("active=true"); +// } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilVoid.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilVoid.java new file mode 100644 index 00000000..ef7dace9 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilVoid.java @@ -0,0 +1,84 @@ +package wayoftime.bloodmagic.common.item.sigil; + +import net.minecraft.block.BlockState; +import net.minecraft.block.IBucketPickupHandler; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.fluid.Fluids; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceContext; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; +import wayoftime.bloodmagic.core.data.SoulTicket; +import wayoftime.bloodmagic.util.helper.NetworkHelper; +import wayoftime.bloodmagic.util.helper.PlayerHelper; + +public class ItemSigilVoid extends ItemSigilFluidBase +{ + public ItemSigilVoid() + { + super("void", 50, new FluidStack(Fluids.EMPTY, 1000)); + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + ItemStack stack = player.getHeldItem(hand); + if (stack.getItem() instanceof ISigil.Holding) + stack = ((Holding) stack.getItem()).getHeldItem(stack, player); + if (PlayerHelper.isFakePlayer(player)) + return ActionResult.resultFail(stack); + + if (!world.isRemote && !isUnusable(stack)) + { + RayTraceResult rayTrace = rayTrace(world, player, RayTraceContext.FluidMode.SOURCE_ONLY); + + if (rayTrace == null || rayTrace.getType() != RayTraceResult.Type.BLOCK) + { + return ActionResult.resultFail(stack); + } + + BlockRayTraceResult blockRayTrace = (BlockRayTraceResult) rayTrace; + BlockPos blockPos = blockRayTrace.getPos(); + Direction sideHit = blockRayTrace.getFace(); + + if (world.isBlockModifiable(player, blockPos) && player.canPlayerEdit(blockPos, sideHit, stack)) + { + BlockState blockState = world.getBlockState(blockPos); + if (blockState.getBlock() instanceof IBucketPickupHandler) + { + if (NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) + { + ((IBucketPickupHandler) blockState.getBlock()).pickupFluid(world, blockPos, blockState); + return ActionResult.resultSuccess(stack); + } + } + // Void is simpler than the other fluid sigils, because getFluidHandler grabs + // fluid blocks just fine + // So extract from fluid tanks with a null side; or drain fluid blocks. +// IFluidHandler destination = getFluidHandler(world, blockPos, sideHit); +// if (destination != null && tryRemoveFluid(destination, 1000, false) +// && NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) +// { +// if (tryRemoveFluid(destination, 1000, true)) +// return ActionResult.resultSuccess(stack); +// } +// // Do the same as above, but use sidedness to interact with the fluid handler. +// IFluidHandler destinationSide = getFluidHandler(world, blockPos, sideHit); +// if (destinationSide != null && tryRemoveFluid(destinationSide, 1000, false) +// && NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) +// { +// if (tryRemoveFluid(destinationSide, 1000, true)) +// return ActionResult.resultSuccess(stack); +// } + } + } + + return super.onItemRightClick(world, player, hand); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilWater.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilWater.java new file mode 100644 index 00000000..a3a9356a --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilWater.java @@ -0,0 +1,99 @@ +package wayoftime.bloodmagic.common.item.sigil; + +import net.minecraft.block.Blocks; +import net.minecraft.block.CauldronBlock; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.fluid.Fluids; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceContext; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; +import wayoftime.bloodmagic.core.data.SoulTicket; +import wayoftime.bloodmagic.util.helper.NetworkHelper; +import wayoftime.bloodmagic.util.helper.PlayerHelper; + +public class ItemSigilWater extends ItemSigilFluidBase +{ + public ItemSigilWater() + { + super("water", 100, new FluidStack(Fluids.WATER, 10000)); + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + ItemStack stack = player.getHeldItem(hand); + if (stack.getItem() instanceof ISigil.Holding) + stack = ((Holding) stack.getItem()).getHeldItem(stack, player); + if (PlayerHelper.isFakePlayer(player)) + return ActionResult.resultFail(stack); + + if (!world.isRemote && !isUnusable(stack)) + { + RayTraceResult rayTrace = rayTrace(world, player, RayTraceContext.FluidMode.NONE); + + if (rayTrace == null || rayTrace.getType() != RayTraceResult.Type.BLOCK) + { + return ActionResult.resultFail(stack); + } + + BlockRayTraceResult blockRayTrace = (BlockRayTraceResult) rayTrace; + BlockPos blockPos = blockRayTrace.getPos(); + Direction sideHit = blockRayTrace.getFace(); + BlockPos blockpos1 = blockPos.offset(sideHit); + + if (world.isBlockModifiable(player, blockPos) && player.canPlayerEdit(blockpos1, sideHit, stack)) + { + + // Case for if block at blockPos is a fluid handler like a tank + // Try to put fluid into tank + IFluidHandler destination = getFluidHandler(world, blockPos, null); + if (destination != null && tryInsertSigilFluid(destination, false) + && NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) + { + boolean result = tryInsertSigilFluid(destination, true); + if (result) + return ActionResult.resultSuccess(stack); + } + // Do the same as above, but use sidedness to interact with the fluid handler. + IFluidHandler destinationSide = getFluidHandler(world, blockPos, sideHit); + if (destinationSide != null && tryInsertSigilFluid(destinationSide, false) + && NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) + { + boolean result = tryInsertSigilFluid(destinationSide, true); + if (result) + return ActionResult.resultSuccess(stack); + } + + // Special vanilla cauldron handling, yay. + if (world.getBlockState(blockPos).getBlock() == Blocks.CAULDRON + && NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) + { + world.setBlockState(blockPos, Blocks.CAULDRON.getDefaultState().with(CauldronBlock.LEVEL, 3)); + return ActionResult.resultSuccess(stack); + } + + // Case for if block at blockPos is not a tank + // Place fluid in world + if (destination == null && destinationSide == null) + { + BlockPos targetPos = blockPos.offset(sideHit); + if (tryPlaceSigilFluid(player, world, targetPos) + && NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) + { + return ActionResult.resultSuccess(stack); + } + } + } + } + + return super.onItemRightClick(world, player, hand); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemMonsterSoul.java b/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemMonsterSoul.java new file mode 100644 index 00000000..5cf684d0 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemMonsterSoul.java @@ -0,0 +1,129 @@ +package wayoftime.bloodmagic.common.item.soul; + +import java.util.List; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.util.ChatUtil; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.helper.NBTHelper; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.api.compat.IDemonWill; + +public class ItemMonsterSoul extends Item implements IDemonWill +{ + private final EnumDemonWillType type; + + public ItemMonsterSoul(EnumDemonWillType type) + { + super(new Item.Properties().maxStackSize(1).group(BloodMagic.TAB)); + this.type = type; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + if (!stack.hasTag()) + return; + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.will", ChatUtil.DECIMAL_FORMAT.format(getWill(getType(stack), stack))).mergeStyle(TextFormatting.GRAY)); + + super.addInformation(stack, world, tooltip, flag); + } + + @Override + public EnumDemonWillType getType(ItemStack stack) + { + return type; + } + + @Override + public double getWill(EnumDemonWillType type, ItemStack soulStack) + { + if (type != this.getType(soulStack)) + { + return 0; + } + + NBTHelper.checkNBT(soulStack); + + CompoundNBT tag = soulStack.getTag(); + + return tag.getDouble(Constants.NBT.SOULS); + } + + @Override + public void fillItemGroup(ItemGroup group, NonNullList items) + { + if (this.isInGroup(group)) + { + ItemStack stack = new ItemStack(this); + this.setWill(type, stack, 5); + items.add(stack); + } + } + + @Override + public boolean setWill(EnumDemonWillType type, ItemStack soulStack, double souls) + { + if (type != this.getType(soulStack)) + { + return false; + } + + NBTHelper.checkNBT(soulStack); + CompoundNBT tag = soulStack.getTag(); + tag.putDouble(Constants.NBT.SOULS, souls); + + return true; + } + + @Override + public double drainWill(EnumDemonWillType type, ItemStack soulStack, double drainAmount) + { + double souls = getWill(type, soulStack); + + double soulsDrained = Math.min(drainAmount, souls); + setWill(type, soulStack, souls - soulsDrained); + + return soulsDrained; + } + + @Override + public ItemStack createWill(double number) + { + ItemStack soulStack = new ItemStack(this); + setWill(getType(soulStack), soulStack, number); + return soulStack; + } + +// @Override +// public double getWill(ItemStack willStack) +// { +// return this.getWill(EnumDemonWillType.DEFAULT, willStack); +// } +// +// @Override +// public void setWill(ItemStack willStack, double will) +// { +// this.setWill(EnumDemonWillType.DEFAULT, willStack, will); +// } +// +// @Override +// public double drainWill(ItemStack willStack, double drainAmount) +// { +// return this.drainWill(EnumDemonWillType.DEFAULT, willStack, drainAmount); +// } + +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSentientAxe.java b/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSentientAxe.java new file mode 100644 index 00000000..13c3ccd7 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSentientAxe.java @@ -0,0 +1,560 @@ +package wayoftime.bloodmagic.common.item.soul; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.UUID; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; + +import net.minecraft.block.BlockState; +import net.minecraft.client.util.ITooltipFlag; +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.monster.IMob; +import net.minecraft.entity.monster.SlimeEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.AxeItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.potion.EffectInstance; +import net.minecraft.potion.Effects; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.Difficulty; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.api.compat.IDemonWill; +import wayoftime.bloodmagic.api.compat.IDemonWillWeapon; +import wayoftime.bloodmagic.api.compat.IMultiWillTool; +import wayoftime.bloodmagic.common.item.BMItemTier; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.tags.BloodMagicTags; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.helper.NBTHelper; +import wayoftime.bloodmagic.will.PlayerDemonWillHandler; + +public class ItemSentientAxe extends AxeItem implements IDemonWillWeapon, IMultiWillTool +{ + public static int[] soulBracket = new int[] { 16, 60, 200, 400, 1000 }; + public static double[] defaultDamageAdded = new double[] { 1, 2, 3, 3.5, 4 }; + public static double[] destructiveDamageAdded = new double[] { 2, 3, 4, 5, 6 }; + public static double[] vengefulDamageAdded = new double[] { 0, 0.5, 1, 1.5, 2 }; + public static double[] steadfastDamageAdded = new double[] { 0, 0.5, 1, 1.5, 2 }; + public static double[] defaultDigSpeedAdded = new double[] { 1, 1.5, 2, 3, 4 }; + public static double[] soulDrainPerSwing = new double[] { 0.05, 0.1, 0.2, 0.4, 0.75 }; + public static double[] soulDrop = new double[] { 2, 4, 7, 10, 13 }; + public static double[] staticDrop = new double[] { 1, 1, 2, 3, 3 }; + + public static double[] healthBonus = new double[] { 0, 0, 0, 0, 0 }; // TODO: Think of implementing this later + public static double[] vengefulAttackSpeed = new double[] { -3, -2.8, -2.7, -2.6, -2.5 }; + public static double[] destructiveAttackSpeed = new double[] { -3.1, -3.1, -3.2, -3.3, -3.3 }; + + public static int[] absorptionTime = new int[] { 200, 300, 400, 500, 600 }; + + public static double maxAbsorptionHearts = 10; + + public static int[] poisonTime = new int[] { 25, 50, 60, 80, 100 }; + public static int[] poisonLevel = new int[] { 0, 0, 0, 1, 1 }; + + public static double[] movementSpeed = new double[] { 0.05, 0.1, 0.15, 0.2, 0.25 }; + + public final double baseAttackDamage = 8; + public final double baseAttackSpeed = -3; + + public ItemSentientAxe() + { + super(BMItemTier.SENTIENT, 8, -3.1f, new Item.Properties().maxDamage(520).group(BloodMagic.TAB)); +// super(RegistrarBloodMagicItems.SOUL_TOOL_MATERIAL, 8.0F, 3.1F); + } + + @Override + public float getDestroySpeed(ItemStack stack, BlockState state) + { + float value = super.getDestroySpeed(stack, state); + if (value > 1) + { + return (float) (value + getDigSpeedOfSword(stack)); + } else + { + return value; + } + } + + @Override + public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) + { + return BloodMagicTags.CRYSTAL_DEMON.contains(repair.getItem()) || super.getIsRepairable(toRepair, repair); + } + + public void recalculatePowers(ItemStack stack, World world, PlayerEntity player) + { + EnumDemonWillType type = PlayerDemonWillHandler.getLargestWillType(player); + double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); + this.setCurrentType(stack, soulsRemaining > 0 ? type : EnumDemonWillType.DEFAULT); + int level = getLevel(stack, soulsRemaining); + + double drain = level >= 0 ? soulDrainPerSwing[level] : 0; + double extraDamage = getExtraDamage(type, level); + + setDrainOfActivatedSword(stack, drain); + setDamageOfActivatedSword(stack, baseAttackDamage + extraDamage); + setStaticDropOfActivatedSword(stack, level >= 0 ? staticDrop[level] : 1); + setDropOfActivatedSword(stack, level >= 0 ? soulDrop[level] : 0); + setAttackSpeedOfSword(stack, level >= 0 ? getAttackSpeed(type, level) : baseAttackSpeed); + setHealthBonusOfSword(stack, level >= 0 ? getHealthBonus(type, level) : 0); + setSpeedOfSword(stack, level >= 0 ? getMovementSpeed(type, level) : 0); + setDigSpeedOfSword(stack, level >= 0 ? getDigSpeed(type, level) : 0); + } + + public double getExtraDamage(EnumDemonWillType type, int willBracket) + { + if (willBracket < 0) + { + return 0; + } + + switch (type) + { + case CORROSIVE: + case DEFAULT: + return defaultDamageAdded[willBracket]; + case DESTRUCTIVE: + return destructiveDamageAdded[willBracket]; + case VENGEFUL: + return vengefulDamageAdded[willBracket]; + case STEADFAST: + return steadfastDamageAdded[willBracket]; + } + + return 0; + } + + public double getAttackSpeed(EnumDemonWillType type, int willBracket) + { + switch (type) + { + case VENGEFUL: + return vengefulAttackSpeed[willBracket]; + case DESTRUCTIVE: + return destructiveAttackSpeed[willBracket]; + default: + return -2.9; + } + } + + public double getHealthBonus(EnumDemonWillType type, int willBracket) + { + switch (type) + { + case STEADFAST: + return healthBonus[willBracket]; + default: + return 0; + } + } + + public double getMovementSpeed(EnumDemonWillType type, int willBracket) + { + switch (type) + { + case VENGEFUL: + return movementSpeed[willBracket]; + default: + return 0; + } + } + + public double getDigSpeed(EnumDemonWillType type, int willBracket) + { + switch (type) + { + case VENGEFUL: +// return movementSpeed[willBracket]; + default: + return defaultDigSpeedAdded[willBracket]; + } + } + + public void applyEffectToEntity(EnumDemonWillType type, int willBracket, LivingEntity target, PlayerEntity attacker) + { + switch (type) + { + case CORROSIVE: + target.addPotionEffect(new EffectInstance(Effects.WITHER, poisonTime[willBracket], poisonLevel[willBracket])); + break; + case DEFAULT: + break; + case DESTRUCTIVE: + break; + case STEADFAST: + if (!target.isAlive()) + { + float absorption = attacker.getAbsorptionAmount(); + attacker.addPotionEffect(new EffectInstance(Effects.ABSORPTION, absorptionTime[willBracket], 127)); + attacker.setAbsorptionAmount((float) Math.min(absorption + target.getMaxHealth() * 0.05f, maxAbsorptionHearts)); + } + break; + case VENGEFUL: + break; + } + } + + @Override + public boolean hitEntity(ItemStack stack, LivingEntity target, LivingEntity attacker) + { + if (super.hitEntity(stack, target, attacker)) + { + if (attacker instanceof PlayerEntity) + { + PlayerEntity attackerPlayer = (PlayerEntity) attacker; + this.recalculatePowers(stack, attackerPlayer.getEntityWorld(), attackerPlayer); + EnumDemonWillType type = this.getCurrentType(stack); + double will = PlayerDemonWillHandler.getTotalDemonWill(type, attackerPlayer); + int willBracket = this.getLevel(stack, will); + + applyEffectToEntity(type, willBracket, target, attackerPlayer); + + ItemStack offStack = attackerPlayer.getItemStackFromSlot(EquipmentSlotType.OFFHAND); +// if (offStack.getItem() instanceof ISentientSwordEffectProvider) +// { +// ISentientSwordEffectProvider provider = (ISentientSwordEffectProvider) offStack.getItem(); +// if (provider.providesEffectForWill(type)) +// { +// provider.applyOnHitEffect(type, stack, offStack, attacker, target); +// } +// } + } + + return true; + } + + return false; + } + + @Override + public EnumDemonWillType getCurrentType(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + if (!tag.contains(Constants.NBT.WILL_TYPE)) + { + return EnumDemonWillType.DEFAULT; + } + + return EnumDemonWillType.valueOf(tag.getString(Constants.NBT.WILL_TYPE).toUpperCase(Locale.ENGLISH)); + } + + public void setCurrentType(ItemStack stack, EnumDemonWillType type) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putString(Constants.NBT.WILL_TYPE, type.toString()); + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + recalculatePowers(player.getHeldItem(hand), world, player); + + return super.onItemRightClick(world, player, hand); + } + + @Override + public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) + { + return oldStack.getItem() != newStack.getItem(); + } + + private int getLevel(ItemStack stack, double soulsRemaining) + { + int lvl = -1; + for (int i = 0; i < soulBracket.length; i++) + { + if (soulsRemaining >= soulBracket[i]) + { + lvl = i; + } + } + + return lvl; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + if (!stack.hasTag()) + return; + + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.sentientAxe.desc").mergeStyle(TextFormatting.GRAY)); + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.currentType." + getCurrentType(stack).name().toLowerCase()).mergeStyle(TextFormatting.GRAY)); + } + + @Override + public boolean onLeftClickEntity(ItemStack stack, PlayerEntity player, Entity entity) + { + recalculatePowers(stack, player.getEntityWorld(), player); + + double drain = this.getDrainOfActivatedSword(stack); + if (drain > 0) + { + EnumDemonWillType type = getCurrentType(stack); + double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); + + if (drain > soulsRemaining) + { + return false; + } else + { + PlayerDemonWillHandler.consumeDemonWill(type, player, drain); + } + } + + return super.onLeftClickEntity(stack, player, entity); + } + + @Override + public List getRandomDemonWillDrop(LivingEntity killedEntity, LivingEntity attackingEntity, ItemStack stack, int looting) + { + List soulList = new ArrayList<>(); + + if (killedEntity.getEntityWorld().getDifficulty() != Difficulty.PEACEFUL && !(killedEntity instanceof IMob)) + { + return soulList; + } + + double willModifier = killedEntity instanceof SlimeEntity ? 0.67 : 1; + + IDemonWill soul; + + EnumDemonWillType type = this.getCurrentType(stack); + switch (type) + { + case CORROSIVE: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_CORROSIVE.get()); + break; + case DESTRUCTIVE: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_DESTRUCTIVE.get()); + break; + case STEADFAST: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_STEADFAST.get()); + break; + case VENGEFUL: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_VENGEFUL.get()); + break; + default: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_RAW.get()); + break; + } + + for (int i = 0; i <= looting; i++) + { + if (i == 0 || attackingEntity.getEntityWorld().rand.nextDouble() < 0.4) + { + ItemStack soulStack = soul.createWill(willModifier * (this.getDropOfActivatedSword(stack) * attackingEntity.getEntityWorld().rand.nextDouble() + this.getStaticDropOfActivatedSword(stack)) * killedEntity.getMaxHealth() / 20d); + soulList.add(soulStack); + } + } + + return soulList; + } + + // TODO: Change attack speed. + @Override + public Multimap getAttributeModifiers(EquipmentSlotType slot, ItemStack stack) + { + Multimap multimap = HashMultimap.create(); + if (slot == EquipmentSlotType.MAINHAND) + { + multimap.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getDamageOfActivatedSword(stack), AttributeModifier.Operation.ADDITION)); + multimap.put(Attributes.ATTACK_SPEED, new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", this.getAttackSpeedOfSword(stack), AttributeModifier.Operation.ADDITION)); + multimap.put(Attributes.MAX_HEALTH, new AttributeModifier(new UUID(0, 31818145), "Weapon modifier", this.getHealthBonusOfSword(stack), AttributeModifier.Operation.ADDITION)); + multimap.put(Attributes.MOVEMENT_SPEED, new AttributeModifier(new UUID(0, 4218052), "Weapon modifier", this.getSpeedOfSword(stack), AttributeModifier.Operation.ADDITION)); + } + + return multimap; + } + + public double getDamageOfActivatedSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_DAMAGE); + } + + public void setDamageOfActivatedSword(ItemStack stack, double damage) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_DAMAGE, damage); + } + + public double getDrainOfActivatedSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_ACTIVE_DRAIN); + } + + public void setDrainOfActivatedSword(ItemStack stack, double drain) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_ACTIVE_DRAIN, drain); + } + + public double getStaticDropOfActivatedSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_STATIC_DROP); + } + + public void setStaticDropOfActivatedSword(ItemStack stack, double drop) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_STATIC_DROP, drop); + } + + public double getDropOfActivatedSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_DROP); + } + + public void setDropOfActivatedSword(ItemStack stack, double drop) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_DROP, drop); + } + + public double getHealthBonusOfSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_HEALTH); + } + + public void setHealthBonusOfSword(ItemStack stack, double hp) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_HEALTH, hp); + } + + public double getAttackSpeedOfSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_ATTACK_SPEED); + } + + public void setAttackSpeedOfSword(ItemStack stack, double speed) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_ATTACK_SPEED, speed); + } + + public double getSpeedOfSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_SPEED); + } + + public void setSpeedOfSword(ItemStack stack, double speed) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_SPEED, speed); + } + + public double getDigSpeedOfSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_DIG_SPEED); + } + + public void setDigSpeedOfSword(ItemStack stack, double speed) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_DIG_SPEED, speed); + } + +// @Override +// public boolean spawnSentientEntityOnDrop(ItemStack droppedStack, PlayerEntity player) { +// World world = player.getEntityWorld(); +// if (!world.isRemote) { +// this.recalculatePowers(droppedStack, world, player); +// +// EnumDemonWillType type = this.getCurrentType(droppedStack); +// double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); +// if (soulsRemaining < 1024) { +// return false; +// } +// +// PlayerDemonWillHandler.consumeDemonWill(type, player, 100); +// +// EntitySentientSpecter specterEntity = new EntitySentientSpecter(world); +// specterEntity.setPosition(player.posX, player.posY, player.posZ); +// world.spawnEntity(specterEntity); +// +// specterEntity.setItemStackToSlot(EquipmentSlotType.MAINHAND, droppedStack.copy()); +// +// specterEntity.setType(this.getCurrentType(droppedStack)); +// specterEntity.setOwner(player); +// specterEntity.setTamed(true); +// +// return true; +// } +// +// return false; +// } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSentientPickaxe.java b/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSentientPickaxe.java new file mode 100644 index 00000000..471eb2d5 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSentientPickaxe.java @@ -0,0 +1,562 @@ +package wayoftime.bloodmagic.common.item.soul; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.UUID; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; + +import net.minecraft.block.BlockState; +import net.minecraft.client.util.ITooltipFlag; +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.monster.IMob; +import net.minecraft.entity.monster.SlimeEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.PickaxeItem; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.potion.EffectInstance; +import net.minecraft.potion.Effects; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.Difficulty; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.api.compat.IDemonWill; +import wayoftime.bloodmagic.api.compat.IDemonWillWeapon; +import wayoftime.bloodmagic.api.compat.IMultiWillTool; +import wayoftime.bloodmagic.common.item.BMItemTier; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.tags.BloodMagicTags; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.helper.NBTHelper; +import wayoftime.bloodmagic.will.PlayerDemonWillHandler; + +public class ItemSentientPickaxe extends PickaxeItem implements IDemonWillWeapon, IMultiWillTool +{ + public static int[] soulBracket = new int[] { 16, 60, 200, 400, 1000 }; + public static double[] defaultDamageAdded = new double[] { 1, 2, 3, 3.5, 4 }; + public static double[] destructiveDamageAdded = new double[] { 2, 3, 4, 5, 6 }; + public static double[] vengefulDamageAdded = new double[] { 0, 0.5, 1, 1.5, 2 }; + public static double[] steadfastDamageAdded = new double[] { 0, 0.5, 1, 1.5, 2 }; + public static double[] defaultDigSpeedAdded = new double[] { 1, 1.5, 2, 3, 4 }; + public static double[] soulDrainPerSwing = new double[] { 0.05, 0.1, 0.2, 0.4, 0.75 }; + public static double[] soulDrop = new double[] { 2, 4, 7, 10, 13 }; + public static double[] staticDrop = new double[] { 1, 1, 2, 3, 3 }; + + public static double[] healthBonus = new double[] { 0, 0, 0, 0, 0 }; // TODO: Think of implementing this later + public static double[] vengefulAttackSpeed = new double[] { -3, -2.8, -2.7, -2.6, -2.5 }; + public static double[] destructiveAttackSpeed = new double[] { -3.1, -3.1, -3.2, -3.3, -3.3 }; + + public static int[] absorptionTime = new int[] { 200, 300, 400, 500, 600 }; + + public static double maxAbsorptionHearts = 10; + + public static int[] poisonTime = new int[] { 25, 50, 60, 80, 100 }; + public static int[] poisonLevel = new int[] { 0, 0, 0, 1, 1 }; + + public static double[] movementSpeed = new double[] { 0.05, 0.1, 0.15, 0.2, 0.25 }; + + public static final double baseAttackDamage = 3; + public static final double baseAttackSpeed = -2.8; + + public ItemSentientPickaxe() + { + super(BMItemTier.SENTIENT, (int) baseAttackDamage, (float) baseAttackSpeed, new Item.Properties().maxDamage(520).group(BloodMagic.TAB)); + } + + @Override + public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) + { + return BloodMagicTags.CRYSTAL_DEMON.contains(repair.getItem()) || super.getIsRepairable(toRepair, repair); + } + + @Override + public float getDestroySpeed(ItemStack stack, BlockState state) + { + float value = super.getDestroySpeed(stack, state); + if (value > 1) + { + return (float) (value + getDigSpeedOfSword(stack)); + } else + { + return value; + } + } + + public void recalculatePowers(ItemStack stack, World world, PlayerEntity player) + { + EnumDemonWillType type = PlayerDemonWillHandler.getLargestWillType(player); + double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); + this.setCurrentType(stack, soulsRemaining > 0 ? type : EnumDemonWillType.DEFAULT); + int level = getLevel(stack, soulsRemaining); + + double drain = level >= 0 ? soulDrainPerSwing[level] : 0; + double extraDamage = getExtraDamage(type, level); + + setDrainOfActivatedSword(stack, drain); + setDamageOfActivatedSword(stack, baseAttackDamage + extraDamage); + setStaticDropOfActivatedSword(stack, level >= 0 ? staticDrop[level] : 1); + setDropOfActivatedSword(stack, level >= 0 ? soulDrop[level] : 0); + setAttackSpeedOfSword(stack, level >= 0 ? getAttackSpeed(type, level) : baseAttackSpeed); + setHealthBonusOfSword(stack, level >= 0 ? getHealthBonus(type, level) : 0); + setSpeedOfSword(stack, level >= 0 ? getMovementSpeed(type, level) : 0); + setDigSpeedOfSword(stack, level >= 0 ? getDigSpeed(type, level) : 0); + } + + public double getExtraDamage(EnumDemonWillType type, int willBracket) + { + if (willBracket < 0) + { + return 0; + } + + switch (type) + { + case CORROSIVE: + case DEFAULT: + return defaultDamageAdded[willBracket]; + case DESTRUCTIVE: + return destructiveDamageAdded[willBracket]; + case VENGEFUL: + return vengefulDamageAdded[willBracket]; + case STEADFAST: + return steadfastDamageAdded[willBracket]; + } + + return 0; + } + + public double getAttackSpeed(EnumDemonWillType type, int willBracket) + { + switch (type) + { + case VENGEFUL: + return vengefulAttackSpeed[willBracket]; + case DESTRUCTIVE: + return destructiveAttackSpeed[willBracket]; + default: + return -2.9; + } + } + + public double getHealthBonus(EnumDemonWillType type, int willBracket) + { + switch (type) + { + case STEADFAST: + return healthBonus[willBracket]; + default: + return 0; + } + } + + public double getMovementSpeed(EnumDemonWillType type, int willBracket) + { + switch (type) + { + case VENGEFUL: + return movementSpeed[willBracket]; + default: + return 0; + } + } + + public double getDigSpeed(EnumDemonWillType type, int willBracket) + { + switch (type) + { + case VENGEFUL: +// return movementSpeed[willBracket]; + default: + return defaultDigSpeedAdded[willBracket]; + } + } + + public void applyEffectToEntity(EnumDemonWillType type, int willBracket, LivingEntity target, PlayerEntity attacker) + { + switch (type) + { + case CORROSIVE: + target.addPotionEffect(new EffectInstance(Effects.WITHER, poisonTime[willBracket], poisonLevel[willBracket])); + break; + case DEFAULT: + break; + case DESTRUCTIVE: + break; + case STEADFAST: + if (!target.isAlive()) + { + float absorption = attacker.getAbsorptionAmount(); + attacker.addPotionEffect(new EffectInstance(Effects.ABSORPTION, absorptionTime[willBracket], 127)); + attacker.setAbsorptionAmount((float) Math.min(absorption + target.getMaxHealth() * 0.05f, maxAbsorptionHearts)); + } + break; + case VENGEFUL: + break; + } + } + + @Override + public boolean hitEntity(ItemStack stack, LivingEntity target, LivingEntity attacker) + { + if (super.hitEntity(stack, target, attacker)) + { + if (attacker instanceof PlayerEntity) + { + PlayerEntity attackerPlayer = (PlayerEntity) attacker; + this.recalculatePowers(stack, attackerPlayer.getEntityWorld(), attackerPlayer); + EnumDemonWillType type = this.getCurrentType(stack); + double will = PlayerDemonWillHandler.getTotalDemonWill(type, attackerPlayer); + int willBracket = this.getLevel(stack, will); + + applyEffectToEntity(type, willBracket, target, attackerPlayer); + +// ItemStack offStack = attackerPlayer.getItemStackFromSlot(EquipmentSlotType.OFFHAND); +// if (offStack.getItem() instanceof ISentientSwordEffectProvider) +// { +// ISentientSwordEffectProvider provider = (ISentientSwordEffectProvider) offStack.getItem(); +// if (provider.providesEffectForWill(type)) +// { +// provider.applyOnHitEffect(type, stack, offStack, attacker, target); +// } +// } + } + + return true; + } + + return false; + } + + @Override + public EnumDemonWillType getCurrentType(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + if (!tag.contains(Constants.NBT.WILL_TYPE)) + { + return EnumDemonWillType.DEFAULT; + } + + return EnumDemonWillType.valueOf(tag.getString(Constants.NBT.WILL_TYPE).toUpperCase(Locale.ENGLISH)); + } + + public void setCurrentType(ItemStack stack, EnumDemonWillType type) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putString(Constants.NBT.WILL_TYPE, type.toString()); + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + recalculatePowers(player.getHeldItem(hand), world, player); + return super.onItemRightClick(world, player, hand); + } + + @Override + public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) + { + return oldStack.getItem() != newStack.getItem(); + } + + private int getLevel(ItemStack stack, double soulsRemaining) + { + int lvl = -1; + for (int i = 0; i < soulBracket.length; i++) + { + if (soulsRemaining >= soulBracket[i]) + { + lvl = i; + } + } + + return lvl; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + if (!stack.hasTag()) + return; + +// tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.bloodmagic.sentientSword.desc")))); + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.sentientPickaxe.desc").mergeStyle(TextFormatting.GRAY)); + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.currentType." + getCurrentType(stack).name().toLowerCase()).mergeStyle(TextFormatting.GRAY)); + } + + @Override + public boolean onLeftClickEntity(ItemStack stack, PlayerEntity player, Entity entity) + { + recalculatePowers(stack, player.getEntityWorld(), player); + + double drain = this.getDrainOfActivatedSword(stack); + if (drain > 0) + { + EnumDemonWillType type = getCurrentType(stack); + double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); + + if (drain > soulsRemaining) + { + return false; + } else + { + PlayerDemonWillHandler.consumeDemonWill(type, player, drain); + } + } + + return super.onLeftClickEntity(stack, player, entity); + } + + @Override + public List getRandomDemonWillDrop(LivingEntity killedEntity, LivingEntity attackingEntity, ItemStack stack, int looting) + { + List soulList = new ArrayList<>(); + + if (killedEntity.getEntityWorld().getDifficulty() != Difficulty.PEACEFUL && !(killedEntity instanceof IMob)) + { + return soulList; + } + + double willModifier = killedEntity instanceof SlimeEntity ? 0.67 : 1; + + IDemonWill soul; + + EnumDemonWillType type = this.getCurrentType(stack); + switch (type) + { + case CORROSIVE: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_CORROSIVE.get()); + break; + case DESTRUCTIVE: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_DESTRUCTIVE.get()); + break; + case STEADFAST: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_STEADFAST.get()); + break; + case VENGEFUL: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_VENGEFUL.get()); + break; + default: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_RAW.get()); + break; + } + + for (int i = 0; i <= looting; i++) + { + if (i == 0 || attackingEntity.getEntityWorld().rand.nextDouble() < 0.4) + { + ItemStack soulStack = soul.createWill(willModifier * (this.getDropOfActivatedSword(stack) * attackingEntity.getEntityWorld().rand.nextDouble() + this.getStaticDropOfActivatedSword(stack)) * killedEntity.getMaxHealth() / 20d); + soulList.add(soulStack); + } + } + + return soulList; + } + + // TODO: Change attack speed. + @Override + public Multimap getAttributeModifiers(EquipmentSlotType slot, ItemStack stack) + { + Multimap multimap = HashMultimap.create(); + if (slot == EquipmentSlotType.MAINHAND) + { + multimap.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getDamageOfActivatedSword(stack), AttributeModifier.Operation.ADDITION)); + multimap.put(Attributes.ATTACK_SPEED, new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", this.getAttackSpeedOfSword(stack), AttributeModifier.Operation.ADDITION)); + multimap.put(Attributes.MAX_HEALTH, new AttributeModifier(new UUID(0, 31818145), "Weapon modifier", this.getHealthBonusOfSword(stack), AttributeModifier.Operation.ADDITION)); + multimap.put(Attributes.MOVEMENT_SPEED, new AttributeModifier(new UUID(0, 4218052), "Weapon modifier", this.getSpeedOfSword(stack), AttributeModifier.Operation.ADDITION)); + } + + return multimap; + } + + public double getDamageOfActivatedSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_DAMAGE); + } + + public void setDamageOfActivatedSword(ItemStack stack, double damage) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_DAMAGE, damage); + } + + public double getDrainOfActivatedSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_ACTIVE_DRAIN); + } + + public void setDrainOfActivatedSword(ItemStack stack, double drain) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_ACTIVE_DRAIN, drain); + } + + public double getStaticDropOfActivatedSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_STATIC_DROP); + } + + public void setStaticDropOfActivatedSword(ItemStack stack, double drop) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_STATIC_DROP, drop); + } + + public double getDropOfActivatedSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_DROP); + } + + public void setDropOfActivatedSword(ItemStack stack, double drop) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_DROP, drop); + } + + public double getHealthBonusOfSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_HEALTH); + } + + public void setHealthBonusOfSword(ItemStack stack, double hp) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_HEALTH, hp); + } + + public double getAttackSpeedOfSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_ATTACK_SPEED); + } + + public void setAttackSpeedOfSword(ItemStack stack, double speed) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_ATTACK_SPEED, speed); + } + + public double getSpeedOfSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_SPEED); + } + + public void setSpeedOfSword(ItemStack stack, double speed) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_SPEED, speed); + } + + public double getDigSpeedOfSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_DIG_SPEED); + } + + public void setDigSpeedOfSword(ItemStack stack, double speed) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_DIG_SPEED, speed); + } + +// @Override +// public boolean spawnSentientEntityOnDrop(ItemStack droppedStack, PlayerEntity player) +// { +// World world = player.getEntityWorld(); +// if (!world.isRemote) +// { +// this.recalculatePowers(droppedStack, world, player); +// +// EnumDemonWillType type = this.getCurrentType(droppedStack); +// double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); +// if (soulsRemaining < 1024) +// { +// return false; +// } +// +// PlayerDemonWillHandler.consumeDemonWill(type, player, 100); +// +// EntitySentientSpecter specterEntity = new EntitySentientSpecter(world); +// specterEntity.setPosition(player.posX, player.posY, player.posZ); +// world.spawnEntity(specterEntity); +// +// specterEntity.setItemStackToSlot(EquipmentSlotType.MAINHAND, droppedStack.copy()); +// +// specterEntity.setType(this.getCurrentType(droppedStack)); +// specterEntity.setOwner(player); +// specterEntity.setTamed(true); +// +// return true; +// } +// +// return false; +// } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSentientShovel.java b/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSentientShovel.java new file mode 100644 index 00000000..dce46373 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSentientShovel.java @@ -0,0 +1,563 @@ +package wayoftime.bloodmagic.common.item.soul; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.UUID; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; + +import net.minecraft.block.BlockState; +import net.minecraft.client.util.ITooltipFlag; +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.monster.IMob; +import net.minecraft.entity.monster.SlimeEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ShovelItem; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.potion.EffectInstance; +import net.minecraft.potion.Effects; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.Difficulty; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.api.compat.IDemonWill; +import wayoftime.bloodmagic.api.compat.IDemonWillWeapon; +import wayoftime.bloodmagic.api.compat.IMultiWillTool; +import wayoftime.bloodmagic.common.item.BMItemTier; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.tags.BloodMagicTags; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.helper.NBTHelper; +import wayoftime.bloodmagic.will.PlayerDemonWillHandler; + +public class ItemSentientShovel extends ShovelItem implements IDemonWillWeapon, IMultiWillTool +{ + public static int[] soulBracket = new int[] { 16, 60, 200, 400, 1000 }; + public static double[] defaultDamageAdded = new double[] { 1, 2, 3, 3.5, 4 }; + public static double[] destructiveDamageAdded = new double[] { 2, 3, 4, 5, 6 }; + public static double[] vengefulDamageAdded = new double[] { 0, 0.5, 1, 1.5, 2 }; + public static double[] steadfastDamageAdded = new double[] { 0, 0.5, 1, 1.5, 2 }; + public static double[] defaultDigSpeedAdded = new double[] { 1, 1.5, 2, 3, 4 }; + public static double[] soulDrainPerSwing = new double[] { 0.05, 0.1, 0.2, 0.4, 0.75 }; + public static double[] soulDrop = new double[] { 2, 4, 7, 10, 13 }; + public static double[] staticDrop = new double[] { 1, 1, 2, 3, 3 }; + + public static double[] healthBonus = new double[] { 0, 0, 0, 0, 0 }; // TODO: Think of implementing this later + public static double[] vengefulAttackSpeed = new double[] { -3, -2.8, -2.7, -2.6, -2.5 }; + public static double[] destructiveAttackSpeed = new double[] { -3.1, -3.1, -3.2, -3.3, -3.3 }; + + public static int[] absorptionTime = new int[] { 200, 300, 400, 500, 600 }; + + public static double maxAbsorptionHearts = 10; + + public static int[] poisonTime = new int[] { 25, 50, 60, 80, 100 }; + public static int[] poisonLevel = new int[] { 0, 0, 0, 1, 1 }; + + public static double[] movementSpeed = new double[] { 0.05, 0.1, 0.15, 0.2, 0.25 }; + + public static final double baseAttackDamage = 3; + public static final double baseAttackSpeed = -2.8; + + public ItemSentientShovel() + { + super(BMItemTier.SENTIENT, (int) baseAttackDamage, (float) baseAttackSpeed, new Item.Properties().maxDamage(520).group(BloodMagic.TAB)); + } + + @Override + public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) + { + return BloodMagicTags.CRYSTAL_DEMON.contains(repair.getItem()) || super.getIsRepairable(toRepair, repair); + } + + @Override + public float getDestroySpeed(ItemStack stack, BlockState state) + { + float value = super.getDestroySpeed(stack, state); + if (value > 1) + { + return (float) (value + getDigSpeedOfSword(stack)); + } else + { + return value; + } + } + + public void recalculatePowers(ItemStack stack, World world, PlayerEntity player) + { + EnumDemonWillType type = PlayerDemonWillHandler.getLargestWillType(player); + double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); + this.setCurrentType(stack, soulsRemaining > 0 ? type : EnumDemonWillType.DEFAULT); + int level = getLevel(stack, soulsRemaining); + + double drain = level >= 0 ? soulDrainPerSwing[level] : 0; + double extraDamage = getExtraDamage(type, level); + + setDrainOfActivatedSword(stack, drain); + setDamageOfActivatedSword(stack, baseAttackDamage + extraDamage); + setStaticDropOfActivatedSword(stack, level >= 0 ? staticDrop[level] : 1); + setDropOfActivatedSword(stack, level >= 0 ? soulDrop[level] : 0); + setAttackSpeedOfSword(stack, level >= 0 ? getAttackSpeed(type, level) : baseAttackSpeed); + setHealthBonusOfSword(stack, level >= 0 ? getHealthBonus(type, level) : 0); + setSpeedOfSword(stack, level >= 0 ? getMovementSpeed(type, level) : 0); + setDigSpeedOfSword(stack, level >= 0 ? getDigSpeed(type, level) : 0); + } + + public double getExtraDamage(EnumDemonWillType type, int willBracket) + { + if (willBracket < 0) + { + return 0; + } + + switch (type) + { + case CORROSIVE: + case DEFAULT: + return defaultDamageAdded[willBracket]; + case DESTRUCTIVE: + return destructiveDamageAdded[willBracket]; + case VENGEFUL: + return vengefulDamageAdded[willBracket]; + case STEADFAST: + return steadfastDamageAdded[willBracket]; + } + + return 0; + } + + public double getAttackSpeed(EnumDemonWillType type, int willBracket) + { + switch (type) + { + case VENGEFUL: + return vengefulAttackSpeed[willBracket]; + case DESTRUCTIVE: + return destructiveAttackSpeed[willBracket]; + default: + return -2.9; + } + } + + public double getHealthBonus(EnumDemonWillType type, int willBracket) + { + switch (type) + { + case STEADFAST: + return healthBonus[willBracket]; + default: + return 0; + } + } + + public double getMovementSpeed(EnumDemonWillType type, int willBracket) + { + switch (type) + { + case VENGEFUL: + return movementSpeed[willBracket]; + default: + return 0; + } + } + + public double getDigSpeed(EnumDemonWillType type, int willBracket) + { + switch (type) + { + case VENGEFUL: +// return movementSpeed[willBracket]; + default: + return defaultDigSpeedAdded[willBracket]; + } + } + + public void applyEffectToEntity(EnumDemonWillType type, int willBracket, LivingEntity target, PlayerEntity attacker) + { + switch (type) + { + case CORROSIVE: + target.addPotionEffect(new EffectInstance(Effects.WITHER, poisonTime[willBracket], poisonLevel[willBracket])); + break; + case DEFAULT: + break; + case DESTRUCTIVE: + break; + case STEADFAST: + if (!target.isAlive()) + { + float absorption = attacker.getAbsorptionAmount(); + attacker.addPotionEffect(new EffectInstance(Effects.ABSORPTION, absorptionTime[willBracket], 127)); + attacker.setAbsorptionAmount((float) Math.min(absorption + target.getMaxHealth() * 0.05f, maxAbsorptionHearts)); + } + break; + case VENGEFUL: + break; + } + } + + @Override + public boolean hitEntity(ItemStack stack, LivingEntity target, LivingEntity attacker) + { + if (super.hitEntity(stack, target, attacker)) + { + if (attacker instanceof PlayerEntity) + { + PlayerEntity attackerPlayer = (PlayerEntity) attacker; + this.recalculatePowers(stack, attackerPlayer.getEntityWorld(), attackerPlayer); + EnumDemonWillType type = this.getCurrentType(stack); + double will = PlayerDemonWillHandler.getTotalDemonWill(type, attackerPlayer); + int willBracket = this.getLevel(stack, will); + + applyEffectToEntity(type, willBracket, target, attackerPlayer); + +// ItemStack offStack = attackerPlayer.getItemStackFromSlot(EquipmentSlotType.OFFHAND); +// if (offStack.getItem() instanceof ISentientSwordEffectProvider) +// { +// ISentientSwordEffectProvider provider = (ISentientSwordEffectProvider) offStack.getItem(); +// if (provider.providesEffectForWill(type)) +// { +// provider.applyOnHitEffect(type, stack, offStack, attacker, target); +// } +// } + } + + return true; + } + + return false; + } + + @Override + public EnumDemonWillType getCurrentType(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + if (!tag.contains(Constants.NBT.WILL_TYPE)) + { + return EnumDemonWillType.DEFAULT; + } + + return EnumDemonWillType.valueOf(tag.getString(Constants.NBT.WILL_TYPE).toUpperCase(Locale.ENGLISH)); + } + + public void setCurrentType(ItemStack stack, EnumDemonWillType type) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putString(Constants.NBT.WILL_TYPE, type.toString()); + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + recalculatePowers(player.getHeldItem(hand), world, player); + + return super.onItemRightClick(world, player, hand); + } + + @Override + public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) + { + return oldStack.getItem() != newStack.getItem(); + } + + private int getLevel(ItemStack stack, double soulsRemaining) + { + int lvl = -1; + for (int i = 0; i < soulBracket.length; i++) + { + if (soulsRemaining >= soulBracket[i]) + { + lvl = i; + } + } + + return lvl; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + if (!stack.hasTag()) + return; + +// tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.bloodmagic.sentientSword.desc")))); + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.sentientShovel.desc").mergeStyle(TextFormatting.GRAY)); + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.currentType." + getCurrentType(stack).name().toLowerCase()).mergeStyle(TextFormatting.GRAY)); + } + + @Override + public boolean onLeftClickEntity(ItemStack stack, PlayerEntity player, Entity entity) + { + recalculatePowers(stack, player.getEntityWorld(), player); + + double drain = this.getDrainOfActivatedSword(stack); + if (drain > 0) + { + EnumDemonWillType type = getCurrentType(stack); + double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); + + if (drain > soulsRemaining) + { + return false; + } else + { + PlayerDemonWillHandler.consumeDemonWill(type, player, drain); + } + } + + return super.onLeftClickEntity(stack, player, entity); + } + + @Override + public List getRandomDemonWillDrop(LivingEntity killedEntity, LivingEntity attackingEntity, ItemStack stack, int looting) + { + List soulList = new ArrayList<>(); + + if (killedEntity.getEntityWorld().getDifficulty() != Difficulty.PEACEFUL && !(killedEntity instanceof IMob)) + { + return soulList; + } + + double willModifier = killedEntity instanceof SlimeEntity ? 0.67 : 1; + + IDemonWill soul; + + EnumDemonWillType type = this.getCurrentType(stack); + switch (type) + { + case CORROSIVE: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_CORROSIVE.get()); + break; + case DESTRUCTIVE: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_DESTRUCTIVE.get()); + break; + case STEADFAST: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_STEADFAST.get()); + break; + case VENGEFUL: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_VENGEFUL.get()); + break; + default: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_RAW.get()); + break; + } + + for (int i = 0; i <= looting; i++) + { + if (i == 0 || attackingEntity.getEntityWorld().rand.nextDouble() < 0.4) + { + ItemStack soulStack = soul.createWill(willModifier * (this.getDropOfActivatedSword(stack) * attackingEntity.getEntityWorld().rand.nextDouble() + this.getStaticDropOfActivatedSword(stack)) * killedEntity.getMaxHealth() / 20d); + soulList.add(soulStack); + } + } + + return soulList; + } + + // TODO: Change attack speed. + @Override + public Multimap getAttributeModifiers(EquipmentSlotType slot, ItemStack stack) + { + Multimap multimap = HashMultimap.create(); + if (slot == EquipmentSlotType.MAINHAND) + { + multimap.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getDamageOfActivatedSword(stack), AttributeModifier.Operation.ADDITION)); + multimap.put(Attributes.ATTACK_SPEED, new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", this.getAttackSpeedOfSword(stack), AttributeModifier.Operation.ADDITION)); + multimap.put(Attributes.MAX_HEALTH, new AttributeModifier(new UUID(0, 31818145), "Weapon modifier", this.getHealthBonusOfSword(stack), AttributeModifier.Operation.ADDITION)); + multimap.put(Attributes.MOVEMENT_SPEED, new AttributeModifier(new UUID(0, 4218052), "Weapon modifier", this.getSpeedOfSword(stack), AttributeModifier.Operation.ADDITION)); + } + + return multimap; + } + + public double getDamageOfActivatedSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_DAMAGE); + } + + public void setDamageOfActivatedSword(ItemStack stack, double damage) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_DAMAGE, damage); + } + + public double getDrainOfActivatedSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_ACTIVE_DRAIN); + } + + public void setDrainOfActivatedSword(ItemStack stack, double drain) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_ACTIVE_DRAIN, drain); + } + + public double getStaticDropOfActivatedSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_STATIC_DROP); + } + + public void setStaticDropOfActivatedSword(ItemStack stack, double drop) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_STATIC_DROP, drop); + } + + public double getDropOfActivatedSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_DROP); + } + + public void setDropOfActivatedSword(ItemStack stack, double drop) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_DROP, drop); + } + + public double getHealthBonusOfSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_HEALTH); + } + + public void setHealthBonusOfSword(ItemStack stack, double hp) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_HEALTH, hp); + } + + public double getAttackSpeedOfSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_ATTACK_SPEED); + } + + public void setAttackSpeedOfSword(ItemStack stack, double speed) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_ATTACK_SPEED, speed); + } + + public double getSpeedOfSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_SPEED); + } + + public void setSpeedOfSword(ItemStack stack, double speed) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_SPEED, speed); + } + + public double getDigSpeedOfSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_DIG_SPEED); + } + + public void setDigSpeedOfSword(ItemStack stack, double speed) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_DIG_SPEED, speed); + } + +// @Override +// public boolean spawnSentientEntityOnDrop(ItemStack droppedStack, PlayerEntity player) +// { +// World world = player.getEntityWorld(); +// if (!world.isRemote) +// { +// this.recalculatePowers(droppedStack, world, player); +// +// EnumDemonWillType type = this.getCurrentType(droppedStack); +// double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); +// if (soulsRemaining < 1024) +// { +// return false; +// } +// +// PlayerDemonWillHandler.consumeDemonWill(type, player, 100); +// +// EntitySentientSpecter specterEntity = new EntitySentientSpecter(world); +// specterEntity.setPosition(player.posX, player.posY, player.posZ); +// world.spawnEntity(specterEntity); +// +// specterEntity.setItemStackToSlot(EquipmentSlotType.MAINHAND, droppedStack.copy()); +// +// specterEntity.setType(this.getCurrentType(droppedStack)); +// specterEntity.setOwner(player); +// specterEntity.setTamed(true); +// +// return true; +// } +// +// return false; +// } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSentientSword.java b/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSentientSword.java new file mode 100644 index 00000000..c39ba1ed --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSentientSword.java @@ -0,0 +1,507 @@ +package wayoftime.bloodmagic.common.item.soul; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.UUID; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; + +import net.minecraft.client.util.ITooltipFlag; +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.monster.IMob; +import net.minecraft.entity.monster.SlimeEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.SwordItem; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.potion.EffectInstance; +import net.minecraft.potion.Effects; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.Difficulty; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.api.compat.IDemonWill; +import wayoftime.bloodmagic.api.compat.IDemonWillWeapon; +import wayoftime.bloodmagic.api.compat.IMultiWillTool; +import wayoftime.bloodmagic.common.item.BMItemTier; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.tags.BloodMagicTags; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.helper.NBTHelper; +import wayoftime.bloodmagic.will.PlayerDemonWillHandler; + +public class ItemSentientSword extends SwordItem implements IDemonWillWeapon, IMultiWillTool +{ + public static int[] soulBracket = new int[] { 16, 60, 200, 400, 1000, 2000, 4000 }; + public static double[] defaultDamageAdded = new double[] { 1, 1.5, 2, 2.5, 3, 3.5, 4 }; + public static double[] destructiveDamageAdded = new double[] { 1.5, 2.25, 3, 3.75, 4.5, 5.25, 6 }; + public static double[] vengefulDamageAdded = new double[] { 0, 0.5, 1, 1.5, 2, 2.25, 2.5 }; + public static double[] steadfastDamageAdded = new double[] { 0, 0.5, 1, 1.5, 2, 2.25, 2.5 }; + public static double[] soulDrainPerSwing = new double[] { 0.05, 0.1, 0.2, 0.4, 0.75, 1, 1.25 }; + public static double[] soulDrop = new double[] { 2, 4, 7, 10, 13, 15, 18 }; + public static double[] staticDrop = new double[] { 1, 1, 2, 3, 3, 4, 4 }; + + public static double[] healthBonus = new double[] { 0, 0, 0, 0, 0, 0, 0 }; // TODO: Think of implementing this later + public static double[] vengefulAttackSpeed = new double[] { -2.1, -2, -1.8, -1.7, -1.6, -1.6, -1.5 }; + public static double[] destructiveAttackSpeed = new double[] { -2.6, -2.7, -2.8, -2.9, -3, -3, -3 }; + + public static int[] absorptionTime = new int[] { 200, 300, 400, 500, 600, 700, 800 }; + + public static double maxAbsorptionHearts = 10; + + public static int[] poisonTime = new int[] { 25, 50, 60, 80, 100, 120, 150 }; + public static int[] poisonLevel = new int[] { 0, 0, 0, 1, 1, 1, 1 }; + + public static double[] movementSpeed = new double[] { 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.4 }; + + public ItemSentientSword() + { +// super(RegistrarBloodMagicItems.SOUL_TOOL_MATERIAL); + super(BMItemTier.SENTIENT, 6, -2.6f, new Item.Properties().maxDamage(520).group(BloodMagic.TAB)); + } + + @Override + public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) + { + return BloodMagicTags.CRYSTAL_DEMON.contains(repair.getItem()) || super.getIsRepairable(toRepair, repair); + } + + public void recalculatePowers(ItemStack stack, World world, PlayerEntity player) + { + EnumDemonWillType type = PlayerDemonWillHandler.getLargestWillType(player); + double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); + recalculatePowers(stack, type, soulsRemaining); + } + + public void recalculatePowers(ItemStack stack, EnumDemonWillType type, double will) + { + this.setCurrentType(stack, will > 0 ? type : EnumDemonWillType.DEFAULT); + int level = getLevel(stack, will); + + double drain = level >= 0 ? soulDrainPerSwing[level] : 0; + double extraDamage = getExtraDamage(type, level); + + setActivatedState(stack, will > 16); + + setDrainOfActivatedSword(stack, drain); + setDamageOfActivatedSword(stack, 5 + extraDamage); + setStaticDropOfActivatedSword(stack, level >= 0 ? staticDrop[level] : 1); + setDropOfActivatedSword(stack, level >= 0 ? soulDrop[level] : 0); + setAttackSpeedOfSword(stack, level >= 0 ? getAttackSpeed(type, level) : -2.4); + setHealthBonusOfSword(stack, level >= 0 ? getHealthBonus(type, level) : 0); + setSpeedOfSword(stack, level >= 0 ? getMovementSpeed(type, level) : 0); + } + + public boolean getActivated(ItemStack stack) + { + return !stack.isEmpty() && NBTHelper.checkNBT(stack).getTag().getBoolean(Constants.NBT.ACTIVATED); + } + + public ItemStack setActivatedState(ItemStack stack, boolean activated) + { + if (!stack.isEmpty()) + { + NBTHelper.checkNBT(stack).getTag().putBoolean(Constants.NBT.ACTIVATED, activated); + return stack; + } + + return stack; + } + + public double getExtraDamage(EnumDemonWillType type, int willBracket) + { + if (willBracket < 0) + { + return 0; + } + + switch (type) + { + case CORROSIVE: + case DEFAULT: + return defaultDamageAdded[willBracket]; + case DESTRUCTIVE: + return destructiveDamageAdded[willBracket]; + case VENGEFUL: + return vengefulDamageAdded[willBracket]; + case STEADFAST: + return steadfastDamageAdded[willBracket]; + } + + return 0; + } + + public double getAttackSpeed(EnumDemonWillType type, int willBracket) + { + switch (type) + { + case VENGEFUL: + return vengefulAttackSpeed[willBracket]; + case DESTRUCTIVE: + return destructiveAttackSpeed[willBracket]; + default: + return -2.4; + } + } + + public double getHealthBonus(EnumDemonWillType type, int willBracket) + { + switch (type) + { + case STEADFAST: + return healthBonus[willBracket]; + default: + return 0; + } + } + + public double getMovementSpeed(EnumDemonWillType type, int willBracket) + { + switch (type) + { + case VENGEFUL: + return movementSpeed[willBracket]; + default: + return 0; + } + } + + public void applyEffectToEntity(EnumDemonWillType type, int willBracket, LivingEntity target, LivingEntity attacker) + { + switch (type) + { + case CORROSIVE: + target.addPotionEffect(new EffectInstance(Effects.WITHER, poisonTime[willBracket], poisonLevel[willBracket])); + break; + case DEFAULT: + break; + case DESTRUCTIVE: + break; + case STEADFAST: + if (!target.isAlive()) + { + float absorption = attacker.getAbsorptionAmount(); + attacker.addPotionEffect(new EffectInstance(Effects.ABSORPTION, absorptionTime[willBracket], 127, false, false)); + attacker.setAbsorptionAmount((float) Math.min(absorption + target.getMaxHealth() * 0.05f, maxAbsorptionHearts)); + } + break; + case VENGEFUL: + break; + } + } + + @Override + public boolean hitEntity(ItemStack stack, LivingEntity target, LivingEntity attacker) + { + if (super.hitEntity(stack, target, attacker)) + { + if (attacker instanceof PlayerEntity) + { + PlayerEntity attackerPlayer = (PlayerEntity) attacker; + this.recalculatePowers(stack, attackerPlayer.getEntityWorld(), attackerPlayer); + EnumDemonWillType type = this.getCurrentType(stack); + double will = PlayerDemonWillHandler.getTotalDemonWill(type, attackerPlayer); + int willBracket = this.getLevel(stack, will); + + applyEffectToEntity(type, willBracket, target, attackerPlayer); + +// ItemStack offStack = attackerPlayer.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND); +// if (offStack.getItem() instanceof ISentientSwordEffectProvider) +// { +// ISentientSwordEffectProvider provider = (ISentientSwordEffectProvider) offStack.getItem(); +// if (provider.providesEffectForWill(type)) +// { +// provider.applyOnHitEffect(type, stack, offStack, attacker, target); +// } +// } + } + + return true; + } + + return false; + } + + @Override + public EnumDemonWillType getCurrentType(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + if (!tag.contains(Constants.NBT.WILL_TYPE)) + { + return EnumDemonWillType.DEFAULT; + } + + return EnumDemonWillType.valueOf(tag.getString(Constants.NBT.WILL_TYPE).toUpperCase(Locale.ENGLISH)); + } + + public void setCurrentType(ItemStack stack, EnumDemonWillType type) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putString(Constants.NBT.WILL_TYPE, type.toString()); + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + recalculatePowers(player.getHeldItem(hand), world, player); + return super.onItemRightClick(world, player, hand); + } + + @Override + public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) + { + return oldStack.getItem() != newStack.getItem(); + } + + private int getLevel(ItemStack stack, double soulsRemaining) + { + int lvl = -1; + for (int i = 0; i < soulBracket.length; i++) + { + if (soulsRemaining >= soulBracket[i]) + { + lvl = i; + } + } + + return lvl; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + if (!stack.hasTag()) + return; + +// tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.bloodmagic.sentientSword.desc")))); + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.sentientSword.desc").mergeStyle(TextFormatting.GRAY)); + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.currentType." + getCurrentType(stack).name().toLowerCase()).mergeStyle(TextFormatting.GRAY)); + } + + @Override + public boolean onLeftClickEntity(ItemStack stack, PlayerEntity player, Entity entity) + { + recalculatePowers(stack, player.getEntityWorld(), player); + + double drain = this.getDrainOfActivatedSword(stack); + if (drain > 0) + { + EnumDemonWillType type = getCurrentType(stack); + double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); + + if (drain > soulsRemaining) + { + return false; + } else + { + PlayerDemonWillHandler.consumeDemonWill(type, player, drain); + } + } + + return super.onLeftClickEntity(stack, player, entity); + } + + @Override + public List getRandomDemonWillDrop(LivingEntity killedEntity, LivingEntity attackingEntity, ItemStack stack, int looting) + { + List soulList = new ArrayList<>(); + + if (killedEntity.getEntityWorld().getDifficulty() != Difficulty.PEACEFUL && !(killedEntity instanceof IMob)) + { + return soulList; + } + + double willModifier = killedEntity instanceof SlimeEntity ? 0.67 : 1; + + IDemonWill soul; + + EnumDemonWillType type = this.getCurrentType(stack); + switch (type) + { + case CORROSIVE: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_CORROSIVE.get()); + break; + case DESTRUCTIVE: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_DESTRUCTIVE.get()); + break; + case STEADFAST: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_STEADFAST.get()); + break; + case VENGEFUL: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_VENGEFUL.get()); + break; + default: + soul = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_RAW.get()); + break; + } + + for (int i = 0; i <= looting; i++) + { + if (i == 0 || attackingEntity.getEntityWorld().rand.nextDouble() < 0.4) + { + ItemStack soulStack = soul.createWill(willModifier * (this.getDropOfActivatedSword(stack) * attackingEntity.getEntityWorld().rand.nextDouble() + this.getStaticDropOfActivatedSword(stack)) * killedEntity.getMaxHealth() / 20d); + soulList.add(soulStack); + } + } + + return soulList; + } + + // TODO: Change attack speed. + @Override + public Multimap getAttributeModifiers(EquipmentSlotType slot, ItemStack stack) + { + Multimap multimap = HashMultimap.create(); + if (slot == EquipmentSlotType.MAINHAND) + { + multimap.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getDamageOfActivatedSword(stack), AttributeModifier.Operation.ADDITION)); + multimap.put(Attributes.ATTACK_SPEED, new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", this.getAttackSpeedOfSword(stack), AttributeModifier.Operation.ADDITION)); + multimap.put(Attributes.MAX_HEALTH, new AttributeModifier(new UUID(0, 31818145), "Weapon modifier", this.getHealthBonusOfSword(stack), AttributeModifier.Operation.ADDITION)); + multimap.put(Attributes.MOVEMENT_SPEED, new AttributeModifier(new UUID(0, 4218052), "Weapon modifier", this.getSpeedOfSword(stack), AttributeModifier.Operation.ADDITION)); + } + + return multimap; + } + + public double getDamageOfActivatedSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_DAMAGE); + } + + public void setDamageOfActivatedSword(ItemStack stack, double damage) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_DAMAGE, damage); + } + + public double getDrainOfActivatedSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_ACTIVE_DRAIN); + } + + public void setDrainOfActivatedSword(ItemStack stack, double drain) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_ACTIVE_DRAIN, drain); + } + + public double getStaticDropOfActivatedSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_STATIC_DROP); + } + + public void setStaticDropOfActivatedSword(ItemStack stack, double drop) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_STATIC_DROP, drop); + } + + public double getDropOfActivatedSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_DROP); + } + + public void setDropOfActivatedSword(ItemStack stack, double drop) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_DROP, drop); + } + + public double getHealthBonusOfSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_HEALTH); + } + + public void setHealthBonusOfSword(ItemStack stack, double hp) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_HEALTH, hp); + } + + public double getAttackSpeedOfSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_ATTACK_SPEED); + } + + public void setAttackSpeedOfSword(ItemStack stack, double speed) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_ATTACK_SPEED, speed); + } + + public double getSpeedOfSword(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + return tag.getDouble(Constants.NBT.SOUL_SWORD_SPEED); + } + + public void setSpeedOfSword(ItemStack stack, double speed) + { + NBTHelper.checkNBT(stack); + + CompoundNBT tag = stack.getTag(); + + tag.putDouble(Constants.NBT.SOUL_SWORD_SPEED, speed); + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSoulGem.java b/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSoulGem.java new file mode 100644 index 00000000..1bbfbf24 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSoulGem.java @@ -0,0 +1,257 @@ +package wayoftime.bloodmagic.common.item.soul; + +import java.util.List; +import java.util.Locale; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.ActionResult; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.api.compat.IMultiWillTool; +import wayoftime.bloodmagic.util.ChatUtil; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.helper.NBTHelper; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.api.compat.IDemonWill; +import wayoftime.bloodmagic.api.compat.IDemonWillGem; +import wayoftime.bloodmagic.will.PlayerDemonWillHandler; + +public class ItemSoulGem extends Item implements IDemonWillGem, IMultiWillTool +{ + private final int maxWill; + private final String name; + + public ItemSoulGem(String name, int maxWill) + { + super(new Item.Properties().maxStackSize(1).group(BloodMagic.TAB)); + this.name = name; + this.maxWill = maxWill; + } + + @Override + public void fillItemGroup(ItemGroup group, NonNullList items) + { + if (this.isInGroup(group)) + { + for (EnumDemonWillType type : EnumDemonWillType.values()) + { + ItemStack stack = new ItemStack(this); + this.setCurrentType(type, stack); + this.setWill(type, stack, maxWill); + items.add(stack); + } + } + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + ItemStack stack = player.getHeldItem(hand); + EnumDemonWillType type = this.getCurrentType(stack); + double drain = Math.min(this.getWill(type, stack), this.getMaxWill(type, stack) / 10); + + double filled = PlayerDemonWillHandler.addDemonWill(type, player, drain, stack); + this.drainWill(type, stack, filled, true); + + return new ActionResult<>(ActionResultType.PASS, stack); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + if (!stack.hasTag()) + return; + + EnumDemonWillType type = this.getCurrentType(stack); + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.soulGem." + name).mergeStyle(TextFormatting.GRAY)); + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.will", ChatUtil.DECIMAL_FORMAT.format(getWill(type, stack))).mergeStyle(TextFormatting.GRAY)); + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.currentType." + getCurrentType(stack).name().toLowerCase()).mergeStyle(TextFormatting.GRAY)); + + super.addInformation(stack, world, tooltip, flag); + } + + @Override + public boolean showDurabilityBar(ItemStack stack) + { + return true; + } + + @Override + public double getDurabilityForDisplay(ItemStack stack) + { + EnumDemonWillType type = this.getCurrentType(stack); + double maxWill = getMaxWill(type, stack); + if (maxWill <= 0) + { + return 1; + } + return 1.0 - (getWill(type, stack) / maxWill); + } + + @Override + public int getRGBDurabilityForDisplay(ItemStack stack) + { + EnumDemonWillType type = this.getCurrentType(stack); + double maxWill = getMaxWill(type, stack); + if (maxWill <= 0) + { + return 1; + } + + return MathHelper.hsvToRGB(Math.max(0.0F, (float) (getWill(type, stack)) / (float) maxWill) / 3.0F, 1.0F, 1.0F); + } + + @Override + public ItemStack fillDemonWillGem(ItemStack soulGemStack, ItemStack soulStack) + { + if (soulStack != null && soulStack.getItem() instanceof IDemonWill) + { + EnumDemonWillType thisType = this.getCurrentType(soulGemStack); + if (thisType != ((IDemonWill) soulStack.getItem()).getType(soulStack)) + { + return soulStack; + } + IDemonWill soul = (IDemonWill) soulStack.getItem(); + double soulsLeft = getWill(thisType, soulGemStack); + + if (soulsLeft < getMaxWill(thisType, soulGemStack)) + { + double newSoulsLeft = Math.min(soulsLeft + soul.getWill(thisType, soulStack), getMaxWill(thisType, soulGemStack)); + soul.drainWill(thisType, soulStack, newSoulsLeft - soulsLeft); + + setWill(thisType, soulGemStack, newSoulsLeft); + if (soul.getWill(thisType, soulStack) <= 0) + { + return ItemStack.EMPTY; + } + } + } + + return soulStack; + } + + @Override + public double getWill(EnumDemonWillType type, ItemStack soulGemStack) + { + if (!type.equals(getCurrentType(soulGemStack))) + { + return 0; + } + + CompoundNBT tag = soulGemStack.getTag(); + + return tag.getDouble(Constants.NBT.SOULS); + } + + @Override + public void setWill(EnumDemonWillType type, ItemStack soulGemStack, double souls) + { + setCurrentType(type, soulGemStack); + + CompoundNBT tag = soulGemStack.getTag(); + + tag.putDouble(Constants.NBT.SOULS, souls); + } + + @Override + public double drainWill(EnumDemonWillType type, ItemStack soulGemStack, double drainAmount, boolean doDrain) + { + EnumDemonWillType currentType = this.getCurrentType(soulGemStack); + if (currentType != type) + { + return 0; + } + double souls = getWill(type, soulGemStack); + + double soulsDrained = Math.min(drainAmount, souls); + + if (doDrain) + { + setWill(type, soulGemStack, souls - soulsDrained); + } + + return soulsDrained; + } + + @Override + public int getMaxWill(EnumDemonWillType type, ItemStack soulGemStack) + { + EnumDemonWillType currentType = getCurrentType(soulGemStack); + if (!type.equals(currentType) && currentType != EnumDemonWillType.DEFAULT) + { + return 0; + } + + return maxWill; + } + + @Override + public EnumDemonWillType getCurrentType(ItemStack soulGemStack) + { + NBTHelper.checkNBT(soulGemStack); + + CompoundNBT tag = soulGemStack.getTag(); + + if (!tag.contains(Constants.NBT.WILL_TYPE)) + { + return EnumDemonWillType.DEFAULT; + } + + return EnumDemonWillType.valueOf(tag.getString(Constants.NBT.WILL_TYPE).toUpperCase(Locale.ENGLISH)); + } + + public void setCurrentType(EnumDemonWillType type, ItemStack soulGemStack) + { + NBTHelper.checkNBT(soulGemStack); + + CompoundNBT tag = soulGemStack.getTag(); + + if (type == EnumDemonWillType.DEFAULT) + { + if (tag.contains(Constants.NBT.WILL_TYPE)) + { + tag.remove(Constants.NBT.WILL_TYPE); + } + + return; + } + + tag.putString(Constants.NBT.WILL_TYPE, type.toString()); + } + + @Override + public double fillWill(EnumDemonWillType type, ItemStack stack, double fillAmount, boolean doFill) + { + if (!type.equals(getCurrentType(stack)) && this.getWill(getCurrentType(stack), stack) > 0) + { + return 0; + } + + double current = this.getWill(type, stack); + double maxWill = this.getMaxWill(type, stack); + + double filled = Math.min(fillAmount, maxWill - current); + + if (doFill) + { + this.setWill(type, stack, filled + current); + } + + return filled; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSoulSnare.java b/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSoulSnare.java new file mode 100644 index 00000000..2de6557d --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSoulSnare.java @@ -0,0 +1,72 @@ +package wayoftime.bloodmagic.common.item.soul; + +import java.util.List; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.entity.projectile.EntitySoulSnare; + +public class ItemSoulSnare extends Item +{ + public static String[] names = { "base" }; + + public ItemSoulSnare() + { + super(new Item.Properties().maxStackSize(16).group(BloodMagic.TAB)); + +// setTranslationKey(BloodMagic.MODID + ".soulSnare."); +// setCreativeTab(BloodMagic.TAB_BM); +// setHasSubtypes(true); +// setMaxStackSize(16); + } + + @Override + public ActionResult onItemRightClick(World worldIn, PlayerEntity playerIn, Hand hand) + { + ItemStack stack = playerIn.getHeldItem(hand); + if (!playerIn.isCreative()) + { + stack.shrink(1); + } + + worldIn.playSound((PlayerEntity) null, playerIn.getPosX(), playerIn.getPosY(), playerIn.getPosZ(), SoundEvents.ENTITY_SNOWBALL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (random.nextFloat() * 0.4F + 0.8F)); + + if (!worldIn.isRemote) + { +// System.out.println("Attempting to spawn"); + EntitySoulSnare snare = new EntitySoulSnare(worldIn, playerIn); + snare.func_234612_a_(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, 0.0F, 1.5F, 1.0F); + worldIn.addEntity(snare); +// +// SnowballEntity snowballentity = new SnowballEntity(worldIn, playerIn); +// snowballentity.setItem(itemstack); +// snowballentity.func_234612_a_(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, 0.0F, 1.5F, 1.0F); +// worldIn.addEntity(snowballentity); + } + + return new ActionResult<>(ActionResultType.SUCCESS, stack); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) + { + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.soulSnare.desc").mergeStyle(TextFormatting.GRAY)); + + super.addInformation(stack, world, tooltip, flag); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/recipe/ARCRecipeProvider.java b/src/main/java/wayoftime/bloodmagic/common/recipe/ARCRecipeProvider.java new file mode 100644 index 00000000..1a7bbd1e --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/recipe/ARCRecipeProvider.java @@ -0,0 +1,111 @@ +package wayoftime.bloodmagic.common.recipe; + +import java.util.function.Consumer; + +import net.minecraft.block.Blocks; +import net.minecraft.data.IFinishedRecipe; +import net.minecraft.fluid.Fluids; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.tags.ITag; +import net.minecraftforge.common.Tags; +import net.minecraftforge.common.crafting.conditions.ICondition; +import net.minecraftforge.common.crafting.conditions.NotCondition; +import net.minecraftforge.common.crafting.conditions.TagEmptyCondition; +import net.minecraftforge.fluids.FluidStack; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.recipe.helper.FluidStackIngredient; +import wayoftime.bloodmagic.common.data.recipe.builder.ARCRecipeBuilder; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.tags.BloodMagicTags; + +public class ARCRecipeProvider implements ISubRecipeProvider +{ + @Override + public void addRecipes(Consumer consumer) + { + String basePath = "arc/"; +// ARCRecipeBuilder.arc(Ingredient.fromTag(Tags.Items.GEMS_DIAMOND), Ingredient.fromTag(Tags.Items.BONES), null, new ItemStack(BloodMagicBlocks.BLOOD_ALTAR.get()), null).addRandomOutput(new ItemStack(Items.DIAMOND, 2), 0.5).build(consumer, BloodMagic.rl(basePath + "test1")); +// ARCRecipeBuilder.arc(Ingredient.fromTag(Tags.Items.GEMS_DIAMOND), Ingredient.fromTag(Tags.Items.BONES), null, new ItemStack(BloodMagicBlocks.BLOOD_ALTAR.get()), null).addRandomOutput(new ItemStack(Items.DIAMOND, 5), 0.5).build(consumer, BloodMagic.rl(basePath + "test3")); +// ARCRecipeBuilder.arc(Ingredient.fromTag(Tags.Items.GEMS_DIAMOND), Ingredient.fromItems(Items.ACACIA_BOAT), FluidStackIngredient.from(Fluids.LAVA, 1000), new ItemStack(BloodMagicBlocks.BLOOD_ALTAR.get()), new FluidStack(Fluids.WATER, 100)).build(consumer, BloodMagic.rl(basePath + "test2")); +// ARCRecipeBuilder.arc(Ingredient.fromTag(Tags.Items.NETHERRACK), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_REVERTER), FluidStackIngredient.from(Fluids.LAVA, 1000), new ItemStack(BloodMagicBlocks.BLOOD_ALTAR.get()), new FluidStack(Fluids.WATER, 100)).addRandomOutput(new ItemStack(BloodMagicItems.SLATE.get()), 0.2).addRandomOutput(new ItemStack(BloodMagicItems.REINFORCED_SLATE.get()), 0.1).addRandomOutput(new ItemStack(BloodMagicItems.IMBUED_SLATE.get()), 0.001).build(consumer, BloodMagic.rl(basePath + "test4")); + + ARCRecipeBuilder.arc(Ingredient.fromItems(BloodMagicItems.IMBUED_SLATE.get()), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_REVERTER), null, new ItemStack(BloodMagicItems.WEAK_BLOOD_SHARD.get()), null).addRandomOutput(new ItemStack(BloodMagicItems.WEAK_BLOOD_SHARD.get()), 0.2).build(consumer, BloodMagic.rl(basePath + "weakbloodshard")); + ARCRecipeBuilder.arc(Ingredient.fromItems(Items.IRON_ORE), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_CUTTINGFLUID), null, new ItemStack(BloodMagicItems.IRON_SAND.get(), 2), null).build(consumer, BloodMagic.rl(basePath + "ore/dustiron")); + ARCRecipeBuilder.arc(Ingredient.fromItems(Items.GOLD_ORE), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_CUTTINGFLUID), null, new ItemStack(BloodMagicItems.GOLD_SAND.get(), 2), null).build(consumer, BloodMagic.rl(basePath + "ore/dustgold")); + ARCRecipeBuilder.arc(Ingredient.fromTag(Tags.Items.NETHERRACK), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_EXPLOSIVE), null, new ItemStack(BloodMagicItems.SULFUR.get()), new FluidStack(Fluids.LAVA, 5)).build(consumer, BloodMagic.rl(basePath + "netherrack_to_sulfer")); + ARCRecipeBuilder.arc(Ingredient.fromItems(Items.TERRACOTTA), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_HYDRATE), FluidStackIngredient.from(Fluids.WATER, 200), new ItemStack(Blocks.CLAY), null).build(consumer, BloodMagic.rl(basePath + "clay_from_terracotta")); + ARCRecipeBuilder.arc(Ingredient.fromTag(Tags.Items.SAND), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_HYDRATE), FluidStackIngredient.from(Fluids.WATER, 200), new ItemStack(Items.CLAY_BALL), null).addRandomOutput(new ItemStack(Items.CLAY_BALL), 0.5).build(consumer, BloodMagic.rl(basePath + "clay_from_sand")); + +// ConditionalRecipe.builder().addCondition(new TagEmptyCondition(Tags.Items.ORES_IRON.getName())); + + addReversionRecipes(consumer); + addSandRecipes(consumer); + addFragmentRecipes(consumer); + addGravelRecipes(consumer); + } + + private ICondition getTagCondition(ITag.INamedTag tag) + { + return new NotCondition(new TagEmptyCondition(tag.getName())); + } + + private void addSandRecipes(Consumer consumer) + { + String basePath = "arc/dusts"; + + // Ore to dust + ARCRecipeBuilder.arc(Ingredient.fromTag(Tags.Items.ORES_IRON), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_CUTTINGFLUID), null, new ItemStack(BloodMagicItems.IRON_SAND.get(), 2), null).build(consumer, BloodMagic.rl(basePath + "from_ore_iron")); + ARCRecipeBuilder.arc(Ingredient.fromTag(Tags.Items.ORES_GOLD), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_CUTTINGFLUID), null, new ItemStack(BloodMagicItems.GOLD_SAND.get(), 2), null).build(consumer, BloodMagic.rl(basePath + "from_ore_gold")); + ARCRecipeBuilder.arc(Ingredient.fromTag(Tags.Items.ORES_NETHERITE_SCRAP), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_CUTTINGFLUID), null, new ItemStack(BloodMagicItems.NETHERITE_SCRAP_SAND.get(), 2), null).build(consumer, BloodMagic.rl(basePath + "from_ore_netherite_scrap")); + + // Ingot to dust + ARCRecipeBuilder.arc(Ingredient.fromTag(Tags.Items.INGOTS_IRON), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_EXPLOSIVE), null, new ItemStack(BloodMagicItems.IRON_SAND.get()), null).build(consumer, BloodMagic.rl(basePath + "from_ingot_iron")); + ARCRecipeBuilder.arc(Ingredient.fromTag(Tags.Items.INGOTS_GOLD), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_EXPLOSIVE), null, new ItemStack(BloodMagicItems.GOLD_SAND.get()), null).build(consumer, BloodMagic.rl(basePath + "from_ingot_gold")); + ARCRecipeBuilder.arc(Ingredient.fromItems(Items.NETHERITE_SCRAP), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_EXPLOSIVE), null, new ItemStack(BloodMagicItems.NETHERITE_SCRAP_SAND.get()), null).build(consumer, BloodMagic.rl(basePath + "from_ingot_netherite_scrap")); + + // Gravel to dust + ARCRecipeBuilder.arc(Ingredient.fromTag(BloodMagicTags.GRAVEL_IRON), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_CUTTINGFLUID), null, new ItemStack(BloodMagicItems.IRON_SAND.get()), null).build(consumer, BloodMagic.rl(basePath + "from_gravel_iron")); + ARCRecipeBuilder.arc(Ingredient.fromTag(BloodMagicTags.GRAVEL_GOLD), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_CUTTINGFLUID), null, new ItemStack(BloodMagicItems.GOLD_SAND.get()), null).build(consumer, BloodMagic.rl(basePath + "from_gravel_gold")); + ARCRecipeBuilder.arc(Ingredient.fromTag(BloodMagicTags.GRAVEL_NETHERITE_SCRAP), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_CUTTINGFLUID), null, new ItemStack(BloodMagicItems.NETHERITE_SCRAP_SAND.get()), null).build(consumer, BloodMagic.rl(basePath + "from_gravel_netherite_scrap")); + } + + private void addFragmentRecipes(Consumer consumer) + { + String basePath = "arc/fragments"; + ARCRecipeBuilder.arc(Ingredient.fromTag(Tags.Items.ORES_IRON), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_EXPLOSIVE), null, new ItemStack(BloodMagicItems.IRON_FRAGMENT.get(), 3), null).build(consumer, BloodMagic.rl(basePath + "iron")); + ARCRecipeBuilder.arc(Ingredient.fromTag(Tags.Items.ORES_GOLD), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_EXPLOSIVE), null, new ItemStack(BloodMagicItems.GOLD_FRAGMENT.get(), 3), null).build(consumer, BloodMagic.rl(basePath + "gold")); + ARCRecipeBuilder.arc(Ingredient.fromTag(Tags.Items.ORES_NETHERITE_SCRAP), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_EXPLOSIVE), null, new ItemStack(BloodMagicItems.NETHERITE_SCRAP_FRAGMENT.get(), 3), null).build(consumer, BloodMagic.rl(basePath + "netherite_scrap")); + } + + private void addGravelRecipes(Consumer consumer) + { + String basePath = "arc/gravels"; + ARCRecipeBuilder.arc(Ingredient.fromTag(BloodMagicTags.FRAGMENT_IRON), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_RESONATOR), null, new ItemStack(BloodMagicItems.IRON_GRAVEL.get()), null).addRandomOutput(new ItemStack(BloodMagicItems.CORRUPTED_DUST_TINY.get()), 0.05).addRandomOutput(new ItemStack(BloodMagicItems.CORRUPTED_DUST_TINY.get()), 0.01).build(consumer, BloodMagic.rl(basePath + "iron")); + ARCRecipeBuilder.arc(Ingredient.fromTag(BloodMagicTags.FRAGMENT_GOLD), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_RESONATOR), null, new ItemStack(BloodMagicItems.GOLD_GRAVEL.get()), null).addRandomOutput(new ItemStack(BloodMagicItems.CORRUPTED_DUST_TINY.get()), 0.05).addRandomOutput(new ItemStack(BloodMagicItems.CORRUPTED_DUST_TINY.get()), 0.01).build(consumer, BloodMagic.rl(basePath + "gold")); + ARCRecipeBuilder.arc(Ingredient.fromTag(BloodMagicTags.FRAGMENT_NETHERITE_SCRAP), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_RESONATOR), null, new ItemStack(BloodMagicItems.NETHERITE_SCRAP_GRAVEL.get()), null).addRandomOutput(new ItemStack(BloodMagicItems.CORRUPTED_DUST_TINY.get()), 0.05).addRandomOutput(new ItemStack(BloodMagicItems.CORRUPTED_DUST_TINY.get()), 0.01).build(consumer, BloodMagic.rl(basePath + "netherite_scrap")); + } + + private void addReversionRecipes(Consumer consumer) + { + String basePath = "arc/reversion/"; + // ONE + registerReversionRecipe(Ingredient.fromItems(BloodMagicItems.WEAK_BLOOD_ORB.get()), new ItemStack(Items.DIAMOND), consumer, basePath + "weak_blood_orb"); + + // TWO + registerReversionRecipe(Ingredient.fromItems(BloodMagicItems.APPRENTICE_BLOOD_ORB.get()), new ItemStack(Blocks.REDSTONE_BLOCK), consumer, basePath + "apprentice_blood_orb"); + + // THREE + registerReversionRecipe(Ingredient.fromItems(BloodMagicItems.MAGICIAN_BLOOD_ORB.get()), new ItemStack(Blocks.GOLD_BLOCK), consumer, basePath + "magician_blood_orb"); + + // FOUR + registerReversionRecipe(Ingredient.fromItems(BloodMagicItems.MASTER_BLOOD_ORB.get()), new ItemStack(BloodMagicItems.WEAK_BLOOD_SHARD.get()), consumer, basePath + "master_blood_orb"); + } + + private void registerReversionRecipe(Ingredient input, ItemStack outputStack, Consumer consumer, String path) + { + ARCRecipeBuilder.arcConsume(input, Ingredient.fromTag(BloodMagicTags.ARC_TOOL_REVERTER), null, outputStack, null).build(consumer, BloodMagic.rl(path)); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/recipe/AlchemyArrayRecipeProvider.java b/src/main/java/wayoftime/bloodmagic/common/recipe/AlchemyArrayRecipeProvider.java new file mode 100644 index 00000000..6350126d --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/recipe/AlchemyArrayRecipeProvider.java @@ -0,0 +1,58 @@ +package wayoftime.bloodmagic.common.recipe; + +import java.util.function.Consumer; + +import net.minecraft.data.IFinishedRecipe; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.item.crafting.Ingredient; +import net.minecraftforge.common.Tags; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.data.recipe.builder.AlchemyArrayRecipeBuilder; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.core.registry.AlchemyArrayRegistry; + +public class AlchemyArrayRecipeProvider implements ISubRecipeProvider +{ + + @Override + public void addRecipes(Consumer consumer) + { + String basePath = "array/"; +// AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/airsigil.png"), Ingredient.fromItems(Items.STONE), Ingredient.fromItems(Items.STONE), new ItemStack(Items.DIAMOND)).build(consumer, BloodMagic.rl(basePath +// + "airsigil")); + AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/divinationsigil.png"), Ingredient.fromItems(Items.REDSTONE), Ingredient.fromItems(BloodMagicItems.SLATE.get()), new ItemStack(BloodMagicItems.DIVINATION_SIGIL.get())).build(consumer, BloodMagic.rl(basePath + "divinationsigil")); + AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/watersigil.png"), Ingredient.fromItems(BloodMagicItems.REAGENT_WATER.get()), Ingredient.fromItems(BloodMagicItems.SLATE.get()), new ItemStack(BloodMagicItems.WATER_SIGIL.get())).build(consumer, BloodMagic.rl(basePath + "watersigil")); + AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/lavasigil.png"), Ingredient.fromItems(BloodMagicItems.REAGENT_LAVA.get()), Ingredient.fromItems(BloodMagicItems.SLATE.get()), new ItemStack(BloodMagicItems.LAVA_SIGIL.get())).build(consumer, BloodMagic.rl(basePath + "lavasigil")); + AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/voidsigil.png"), Ingredient.fromItems(BloodMagicItems.REAGENT_VOID.get()), Ingredient.fromItems(BloodMagicItems.REINFORCED_SLATE.get()), new ItemStack(BloodMagicItems.VOID_SIGIL.get())).build(consumer, BloodMagic.rl(basePath + "voidsigil")); + AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/growthsigil.png"), Ingredient.fromItems(BloodMagicItems.REAGENT_GROWTH.get()), Ingredient.fromItems(BloodMagicItems.REINFORCED_SLATE.get()), new ItemStack(BloodMagicItems.GREEN_GROVE_SIGIL.get())).build(consumer, BloodMagic.rl(basePath + "growthsigil")); + AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/fastminersigil.png"), Ingredient.fromItems(BloodMagicItems.REAGENT_FAST_MINER.get()), Ingredient.fromItems(BloodMagicItems.REINFORCED_SLATE.get()), new ItemStack(BloodMagicItems.FAST_MINER_SIGIL.get())).build(consumer, BloodMagic.rl(basePath + "fastminersigil")); + AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/magnetismsigil.png"), Ingredient.fromItems(BloodMagicItems.REAGENT_MAGNETISM.get()), Ingredient.fromItems(BloodMagicItems.IMBUED_SLATE.get()), new ItemStack(BloodMagicItems.MAGNETISM_SIGIL.get())).build(consumer, BloodMagic.rl(basePath + "magnetismsigil")); + AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/lightsigil.png"), Ingredient.fromItems(BloodMagicItems.REAGENT_BLOOD_LIGHT.get()), Ingredient.fromItems(BloodMagicItems.IMBUED_SLATE.get()), new ItemStack(BloodMagicItems.BLOOD_LIGHT_SIGIL.get())).build(consumer, BloodMagic.rl(basePath + "bloodlightsigil")); + AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/airsigil.png"), Ingredient.fromItems(BloodMagicItems.REAGENT_AIR.get()), Ingredient.fromItems(BloodMagicItems.REINFORCED_SLATE.get()), new ItemStack(BloodMagicItems.AIR_SIGIL.get())).build(consumer, BloodMagic.rl(basePath + "airsigil")); + AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/sightsigil.png"), Ingredient.fromItems(BloodMagicItems.REAGENT_SIGHT.get()), Ingredient.fromItems(BloodMagicItems.REINFORCED_SLATE.get()), new ItemStack(BloodMagicItems.SEER_SIGIL.get())).build(consumer, BloodMagic.rl(basePath + "seersigil")); + AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/sightsigil.png"), Ingredient.fromItems(BloodMagicItems.REAGENT_HOLDING.get()), Ingredient.fromItems(BloodMagicItems.IMBUED_SLATE.get()), new ItemStack(BloodMagicItems.HOLDING_SIGIL.get())).build(consumer, BloodMagic.rl(basePath + "holdingsigil")); + AlchemyArrayRecipeBuilder.array(AlchemyArrayRegistry.BINDING_ARRAY, Ingredient.fromItems(BloodMagicItems.REAGENT_BINDING.get()), Ingredient.fromItems(Items.IRON_HELMET), new ItemStack(BloodMagicItems.LIVING_HELMET.get())).build(consumer, BloodMagic.rl(basePath + "living_helmet")); + AlchemyArrayRecipeBuilder.array(AlchemyArrayRegistry.BINDING_ARRAY, Ingredient.fromItems(BloodMagicItems.REAGENT_BINDING.get()), Ingredient.fromItems(Items.IRON_CHESTPLATE), new ItemStack(BloodMagicItems.LIVING_PLATE.get())).build(consumer, BloodMagic.rl(basePath + "living_plate")); + AlchemyArrayRecipeBuilder.array(AlchemyArrayRegistry.BINDING_ARRAY, Ingredient.fromItems(BloodMagicItems.REAGENT_BINDING.get()), Ingredient.fromItems(Items.IRON_LEGGINGS), new ItemStack(BloodMagicItems.LIVING_LEGGINGS.get())).build(consumer, BloodMagic.rl(basePath + "living_leggings")); + AlchemyArrayRecipeBuilder.array(AlchemyArrayRegistry.BINDING_ARRAY, Ingredient.fromItems(BloodMagicItems.REAGENT_BINDING.get()), Ingredient.fromItems(Items.IRON_BOOTS), new ItemStack(BloodMagicItems.LIVING_BOOTS.get())).build(consumer, BloodMagic.rl(basePath + "living_boots")); + + AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/movementarray.png"), Ingredient.fromItems(Items.FEATHER), Ingredient.fromTag(Tags.Items.DUSTS_REDSTONE), ItemStack.EMPTY).build(consumer, BloodMagic.rl(basePath + "movement")); + AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/updraftarray.png"), Ingredient.fromItems(Items.FEATHER), Ingredient.fromTag(Tags.Items.DUSTS_GLOWSTONE), ItemStack.EMPTY).build(consumer, BloodMagic.rl(basePath + "updraft")); + AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/spikearray.png"), Ingredient.fromItems(Items.COBBLESTONE), Ingredient.fromTag(Tags.Items.INGOTS_IRON), ItemStack.EMPTY).build(consumer, BloodMagic.rl(basePath + "spike")); + AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/sunarray.png"), Ingredient.fromItems(Items.COAL), Ingredient.fromItems(Items.COAL), ItemStack.EMPTY).build(consumer, BloodMagic.rl(basePath + "day")); + AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/moonarray.png"), Ingredient.fromItems(Items.LAPIS_LAZULI), Ingredient.fromItems(Items.LAPIS_LAZULI), ItemStack.EMPTY).build(consumer, BloodMagic.rl(basePath + "night")); + AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/growthsigil.png"), Ingredient.fromTag(Tags.Items.BONES), Ingredient.fromTag(Tags.Items.BONES), ItemStack.EMPTY).build(consumer, BloodMagic.rl(basePath + "grove")); + AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/bouncearray.png"), Ingredient.fromTag(Tags.Items.SLIMEBALLS), Ingredient.fromTag(Tags.Items.DUSTS_REDSTONE), ItemStack.EMPTY).build(consumer, BloodMagic.rl(basePath + "bounce")); + // AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/fastminersigil.png"), + // Ingredient.fromItems(BloodMagicItems.REAGENT_FAST_MINER.get()), + // Ingredient.fromItems(BloodMagicItems.REINFORCED_SLATE.get()), new + // ItemStack(BloodMagicItems.FAST_MINER_SIGIL.get())).build(consumer, + // BloodMagic.rl(basePath + "frostsigil")); +// BloodAltarRecipeBuilder.altar(Ingredient.fromTag(Tags.Items.GEMS_DIAMOND), new ItemStack(BloodMagicItems.WEAK_BLOOD_ORB.get()), AltarTier.ONE.ordinal(), 2000, 2, 1).build(consumer, new ResourceLocation(BloodMagic.MODID, basePath +// + "weakbloodorb")); +// BloodAltarRecipeBuilder.altar(Ingredient.fromTag(Tags.Items.STONE), new ItemStack(BloodMagicItems.SLATE.get()), AltarTier.ONE.ordinal(), 1000, 5, 5).build(consumer, new ResourceLocation(BloodMagic.MODID, basePath +// + "slate")); + + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/recipe/AlchemyTableRecipeProvider.java b/src/main/java/wayoftime/bloodmagic/common/recipe/AlchemyTableRecipeProvider.java new file mode 100644 index 00000000..233e2b07 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/recipe/AlchemyTableRecipeProvider.java @@ -0,0 +1,76 @@ +package wayoftime.bloodmagic.common.recipe; + +import java.util.function.Consumer; + +import net.minecraft.block.Blocks; +import net.minecraft.data.IFinishedRecipe; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.tags.ItemTags; +import net.minecraftforge.common.Tags; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.data.recipe.builder.AlchemyTableRecipeBuilder; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.tags.BloodMagicTags; + +public class AlchemyTableRecipeProvider implements ISubRecipeProvider +{ + @Override + public void addRecipes(Consumer consumer) + { + String basePath = "alchemytable/"; + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(Items.STRING, 4), 100, 100, 0).addIngredient(Ingredient.fromTag(ItemTags.WOOL)).addIngredient(Ingredient.fromItems(Items.FLINT)).build(consumer, BloodMagic.rl(basePath + "string")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(Items.FLINT, 2), 50, 20, 0).addIngredient(Ingredient.fromItems(Items.GRAVEL)).addIngredient(Ingredient.fromItems(Items.FLINT)).build(consumer, BloodMagic.rl(basePath + "flint_from_gravel")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(Items.LEATHER, 4), 100, 200, 1).addIngredient(Ingredient.fromItems(Items.ROTTEN_FLESH)).addIngredient(Ingredient.fromItems(Items.ROTTEN_FLESH)).addIngredient(Ingredient.fromItems(Items.ROTTEN_FLESH)).addIngredient(Ingredient.fromItems(Items.ROTTEN_FLESH)).addIngredient(Ingredient.fromItems(Items.FLINT)).addIngredient(Ingredient.fromItems(Items.WATER_BUCKET)).build(consumer, BloodMagic.rl(basePath + "leather_from_flesh")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.EXPLOSIVE_POWDER.get()), 500, 200, 1).addIngredient(Ingredient.fromTag(Tags.Items.GUNPOWDER)).addIngredient(Ingredient.fromTag(Tags.Items.GUNPOWDER)).addIngredient(Ingredient.fromTag(BloodMagicTags.DUST_COAL)).build(consumer, BloodMagic.rl(basePath + "explosive_powder")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(Items.BREAD), 100, 100, 1).addIngredient(Ingredient.fromTag(Tags.Items.CROPS_WHEAT)).addIngredient(Ingredient.fromItems(Items.SUGAR)).build(consumer, BloodMagic.rl(basePath + "bread")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(Blocks.GRASS_BLOCK), 200, 200, 1).addIngredient(Ingredient.fromItems(Items.DIRT)).addIngredient(Ingredient.fromItems(Items.BONE_MEAL)).addIngredient(Ingredient.fromItems(Items.WHEAT_SEEDS)).build(consumer, BloodMagic.rl(basePath + "grass_block")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(Items.CLAY_BALL, 2), 50, 100, 2).addIngredient(Ingredient.fromTag(Tags.Items.SAND)).addIngredient(Ingredient.fromTag(Tags.Items.SAND)).addIngredient(Ingredient.fromItems(Items.WATER_BUCKET)).build(consumer, BloodMagic.rl(basePath + "clay_from_sand")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(Items.COBWEB), 50, 50, 1).addIngredient(Ingredient.fromTag(Tags.Items.STRING)).addIngredient(Ingredient.fromTag(Tags.Items.STRING)).addIngredient(Ingredient.fromTag(Tags.Items.STRING)).build(consumer, BloodMagic.rl(basePath + "cobweb")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(Items.NETHER_WART), 50, 40, 1).addIngredient(Ingredient.fromItems(Items.NETHER_WART_BLOCK)).build(consumer, BloodMagic.rl(basePath + "nether_wart_from_block")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(Items.GOLD_NUGGET, 9), 200, 100, 2).addIngredient(Ingredient.fromItems(Items.GILDED_BLACKSTONE)).build(consumer, BloodMagic.rl(basePath + "gold_ore_from_gilded")); + + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(Items.GUNPOWDER, 3), 0, 100, 0).addIngredient(Ingredient.fromTag(BloodMagicTags.DUST_SULFUR)).addIngredient(Ingredient.fromTag(BloodMagicTags.DUST_SALTPETER)).addIngredient(Ingredient.fromTag(ItemTags.COALS)).build(consumer, BloodMagic.rl(basePath + "gunpowder")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.PLANT_OIL.get()), 100, 100, 1).addIngredient(Ingredient.fromTag(Tags.Items.CROPS_CARROT)).addIngredient(Ingredient.fromTag(Tags.Items.CROPS_CARROT)).addIngredient(Ingredient.fromTag(Tags.Items.CROPS_CARROT)).addIngredient(Ingredient.fromItems(Items.BONE_MEAL)).build(consumer, BloodMagic.rl(basePath + "plantoil_from_carrots")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.PLANT_OIL.get()), 100, 100, 1).addIngredient(Ingredient.fromTag(Tags.Items.CROPS_POTATO)).addIngredient(Ingredient.fromTag(Tags.Items.CROPS_POTATO)).addIngredient(Ingredient.fromItems(Items.BONE_MEAL)).build(consumer, BloodMagic.rl(basePath + "plantoil_from_taters")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.PLANT_OIL.get()), 100, 100, 1).addIngredient(Ingredient.fromTag(Tags.Items.CROPS_WHEAT)).addIngredient(Ingredient.fromTag(Tags.Items.CROPS_WHEAT)).addIngredient(Ingredient.fromItems(Items.BONE_MEAL)).build(consumer, BloodMagic.rl(basePath + "plantoil_from_wheat")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.PLANT_OIL.get()), 100, 100, 1).addIngredient(Ingredient.fromTag(Tags.Items.CROPS_BEETROOT)).addIngredient(Ingredient.fromTag(Tags.Items.CROPS_BEETROOT)).addIngredient(Ingredient.fromTag(Tags.Items.CROPS_BEETROOT)).addIngredient(Ingredient.fromItems(Items.BONE_MEAL)).build(consumer, BloodMagic.rl(basePath + "plantoil_from_beets")); + + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.IRON_SAND.get(), 2), 400, 200, 1).addIngredient(Ingredient.fromTag(Tags.Items.ORES_IRON)).addIngredient(Ingredient.fromTag(BloodMagicTags.ARC_TOOL_CUTTINGFLUID)).build(consumer, BloodMagic.rl(basePath + "sand_iron")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.GOLD_SAND.get(), 2), 400, 200, 1).addIngredient(Ingredient.fromTag(Tags.Items.ORES_GOLD)).addIngredient(Ingredient.fromTag(BloodMagicTags.ARC_TOOL_CUTTINGFLUID)).build(consumer, BloodMagic.rl(basePath + "sand_gold")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.COAL_SAND.get(), 4), 400, 200, 1).addIngredient(Ingredient.fromItems(Items.COAL)).addIngredient(Ingredient.fromItems(Items.COAL)).addIngredient(Ingredient.fromItems(Items.FLINT)).build(consumer, BloodMagic.rl(basePath + "sand_coal")); + + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.BASIC_CUTTING_FLUID.get()), 1000, 200, 1).addIngredient(Ingredient.fromItems(BloodMagicItems.PLANT_OIL.get())).addIngredient(Ingredient.fromTag(Tags.Items.DUSTS_REDSTONE)).addIngredient(Ingredient.fromTag(Tags.Items.GUNPOWDER)).addIngredient(Ingredient.fromItems(Items.SUGAR)).addIngredient(Ingredient.fromTag(BloodMagicTags.DUST_COAL)).addIngredient(Ingredient.fromStacks(new ItemStack(Items.POTION))).build(consumer, BloodMagic.rl(basePath + "basic_cutting_fluid")); + + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.SLATE_VIAL.get(), 8), 500, 200, 1).addIngredient(Ingredient.fromItems(BloodMagicItems.SLATE.get())).addIngredient(Ingredient.fromTag(Tags.Items.GLASS)).addIngredient(Ingredient.fromTag(Tags.Items.GLASS)).addIngredient(Ingredient.fromTag(Tags.Items.GLASS)).addIngredient(Ingredient.fromTag(Tags.Items.GLASS)).addIngredient(Ingredient.fromTag(Tags.Items.GLASS)).build(consumer, BloodMagic.rl(basePath + "slate_vial")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.FORTUNE_ANOINTMENT.get()), 500, 100, 1).addIngredient(Ingredient.fromItems(BloodMagicItems.SLATE_VIAL.get())).addIngredient(Ingredient.fromTag(Tags.Items.CROPS_NETHER_WART)).addIngredient(Ingredient.fromTag(Tags.Items.DUSTS_REDSTONE)).addIngredient(Ingredient.fromTag(BloodMagicTags.DUST_COAL)).build(consumer, BloodMagic.rl(basePath + "fortune_anointment")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.SILK_TOUCH_ANOINTMENT.get()), 500, 100, 1).addIngredient(Ingredient.fromItems(BloodMagicItems.SLATE_VIAL.get())).addIngredient(Ingredient.fromTag(Tags.Items.CROPS_NETHER_WART)).addIngredient(Ingredient.fromItems(Items.COBWEB)).addIngredient(Ingredient.fromTag(Tags.Items.NUGGETS_GOLD)).build(consumer, BloodMagic.rl(basePath + "silk_touch_anointment")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.MELEE_DAMAGE_ANOINTMENT.get()), 500, 100, 1).addIngredient(Ingredient.fromItems(BloodMagicItems.SLATE_VIAL.get())).addIngredient(Ingredient.fromTag(Tags.Items.CROPS_NETHER_WART)).addIngredient(Ingredient.fromItems(Items.BLAZE_POWDER)).addIngredient(Ingredient.fromTag(Tags.Items.GEMS_QUARTZ)).build(consumer, BloodMagic.rl(basePath + "melee_damage_anointment")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.HOLY_WATER_ANOINTMENT.get()), 500, 100, 1).addIngredient(Ingredient.fromItems(BloodMagicItems.SLATE_VIAL.get())).addIngredient(Ingredient.fromTag(Tags.Items.CROPS_NETHER_WART)).addIngredient(Ingredient.fromItems(Items.GLISTERING_MELON_SLICE)).addIngredient(Ingredient.fromTag(Tags.Items.GEMS_QUARTZ)).build(consumer, BloodMagic.rl(basePath + "holy_water_anointment")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.HIDDEN_KNOWLEDGE_ANOINTMENT.get()), 500, 100, 1).addIngredient(Ingredient.fromItems(BloodMagicItems.SLATE_VIAL.get())).addIngredient(Ingredient.fromTag(Tags.Items.CROPS_NETHER_WART)).addIngredient(Ingredient.fromItems(Items.GLASS_BOTTLE)).addIngredient(Ingredient.fromItems(Items.ENCHANTED_BOOK)).build(consumer, BloodMagic.rl(basePath + "hidden_knowledge_anointment")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.QUICK_DRAW_ANOINTMENT.get()), 500, 100, 1).addIngredient(Ingredient.fromItems(BloodMagicItems.SLATE_VIAL.get())).addIngredient(Ingredient.fromTag(Tags.Items.CROPS_NETHER_WART)).addIngredient(Ingredient.fromTag(Tags.Items.STRING)).addIngredient(Ingredient.fromItems(Items.SPECTRAL_ARROW)).build(consumer, BloodMagic.rl(basePath + "quick_draw_anointment")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.LOOTING_ANOINTMENT.get()), 500, 100, 1).addIngredient(Ingredient.fromItems(BloodMagicItems.SLATE_VIAL.get())).addIngredient(Ingredient.fromTag(Tags.Items.CROPS_NETHER_WART)).addIngredient(Ingredient.fromTag(Tags.Items.GEMS_LAPIS)).addIngredient(Ingredient.fromTag(Tags.Items.BONES)).build(consumer, BloodMagic.rl(basePath + "looting_anointment")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.BOW_POWER_ANOINTMENT.get()), 500, 100, 1).addIngredient(Ingredient.fromItems(BloodMagicItems.SLATE_VIAL.get())).addIngredient(Ingredient.fromTag(Tags.Items.CROPS_NETHER_WART)).addIngredient(Ingredient.fromTag(Tags.Items.INGOTS_IRON)).addIngredient(Ingredient.fromItems(Items.BOW)).build(consumer, BloodMagic.rl(basePath + "bow_power_anointment")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.SMELTING_ANOINTMENT.get()), 500, 100, 1).addIngredient(Ingredient.fromItems(BloodMagicItems.SLATE_VIAL.get())).addIngredient(Ingredient.fromTag(Tags.Items.CROPS_NETHER_WART)).addIngredient(Ingredient.fromItems(Items.FURNACE)).addIngredient(Ingredient.fromItems(Items.CHARCOAL, Items.COAL)).build(consumer, BloodMagic.rl(basePath + "smelting_anointment")); + + // Changed Recipes + { + + } + { + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.ARCANE_ASHES.get()), 500, 200, 1).addIngredient(Ingredient.fromTag(Tags.Items.DUSTS_REDSTONE)).addIngredient(Ingredient.fromTag(Tags.Items.DYES_WHITE)).addIngredient(Ingredient.fromTag(Tags.Items.GUNPOWDER)).addIngredient(Ingredient.fromTag(ItemTags.COALS)).build(consumer, BloodMagic.rl(basePath + "arcane_ash")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.REAGENT_AIR.get()), 2000, 200, 2).addIngredient(Ingredient.fromItems(Items.GHAST_TEAR)).addIngredient(Ingredient.fromTag(Tags.Items.FEATHERS)).addIngredient(Ingredient.fromTag(Tags.Items.FEATHERS)).build(consumer, BloodMagic.rl(basePath + "reagent_air")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.REAGENT_WATER.get()), 300, 200, 1).addIngredient(Ingredient.fromItems(Items.SUGAR)).addIngredient(Ingredient.fromItems(Items.WATER_BUCKET)).addIngredient(Ingredient.fromItems(Items.WATER_BUCKET)).build(consumer, BloodMagic.rl(basePath + "reagent_water")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.REAGENT_LAVA.get()), 1000, 200, 1).addIngredient(Ingredient.fromItems(Items.LAVA_BUCKET)).addIngredient(Ingredient.fromTag(Tags.Items.DUSTS_REDSTONE)).addIngredient(Ingredient.fromTag(Tags.Items.COBBLESTONE)).addIngredient(Ingredient.fromTag(Tags.Items.STORAGE_BLOCKS_COAL)).build(consumer, BloodMagic.rl(basePath + "reagent_lava")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.REAGENT_VOID.get()), 1000, 200, 2).addIngredient(Ingredient.fromItems(Items.BUCKET)).addIngredient(Ingredient.fromTag(Tags.Items.STRING)).addIngredient(Ingredient.fromTag(Tags.Items.STRING)).addIngredient(Ingredient.fromTag(Tags.Items.GUNPOWDER)).build(consumer, BloodMagic.rl(basePath + "reagent_void")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.REAGENT_GROWTH.get()), 2000, 200, 2).addIngredient(Ingredient.fromTag(ItemTags.SAPLINGS)).addIngredient(Ingredient.fromTag(ItemTags.SAPLINGS)).addIngredient(Ingredient.fromItems(Items.SUGAR_CANE)).addIngredient(Ingredient.fromItems(Items.SUGAR)).build(consumer, BloodMagic.rl(basePath + "reagent_growth")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.REAGENT_MAGNETISM.get()), 1000, 200, 3).addIngredient(Ingredient.fromTag(Tags.Items.STRING)).addIngredient(Ingredient.fromTag(Tags.Items.INGOTS_GOLD)).addIngredient(Ingredient.fromTag(Tags.Items.INGOTS_GOLD)).addIngredient(Ingredient.fromTag(Tags.Items.STORAGE_BLOCKS_IRON)).build(consumer, BloodMagic.rl(basePath + "reagent_magnetism")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.REAGENT_FAST_MINER.get()), 2000, 200, 2).addIngredient(Ingredient.fromItems(Items.IRON_PICKAXE)).addIngredient(Ingredient.fromItems(Items.IRON_AXE)).addIngredient(Ingredient.fromItems(Items.IRON_SHOVEL)).addIngredient(Ingredient.fromTag(Tags.Items.GUNPOWDER)).build(consumer, BloodMagic.rl(basePath + "reagent_fastminer")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.REAGENT_BLOOD_LIGHT.get()), 1000, 200, 3).addIngredient(Ingredient.fromTag(Tags.Items.DUSTS_GLOWSTONE)).addIngredient(Ingredient.fromItems(Items.TORCH)).addIngredient(Ingredient.fromTag(Tags.Items.DUSTS_REDSTONE)).addIngredient(Ingredient.fromTag(Tags.Items.DUSTS_REDSTONE)).build(consumer, BloodMagic.rl(basePath + "reagent_blood_light")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.REAGENT_SIGHT.get()), 500, 200, 1).addIngredient(Ingredient.fromTag(Tags.Items.DUSTS_GLOWSTONE)).addIngredient(Ingredient.fromTag(Tags.Items.GLASS)).addIngredient(Ingredient.fromTag(Tags.Items.GLASS)).addIngredient(Ingredient.fromItems(BloodMagicItems.DIVINATION_SIGIL.get())).build(consumer, BloodMagic.rl(basePath + "reagent_sight")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.REAGENT_BINDING.get()), 1000, 200, 3).addIngredient(Ingredient.fromTag(Tags.Items.DUSTS_GLOWSTONE)).addIngredient(Ingredient.fromTag(Tags.Items.DUSTS_REDSTONE)).addIngredient(Ingredient.fromTag(Tags.Items.GUNPOWDER)).addIngredient(Ingredient.fromTag(Tags.Items.NUGGETS_GOLD)).build(consumer, BloodMagic.rl(basePath + "reagent_binding")); + AlchemyTableRecipeBuilder.alchemyTable(new ItemStack(BloodMagicItems.REAGENT_HOLDING.get()), 2000, 200, 2).addIngredient(Ingredient.fromTag(Tags.Items.CHESTS)).addIngredient(Ingredient.fromTag(Tags.Items.LEATHER)).addIngredient(Ingredient.fromTag(Tags.Items.STRING)).addIngredient(Ingredient.fromTag(Tags.Items.STRING)).build(consumer, BloodMagic.rl(basePath + "reagent_holding")); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/recipe/BloodAltarRecipeProvider.java b/src/main/java/wayoftime/bloodmagic/common/recipe/BloodAltarRecipeProvider.java new file mode 100644 index 00000000..39f6f15a --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/recipe/BloodAltarRecipeProvider.java @@ -0,0 +1,69 @@ +package wayoftime.bloodmagic.common.recipe; + +import java.util.function.Consumer; + +import net.minecraft.data.IFinishedRecipe; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.Tags; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.altar.AltarTier; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.data.recipe.builder.BloodAltarRecipeBuilder; +import wayoftime.bloodmagic.common.item.BloodMagicItems; + +public class BloodAltarRecipeProvider implements ISubRecipeProvider +{ + + @Override + public void addRecipes(Consumer consumer) + { + String basePath = "altar/"; + + // ONE + BloodAltarRecipeBuilder.altar(Ingredient.fromTag(Tags.Items.GEMS_DIAMOND), new ItemStack(BloodMagicItems.WEAK_BLOOD_ORB.get()), AltarTier.ONE.ordinal(), 2000, 5, 1).build(consumer, new ResourceLocation(BloodMagic.MODID, basePath + "weakbloodorb")); + BloodAltarRecipeBuilder.altar(Ingredient.fromTag(Tags.Items.STONE), new ItemStack(BloodMagicItems.SLATE.get()), AltarTier.ONE.ordinal(), 1000, 5, 5).build(consumer, new ResourceLocation(BloodMagic.MODID, basePath + "slate")); + BloodAltarRecipeBuilder.altar(Ingredient.fromItems(Items.BUCKET), new ItemStack(BloodMagicBlocks.LIFE_ESSENCE_BUCKET.get()), AltarTier.ONE.ordinal(), 1000, 5, 0).build(consumer, BloodMagic.rl(basePath + "bucket_life")); + + // TWO + BloodAltarRecipeBuilder.altar(Ingredient.fromItems(BloodMagicItems.SLATE.get()), new ItemStack(BloodMagicItems.REINFORCED_SLATE.get()), AltarTier.TWO.ordinal(), 2000, 5, 5).build(consumer, BloodMagic.rl(basePath + "reinforcedslate")); + BloodAltarRecipeBuilder.altar(Ingredient.fromTag(Tags.Items.STORAGE_BLOCKS_REDSTONE), new ItemStack(BloodMagicItems.APPRENTICE_BLOOD_ORB.get()), AltarTier.TWO.ordinal(), 5000, 5, 5).build(consumer, BloodMagic.rl(basePath + "apprenticebloodorb")); + BloodAltarRecipeBuilder.altar(Ingredient.fromItems(Items.IRON_SWORD), new ItemStack(BloodMagicItems.DAGGER_OF_SACRIFICE.get()), AltarTier.TWO.ordinal(), 3000, 5, 5).build(consumer, BloodMagic.rl(basePath + "daggerofsacrifice")); + + // THREE + BloodAltarRecipeBuilder.altar(Ingredient.fromItems(BloodMagicItems.REINFORCED_SLATE.get()), new ItemStack(BloodMagicItems.IMBUED_SLATE.get()), AltarTier.THREE.ordinal(), 5000, 15, 10).build(consumer, BloodMagic.rl(basePath + "imbuedslate")); + BloodAltarRecipeBuilder.altar(Ingredient.fromTag(Tags.Items.STORAGE_BLOCKS_GOLD), new ItemStack(BloodMagicItems.MAGICIAN_BLOOD_ORB.get()), AltarTier.THREE.ordinal(), 25000, 20, 20).build(consumer, BloodMagic.rl(basePath + "magicianbloodorb")); + BloodAltarRecipeBuilder.altar(Ingredient.fromTag(Tags.Items.OBSIDIAN), new ItemStack(BloodMagicItems.EARTH_INSCRIPTION_TOOL.get()), AltarTier.THREE.ordinal(), 1000, 5, 5).build(consumer, BloodMagic.rl(basePath + "earth_tool")); + BloodAltarRecipeBuilder.altar(Ingredient.fromTag(Tags.Items.STORAGE_BLOCKS_LAPIS), new ItemStack(BloodMagicItems.WATER_INSCRIPTION_TOOL.get()), AltarTier.THREE.ordinal(), 1000, 5, 5).build(consumer, BloodMagic.rl(basePath + "water_tool")); + BloodAltarRecipeBuilder.altar(Ingredient.fromItems(Items.MAGMA_CREAM), new ItemStack(BloodMagicItems.FIRE_INSCRIPTION_TOOL.get()), AltarTier.THREE.ordinal(), 1000, 5, 5).build(consumer, BloodMagic.rl(basePath + "fire_tool")); + BloodAltarRecipeBuilder.altar(Ingredient.fromItems(Items.GHAST_TEAR), new ItemStack(BloodMagicItems.AIR_INSCRIPTION_TOOL.get()), AltarTier.THREE.ordinal(), 1000, 5, 5).build(consumer, BloodMagic.rl(basePath + "air_tool")); + BloodAltarRecipeBuilder.altar(Ingredient.fromItems(BloodMagicItems.LAVA_CRYSTAL.get()), new ItemStack(BloodMagicItems.WEAK_ACTIVATION_CRYSTAL.get()), AltarTier.THREE.ordinal(), 10000, 20, 10).build(consumer, BloodMagic.rl("weak_activation_crystal")); + + // FOUR + BloodAltarRecipeBuilder.altar(Ingredient.fromItems(BloodMagicItems.IMBUED_SLATE.get()), new ItemStack(BloodMagicItems.DEMONIC_SLATE.get()), AltarTier.FOUR.ordinal(), 15000, 20, 20).build(consumer, BloodMagic.rl(basePath + "demonicslate")); + BloodAltarRecipeBuilder.altar(Ingredient.fromTag(Tags.Items.STORAGE_BLOCKS_COAL), new ItemStack(BloodMagicItems.DUSK_INSCRIPTION_TOOL.get()), AltarTier.FOUR.ordinal(), 2000, 20, 10).build(consumer, BloodMagic.rl(basePath + "dusk_tool")); + BloodAltarRecipeBuilder.altar(Ingredient.fromItems(BloodMagicItems.WEAK_BLOOD_SHARD.get()), new ItemStack(BloodMagicItems.MASTER_BLOOD_ORB.get()), AltarTier.FOUR.ordinal(), 40000, 30, 50).build(consumer, BloodMagic.rl(basePath + "masterbloodorb")); + + // Changed Recipes + { + + } + { + BloodAltarRecipeBuilder.altar(Ingredient.fromTag(Tags.Items.STRING), new ItemStack(BloodMagicItems.SOUL_SNARE.get()), AltarTier.ONE.ordinal(), 500, 5, 1).build(consumer, BloodMagic.rl(basePath + "soul_snare")); + } + +// // FOUR +// registrar.addBloodAltar(Ingredient.fromStacks(new ItemStack(RegistrarBloodMagicItems.BLOOD_SHARD)), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_MASTER), AltarTier.FOUR.ordinal(), 40000, 30, 50); +// registrar.addBloodAltar(Ingredient.fromStacks(ItemSlate.SlateType.IMBUED.getStack()), ItemSlate.SlateType.DEMONIC.getStack(), AltarTier.FOUR.ordinal(), 15000, 20, 20); +// registrar.addBloodAltar(new OreIngredient("blockCoal"), EnumRuneType.DUSK.getStack(), AltarTier.FOUR.ordinal(), 2000, 20, 10); +// registrar.addBloodAltar(new OreIngredient("enderpearl"), new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS), AltarTier.FOUR.ordinal(), 2000, 10, 10); +// registrar.addBloodAltar(Ingredient.fromStacks(new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS)), new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS, 1, 1), AltarTier.FOUR.ordinal(), 10000, 20, 10); +// +// // FIVE +// registrar.addBloodAltar(new OreIngredient("netherStar"), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_ARCHMAGE), AltarTier.FIVE.ordinal(), 80000, 50, 100); +// registrar.addBloodAltar(Ingredient.fromStacks(ItemSlate.SlateType.DEMONIC.getStack()), ItemSlate.SlateType.ETHEREAL.getStack(), AltarTier.FIVE.ordinal(), 30000, 40, 100); + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/common/recipe/BloodMagicRecipeType.java b/src/main/java/wayoftime/bloodmagic/common/recipe/BloodMagicRecipeType.java new file mode 100644 index 00000000..bd699910 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/recipe/BloodMagicRecipeType.java @@ -0,0 +1,18 @@ +package wayoftime.bloodmagic.common.recipe; + +import net.minecraft.item.crafting.IRecipeType; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.recipe.RecipeARC; +import wayoftime.bloodmagic.recipe.RecipeAlchemyArray; +import wayoftime.bloodmagic.recipe.RecipeAlchemyTable; +import wayoftime.bloodmagic.recipe.RecipeBloodAltar; +import wayoftime.bloodmagic.recipe.RecipeTartaricForge; + +public class BloodMagicRecipeType +{ + public static final IRecipeType ALTAR = IRecipeType.register(BloodMagic.MODID + ":altar"); + public static final IRecipeType ARRAY = IRecipeType.register(BloodMagic.MODID + ":array"); + public static final IRecipeType TARTARICFORGE = IRecipeType.register(BloodMagic.MODID + ":soulforge"); + public static final IRecipeType ARC = IRecipeType.register(BloodMagic.MODID + ":arc"); + public static final IRecipeType ALCHEMYTABLE = IRecipeType.register(BloodMagic.MODID + ":alchemytable"); +} diff --git a/src/main/java/wayoftime/bloodmagic/common/recipe/ISubRecipeProvider.java b/src/main/java/wayoftime/bloodmagic/common/recipe/ISubRecipeProvider.java new file mode 100644 index 00000000..d7aa8f7c --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/recipe/ISubRecipeProvider.java @@ -0,0 +1,14 @@ +package wayoftime.bloodmagic.common.recipe; + +import java.util.function.Consumer; + +import net.minecraft.data.IFinishedRecipe; + +/** + * Interface for helping split the recipe provider over multiple classes to make + * it a bit easier to interact with + */ +public interface ISubRecipeProvider +{ + void addRecipes(Consumer consumer); +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/recipe/TartaricForgeRecipeProvider.java b/src/main/java/wayoftime/bloodmagic/common/recipe/TartaricForgeRecipeProvider.java new file mode 100644 index 00000000..aa5fc597 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/recipe/TartaricForgeRecipeProvider.java @@ -0,0 +1,119 @@ +package wayoftime.bloodmagic.common.recipe; + +import java.util.function.Consumer; + +import net.minecraft.data.IFinishedRecipe; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.tags.ItemTags; +import net.minecraftforge.common.Tags; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.anointment.AnointmentData; +import wayoftime.bloodmagic.anointment.AnointmentHolder; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.data.recipe.builder.TartaricForgeRecipeBuilder; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.tags.BloodMagicTags; +import wayoftime.bloodmagic.core.AnointmentRegistrar; + +public class TartaricForgeRecipeProvider implements ISubRecipeProvider +{ + + @Override + public void addRecipes(Consumer consumer) + { + String basePath = "soulforge/"; + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.PETTY_GEM.get()), 1, 1, Ingredient.fromTag(Tags.Items.DUSTS_REDSTONE), Ingredient.fromTag(Tags.Items.INGOTS_GOLD), Ingredient.fromTag(Tags.Items.GLASS), Ingredient.fromTag(Tags.Items.GEMS_LAPIS)).build(consumer, BloodMagic.rl(basePath + "pettytartaricgem")); + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.LESSER_GEM.get()), 60, 20, Ingredient.fromItems(BloodMagicItems.PETTY_GEM.get()), Ingredient.fromTag(Tags.Items.GEMS_DIAMOND), Ingredient.fromTag(Tags.Items.STORAGE_BLOCKS_REDSTONE), Ingredient.fromTag(Tags.Items.STORAGE_BLOCKS_LAPIS)).build(consumer, BloodMagic.rl(basePath + "lessertartaricgem")); + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.COMMON_GEM.get()), 240, 50, Ingredient.fromItems(BloodMagicItems.LESSER_GEM.get()), Ingredient.fromTag(Tags.Items.GEMS_DIAMOND), Ingredient.fromTag(Tags.Items.STORAGE_BLOCKS_GOLD), Ingredient.fromItems(BloodMagicItems.IMBUED_SLATE.get())).build(consumer, BloodMagic.rl(basePath + "commontartaricgem")); + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.GREATER_GEM.get()), 1000, 100, Ingredient.fromItems(BloodMagicItems.COMMON_GEM.get()), Ingredient.fromItems(BloodMagicItems.DEMONIC_SLATE.get()), Ingredient.fromItems(BloodMagicItems.WEAK_BLOOD_SHARD.get()), Ingredient.fromTag(BloodMagicTags.CRYSTAL_DEMON)).build(consumer, BloodMagic.rl(basePath + "greatertartaricgem")); + + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.SENTIENT_SWORD.get()), 0, 0, Ingredient.fromItems(BloodMagicItems.PETTY_GEM.get()), Ingredient.fromItems(Items.IRON_SWORD)).build(consumer, BloodMagic.rl(basePath + "sentientsword")); + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.SENTIENT_AXE.get()), 0, 0, Ingredient.fromItems(BloodMagicItems.PETTY_GEM.get()), Ingredient.fromItems(Items.IRON_AXE)).build(consumer, BloodMagic.rl(basePath + "sentientaxe")); + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.SENTIENT_PICKAXE.get()), 0, 0, Ingredient.fromItems(BloodMagicItems.PETTY_GEM.get()), Ingredient.fromItems(Items.IRON_PICKAXE)).build(consumer, BloodMagic.rl(basePath + "sentientpickaxe")); + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.SENTIENT_SHOVEL.get()), 0, 0, Ingredient.fromItems(BloodMagicItems.PETTY_GEM.get()), Ingredient.fromItems(Items.IRON_SHOVEL)).build(consumer, BloodMagic.rl(basePath + "sentientshovel")); + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.SENTIENT_SCYTHE.get()), 0, 0, Ingredient.fromItems(BloodMagicItems.PETTY_GEM.get()), Ingredient.fromItems(Items.IRON_HOE)).build(consumer, BloodMagic.rl(basePath + "sentientscythe")); + + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicBlocks.DEMON_CRUCIBLE.get()), 400, 100, Ingredient.fromItems(Items.CAULDRON), Ingredient.fromTag(Tags.Items.STONE), Ingredient.fromTag(Tags.Items.GEMS_LAPIS), Ingredient.fromTag(Tags.Items.GEMS_DIAMOND)).build(consumer, BloodMagic.rl(basePath + "demon_crucible")); + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicBlocks.DEMON_CRYSTALLIZER.get()), 500, 100, Ingredient.fromItems(BloodMagicBlocks.SOUL_FORGE.get()), Ingredient.fromTag(Tags.Items.STONE), Ingredient.fromTag(Tags.Items.GEMS_LAPIS), Ingredient.fromTag(Tags.Items.GLASS)).build(consumer, BloodMagic.rl(basePath + "demon_crystallizer")); + + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.SANGUINE_REVERTER.get()), 350, 30, Ingredient.fromItems(Items.SHEARS), Ingredient.fromTag(Tags.Items.STONE), Ingredient.fromItems(BloodMagicItems.IMBUED_SLATE.get()), Ingredient.fromTag(Tags.Items.INGOTS_IRON)).build(consumer, BloodMagic.rl(basePath + "sanguine_reverter")); + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.PRIMITIVE_CRYSTALLINE_RESONATOR.get()), 1200, 200, Ingredient.fromTag(Tags.Items.STONE), Ingredient.fromTag(Tags.Items.INGOTS), Ingredient.fromItems(BloodMagicItems.RAW_CRYSTAL.get()), Ingredient.fromItems(BloodMagicItems.RAW_CRYSTAL.get())).build(consumer, BloodMagic.rl(basePath + "primitive_crystalline_resonator")); + + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicBlocks.RAW_CRYSTAL_BLOCK.get()), 1200, 100, Ingredient.fromItems(BloodMagicItems.RAW_CRYSTAL.get()), Ingredient.fromItems(BloodMagicItems.RAW_CRYSTAL.get()), Ingredient.fromItems(BloodMagicItems.RAW_CRYSTAL.get()), Ingredient.fromItems(BloodMagicItems.RAW_CRYSTAL.get())).build(consumer, BloodMagic.rl(basePath + "raw_crystal_block")); + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicBlocks.CORROSIVE_CRYSTAL_BLOCK.get()), 1200, 100, Ingredient.fromItems(BloodMagicItems.CORROSIVE_CRYSTAL.get()), Ingredient.fromItems(BloodMagicItems.CORROSIVE_CRYSTAL.get()), Ingredient.fromItems(BloodMagicItems.CORROSIVE_CRYSTAL.get()), Ingredient.fromItems(BloodMagicItems.CORROSIVE_CRYSTAL.get())).build(consumer, BloodMagic.rl(basePath + "corrosive_crystal_block")); + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicBlocks.DESTRUCTIVE_CRYSTAL_BLOCK.get()), 1200, 100, Ingredient.fromItems(BloodMagicItems.DESTRUCTIVE_CRYSTAL.get()), Ingredient.fromItems(BloodMagicItems.DESTRUCTIVE_CRYSTAL.get()), Ingredient.fromItems(BloodMagicItems.DESTRUCTIVE_CRYSTAL.get()), Ingredient.fromItems(BloodMagicItems.DESTRUCTIVE_CRYSTAL.get())).build(consumer, BloodMagic.rl(basePath + "destructive_crystal_block")); + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicBlocks.VENGEFUL_CRYSTAL_BLOCK.get()), 1200, 100, Ingredient.fromItems(BloodMagicItems.VENGEFUL_CRYSTAL.get()), Ingredient.fromItems(BloodMagicItems.VENGEFUL_CRYSTAL.get()), Ingredient.fromItems(BloodMagicItems.VENGEFUL_CRYSTAL.get()), Ingredient.fromItems(BloodMagicItems.VENGEFUL_CRYSTAL.get())).build(consumer, BloodMagic.rl(basePath + "vengeful_crystal_block")); + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicBlocks.STEADFAST_CRYSTAL_BLOCK.get()), 1200, 100, Ingredient.fromItems(BloodMagicItems.STEADFAST_CRYSTAL.get()), Ingredient.fromItems(BloodMagicItems.STEADFAST_CRYSTAL.get()), Ingredient.fromItems(BloodMagicItems.STEADFAST_CRYSTAL.get()), Ingredient.fromItems(BloodMagicItems.STEADFAST_CRYSTAL.get())).build(consumer, BloodMagic.rl(basePath + "steadfast_crystal_block")); + + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicBlocks.SHAPED_CHARGE.get(), 8), 10, 0.5, Ingredient.fromTag(Tags.Items.COBBLESTONE), Ingredient.fromItems(Items.CHARCOAL), Ingredient.fromTag(Tags.Items.SAND), Ingredient.fromTag(Tags.Items.STONE)).build(consumer, BloodMagic.rl(basePath + "shaped_charge")); + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicBlocks.DEFORESTER_CHARGE.get(), 8), 10, 0.5, Ingredient.fromTag(Tags.Items.COBBLESTONE), Ingredient.fromItems(Items.CHARCOAL), Ingredient.fromTag(ItemTags.LOGS), Ingredient.fromTag(ItemTags.PLANKS)).build(consumer, BloodMagic.rl(basePath + "deforester_charge")); + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicBlocks.VEINMINE_CHARGE.get(), 8), 10, 0.5, Ingredient.fromTag(Tags.Items.COBBLESTONE), Ingredient.fromItems(Items.CHARCOAL), Ingredient.fromTag(Tags.Items.SANDSTONE), Ingredient.fromTag(Tags.Items.SAND)).build(consumer, BloodMagic.rl(basePath + "vein_charge")); + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicBlocks.FUNGAL_CHARGE.get(), 8), 10, 0.5, Ingredient.fromTag(Tags.Items.COBBLESTONE), Ingredient.fromItems(Items.CHARCOAL), Ingredient.fromTag(BloodMagicTags.MUSHROOM_HYPHAE), Ingredient.fromTag(Tags.Items.MUSHROOMS)).build(consumer, BloodMagic.rl(basePath + "fungal_charge")); + + ItemStack stack = new ItemStack(BloodMagicBlocks.DEFORESTER_CHARGE.get()); + AnointmentHolder smeltingHolder = new AnointmentHolder(); + smeltingHolder.applyAnointment(stack, AnointmentRegistrar.ANOINTMENT_SMELTING.get(), new AnointmentData(1, 1, 1)); + + AnointmentHolder fortune1Holder = new AnointmentHolder(); + fortune1Holder.applyAnointment(stack, AnointmentRegistrar.ANOINTMENT_FORTUNE.get(), new AnointmentData(1, 1, 1)); + + AnointmentHolder silkHolder = new AnointmentHolder(); + silkHolder.applyAnointment(stack, AnointmentRegistrar.ANOINTMENT_SILK_TOUCH.get(), new AnointmentData(1, 1, 1)); + +// smeltingHolder.toItemStack(stack); + + String[] suffixArray = new String[] { "_smelting", "_fortune_1", "_silk_touch" }; + AnointmentHolder[] holderArray = new AnointmentHolder[] { smeltingHolder, fortune1Holder, silkHolder }; + Ingredient[] firstIngredientArray = new Ingredient[] { Ingredient.fromTag(Tags.Items.CROPS_NETHER_WART), + Ingredient.fromTag(Tags.Items.CROPS_NETHER_WART), Ingredient.fromTag(Tags.Items.CROPS_NETHER_WART) }; + Ingredient[] secondIngredientArray = new Ingredient[] { Ingredient.fromItems(Items.FURNACE), + Ingredient.fromTag(Tags.Items.DUSTS_REDSTONE), Ingredient.fromItems(Items.COBWEB) }; + Ingredient[] thirdIngredientArray = new Ingredient[] { Ingredient.fromItems(Items.CHARCOAL, Items.COAL), + Ingredient.fromTag(BloodMagicTags.DUST_COAL), Ingredient.fromTag(Tags.Items.NUGGETS_GOLD) }; + + for (int i = 0; i < suffixArray.length; i++) + { + ItemStack deforesterStack = new ItemStack(BloodMagicBlocks.DEFORESTER_CHARGE.get()); + ItemStack fungalStack = new ItemStack(BloodMagicBlocks.FUNGAL_CHARGE.get()); + ItemStack shapedStack = new ItemStack(BloodMagicBlocks.SHAPED_CHARGE.get()); + ItemStack veinStack = new ItemStack(BloodMagicBlocks.VEINMINE_CHARGE.get()); + + AnointmentHolder holder = holderArray[i]; + holder.toItemStack(deforesterStack); + holder.toItemStack(fungalStack); + holder.toItemStack(shapedStack); + holder.toItemStack(veinStack); + + TartaricForgeRecipeBuilder.tartaricForge(shapedStack, 60, 1, Ingredient.fromItems(BloodMagicItems.SHAPED_CHARGE_ITEM.get()), firstIngredientArray[i], secondIngredientArray[i], thirdIngredientArray[i]).build(consumer, BloodMagic.rl(basePath + "shaped_charge" + suffixArray[i])); + TartaricForgeRecipeBuilder.tartaricForge(deforesterStack, 60, 1, Ingredient.fromItems(BloodMagicItems.DEFORESTER_CHARGE_ITEM.get()), firstIngredientArray[i], secondIngredientArray[i], thirdIngredientArray[i]).build(consumer, BloodMagic.rl(basePath + "deforester_charge" + suffixArray[i])); + TartaricForgeRecipeBuilder.tartaricForge(veinStack, 60, 1, Ingredient.fromItems(BloodMagicItems.VEINMINE_CHARGE_ITEM.get()), firstIngredientArray[i], secondIngredientArray[i], thirdIngredientArray[i]).build(consumer, BloodMagic.rl(basePath + "vein_charge" + suffixArray[i])); + TartaricForgeRecipeBuilder.tartaricForge(fungalStack, 60, 1, Ingredient.fromItems(BloodMagicItems.FUNGAL_CHARGE_ITEM.get()), firstIngredientArray[i], secondIngredientArray[i], thirdIngredientArray[i]).build(consumer, BloodMagic.rl(basePath + "fungal_charge" + suffixArray[i])); + + } + + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.THROWING_DAGGER.get(), 16), 32, 5, Ingredient.fromTag(Tags.Items.INGOTS_IRON), Ingredient.fromTag(Tags.Items.INGOTS_IRON), Ingredient.fromTag(Tags.Items.STRING)).build(consumer, BloodMagic.rl(basePath + "throwing_dagger")); + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.THROWING_DAGGER_SYRINGE.get(), 8), 10, 2, Ingredient.fromTag(Tags.Items.STONE), Ingredient.fromTag(Tags.Items.GLASS)).build(consumer, BloodMagic.rl(basePath + "throwing_dagger_syringe")); + + // Changed Recipes + { +// TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.ARCANE_ASHES.get()), 0, 0, Ingredient.fromTag(Tags.Items.DUSTS_REDSTONE), Ingredient.fromTag(Tags.Items.DYES_WHITE), Ingredient.fromTag(Tags.Items.GUNPOWDER), Ingredient.fromTag(ItemTags.COALS)).build(consumer, BloodMagic.rl(basePath + "arcaneashes")); +// TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.REAGENT_AIR.get()), 128, 20, Ingredient.fromItems(Items.GHAST_TEAR), Ingredient.fromTag(Tags.Items.FEATHERS), Ingredient.fromTag(Tags.Items.FEATHERS)).build(consumer, BloodMagic.rl(basePath + "reagent_air")); +// TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.REAGENT_WATER.get()), 10, 3, Ingredient.fromItems(Items.SUGAR), Ingredient.fromItems(Items.WATER_BUCKET), Ingredient.fromItems(Items.WATER_BUCKET)).build(consumer, BloodMagic.rl(basePath + "reagent_water")); +// TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.REAGENT_LAVA.get()), 32, 10, Ingredient.fromItems(Items.LAVA_BUCKET), Ingredient.fromTag(Tags.Items.DUSTS_REDSTONE), Ingredient.fromTag(Tags.Items.COBBLESTONE), Ingredient.fromTag(Tags.Items.STORAGE_BLOCKS_COAL)).build(consumer, BloodMagic.rl(basePath + "reagent_lava")); +// TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.REAGENT_VOID.get()), 64, 10, Ingredient.fromItems(Items.BUCKET), Ingredient.fromTag(Tags.Items.STRING), Ingredient.fromTag(Tags.Items.STRING), Ingredient.fromTag(Tags.Items.GUNPOWDER)).build(consumer, BloodMagic.rl(basePath + "reagent_void")); +// TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.REAGENT_GROWTH.get()), 128, 20, Ingredient.fromTag(ItemTags.SAPLINGS), Ingredient.fromTag(ItemTags.SAPLINGS), Ingredient.fromItems(Items.SUGAR_CANE), Ingredient.fromItems(Items.SUGAR)).build(consumer, BloodMagic.rl(basePath + "reagent_growth")); +// TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.REAGENT_MAGNETISM.get()), 600, 10, Ingredient.fromTag(Tags.Items.STRING), Ingredient.fromTag(Tags.Items.INGOTS_GOLD), Ingredient.fromTag(Tags.Items.INGOTS_GOLD), Ingredient.fromTag(Tags.Items.STORAGE_BLOCKS_IRON)).build(consumer, BloodMagic.rl(basePath + "reagent_magnetism")); +// TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.REAGENT_FAST_MINER.get()), 128, 20, Ingredient.fromItems(Items.IRON_PICKAXE), Ingredient.fromItems(Items.IRON_AXE), Ingredient.fromItems(Items.IRON_SHOVEL), Ingredient.fromTag(Tags.Items.GUNPOWDER)).build(consumer, BloodMagic.rl(basePath + "reagent_fastminer")); +// TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.REAGENT_BLOOD_LIGHT.get()), 300, 10, Ingredient.fromTag(Tags.Items.DUSTS_GLOWSTONE), Ingredient.fromItems(Items.TORCH), Ingredient.fromTag(Tags.Items.DUSTS_REDSTONE), Ingredient.fromTag(Tags.Items.DUSTS_REDSTONE)).build(consumer, BloodMagic.rl(basePath + "reagent_blood_light")); +// TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.REAGENT_SIGHT.get()), 64, 0, Ingredient.fromTag(Tags.Items.DUSTS_GLOWSTONE), Ingredient.fromTag(Tags.Items.GLASS), Ingredient.fromTag(Tags.Items.GLASS), Ingredient.fromItems(BloodMagicItems.DIVINATION_SIGIL.get())).build(consumer, BloodMagic.rl(basePath + "reagent_sight")); +// TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.REAGENT_BINDING.get()), 400, 10, Ingredient.fromTag(Tags.Items.DUSTS_GLOWSTONE), Ingredient.fromTag(Tags.Items.DUSTS_REDSTONE), Ingredient.fromTag(Tags.Items.GUNPOWDER), Ingredient.fromTag(Tags.Items.NUGGETS_GOLD)).build(consumer, BloodMagic.rl(basePath + "reagent_binding")); + + } + { + + } + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/common/recipe/serializer/ARCRecipeSerializer.java b/src/main/java/wayoftime/bloodmagic/common/recipe/serializer/ARCRecipeSerializer.java new file mode 100644 index 00000000..57869822 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/recipe/serializer/ARCRecipeSerializer.java @@ -0,0 +1,159 @@ +package wayoftime.bloodmagic.common.recipe.serializer; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nonnull; + +import org.apache.commons.lang3.tuple.Pair; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +import net.minecraft.fluid.Fluids; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.registries.ForgeRegistryEntry; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.recipe.helper.SerializerHelper; +import wayoftime.bloodmagic.recipe.helper.FluidStackIngredient; +import wayoftime.bloodmagic.recipe.RecipeARC; +import wayoftime.bloodmagic.util.Constants; + +public class ARCRecipeSerializer extends ForgeRegistryEntry> + implements IRecipeSerializer +{ + private final IFactory factory; + + public ARCRecipeSerializer(IFactory factory) + { + this.factory = factory; + } + + @Nonnull + @Override + public RECIPE read(@Nonnull ResourceLocation recipeId, @Nonnull JsonObject json) + { + JsonElement input = JSONUtils.isJsonArray(json, Constants.JSON.INPUT) + ? JSONUtils.getJsonArray(json, Constants.JSON.INPUT) + : JSONUtils.getJsonObject(json, Constants.JSON.INPUT); + + JsonElement tool = JSONUtils.isJsonArray(json, Constants.JSON.TOOL) + ? JSONUtils.getJsonArray(json, Constants.JSON.TOOL) + : JSONUtils.getJsonObject(json, Constants.JSON.TOOL); + + Ingredient inputIng = Ingredient.deserialize(input); + Ingredient toolIng = Ingredient.deserialize(tool); + ItemStack output = SerializerHelper.getItemStack(json, Constants.JSON.OUTPUT); + + List> addedItems = new ArrayList>(); + if (json.has(Constants.JSON.ADDEDOUTPUT) && JSONUtils.isJsonArray(json, Constants.JSON.ADDEDOUTPUT)) + { + JsonArray mainArray = JSONUtils.getJsonArray(json, Constants.JSON.ADDEDOUTPUT); + + arrayLoop: for (JsonElement element : mainArray) + { + if (addedItems.size() >= RecipeARC.MAX_RANDOM_OUTPUTS) + { + break arrayLoop; + } + if (element.isJsonObject()) + { + JsonObject obj = element.getAsJsonObject(); + double chance = JSONUtils.getFloat(obj, Constants.JSON.CHANCE); + ItemStack extraDrop = SerializerHelper.getItemStack(obj, Constants.JSON.TYPE); + + addedItems.add(Pair.of(extraDrop, chance)); + } + } + } + + FluidStackIngredient inputFluidIng = null; + + if (json.has(Constants.JSON.INPUT_FLUID)) + { + JsonElement inputFluid = JSONUtils.isJsonArray(json, Constants.JSON.INPUT_FLUID) + ? JSONUtils.getJsonArray(json, Constants.JSON.INPUT_FLUID) + : JSONUtils.getJsonObject(json, Constants.JSON.INPUT_FLUID); + inputFluidIng = FluidStackIngredient.deserialize(inputFluid); + } + + FluidStack outputFluidStack = FluidStack.EMPTY; + + if (json.has(Constants.JSON.OUTPUT_FLUID)) + { + JsonObject outputFluid = JSONUtils.getJsonObject(json, Constants.JSON.OUTPUT_FLUID).getAsJsonObject(); + outputFluidStack = SerializerHelper.deserializeFluid(outputFluid); + } + + boolean consumeIngredient = JSONUtils.getBoolean(json, "consumeingredient"); + + return this.factory.create(recipeId, inputIng, toolIng, inputFluidIng, output, addedItems, outputFluidStack, consumeIngredient); + } + + @Override + public RECIPE read(@Nonnull ResourceLocation recipeId, @Nonnull PacketBuffer buffer) + { + try + { + List> addedItems = new ArrayList>(); + Ingredient inputIng = Ingredient.read(buffer); + Ingredient toolIng = Ingredient.read(buffer); + ItemStack output = buffer.readItemStack(); + + int addedItemSize = buffer.readInt(); + for (int i = 0; i < addedItemSize; i++) + { + ItemStack stack = buffer.readItemStack(); + double chance = buffer.readDouble(); + addedItems.add(Pair.of(stack, chance)); + } + + FluidStackIngredient inputFluid = null; + FluidStack outputFluid = new FluidStack(Fluids.EMPTY, 1000); + + if (buffer.readBoolean()) + { + inputFluid = FluidStackIngredient.read(buffer); + } + + if (buffer.readBoolean()) + { + outputFluid = FluidStack.readFromPacket(buffer); + } + + boolean consumeIngredient = buffer.readBoolean(); + + return this.factory.create(recipeId, inputIng, toolIng, inputFluid, output, addedItems, outputFluid, consumeIngredient); + } catch (Exception e) + { + BloodMagic.LOGGER.error("Error reading ARC recipe from packet.", e); + throw e; + } + } + + @Override + public void write(@Nonnull PacketBuffer buffer, @Nonnull RECIPE recipe) + { + try + { + recipe.write(buffer); + } catch (Exception e) + { + BloodMagic.LOGGER.error("Error writing ARC recipe to packet.", e); + throw e; + } + } + + @FunctionalInterface + public interface IFactory + { + RECIPE create(ResourceLocation id, Ingredient input, Ingredient arcTool, FluidStackIngredient inputFluid, ItemStack output, List> addedItems, FluidStack outputFluid, boolean consumeIngredient); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/recipe/serializer/AlchemyArrayRecipeSerializer.java b/src/main/java/wayoftime/bloodmagic/common/recipe/serializer/AlchemyArrayRecipeSerializer.java new file mode 100644 index 00000000..6ebf7753 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/recipe/serializer/AlchemyArrayRecipeSerializer.java @@ -0,0 +1,89 @@ +package wayoftime.bloodmagic.common.recipe.serializer; + +import javax.annotation.Nonnull; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.registries.ForgeRegistryEntry; +import wayoftime.bloodmagic.recipe.helper.SerializerHelper; +import wayoftime.bloodmagic.recipe.RecipeAlchemyArray; +import wayoftime.bloodmagic.util.Constants; + +public class AlchemyArrayRecipeSerializer + extends ForgeRegistryEntry> implements IRecipeSerializer +{ + private final IFactory factory; + + public AlchemyArrayRecipeSerializer(IFactory factory) + { + this.factory = factory; + } + + @Nonnull + @Override + public RECIPE read(@Nonnull ResourceLocation recipeId, @Nonnull JsonObject json) + { + JsonElement input1 = JSONUtils.isJsonArray(json, Constants.JSON.BASEINPUT) + ? JSONUtils.getJsonArray(json, Constants.JSON.BASEINPUT) + : JSONUtils.getJsonObject(json, Constants.JSON.BASEINPUT); + + JsonElement input2 = JSONUtils.isJsonArray(json, Constants.JSON.ADDEDINPUT) + ? JSONUtils.getJsonArray(json, Constants.JSON.ADDEDINPUT) + : JSONUtils.getJsonObject(json, Constants.JSON.ADDEDINPUT); + + Ingredient baseInput = Ingredient.deserialize(input1); + Ingredient addedInput = Ingredient.deserialize(input2); + ResourceLocation texture = null; + if (json.has(Constants.JSON.TEXTURE)) + texture = new ResourceLocation(JSONUtils.getString(json, Constants.JSON.TEXTURE)); + ItemStack output = SerializerHelper.getItemStack(json, Constants.JSON.OUTPUT); + + return this.factory.create(recipeId, texture, baseInput, addedInput, output); + } + + @Override + public RECIPE read(@Nonnull ResourceLocation recipeId, @Nonnull PacketBuffer buffer) + { + try + { + ResourceLocation texture = null; + if (buffer.readBoolean()) + texture = buffer.readResourceLocation(); + Ingredient baseInput = Ingredient.read(buffer); + Ingredient addedInput = Ingredient.read(buffer); + ItemStack output = buffer.readItemStack(); + + return this.factory.create(recipeId, texture, baseInput, addedInput, output); + } catch (Exception e) + { +// Mekanism.logger.error("Error reading electrolysis recipe from packet.", e); + throw e; + } + } + + @Override + public void write(@Nonnull PacketBuffer buffer, @Nonnull RECIPE recipe) + { + try + { + recipe.write(buffer); + } catch (Exception e) + { +// Mekanism.logger.error("Error writing electrolysis recipe to packet.", e); + throw e; + } + } + + @FunctionalInterface + public interface IFactory + { + RECIPE create(ResourceLocation id, ResourceLocation texture, Ingredient baseInput, Ingredient addedInput, ItemStack output); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/recipe/serializer/AlchemyTableRecipeSerializer.java b/src/main/java/wayoftime/bloodmagic/common/recipe/serializer/AlchemyTableRecipeSerializer.java new file mode 100644 index 00000000..032c1837 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/recipe/serializer/AlchemyTableRecipeSerializer.java @@ -0,0 +1,116 @@ +package wayoftime.bloodmagic.common.recipe.serializer; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nonnull; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.registries.ForgeRegistryEntry; +import wayoftime.bloodmagic.recipe.helper.SerializerHelper; +import wayoftime.bloodmagic.recipe.RecipeAlchemyTable; +import wayoftime.bloodmagic.util.Constants; + +public class AlchemyTableRecipeSerializer + extends ForgeRegistryEntry> implements IRecipeSerializer +{ + + private final IFactory factory; + + public AlchemyTableRecipeSerializer(IFactory factory) + { + this.factory = factory; + } + + @Nonnull + @Override + public RECIPE read(@Nonnull ResourceLocation recipeId, @Nonnull JsonObject json) + { + List inputList = new ArrayList(); + + if (json.has(Constants.JSON.INPUT) && JSONUtils.isJsonArray(json, Constants.JSON.INPUT)) + { + JsonArray mainArray = JSONUtils.getJsonArray(json, Constants.JSON.INPUT); + + arrayLoop: for (JsonElement element : mainArray) + { + if (inputList.size() >= RecipeAlchemyTable.MAX_INPUTS) + { + break arrayLoop; + } + + if (element.isJsonArray()) + { + element = element.getAsJsonArray(); + } else + { + element.getAsJsonObject(); + } + + inputList.add(Ingredient.deserialize(element)); + } + } + + ItemStack output = SerializerHelper.getItemStack(json, Constants.JSON.OUTPUT); + + int syphon = JSONUtils.getInt(json, Constants.JSON.SYPHON); + int ticks = JSONUtils.getInt(json, Constants.JSON.TICKS); + int minimumTier = JSONUtils.getInt(json, Constants.JSON.ALTAR_TIER); + + return this.factory.create(recipeId, inputList, output, syphon, ticks, minimumTier); + } + + @Override + public RECIPE read(@Nonnull ResourceLocation recipeId, @Nonnull PacketBuffer buffer) + { + try + { + int size = buffer.readInt(); + List input = new ArrayList(size); + + for (int i = 0; i < size; i++) + { + input.add(i, Ingredient.read(buffer)); + } + + ItemStack output = buffer.readItemStack(); + int syphon = buffer.readInt(); + int ticks = buffer.readInt(); + int minimumTier = buffer.readInt(); + + return this.factory.create(recipeId, input, output, syphon, ticks, minimumTier); + } catch (Exception e) + { +//Mekanism.logger.error("Error reading electrolysis recipe from packet.", e); + throw e; + } + } + + @Override + public void write(@Nonnull PacketBuffer buffer, @Nonnull RECIPE recipe) + { + try + { + recipe.write(buffer); + } catch (Exception e) + { +//Mekanism.logger.error("Error writing electrolysis recipe to packet.", e); + throw e; + } + } + + @FunctionalInterface + public interface IFactory + { + RECIPE create(ResourceLocation id, List input, ItemStack output, int syphon, int ticks, int minimumTier); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/recipe/serializer/BloodAltarRecipeSerializer.java b/src/main/java/wayoftime/bloodmagic/common/recipe/serializer/BloodAltarRecipeSerializer.java new file mode 100644 index 00000000..a50c1fbd --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/recipe/serializer/BloodAltarRecipeSerializer.java @@ -0,0 +1,85 @@ +package wayoftime.bloodmagic.common.recipe.serializer; + +import javax.annotation.Nonnull; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.registries.ForgeRegistryEntry; +import wayoftime.bloodmagic.recipe.helper.SerializerHelper; +import wayoftime.bloodmagic.recipe.RecipeBloodAltar; +import wayoftime.bloodmagic.util.Constants; + +public class BloodAltarRecipeSerializer + extends ForgeRegistryEntry> implements IRecipeSerializer +{ + private final IFactory factory; + + public BloodAltarRecipeSerializer(IFactory factory) + { + this.factory = factory; + } + + @Nonnull + @Override + public RECIPE read(@Nonnull ResourceLocation recipeId, @Nonnull JsonObject json) + { + JsonElement input = JSONUtils.isJsonArray(json, Constants.JSON.INPUT) + ? JSONUtils.getJsonArray(json, Constants.JSON.INPUT) + : JSONUtils.getJsonObject(json, Constants.JSON.INPUT); + + Ingredient inputIng = Ingredient.deserialize(input); + ItemStack output = SerializerHelper.getItemStack(json, Constants.JSON.OUTPUT); + int minimumTier = JSONUtils.getInt(json, Constants.JSON.ALTAR_TIER); + int syphon = JSONUtils.getInt(json, Constants.JSON.ALTAR_SYPHON); + int consumeRate = JSONUtils.getInt(json, Constants.JSON.ALTAR_CONSUMPTION_RATE); + int drainRate = JSONUtils.getInt(json, Constants.JSON.ALTAR_DRAIN_RATE); + + return this.factory.create(recipeId, inputIng, output, minimumTier, syphon, consumeRate, drainRate); + } + + @Override + public RECIPE read(@Nonnull ResourceLocation recipeId, @Nonnull PacketBuffer buffer) + { + try + { + Ingredient input = Ingredient.read(buffer); + ItemStack output = buffer.readItemStack(); + int minimumTier = buffer.readInt(); + int syphon = buffer.readInt(); + int consumeRate = buffer.readInt(); + int drainRate = buffer.readInt(); + + return this.factory.create(recipeId, input, output, minimumTier, syphon, consumeRate, drainRate); + } catch (Exception e) + { +// Mekanism.logger.error("Error reading electrolysis recipe from packet.", e); + throw e; + } + } + + @Override + public void write(@Nonnull PacketBuffer buffer, @Nonnull RECIPE recipe) + { + try + { + recipe.write(buffer); + } catch (Exception e) + { +// Mekanism.logger.error("Error writing electrolysis recipe to packet.", e); + throw e; + } + } + + @FunctionalInterface + public interface IFactory + { + RECIPE create(ResourceLocation id, Ingredient input, ItemStack output, int minimumTier, int syphon, int consumeRate, int drainRate); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/recipe/serializer/TartaricForgeRecipeSerializer.java b/src/main/java/wayoftime/bloodmagic/common/recipe/serializer/TartaricForgeRecipeSerializer.java new file mode 100644 index 00000000..18fadfb4 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/recipe/serializer/TartaricForgeRecipeSerializer.java @@ -0,0 +1,100 @@ +package wayoftime.bloodmagic.common.recipe.serializer; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nonnull; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.registries.ForgeRegistryEntry; +import wayoftime.bloodmagic.recipe.helper.SerializerHelper; +import wayoftime.bloodmagic.recipe.RecipeTartaricForge; +import wayoftime.bloodmagic.util.Constants; + +public class TartaricForgeRecipeSerializer + extends ForgeRegistryEntry> implements IRecipeSerializer +{ + + private final IFactory factory; + + public TartaricForgeRecipeSerializer(IFactory factory) + { + this.factory = factory; + } + + @Nonnull + @Override + public RECIPE read(@Nonnull ResourceLocation recipeId, @Nonnull JsonObject json) + { + List inputList = new ArrayList(); + for (int i = 0; i < 4; i++) + { + if (json.has(Constants.JSON.INPUT + i)) + { + JsonElement input = JSONUtils.isJsonArray(json, Constants.JSON.INPUT + i) + ? JSONUtils.getJsonArray(json, Constants.JSON.INPUT + i) + : JSONUtils.getJsonObject(json, Constants.JSON.INPUT + i); + inputList.add(Ingredient.deserialize(input)); + } + } + + ItemStack output = SerializerHelper.getItemStack(json, Constants.JSON.OUTPUT); + + float minimumSouls = JSONUtils.getFloat(json, Constants.JSON.TARTARIC_MINIMUM); + float soulDrain = JSONUtils.getFloat(json, Constants.JSON.TARTARIC_DRAIN); + + return this.factory.create(recipeId, inputList, output, minimumSouls, soulDrain); + } + + @Override + public RECIPE read(@Nonnull ResourceLocation recipeId, @Nonnull PacketBuffer buffer) + { + try + { + int size = buffer.readInt(); + List input = new ArrayList(size); + + for (int i = 0; i < size; i++) + { + input.add(i, Ingredient.read(buffer)); + } + + ItemStack output = buffer.readItemStack(); + double minimumSouls = buffer.readDouble(); + double soulDrain = buffer.readDouble(); + + return this.factory.create(recipeId, input, output, minimumSouls, soulDrain); + } catch (Exception e) + { +// Mekanism.logger.error("Error reading electrolysis recipe from packet.", e); + throw e; + } + } + + @Override + public void write(@Nonnull PacketBuffer buffer, @Nonnull RECIPE recipe) + { + try + { + recipe.write(buffer); + } catch (Exception e) + { +// Mekanism.logger.error("Error writing electrolysis recipe to packet.", e); + throw e; + } + } + + @FunctionalInterface + public interface IFactory + { + RECIPE create(ResourceLocation id, List input, ItemStack output, double minimumSouls, double soulDrain); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/registration/INamedEntry.java b/src/main/java/wayoftime/bloodmagic/common/registration/INamedEntry.java new file mode 100644 index 00000000..a75d9fe8 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/registration/INamedEntry.java @@ -0,0 +1,11 @@ +package wayoftime.bloodmagic.common.registration; + +public interface INamedEntry +{ + + /** + * Used for retrieving the path/name of a registry object before the registry + * object has been fully initialized + */ + String getInternalRegistryName(); +} diff --git a/src/main/java/wayoftime/bloodmagic/common/registration/WrappedDeferredRegister.java b/src/main/java/wayoftime/bloodmagic/common/registration/WrappedDeferredRegister.java new file mode 100644 index 00000000..f6a707df --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/registration/WrappedDeferredRegister.java @@ -0,0 +1,49 @@ +package wayoftime.bloodmagic.common.registration; + +import java.util.function.Function; +import java.util.function.Supplier; + +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.RegistryObject; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.IForgeRegistry; +import net.minecraftforge.registries.IForgeRegistryEntry; +import net.minecraftforge.registries.RegistryBuilder; + +public class WrappedDeferredRegister> +{ + protected final DeferredRegister internal; + + protected WrappedDeferredRegister(String modid, IForgeRegistry registry) + { + internal = DeferredRegister.create(registry, modid); + } + + /** + * @apiNote For use with custom registries + */ + protected WrappedDeferredRegister(String modid, Class base) + { + internal = DeferredRegister.create(base, modid); + } + + protected > W register(String name, Supplier sup, + Function, W> objectWrapper) + { + return objectWrapper.apply(internal.register(name, sup)); + } + + /** + * Only call this from mekanism and for custom registries + */ + public void createAndRegister(IEventBus bus, String name) + { + internal.makeRegistry(name, RegistryBuilder::new); + register(bus); + } + + public void register(IEventBus bus) + { + internal.register(bus); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/registration/WrappedRegistryObject.java b/src/main/java/wayoftime/bloodmagic/common/registration/WrappedRegistryObject.java new file mode 100644 index 00000000..7d37f782 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/registration/WrappedRegistryObject.java @@ -0,0 +1,32 @@ +package wayoftime.bloodmagic.common.registration; + +import java.util.function.Supplier; + +import javax.annotation.Nonnull; + +import net.minecraftforge.fml.RegistryObject; +import net.minecraftforge.registries.IForgeRegistryEntry; + +public class WrappedRegistryObject> implements Supplier, INamedEntry +{ + + protected RegistryObject registryObject; + + protected WrappedRegistryObject(RegistryObject registryObject) + { + this.registryObject = registryObject; + } + + @Nonnull + @Override + public T get() + { + return registryObject.get(); + } + + @Override + public String getInternalRegistryName() + { + return registryObject.getId().getPath(); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/registration/impl/AnointmentDeferredRegister.java b/src/main/java/wayoftime/bloodmagic/common/registration/impl/AnointmentDeferredRegister.java new file mode 100644 index 00000000..e689d0d9 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/registration/impl/AnointmentDeferredRegister.java @@ -0,0 +1,19 @@ +package wayoftime.bloodmagic.common.registration.impl; + +import java.util.function.Supplier; + +import wayoftime.bloodmagic.anointment.Anointment; +import wayoftime.bloodmagic.common.registration.WrappedDeferredRegister; + +public class AnointmentDeferredRegister extends WrappedDeferredRegister +{ + public AnointmentDeferredRegister(String modid) + { + super(modid, Anointment.class); + } + + public AnointmentRegistryObject register(String name, Supplier sup) + { + return register(name, sup, AnointmentRegistryObject::new); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/registration/impl/AnointmentRegistryObject.java b/src/main/java/wayoftime/bloodmagic/common/registration/impl/AnointmentRegistryObject.java new file mode 100644 index 00000000..f017a514 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/registration/impl/AnointmentRegistryObject.java @@ -0,0 +1,13 @@ +package wayoftime.bloodmagic.common.registration.impl; + +import net.minecraftforge.fml.RegistryObject; +import wayoftime.bloodmagic.anointment.Anointment; +import wayoftime.bloodmagic.common.registration.WrappedRegistryObject; + +public class AnointmentRegistryObject extends WrappedRegistryObject +{ + public AnointmentRegistryObject(RegistryObject registryObject) + { + super(registryObject); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/registration/impl/BloodOrbDeferredRegister.java b/src/main/java/wayoftime/bloodmagic/common/registration/impl/BloodOrbDeferredRegister.java new file mode 100644 index 00000000..0663347b --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/registration/impl/BloodOrbDeferredRegister.java @@ -0,0 +1,26 @@ +package wayoftime.bloodmagic.common.registration.impl; + +import java.util.function.Supplier; + +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.common.registration.WrappedDeferredRegister; +import wayoftime.bloodmagic.common.item.BloodOrb; + +public class BloodOrbDeferredRegister extends WrappedDeferredRegister +{ + public BloodOrbDeferredRegister(String modid) + { + super(modid, BloodOrb.class); + } + + public BloodOrbRegistryObject register(String name, ResourceLocation rl, int tier, int capacity, + int fillRate) + { + return register(name, () -> new BloodOrb(rl, tier, capacity, fillRate)); + } + + public BloodOrbRegistryObject register(String name, Supplier sup) + { + return register(name, sup, BloodOrbRegistryObject::new); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/registration/impl/BloodOrbRegistryObject.java b/src/main/java/wayoftime/bloodmagic/common/registration/impl/BloodOrbRegistryObject.java new file mode 100644 index 00000000..e9818ea3 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/registration/impl/BloodOrbRegistryObject.java @@ -0,0 +1,13 @@ +package wayoftime.bloodmagic.common.registration.impl; + +import net.minecraftforge.fml.RegistryObject; +import wayoftime.bloodmagic.common.registration.WrappedRegistryObject; +import wayoftime.bloodmagic.common.item.BloodOrb; + +public class BloodOrbRegistryObject extends WrappedRegistryObject +{ + public BloodOrbRegistryObject(RegistryObject registryObject) + { + super(registryObject); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/registration/impl/EntityTypeDeferredRegister.java b/src/main/java/wayoftime/bloodmagic/common/registration/impl/EntityTypeDeferredRegister.java new file mode 100644 index 00000000..0176e647 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/registration/impl/EntityTypeDeferredRegister.java @@ -0,0 +1,20 @@ +package wayoftime.bloodmagic.common.registration.impl; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraftforge.registries.ForgeRegistries; +import wayoftime.bloodmagic.common.registration.WrappedDeferredRegister; + +public class EntityTypeDeferredRegister extends WrappedDeferredRegister> +{ + + public EntityTypeDeferredRegister(String modid) + { + super(modid, ForgeRegistries.ENTITIES); + } + + public EntityTypeRegistryObject register(String name, EntityType.Builder builder) + { + return register(name, () -> builder.build(name), EntityTypeRegistryObject::new); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/registration/impl/EntityTypeRegistryObject.java b/src/main/java/wayoftime/bloodmagic/common/registration/impl/EntityTypeRegistryObject.java new file mode 100644 index 00000000..e6e51ee2 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/registration/impl/EntityTypeRegistryObject.java @@ -0,0 +1,26 @@ +package wayoftime.bloodmagic.common.registration.impl; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraftforge.fml.RegistryObject; +import wayoftime.bloodmagic.util.providers.IEntityTypeProvider; +import wayoftime.bloodmagic.common.registration.WrappedRegistryObject; + +public class EntityTypeRegistryObject extends WrappedRegistryObject> + implements IEntityTypeProvider +{ + + public EntityTypeRegistryObject(RegistryObject> registryObject) + { + super(registryObject); + } + + @Nonnull + @Override + public EntityType getEntityType() + { + return get(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/registration/impl/IRecipeSerializerDeferredRegister.java b/src/main/java/wayoftime/bloodmagic/common/registration/impl/IRecipeSerializerDeferredRegister.java new file mode 100644 index 00000000..10c94aba --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/registration/impl/IRecipeSerializerDeferredRegister.java @@ -0,0 +1,23 @@ +package wayoftime.bloodmagic.common.registration.impl; + +import java.util.function.Supplier; + +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraftforge.registries.ForgeRegistries; +import wayoftime.bloodmagic.common.registration.WrappedDeferredRegister; + +public class IRecipeSerializerDeferredRegister extends WrappedDeferredRegister> +{ + + public IRecipeSerializerDeferredRegister(String modid) + { + super(modid, ForgeRegistries.RECIPE_SERIALIZERS); + } + + public > IRecipeSerializerRegistryObject register(String name, + Supplier> sup) + { + return register(name, sup, IRecipeSerializerRegistryObject::new); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/registration/impl/IRecipeSerializerRegistryObject.java b/src/main/java/wayoftime/bloodmagic/common/registration/impl/IRecipeSerializerRegistryObject.java new file mode 100644 index 00000000..70d3d56c --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/registration/impl/IRecipeSerializerRegistryObject.java @@ -0,0 +1,24 @@ +package wayoftime.bloodmagic.common.registration.impl; + +import javax.annotation.Nonnull; + +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraftforge.fml.RegistryObject; +import wayoftime.bloodmagic.common.registration.WrappedRegistryObject; + +public class IRecipeSerializerRegistryObject> + extends WrappedRegistryObject> +{ + + public IRecipeSerializerRegistryObject(RegistryObject> registryObject) + { + super(registryObject); + } + + @Nonnull + public IRecipeSerializer getRecipeSerializer() + { + return get(); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/registration/impl/LivingUpgradeDeferredRegister.java b/src/main/java/wayoftime/bloodmagic/common/registration/impl/LivingUpgradeDeferredRegister.java new file mode 100644 index 00000000..a84c05de --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/registration/impl/LivingUpgradeDeferredRegister.java @@ -0,0 +1,25 @@ +package wayoftime.bloodmagic.common.registration.impl; + +import java.util.function.Supplier; + +import wayoftime.bloodmagic.common.registration.WrappedDeferredRegister; +import wayoftime.bloodmagic.core.living.LivingUpgrade; + +public class LivingUpgradeDeferredRegister extends WrappedDeferredRegister +{ + public LivingUpgradeDeferredRegister(String modid) + { + super(modid, LivingUpgrade.class); + } + +// public BloodOrbRegistryObject register(String name, ResourceLocation rl, int tier, int capacity, +// int fillRate) +// { +// return register(name, () -> new BloodOrb(rl, tier, capacity, fillRate)); +// } + + public LivingUpgradeRegistryObject register(String name, Supplier sup) + { + return register(name, sup, LivingUpgradeRegistryObject::new); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/registration/impl/LivingUpgradeRegistryObject.java b/src/main/java/wayoftime/bloodmagic/common/registration/impl/LivingUpgradeRegistryObject.java new file mode 100644 index 00000000..c851d6fb --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/registration/impl/LivingUpgradeRegistryObject.java @@ -0,0 +1,13 @@ +package wayoftime.bloodmagic.common.registration.impl; + +import net.minecraftforge.fml.RegistryObject; +import wayoftime.bloodmagic.common.registration.WrappedRegistryObject; +import wayoftime.bloodmagic.core.living.LivingUpgrade; + +public class LivingUpgradeRegistryObject extends WrappedRegistryObject +{ + public LivingUpgradeRegistryObject(RegistryObject registryObject) + { + super(registryObject); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/registries/BloodMagicEntityTypes.java b/src/main/java/wayoftime/bloodmagic/common/registries/BloodMagicEntityTypes.java new file mode 100644 index 00000000..f503ab48 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/registries/BloodMagicEntityTypes.java @@ -0,0 +1,27 @@ +package wayoftime.bloodmagic.common.registries; + +import net.minecraft.entity.EntityClassification; +import net.minecraft.entity.EntityType; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.registration.impl.EntityTypeDeferredRegister; +import wayoftime.bloodmagic.common.registration.impl.EntityTypeRegistryObject; +import wayoftime.bloodmagic.entity.projectile.AbstractEntityThrowingDagger; +import wayoftime.bloodmagic.entity.projectile.EntityBloodLight; +import wayoftime.bloodmagic.entity.projectile.EntityShapedCharge; +import wayoftime.bloodmagic.entity.projectile.EntitySoulSnare; + +public class BloodMagicEntityTypes +{ + private BloodMagicEntityTypes() + { + + } + + public static final EntityTypeDeferredRegister ENTITY_TYPES = new EntityTypeDeferredRegister(BloodMagic.MODID); + + public static final EntityTypeRegistryObject SNARE = ENTITY_TYPES.register("soulsnare", EntityType.Builder.create(EntitySoulSnare::new, EntityClassification.MISC).setTrackingRange(64).setUpdateInterval(1).size(0.25f, 0.25f)); + public static final EntityTypeRegistryObject THROWING_DAGGER = ENTITY_TYPES.register("throwing_dagger", EntityType.Builder.create(AbstractEntityThrowingDagger::new, EntityClassification.MISC).setTrackingRange(64).setUpdateInterval(1).size(0.25f, 0.25f)); + public static final EntityTypeRegistryObject BLOOD_LIGHT = ENTITY_TYPES.register("bloodlight", EntityType.Builder.create(EntityBloodLight::new, EntityClassification.MISC).setTrackingRange(64).setUpdateInterval(1).size(0.25f, 0.25f)); + public static final EntityTypeRegistryObject SHAPED_CHARGE = ENTITY_TYPES.register("shapedcharge", EntityType.Builder.create(EntityShapedCharge::new, EntityClassification.MISC).setTrackingRange(64).setUpdateInterval(1).size(0.4f, 0.4f)); + +} diff --git a/src/main/java/wayoftime/bloodmagic/common/registries/BloodMagicRecipeSerializers.java b/src/main/java/wayoftime/bloodmagic/common/registries/BloodMagicRecipeSerializers.java new file mode 100644 index 00000000..38a6012b --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/registries/BloodMagicRecipeSerializers.java @@ -0,0 +1,36 @@ +package wayoftime.bloodmagic.common.registries; + +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.recipe.RecipeARC; +import wayoftime.bloodmagic.recipe.RecipeAlchemyArray; +import wayoftime.bloodmagic.recipe.RecipeAlchemyTable; +import wayoftime.bloodmagic.recipe.RecipeBloodAltar; +import wayoftime.bloodmagic.recipe.RecipeTartaricForge; +import wayoftime.bloodmagic.common.recipe.serializer.ARCRecipeSerializer; +import wayoftime.bloodmagic.common.recipe.serializer.AlchemyArrayRecipeSerializer; +import wayoftime.bloodmagic.common.recipe.serializer.AlchemyTableRecipeSerializer; +import wayoftime.bloodmagic.common.recipe.serializer.BloodAltarRecipeSerializer; +import wayoftime.bloodmagic.common.recipe.serializer.TartaricForgeRecipeSerializer; +import wayoftime.bloodmagic.common.registration.impl.IRecipeSerializerDeferredRegister; +import wayoftime.bloodmagic.common.registration.impl.IRecipeSerializerRegistryObject; + +public class BloodMagicRecipeSerializers +{ + private BloodMagicRecipeSerializers() + { + + } + + public static final IRecipeSerializerDeferredRegister RECIPE_SERIALIZERS = new IRecipeSerializerDeferredRegister(BloodMagic.MODID); + + public static final IRecipeSerializerRegistryObject ALTAR = RECIPE_SERIALIZERS.register("altar", () -> new BloodAltarRecipeSerializer<>(RecipeBloodAltar::new)); + public static final IRecipeSerializerRegistryObject ARRAY = RECIPE_SERIALIZERS.register("array", () -> new AlchemyArrayRecipeSerializer<>(RecipeAlchemyArray::new)); + public static final IRecipeSerializerRegistryObject TARTARIC = RECIPE_SERIALIZERS.register("soulforge", () -> new TartaricForgeRecipeSerializer<>(RecipeTartaricForge::new)); + public static final IRecipeSerializerRegistryObject ARC = RECIPE_SERIALIZERS.register("arc", () -> new ARCRecipeSerializer<>(RecipeARC::new)); + public static final IRecipeSerializerRegistryObject ALCHEMYTABLE = RECIPE_SERIALIZERS.register("alchemytable", () -> new AlchemyTableRecipeSerializer<>(RecipeAlchemyTable::new)); + +// public static final DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, BloodMagic.MODID); + +// public static final DeferredObject REC = RECIPE_SERIALIZERS.register("test", () -> new BloodAltarRecipeSerializer<>(IRecipeBloodAltar::new)); +// public static final IRecipeSerializerDeferredRegister RECIPE_SERIALIZERS = new IRecipeSerializerDeferredRegister(BloodMagic.MODID); +} diff --git a/src/main/java/wayoftime/bloodmagic/common/tags/BloodMagicTags.java b/src/main/java/wayoftime/bloodmagic/common/tags/BloodMagicTags.java new file mode 100644 index 00000000..9ad0f087 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/tags/BloodMagicTags.java @@ -0,0 +1,100 @@ +package wayoftime.bloodmagic.common.tags; + +import net.minecraft.block.Block; +import net.minecraft.fluid.Fluid; +import net.minecraft.item.Item; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.FluidTags; +import net.minecraft.tags.ITag; +import net.minecraft.tags.ItemTags; + +public class BloodMagicTags +{ + public static final ITag.INamedTag ARC_TOOL = ItemTags.makeWrapperTag("bloodmagic:arc/tool"); + public static final ITag.INamedTag ARC_TOOL_FURNACE = ItemTags.makeWrapperTag("bloodmagic:arc/furnace"); + public static final ITag.INamedTag ARC_TOOL_SIEVE = ItemTags.makeWrapperTag("bloodmagic:arc/sieve"); + public static final ITag.INamedTag ARC_TOOL_REVERTER = ItemTags.makeWrapperTag("bloodmagic:arc/reverter"); + public static final ITag.INamedTag ARC_TOOL_EXPLOSIVE = ItemTags.makeWrapperTag("bloodmagic:arc/explosive"); + public static final ITag.INamedTag ARC_TOOL_HYDRATE = ItemTags.makeWrapperTag("bloodmagic:arc/hydrate"); + public static final ITag.INamedTag ARC_TOOL_RESONATOR = ItemTags.makeWrapperTag("bloodmagic:arc/resonator"); + public static final ITag.INamedTag ARC_TOOL_CUTTINGFLUID = ItemTags.makeWrapperTag("bloodmagic:arc/cuttingfluid"); + + public static final ITag.INamedTag CRYSTAL_DEMON = ItemTags.makeWrapperTag("bloodmagic:crystals/demon"); + + public static final ITag.INamedTag LIFE_ESSENCE = FluidTags.makeWrapperTag("forge:life"); + + public static final ITag.INamedTag MUSHROOM_STEM = ItemTags.makeWrapperTag("minecraft:mushroom_stem"); + public static final ITag.INamedTag MUSHROOM_HYPHAE = ItemTags.makeWrapperTag("minecraft:mushroom_hyphae"); + + // Ores + public static final ITag.INamedTag ORE_COPPER = getForgeOreTag("copper"); + public static final ITag.INamedTag ORE_TIN = getForgeOreTag("tin"); + public static final ITag.INamedTag ORE_LEAD = getForgeOreTag("lead"); + public static final ITag.INamedTag ORE_OSMIUM = getForgeOreTag("osmium"); + public static final ITag.INamedTag ORE_SILVER = getForgeOreTag("silver"); + + // Ingots + public static final ITag.INamedTag INGOT_HELLFORGED = getForgeIngotTag("hellforged"); + + // Dusts (/Sands) + public static final ITag.INamedTag DUST_IRON = getForgeDustTag("iron"); + public static final ITag.INamedTag DUST_GOLD = getForgeDustTag("gold"); + public static final ITag.INamedTag DUST_COAL = getForgeDustTag("coal"); + public static final ITag.INamedTag DUST_SALTPETER = getForgeDustTag("saltpeter"); + public static final ITag.INamedTag DUST_SULFUR = getForgeDustTag("sulfur"); + public static final ITag.INamedTag DUST_NETHERITE_SCRAP = getForgeDustTag("netherite_scrap"); + public static final ITag.INamedTag DUST_HELLFORGED = getForgeDustTag("hellforged"); + public static final ITag.INamedTag DUST_CORRUPTED = getBMDustTag("corrupted"); + public static final ITag.INamedTag TINYDUST_CORRUPTED = getBMTinyDustTag("corrupted"); + + // Fragments + public static final ITag.INamedTag FRAGMENT_IRON = getFragmentTag("iron"); + public static final ITag.INamedTag FRAGMENT_GOLD = getFragmentTag("gold"); + public static final ITag.INamedTag FRAGMENT_NETHERITE_SCRAP = getFragmentTag("netherite_scrap"); + + // Gravels + public static final ITag.INamedTag GRAVEL_IRON = getGravelTag("iron"); + public static final ITag.INamedTag GRAVEL_GOLD = getGravelTag("gold"); + public static final ITag.INamedTag GRAVEL_NETHERITE_SCRAP = getGravelTag("netherite_scrap"); + + public static class Blocks + { + public static final ITag.INamedTag MUSHROOM_STEM = BlockTags.makeWrapperTag("minecraft:mushroom_stem"); + public static final ITag.INamedTag MUSHROOM_HYPHAE = BlockTags.makeWrapperTag("minecraft:mushroom_hyphae"); + } + + public static ITag.INamedTag getForgeOreTag(String name) + { + return ItemTags.makeWrapperTag("forge:ores/" + name); + } + + public static ITag.INamedTag getForgeIngotTag(String name) + { + return ItemTags.makeWrapperTag("forge:ingots/" + name); + } + + public static ITag.INamedTag getBMDustTag(String name) + { + return ItemTags.makeWrapperTag("bloodmagic:dusts/" + name); + } + + public static ITag.INamedTag getBMTinyDustTag(String name) + { + return ItemTags.makeWrapperTag("bloodmagic:tiny_dusts/" + name); + } + + public static ITag.INamedTag getForgeDustTag(String name) + { + return ItemTags.makeWrapperTag("forge:dusts/" + name); + } + + public static ITag.INamedTag getFragmentTag(String name) + { + return ItemTags.makeWrapperTag("bloodmagic:fragments/" + name); + } + + public static ITag.INamedTag getGravelTag(String name) + { + return ItemTags.makeWrapperTag("bloodmagic:gravels/" + name); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/compat/crt/ARCManager.java b/src/main/java/wayoftime/bloodmagic/compat/crt/ARCManager.java new file mode 100644 index 00000000..dc2c4749 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/crt/ARCManager.java @@ -0,0 +1,74 @@ +package wayoftime.bloodmagic.compat.crt; + +import com.blamejared.crafttweaker.api.CraftTweakerAPI; +import com.blamejared.crafttweaker.api.annotations.ZenRegister; +import com.blamejared.crafttweaker.api.fluid.IFluidStack; +import com.blamejared.crafttweaker.api.item.IIngredient; +import com.blamejared.crafttweaker.api.item.IItemStack; +import com.blamejared.crafttweaker.api.managers.IRecipeManager; +import com.blamejared.crafttweaker.impl.actions.recipes.ActionAddRecipe; +import com.blamejared.crafttweaker.impl.actions.recipes.ActionRemoveOutputRecipe; +import com.blamejared.crafttweaker.impl.actions.recipes.ActionRemoveRecipeByOutput; +import com.blamejared.crafttweaker.impl.item.MCItemStackMutable; +import com.blamejared.crafttweaker.impl.item.MCWeightedItemStack; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.util.ResourceLocation; +import org.apache.commons.lang3.tuple.Pair; +import org.openzen.zencode.java.ZenCodeType; +import wayoftime.bloodmagic.common.recipe.BloodMagicRecipeType; +import wayoftime.bloodmagic.recipe.RecipeARC; +import wayoftime.bloodmagic.recipe.helper.FluidStackIngredient; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@ZenRegister +@ZenCodeType.Name("mods.bloodmagic.ARC") +public class ARCManager implements IRecipeManager { + + @ZenCodeType.Method + public void addRecipe(String name, IItemStack output, IFluidStack outputFluid, IIngredient input, IFluidStack inputFluid, IIngredient arcTool, boolean consumeIngredient, @ZenCodeType.Optional MCWeightedItemStack[] addedItems) { + name = fixRecipeName(name); + ResourceLocation location = new ResourceLocation("crafttweaker", name); + List> addedItemsList = new ArrayList<>(); + if(addedItems != null) { + addedItemsList = Arrays.stream(addedItems).map(mcWeightedItemStack -> Pair.of(mcWeightedItemStack.getItemStack().getInternal(), mcWeightedItemStack.getWeight())).collect(Collectors.toList()); + } + RecipeARC recipeARC = new RecipeARC(location, input.asVanillaIngredient(), arcTool.asVanillaIngredient(), inputFluid.getInternal().isEmpty() ? null : FluidStackIngredient.from(inputFluid.getInternal()), output.getInternal(), addedItemsList, outputFluid.getInternal(), consumeIngredient); + CraftTweakerAPI.apply(new ActionAddRecipe(this, recipeARC, "")); + } + + @Override + public void removeRecipe(IItemStack output) { + + CraftTweakerAPI.apply(new ActionRemoveRecipeByOutput(this, output) { + @Override + public void apply() { + List toRemove = new ArrayList<>(); + for(ResourceLocation location : getManager().getRecipes().keySet()) { + IRecipe recipe = getManager().getRecipes().get(location); + if(recipe instanceof RecipeARC) { + RecipeARC recipeARC = (RecipeARC) recipe; + List allListedOutputs = recipeARC.getAllListedOutputs(); + // no other way to get the main output, and there may not even be a main output + if(allListedOutputs.size() > 0) { + if(output.matches(new MCItemStackMutable(allListedOutputs.get(0)))) { + toRemove.add(location); + } + } + } + } + toRemove.forEach(getManager().getRecipes()::remove); + } + }); + } + + @Override + public IRecipeType getRecipeType() { + return BloodMagicRecipeType.ARC; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/compat/crt/AlchemyArrayManager.java b/src/main/java/wayoftime/bloodmagic/compat/crt/AlchemyArrayManager.java new file mode 100644 index 00000000..abc6a449 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/crt/AlchemyArrayManager.java @@ -0,0 +1,63 @@ +package wayoftime.bloodmagic.compat.crt; + +import com.blamejared.crafttweaker.api.CraftTweakerAPI; +import com.blamejared.crafttweaker.api.annotations.ZenRegister; +import com.blamejared.crafttweaker.api.item.IIngredient; +import com.blamejared.crafttweaker.api.item.IItemStack; +import com.blamejared.crafttweaker.api.managers.IRecipeManager; +import com.blamejared.crafttweaker.impl.actions.recipes.ActionAddRecipe; +import com.blamejared.crafttweaker.impl.actions.recipes.ActionRemoveRecipeByOutput; +import com.blamejared.crafttweaker.impl.item.MCItemStackMutable; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.util.ResourceLocation; +import org.openzen.zencode.java.ZenCodeType; +import wayoftime.bloodmagic.common.recipe.BloodMagicRecipeType; +import wayoftime.bloodmagic.recipe.RecipeAlchemyArray; +import wayoftime.bloodmagic.recipe.RecipeAlchemyTable; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@ZenRegister +@ZenCodeType.Name("mods.bloodmagic.AlchemyArray") +public class AlchemyArrayManager implements IRecipeManager { + + @ZenCodeType.Method + public void addRecipe(String name, IItemStack output, IIngredient baseInput, IIngredient addedInput, ResourceLocation texture) { + name = fixRecipeName(name); + ResourceLocation location = new ResourceLocation("crafttweaker", name); + RecipeAlchemyArray recipe = new RecipeAlchemyArray(location, texture, baseInput.asVanillaIngredient(), addedInput.asVanillaIngredient(), output.getInternal()); + CraftTweakerAPI.apply(new ActionAddRecipe(this, recipe, "")); + } + + @Override + public void removeRecipe(IItemStack output) { + + CraftTweakerAPI.apply(new ActionRemoveRecipeByOutput(this, output) { + @Override + public void apply() { + List toRemove = new ArrayList<>(); + for(ResourceLocation location : getManager().getRecipes().keySet()) { + IRecipe recipe = getManager().getRecipes().get(location); + if(recipe instanceof RecipeAlchemyArray) { + RecipeAlchemyArray recipeAT = (RecipeAlchemyArray) recipe; + ItemStack recipeOutput = recipeAT.getOutput(); + if(output.matches(new MCItemStackMutable(recipeOutput))) { + toRemove.add(location); + } + } + } + toRemove.forEach(getManager().getRecipes()::remove); + } + }); + } + + @Override + public IRecipeType getRecipeType() { + return BloodMagicRecipeType.ARRAY; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/compat/crt/AlchemyTableManager.java b/src/main/java/wayoftime/bloodmagic/compat/crt/AlchemyTableManager.java new file mode 100644 index 00000000..4a2e5221 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/crt/AlchemyTableManager.java @@ -0,0 +1,63 @@ +package wayoftime.bloodmagic.compat.crt; + +import com.blamejared.crafttweaker.api.CraftTweakerAPI; +import com.blamejared.crafttweaker.api.annotations.ZenRegister; +import com.blamejared.crafttweaker.api.item.IIngredient; +import com.blamejared.crafttweaker.api.item.IItemStack; +import com.blamejared.crafttweaker.api.managers.IRecipeManager; +import com.blamejared.crafttweaker.impl.actions.recipes.ActionAddRecipe; +import com.blamejared.crafttweaker.impl.actions.recipes.ActionRemoveRecipeByOutput; +import com.blamejared.crafttweaker.impl.item.MCItemStackMutable; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.util.ResourceLocation; +import org.openzen.zencode.java.ZenCodeType; +import wayoftime.bloodmagic.common.recipe.BloodMagicRecipeType; +import wayoftime.bloodmagic.recipe.RecipeAlchemyTable; +import wayoftime.bloodmagic.recipe.RecipeTartaricForge; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@ZenRegister +@ZenCodeType.Name("mods.bloodmagic.AlchemyTable") +public class AlchemyTableManager implements IRecipeManager { + + @ZenCodeType.Method + public void addRecipe(String name, IItemStack output, IIngredient[] input, int syphon, int ticks, int minimumTier) { + name = fixRecipeName(name); + ResourceLocation location = new ResourceLocation("crafttweaker", name); + RecipeAlchemyTable recipe = new RecipeAlchemyTable(location, Arrays.stream(input).map(IIngredient::asVanillaIngredient).collect(Collectors.toList()), output.getInternal(), syphon, ticks, minimumTier); + CraftTweakerAPI.apply(new ActionAddRecipe(this, recipe, "")); + } + + @Override + public void removeRecipe(IItemStack output) { + + CraftTweakerAPI.apply(new ActionRemoveRecipeByOutput(this, output) { + @Override + public void apply() { + List toRemove = new ArrayList<>(); + for(ResourceLocation location : getManager().getRecipes().keySet()) { + IRecipe recipe = getManager().getRecipes().get(location); + if(recipe instanceof RecipeAlchemyTable) { + RecipeAlchemyTable recipeAT = (RecipeAlchemyTable) recipe; + ItemStack recipeOutput = recipeAT.getOutput(); + if(output.matches(new MCItemStackMutable(recipeOutput))) { + toRemove.add(location); + } + } + } + toRemove.forEach(getManager().getRecipes()::remove); + } + }); + } + + @Override + public IRecipeType getRecipeType() { + return BloodMagicRecipeType.ALCHEMYTABLE; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/compat/crt/BloodAltarManager.java b/src/main/java/wayoftime/bloodmagic/compat/crt/BloodAltarManager.java new file mode 100644 index 00000000..5a740bfa --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/crt/BloodAltarManager.java @@ -0,0 +1,67 @@ +package wayoftime.bloodmagic.compat.crt; + +import com.blamejared.crafttweaker.api.CraftTweakerAPI; +import com.blamejared.crafttweaker.api.annotations.ZenRegister; +import com.blamejared.crafttweaker.api.fluid.IFluidStack; +import com.blamejared.crafttweaker.api.item.IIngredient; +import com.blamejared.crafttweaker.api.item.IItemStack; +import com.blamejared.crafttweaker.api.managers.IRecipeManager; +import com.blamejared.crafttweaker.impl.actions.recipes.ActionAddRecipe; +import com.blamejared.crafttweaker.impl.actions.recipes.ActionRemoveRecipeByOutput; +import com.blamejared.crafttweaker.impl.item.MCItemStackMutable; +import com.blamejared.crafttweaker.impl.item.MCWeightedItemStack; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.util.ResourceLocation; +import org.apache.commons.lang3.tuple.Pair; +import org.openzen.zencode.java.ZenCodeType; +import wayoftime.bloodmagic.common.recipe.BloodMagicRecipeType; +import wayoftime.bloodmagic.recipe.RecipeARC; +import wayoftime.bloodmagic.recipe.RecipeBloodAltar; +import wayoftime.bloodmagic.recipe.helper.FluidStackIngredient; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@ZenRegister +@ZenCodeType.Name("mods.bloodmagic.BloodAltar") +public class BloodAltarManager implements IRecipeManager { + + @ZenCodeType.Method + public void addRecipe(String name, IItemStack output, IIngredient input, int minimumTier, int syphon, int consumeRate, int drainRate) { + name = fixRecipeName(name); + ResourceLocation location = new ResourceLocation("crafttweaker", name); + RecipeBloodAltar recipeARC = new RecipeBloodAltar(location, input.asVanillaIngredient(), output.getInternal(), minimumTier, syphon, consumeRate, drainRate); + CraftTweakerAPI.apply(new ActionAddRecipe(this, recipeARC, "")); + } + + @Override + public void removeRecipe(IItemStack output) { + + CraftTweakerAPI.apply(new ActionRemoveRecipeByOutput(this, output) { + @Override + public void apply() { + List toRemove = new ArrayList<>(); + for(ResourceLocation location : getManager().getRecipes().keySet()) { + IRecipe recipe = getManager().getRecipes().get(location); + if(recipe instanceof RecipeBloodAltar) { + RecipeBloodAltar recipeBloodAltar = (RecipeBloodAltar) recipe; + ItemStack recOut = recipeBloodAltar.getOutput(); + if(output.matches(new MCItemStackMutable(recOut))) { + toRemove.add(location); + } + } + } + toRemove.forEach(getManager().getRecipes()::remove); + } + }); + } + + @Override + public IRecipeType getRecipeType() { + return BloodMagicRecipeType.ALTAR; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/compat/crt/TartaricForgeManager.java b/src/main/java/wayoftime/bloodmagic/compat/crt/TartaricForgeManager.java new file mode 100644 index 00000000..1a45d208 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/crt/TartaricForgeManager.java @@ -0,0 +1,68 @@ +package wayoftime.bloodmagic.compat.crt; + +import com.blamejared.crafttweaker.api.CraftTweakerAPI; +import com.blamejared.crafttweaker.api.annotations.ZenRegister; +import com.blamejared.crafttweaker.api.fluid.IFluidStack; +import com.blamejared.crafttweaker.api.item.IIngredient; +import com.blamejared.crafttweaker.api.item.IItemStack; +import com.blamejared.crafttweaker.api.managers.IRecipeManager; +import com.blamejared.crafttweaker.impl.actions.recipes.ActionAddRecipe; +import com.blamejared.crafttweaker.impl.actions.recipes.ActionRemoveRecipeByOutput; +import com.blamejared.crafttweaker.impl.item.MCItemStackMutable; +import com.blamejared.crafttweaker.impl.item.MCWeightedItemStack; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.util.ResourceLocation; +import org.apache.commons.lang3.tuple.Pair; +import org.openzen.zencode.java.ZenCodeType; +import wayoftime.bloodmagic.common.recipe.BloodMagicRecipeType; +import wayoftime.bloodmagic.recipe.RecipeARC; +import wayoftime.bloodmagic.recipe.RecipeTartaricForge; +import wayoftime.bloodmagic.recipe.helper.FluidStackIngredient; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.function.BiFunction; +import java.util.stream.Collectors; + +@ZenRegister +@ZenCodeType.Name("mods.bloodmagic.TartaricForge") +public class TartaricForgeManager implements IRecipeManager { + + @ZenCodeType.Method + public void addRecipe(String name, IItemStack output, IIngredient[] input, double minimumSouls, double soulDrain) { + name = fixRecipeName(name); + ResourceLocation location = new ResourceLocation("crafttweaker", name); + RecipeTartaricForge recipe = new RecipeTartaricForge(location, Arrays.stream(input).map(IIngredient::asVanillaIngredient).collect(Collectors.toList()), output.getInternal(), minimumSouls, soulDrain); + CraftTweakerAPI.apply(new ActionAddRecipe(this, recipe, "")); + } + + @Override + public void removeRecipe(IItemStack output) { + + CraftTweakerAPI.apply(new ActionRemoveRecipeByOutput(this, output) { + @Override + public void apply() { + List toRemove = new ArrayList<>(); + for(ResourceLocation location : getManager().getRecipes().keySet()) { + IRecipe recipe = getManager().getRecipes().get(location); + if(recipe instanceof RecipeTartaricForge) { + RecipeTartaricForge recipeTF = (RecipeTartaricForge) recipe; + ItemStack recipeOutput = recipeTF.getOutput(); + if(output.matches(new MCItemStackMutable(recipeOutput))) { + toRemove.add(location); + } + } + } + toRemove.forEach(getManager().getRecipes()::remove); + } + }); + } + + @Override + public IRecipeType getRecipeType() { + return BloodMagicRecipeType.TARTARICFORGE; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/compat/jei/BloodMagicJEIPlugin.java b/src/main/java/wayoftime/bloodmagic/compat/jei/BloodMagicJEIPlugin.java new file mode 100644 index 00000000..55be8f70 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/jei/BloodMagicJEIPlugin.java @@ -0,0 +1,77 @@ +package wayoftime.bloodmagic.compat.jei; + +import java.util.Objects; + +import com.google.common.collect.ImmutableSet; + +import mezz.jei.api.IModPlugin; +import mezz.jei.api.JeiPlugin; +import mezz.jei.api.helpers.IJeiHelpers; +import mezz.jei.api.registration.IRecipeCatalystRegistration; +import mezz.jei.api.registration.IRecipeCategoryRegistration; +import mezz.jei.api.registration.IRecipeRegistration; +import net.minecraft.client.Minecraft; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.impl.BloodMagicAPI; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.compat.jei.alchemytable.AlchemyTableRecipeCategory; +import wayoftime.bloodmagic.compat.jei.altar.BloodAltarRecipeCategory; +import wayoftime.bloodmagic.compat.jei.arc.ARCFurnaceRecipeCategory; +import wayoftime.bloodmagic.compat.jei.arc.ARCRecipeCategory; +import wayoftime.bloodmagic.compat.jei.array.AlchemyArrayCraftingCategory; +import wayoftime.bloodmagic.compat.jei.forge.TartaricForgeRecipeCategory; + +@JeiPlugin +public class BloodMagicJEIPlugin implements IModPlugin +{ + public static IJeiHelpers jeiHelper; + + private static final ResourceLocation ID = BloodMagic.rl("jei_plugin"); + + @Override + public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) + { + registration.addRecipeCatalyst(new ItemStack(BloodMagicBlocks.SOUL_FORGE.get()), TartaricForgeRecipeCategory.UID); + registration.addRecipeCatalyst(new ItemStack(BloodMagicBlocks.BLOOD_ALTAR.get()), BloodAltarRecipeCategory.UID); + registration.addRecipeCatalyst(new ItemStack(BloodMagicItems.ARCANE_ASHES.get()), AlchemyArrayCraftingCategory.UID); + registration.addRecipeCatalyst(new ItemStack(BloodMagicBlocks.ALCHEMICAL_REACTION_CHAMBER.get()), ARCRecipeCategory.UID); + registration.addRecipeCatalyst(new ItemStack(BloodMagicBlocks.ALCHEMICAL_REACTION_CHAMBER.get()), ARCFurnaceRecipeCategory.UID); + registration.addRecipeCatalyst(new ItemStack(BloodMagicBlocks.ALCHEMY_TABLE.get()), AlchemyTableRecipeCategory.UID); + } + + @Override + public void registerCategories(IRecipeCategoryRegistration registration) + { + jeiHelper = registration.getJeiHelpers(); + registration.addRecipeCategories(new TartaricForgeRecipeCategory(registration.getJeiHelpers().getGuiHelper())); + registration.addRecipeCategories(new BloodAltarRecipeCategory(registration.getJeiHelpers().getGuiHelper())); + registration.addRecipeCategories(new AlchemyArrayCraftingCategory(registration.getJeiHelpers().getGuiHelper())); + registration.addRecipeCategories(new ARCRecipeCategory(registration.getJeiHelpers().getGuiHelper())); + registration.addRecipeCategories(new ARCFurnaceRecipeCategory(registration.getJeiHelpers().getGuiHelper())); + registration.addRecipeCategories(new AlchemyTableRecipeCategory(registration.getJeiHelpers().getGuiHelper())); + } + + @Override + public void registerRecipes(IRecipeRegistration registration) + { + ClientWorld world = Objects.requireNonNull(Minecraft.getInstance().world); + registration.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getTartaricForgeRecipes(world), TartaricForgeRecipeCategory.UID); + registration.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAltarRecipes(world), BloodAltarRecipeCategory.UID); + registration.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAlchemyArrayRecipes(world), AlchemyArrayCraftingCategory.UID); + registration.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getARCRecipes(world), ARCRecipeCategory.UID); + registration.addRecipes(ImmutableSet.copyOf(world.getRecipeManager().getRecipesForType(IRecipeType.SMELTING)), ARCFurnaceRecipeCategory.UID); + registration.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAlchemyTableRecipes(world), AlchemyTableRecipeCategory.UID); + } + + @Override + public ResourceLocation getPluginUid() + { + return ID; + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/compat/jei/alchemytable/AlchemyTableRecipeCategory.java b/src/main/java/wayoftime/bloodmagic/compat/jei/alchemytable/AlchemyTableRecipeCategory.java new file mode 100644 index 00000000..1909e83f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/jei/alchemytable/AlchemyTableRecipeCategory.java @@ -0,0 +1,162 @@ +package wayoftime.bloodmagic.compat.jei.alchemytable; + +import java.util.List; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import com.google.common.collect.Lists; + +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.ingredient.IGuiItemStackGroup; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.core.registry.OrbRegistry; +import wayoftime.bloodmagic.recipe.RecipeAlchemyTable; +import wayoftime.bloodmagic.util.ChatUtil; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.helper.TextHelper; + +public class AlchemyTableRecipeCategory implements IRecipeCategory +{ + private static final int OUTPUT_SLOT = 0; + private static final int ORB_SLOT = 1; + private static final int INPUT_SLOT = 2; + public static final ResourceLocation UID = BloodMagic.rl(Constants.Compat.JEI_CATEGORY_ALCHEMYTABLE); + + @Nonnull + private final IDrawable background; + private final IDrawable icon; +// @Nonnull +// private final ICraftingGridHelper craftingGridHelper; + + public AlchemyTableRecipeCategory(IGuiHelper guiHelper) + { + icon = guiHelper.createDrawableIngredient(new ItemStack(BloodMagicBlocks.ALCHEMY_TABLE.get())); + background = guiHelper.createDrawable(BloodMagic.rl("gui/jei/alchemytable.png"), 0, 0, 118, 40); +// craftingGridHelper = guiHelper.createCraftingGridHelper(INPUT_SLOT); + } + + @Nonnull + @Override + public ResourceLocation getUid() + { + return UID; + } + + @Override + public List getTooltipStrings(RecipeAlchemyTable recipe, double mouseX, double mouseY) + { + List tooltip = Lists.newArrayList(); + +// if (mouseX >= 13 && mouseX <= 64 && mouseY >= 27 && mouseY <= 58) +// { +// tooltip.add(new TranslationTextComponent("jei.bloodmagic.recipe.consumptionrate", ChatUtil.DECIMAL_FORMAT.format(recipe.getConsumeRate()))); +// tooltip.add(new TranslationTextComponent("jei.bloodmagic.recipe.drainrate", ChatUtil.DECIMAL_FORMAT.format(recipe.getDrainRate()))); +// } + + if (mouseX >= 58 && mouseX <= 78 && mouseY >= 21 && mouseY <= 34) + { + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.tier", ChatUtil.DECIMAL_FORMAT.format(recipe.getMinimumTier()))); + tooltip.add(new TranslationTextComponent("jei.bloodmagic.recipe.lpDrained", ChatUtil.DECIMAL_FORMAT.format(recipe.getSyphon()))); + tooltip.add(new TranslationTextComponent("jei.bloodmagic.recipe.ticksRequired", ChatUtil.DECIMAL_FORMAT.format(recipe.getTicks()))); + } + + return tooltip; + } + + @Nonnull + @Override + public String getTitle() + { + return TextHelper.localize("jei.bloodmagic.recipe.alchemytable"); + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return background; + } + + @Nullable + @Override + public IDrawable getIcon() + { + return icon; + } + + @Override + public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull RecipeAlchemyTable recipe, @Nonnull IIngredients ingredients) + { + IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks(); + + guiItemStacks.init(OUTPUT_SLOT, false, 91, 13); + guiItemStacks.init(ORB_SLOT, true, 60, 0); + + for (int y = 0; y < 2; ++y) + { + for (int x = 0; x < 3; ++x) + { + int index = INPUT_SLOT + x + (y * 3); + guiItemStacks.init(index, true, x * 18, y * 18); + } + } +// guiItemStacks.set(ORB_SLOT, OrbRegistry.getOrbsDownToTier(recipe.getMinimumTier())); +// guiItemStacks.set(OUTPUT_SLOT, ingredients.getOutputs(ItemStack.class).get(0)); + +// guiItemStacks.init(OUTPUT_SLOT, false, 125, 30); +// guiItemStacks.init(INPUT_SLOT, true, 31, 0); +// craftingGridHelper.setInputs(guiItemStacks, ingredients.getInputs(ItemStack.class), 3, 2); + + guiItemStacks.set(ingredients); + } + + @Override + public Class getRecipeClass() + { + return RecipeAlchemyTable.class; + } + + @Override + public void setIngredients(RecipeAlchemyTable recipe, IIngredients ingredients) + { + List validOrbs = OrbRegistry.getOrbsDownToTier(recipe.getMinimumTier()); + + ItemStack[] validOrbStacks = new ItemStack[validOrbs.size()]; + for (int i = 0; i < validOrbStacks.length; i++) + { + validOrbStacks[i] = validOrbs.get(i); + } + + List ingList = Lists.newArrayList(); + ingList.add(Ingredient.fromStacks(validOrbStacks)); + ingList.addAll(recipe.getInput()); + ingredients.setInputIngredients(ingList); + ingredients.setOutput(VanillaTypes.ITEM, recipe.getOutput()); + } + +// @Override +// public void draw(RecipeBloodAltar recipe, MatrixStack matrixStack, double mouseX, double mouseY) +// { +// Minecraft mc = Minecraft.getInstance(); +// String[] infoString = new String[] +// { TextHelper.localize("jei.bloodmagic.recipe.requiredtier", NumeralHelper.toRoman(recipe.getMinimumTier().toInt())), +// TextHelper.localize("jei.bloodmagic.recipe.requiredlp", recipe.getSyphon()) }; +// mc.fontRenderer.drawString(matrixStack, infoString[0], 90 +// - mc.fontRenderer.getStringWidth(infoString[0]) / 2, 0, Color.gray.getRGB()); +// mc.fontRenderer.drawString(matrixStack, infoString[1], 90 +// - mc.fontRenderer.getStringWidth(infoString[1]) / 2, 10, Color.gray.getRGB()); +// } + +} diff --git a/src/main/java/wayoftime/bloodmagic/compat/jei/altar/BloodAltarRecipeCategory.java b/src/main/java/wayoftime/bloodmagic/compat/jei/altar/BloodAltarRecipeCategory.java new file mode 100644 index 00000000..72c72c3f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/jei/altar/BloodAltarRecipeCategory.java @@ -0,0 +1,130 @@ +package wayoftime.bloodmagic.compat.jei.altar; + +import java.awt.Color; +import java.util.List; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import com.google.common.collect.Lists; +import com.mojang.blaze3d.matrix.MatrixStack; + +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.ingredient.IGuiItemStackGroup; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.recipe.RecipeBloodAltar; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.util.ChatUtil; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.helper.NumeralHelper; +import wayoftime.bloodmagic.util.helper.TextHelper; + +public class BloodAltarRecipeCategory implements IRecipeCategory +{ + private static final int INPUT_SLOT = 1; + private static final int OUTPUT_SLOT = 0; + public static final ResourceLocation UID = BloodMagic.rl(Constants.Compat.JEI_CATEGORY_ALTAR); + + @Nonnull + private final IDrawable background; + private final IDrawable icon; +// @Nonnull +// private final ICraftingGridHelper craftingGridHelper; + + public BloodAltarRecipeCategory(IGuiHelper guiHelper) + { + icon = guiHelper.createDrawableIngredient(new ItemStack(BloodMagicBlocks.BLOOD_ALTAR.get())); + background = guiHelper.createDrawable(BloodMagic.rl("gui/jei/altar.png"), 3, 4, 155, 65); +// craftingGridHelper = guiHelper.createCraftingGridHelper(INPUT_SLOT); + } + + @Nonnull + @Override + public ResourceLocation getUid() + { + return UID; + } + + @Override + public List getTooltipStrings(RecipeBloodAltar recipe, double mouseX, double mouseY) + { + List tooltip = Lists.newArrayList(); + + if (mouseX >= 13 && mouseX <= 64 && mouseY >= 27 && mouseY <= 58) + { + tooltip.add(new TranslationTextComponent("jei.bloodmagic.recipe.consumptionrate", ChatUtil.DECIMAL_FORMAT.format(recipe.getConsumeRate()))); + tooltip.add(new TranslationTextComponent("jei.bloodmagic.recipe.drainrate", ChatUtil.DECIMAL_FORMAT.format(recipe.getDrainRate()))); + } + + return tooltip; + } + + @Nonnull + @Override + public String getTitle() + { + return TextHelper.localize("jei.bloodmagic.recipe.altar"); + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return background; + } + + @Nullable + @Override + public IDrawable getIcon() + { + return icon; + } + + @Override + public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull RecipeBloodAltar recipe, @Nonnull IIngredients ingredients) + { + IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks(); + + guiItemStacks.init(OUTPUT_SLOT, false, 125, 30); + guiItemStacks.init(INPUT_SLOT, true, 31, 0); + + guiItemStacks.set(ingredients); + } + + @Override + public Class getRecipeClass() + { + return RecipeBloodAltar.class; + } + + @Override + public void setIngredients(RecipeBloodAltar recipe, IIngredients ingredients) + { + ingredients.setInputIngredients(recipe.getIngredients()); + ingredients.setOutput(VanillaTypes.ITEM, recipe.getOutput()); + } + + @Override + public void draw(RecipeBloodAltar recipe, MatrixStack matrixStack, double mouseX, double mouseY) + { + Minecraft mc = Minecraft.getInstance(); + String[] infoString = new String[] + { TextHelper.localize("jei.bloodmagic.recipe.requiredtier", NumeralHelper.toRoman(recipe.getMinimumTier() + 1)), + TextHelper.localize("jei.bloodmagic.recipe.requiredlp", recipe.getSyphon()) }; + mc.fontRenderer.drawString(matrixStack, infoString[0], 90 + - mc.fontRenderer.getStringWidth(infoString[0]) / 2, 0, Color.gray.getRGB()); + mc.fontRenderer.drawString(matrixStack, infoString[1], 90 + - mc.fontRenderer.getStringWidth(infoString[1]) / 2, 10, Color.gray.getRGB()); + } + +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/compat/jei/arc/ARCFurnaceRecipeCategory.java b/src/main/java/wayoftime/bloodmagic/compat/jei/arc/ARCFurnaceRecipeCategory.java new file mode 100644 index 00000000..d8d5ca72 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/jei/arc/ARCFurnaceRecipeCategory.java @@ -0,0 +1,114 @@ +package wayoftime.bloodmagic.compat.jei.arc; + +import java.util.List; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.ingredient.IGuiItemStackGroup; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipe; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidStack; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.tags.BloodMagicTags; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.handler.event.ClientHandler; +import wayoftime.bloodmagic.util.helper.TextHelper; + +public class ARCFurnaceRecipeCategory implements IRecipeCategory +{ + private static final int OUTPUT_SLOT = 0; + private static final int INPUT_SLOT = 1; + private static final int CATALYST_SLOT = 2; + public static final ResourceLocation UID = BloodMagic.rl(Constants.Compat.JEI_CATEGORY_ARC + "furnace"); + public static final ResourceLocation BACKGROUNDRL = BloodMagic.rl("gui/jei/arc.png"); + + @Nonnull + private final IDrawable background; + private final IDrawable icon; +// @Nonnull +// private final ICraftingGridHelper craftingGridHelper; + + public ARCFurnaceRecipeCategory(IGuiHelper guiHelper) + { + icon = guiHelper.createDrawableIngredient(new ItemStack(BloodMagicBlocks.ALCHEMICAL_REACTION_CHAMBER.get())); + background = guiHelper.createDrawable(BACKGROUNDRL, 0, 0, 157, 43); +// craftingGridHelper = guiHelper.createCraftingGridHelper(INPUT_SLOT); + } + + @Nonnull + @Override + public ResourceLocation getUid() + { + return UID; + } + + @Nonnull + @Override + public String getTitle() + { + return TextHelper.localize("jei.bloodmagic.recipe.arcfurnace"); + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return background; + } + + @Nullable + @Override + public IDrawable getIcon() + { + return icon; + } + + @Override + public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull FurnaceRecipe recipe, @Nonnull IIngredients ingredients) + { + IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks(); + + recipeLayout.getItemStacks().init(OUTPUT_SLOT, false, 53, 16); + recipeLayout.getItemStacks().init(INPUT_SLOT, true, 0, 5); + recipeLayout.getItemStacks().init(CATALYST_SLOT, true, 21, 16); + + guiItemStacks.set(ingredients); + } + + @Override + public Class getRecipeClass() + { + return FurnaceRecipe.class; + } + + @Override + public void setIngredients(FurnaceRecipe recipe, IIngredients ingredients) + { + List inputIngList = recipe.getIngredients(); + inputIngList.add(Ingredient.fromTag(BloodMagicTags.ARC_TOOL_FURNACE)); + ingredients.setInputIngredients(inputIngList); + ingredients.setOutput(VanillaTypes.ITEM, recipe.getRecipeOutput()); + } + + @Override + public void draw(FurnaceRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) + { + FluidStack outputStack = FluidStack.EMPTY; + ClientHandler.handleGuiTank(matrixStack, outputStack, outputStack.getAmount(), 140, 7, 16, 36, 157, 6, 18, 38, (int) mouseX, (int) mouseY, BACKGROUNDRL.toString(), null); + + FluidStack inputStack = FluidStack.EMPTY; + ClientHandler.handleGuiTank(matrixStack, inputStack, inputStack.getAmount(), 1, 26, 16, 16, 175, 26, 18, 18, (int) mouseX, (int) mouseY, BACKGROUNDRL.toString(), null); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/compat/jei/arc/ARCRecipeCategory.java b/src/main/java/wayoftime/bloodmagic/compat/jei/arc/ARCRecipeCategory.java new file mode 100644 index 00000000..668ebcb0 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/jei/arc/ARCRecipeCategory.java @@ -0,0 +1,172 @@ +package wayoftime.bloodmagic.compat.jei.arc; + +import java.awt.Color; +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.ingredient.IGuiItemStackGroup; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fluids.FluidStack; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.recipe.RecipeARC; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.handler.event.ClientHandler; +import wayoftime.bloodmagic.util.helper.TextHelper; + +public class ARCRecipeCategory implements IRecipeCategory +{ + private static final int OUTPUT_SLOT = 0; + private static final int INPUT_SLOT = 4; + private static final int CATALYST_SLOT = 5; + public static final ResourceLocation UID = BloodMagic.rl(Constants.Compat.JEI_CATEGORY_ARC); + public static final ResourceLocation BACKGROUNDRL = BloodMagic.rl("gui/jei/arc.png"); + + @Nonnull + private final IDrawable background; + private final IDrawable icon; +// @Nonnull +// private final ICraftingGridHelper craftingGridHelper; + + public ARCRecipeCategory(IGuiHelper guiHelper) + { + icon = guiHelper.createDrawableIngredient(new ItemStack(BloodMagicBlocks.ALCHEMICAL_REACTION_CHAMBER.get())); + background = guiHelper.createDrawable(BACKGROUNDRL, 0, 0, 157, 43); +// craftingGridHelper = guiHelper.createCraftingGridHelper(INPUT_SLOT); + } + + @Nonnull + @Override + public ResourceLocation getUid() + { + return UID; + } + + @Nonnull + @Override + public String getTitle() + { + return TextHelper.localize("jei.bloodmagic.recipe.arc"); + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return background; + } + + @Nullable + @Override + public IDrawable getIcon() + { + return icon; + } + + @Override + public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull RecipeARC recipe, @Nonnull IIngredients ingredients) + { + IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks(); + + recipeLayout.getItemStacks().init(OUTPUT_SLOT, false, 53, 16); + recipeLayout.getItemStacks().init(OUTPUT_SLOT + 1, false, 53 + 22 * 1, 16); + recipeLayout.getItemStacks().init(OUTPUT_SLOT + 2, false, 53 + 22 * 2, 16); + recipeLayout.getItemStacks().init(OUTPUT_SLOT + 3, false, 53 + 22 * 3, 16); + recipeLayout.getItemStacks().init(INPUT_SLOT, true, 0, 5); + recipeLayout.getItemStacks().init(CATALYST_SLOT, true, 21, 16); + + guiItemStacks.set(ingredients); + } + + @Override + public Class getRecipeClass() + { + return RecipeARC.class; + } + + @Override + public void setIngredients(RecipeARC recipe, IIngredients ingredients) + { + ingredients.setInputIngredients(recipe.getIngredients()); + ingredients.setOutputs(VanillaTypes.ITEM, recipe.getAllListedOutputs()); + } + + @Override + public void draw(RecipeARC recipe, MatrixStack matrixStack, double mouseX, double mouseY) + { + Minecraft mc = Minecraft.getInstance(); + double[] chanceArray = recipe.getAllOutputChances(); + + String[] infoString = new String[chanceArray.length]; + for (int i = 0; i < infoString.length; i++) + { + if (chanceArray[i] >= 1) + { + infoString[i] = ""; + } else if (chanceArray[i] < 0.01) + { + infoString[i] = "<1%"; + } else + { + infoString[i] = "" + (int) (chanceArray[i] * 100) + "%"; + } + + mc.fontRenderer.drawStringWithShadow(matrixStack, infoString[i], 86 + 22 * i + - mc.fontRenderer.getStringWidth(infoString[i]) / 2, 5, Color.white.getRGB()); + } + +// if (recipe.getFluidOutput() != null && !recipe.getFluidOutput().isEmpty()) + { + FluidStack outputStack = recipe.getFluidOutput(); + ClientHandler.handleGuiTank(matrixStack, outputStack, outputStack.getAmount(), 140, 7, 16, 36, 157, 6, 18, 38, (int) mouseX, (int) mouseY, BACKGROUNDRL.toString(), null); + } + + if (recipe.getFluidIngredient() != null) + { + List inputFluids = recipe.getFluidIngredient().getRepresentations(); + FluidStack inputStack = inputFluids.get(0); + ClientHandler.handleGuiTank(matrixStack, inputStack, inputStack.getAmount(), 1, 26, 16, 16, 175, 26, 18, 18, (int) mouseX, (int) mouseY, BACKGROUNDRL.toString(), null); + } + +// { TextHelper.localize("jei.bloodmagic.recipe.requiredtier", NumeralHelper.toRoman(recipe.getMinimumTier().toInt())), +// TextHelper.localize("jei.bloodmagic.recipe.requiredlp", recipe.getSyphon()) }; +// mc.fontRenderer.drawString(matrixStack, infoString[0], 90 +// - mc.fontRenderer.getStringWidth(infoString[0]) / 2, 0, Color.gray.getRGB()); +// mc.fontRenderer.drawString(matrixStack, infoString[1], 90 +// - mc.fontRenderer.getStringWidth(infoString[1]) / 2, 10, Color.gray.getRGB()); + } + + @Override + public List getTooltipStrings(RecipeARC recipe, double mouseX, double mouseY) + { + List tooltip = new ArrayList<>(); + FluidStack outputStack = recipe.getFluidOutput(); + if (!outputStack.isEmpty()) + { + ClientHandler.handleGuiTank(null, outputStack, -1, 140, 8, 16, 34, 157, 7, 18, 36, (int) mouseX, (int) mouseY, BACKGROUNDRL.toString(), tooltip); + } + + if (recipe.getFluidIngredient() != null) + { + List inputFluids = recipe.getFluidIngredient().getRepresentations(); + FluidStack inputStack = inputFluids.get(0); + ClientHandler.handleGuiTank(null, inputStack, -1, 1, 26, 16, 16, 175, 26, 18, 18, (int) mouseX, (int) mouseY, BACKGROUNDRL.toString(), tooltip); + } + + return tooltip; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/compat/jei/array/AlchemyArrayCraftingCategory.java b/src/main/java/wayoftime/bloodmagic/compat/jei/array/AlchemyArrayCraftingCategory.java new file mode 100644 index 00000000..45d9d511 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/jei/array/AlchemyArrayCraftingCategory.java @@ -0,0 +1,101 @@ +package wayoftime.bloodmagic.compat.jei.array; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.ingredient.IGuiItemStackGroup; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.recipe.RecipeAlchemyArray; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.helper.TextHelper; + +public class AlchemyArrayCraftingCategory implements IRecipeCategory +{ + private static final int OUTPUT_SLOT = 0; + private static final int INPUT_SLOT = 1; + private static final int CATALYST_SLOT = 2; + public static final ResourceLocation UID = BloodMagic.rl(Constants.Compat.JEI_CATEGORY_ALCHEMYARRAY); + + @Nonnull + private final IDrawable background; + private final IDrawable icon; +// @Nonnull +// private final ICraftingGridHelper craftingGridHelper; + + public AlchemyArrayCraftingCategory(IGuiHelper guiHelper) + { + icon = guiHelper.createDrawableIngredient(new ItemStack(BloodMagicItems.ARCANE_ASHES.get())); + background = guiHelper.createDrawable(BloodMagic.rl("gui/jei/binding.png"), 0, 0, 100, 30); +// craftingGridHelper = guiHelper.createCraftingGridHelper(INPUT_SLOT); + } + + @Nonnull + @Override + public ResourceLocation getUid() + { + return UID; + } + + @Nonnull + @Override + public String getTitle() + { + return TextHelper.localize("jei.bloodmagic.recipe.alchemyarraycrafting"); + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return background; + } + + @Nullable + @Override + public IDrawable getIcon() + { + return icon; + } + + @Override + public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull RecipeAlchemyArray recipe, @Nonnull IIngredients ingredients) + { + IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks(); + + recipeLayout.getItemStacks().init(OUTPUT_SLOT, false, 73, 5); + recipeLayout.getItemStacks().init(INPUT_SLOT, true, 0, 5); + recipeLayout.getItemStacks().init(CATALYST_SLOT, true, 29, 3); + + guiItemStacks.set(ingredients); + } + + @Override + public Class getRecipeClass() + { + return RecipeAlchemyArray.class; + } + + @Override + public void setIngredients(RecipeAlchemyArray recipe, IIngredients ingredients) + { + ingredients.setInputIngredients(recipe.getIngredients()); + if (recipe.getOutput().isEmpty()) + { + ingredients.setOutput(VanillaTypes.ITEM, new ItemStack(BloodMagicItems.ARCANE_ASHES.get())); +// ingredients.setOutput(VanillaTypes.ITEM, new ItemStack(BloodMagicBlocks.ALCHEMY_ARRAY.get())); + } else + { + ingredients.setOutput(VanillaTypes.ITEM, recipe.getOutput()); + } + + } +} diff --git a/src/main/java/wayoftime/bloodmagic/compat/jei/forge/TartaricForgeRecipeCategory.java b/src/main/java/wayoftime/bloodmagic/compat/jei/forge/TartaricForgeRecipeCategory.java new file mode 100644 index 00000000..27061b92 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/jei/forge/TartaricForgeRecipeCategory.java @@ -0,0 +1,172 @@ +package wayoftime.bloodmagic.compat.jei.forge; + +import java.util.List; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import com.google.common.collect.Lists; + +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.ingredient.IGuiItemStackGroup; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.recipe.RecipeTartaricForge; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.util.ChatUtil; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.helper.TextHelper; + +public class TartaricForgeRecipeCategory implements IRecipeCategory +{ + private static final int OUTPUT_SLOT = 0; + private static final int GEM_SLOT = 1; + private static final int INPUT_SLOT = 2; + public static final ResourceLocation UID = BloodMagic.rl(Constants.Compat.JEI_CATEGORY_SOULFORGE); + + @Nonnull + private final IDrawable background; + private final IDrawable icon; +// @Nonnull +// private final ICraftingGridHelper craftingGridHelper; + + public TartaricForgeRecipeCategory(IGuiHelper guiHelper) + { + icon = guiHelper.createDrawableIngredient(new ItemStack(BloodMagicBlocks.SOUL_FORGE.get())); + background = guiHelper.createDrawable(BloodMagic.rl("gui/jei/soulforge.png"), 0, 0, 100, 40); +// craftingGridHelper = guiHelper.createCraftingGridHelper(INPUT_SLOT); + } + + @Nonnull + @Override + public ResourceLocation getUid() + { + return UID; + } + + @Override + public List getTooltipStrings(RecipeTartaricForge recipe, double mouseX, double mouseY) + { + List tooltip = Lists.newArrayList(); + if (mouseX >= 40 && mouseX <= 60 && mouseY >= 21 && mouseY <= 34) + { + tooltip.add(new TranslationTextComponent("jei.bloodmagic.recipe.minimumsouls", ChatUtil.DECIMAL_FORMAT.format(recipe.getMinimumSouls()))); + tooltip.add(new TranslationTextComponent("jei.bloodmagic.recipe.soulsdrained", ChatUtil.DECIMAL_FORMAT.format(recipe.getSoulDrain()))); + } + return tooltip; + } + + @Nonnull + @Override + public String getTitle() + { + return TextHelper.localize("jei.bloodmagic.recipe.soulforge"); + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return background; + } + + @Nullable + @Override + public IDrawable getIcon() + { + return icon; + } + + @Override + public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull RecipeTartaricForge recipe, @Nonnull IIngredients ingredients) + { + List validGems = Lists.newArrayList(); + for (DefaultWill will : DefaultWill.values()) + { + if (will.minSouls >= recipe.getMinimumSouls()) + { + validGems.add(will.willStack); + } + } + + IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks(); + + guiItemStacks.init(OUTPUT_SLOT, false, 73, 13); + + guiItemStacks.init(GEM_SLOT, true, 42, 0); + + for (int y = 0; y < 2; ++y) + { + for (int x = 0; x < 2; ++x) + { + int index = INPUT_SLOT + x + (y * 2); + guiItemStacks.init(index, true, x * 18, y * 18); + } + } + + guiItemStacks.set(GEM_SLOT, validGems); + guiItemStacks.set(OUTPUT_SLOT, ingredients.getOutputs(VanillaTypes.ITEM).get(0)); + guiItemStacks.set(ingredients); + } + + @Override + public Class getRecipeClass() + { + return RecipeTartaricForge.class; + } + + @Override + public void setIngredients(RecipeTartaricForge recipe, IIngredients ingredients) + { + List validGems = Lists.newArrayList(); + for (DefaultWill will : DefaultWill.values()) + { + if (will.minSouls >= recipe.getMinimumSouls()) + { + validGems.add(will.willStack); + } + } + + ItemStack[] validGemStacks = new ItemStack[validGems.size()]; + for (int i = 0; i < validGemStacks.length; i++) + { + validGemStacks[i] = validGems.get(i); + } + + List ingList = Lists.newArrayList(); + ingList.add(Ingredient.fromStacks(validGemStacks)); + ingList.addAll(recipe.getInput()); + + ingredients.setInputIngredients(ingList); + ingredients.setOutput(VanillaTypes.ITEM, recipe.getOutput()); + } + + public enum DefaultWill + { + SOUL(new ItemStack(BloodMagicItems.MONSTER_SOUL_RAW.get()), 16), + PETTY(new ItemStack(BloodMagicItems.PETTY_GEM.get()), 64), + LESSER(new ItemStack(BloodMagicItems.LESSER_GEM.get()), 256), + COMMON(new ItemStack(BloodMagicItems.COMMON_GEM.get()), 1024), + GREATER(new ItemStack(BloodMagicItems.GREATER_GEM.get()), 4096); +// GRAND(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 4), 16384); + + public final ItemStack willStack; + public final double minSouls; + + DefaultWill(ItemStack willStack, double minSouls) + { + this.willStack = willStack; + this.minSouls = minSouls; + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/ARCProcessor.java b/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/ARCProcessor.java new file mode 100644 index 00000000..1cd3fa4d --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/ARCProcessor.java @@ -0,0 +1,109 @@ +package wayoftime.bloodmagic.compat.patchouli.processors; + +import java.util.Arrays; +import java.util.Optional; +import java.util.stream.Collectors; + +import org.apache.logging.log4j.LogManager; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidStack; +import vazkii.patchouli.api.IComponentProcessor; +import vazkii.patchouli.api.IVariable; +import vazkii.patchouli.api.IVariableProvider; +import wayoftime.bloodmagic.common.recipe.BloodMagicRecipeType; +import wayoftime.bloodmagic.recipe.RecipeARC; + +public class ARCProcessor implements IComponentProcessor +{ + private RecipeARC recipe; + + @Override + public void setup(IVariableProvider variables) + { + ResourceLocation id = new ResourceLocation(variables.get("recipe").asString()); + Optional> recipeHandler = Minecraft.getInstance().world.getRecipeManager().getRecipe(id); + if (recipeHandler.isPresent()) + { + IRecipe recipe = recipeHandler.get(); + if (recipe.getType().equals(BloodMagicRecipeType.ARC)) + { + this.recipe = (RecipeARC) recipe; + } + } + if (this.recipe == null) + { + LogManager.getLogger().warn("Guidebook missing Alchemical Reaction Chamber recipe {}", id); + } + } + + @Override + public IVariable process(String key) + { + if (recipe == null) + { + return null; + } else if (key.startsWith("output")) + { + int index = Integer.parseInt(key.substring(6)) - 1; + if (recipe.getAllListedOutputs().size() > index) + { + return IVariable.from(recipe.getAllListedOutputs().get(index)); + } else + { + return null; + } + } else if (key.startsWith("chance")) + { + int index = Integer.parseInt(key.substring(6)) - 2; // Index 0 = 2nd output. + if (recipe.getAllOutputChances().length > index) + { + double chance = recipe.getAllOutputChances()[index] * 100; + if (chance < 1) + { + return IVariable.wrap("<1"); + } + return IVariable.wrap(Math.round(chance)); + } + } else if (key.startsWith("show_chance")) + { + int index = Integer.parseInt(key.substring(11)) - 2; // Index 0 = 2nd output. + if (recipe.getAllOutputChances().length > index) + { + return IVariable.wrap(true); + } + } + switch (key) + { + case "show_fluid_tooltip": + if (recipe.getFluidIngredient() != null || recipe.getFluidOutput() != FluidStack.EMPTY) + { + return IVariable.wrap(true); + } + return IVariable.wrap(false); + case "input": + return IVariable.wrapList(Arrays.stream(recipe.getInput().getMatchingStacks()).map(IVariable::from).collect(Collectors.toList())); + case "tool": + return IVariable.wrapList(Arrays.stream(recipe.getTool().getMatchingStacks()).map(IVariable::from).collect(Collectors.toList())); + case "tooltip_fluid_input": + if (recipe.getFluidIngredient() != null) + { + FluidStack fluid = recipe.getFluidIngredient().getRepresentations().get(0); + return IVariable.wrap(fluid.getAmount() + "mb of " + fluid.getTranslationKey()); + } + return IVariable.wrap("None"); + case "tooltip_fluid_output": + if (recipe.getFluidOutput() != FluidStack.EMPTY) + { + FluidStack fluid = recipe.getFluidOutput(); + return IVariable.wrap(fluid.getAmount() + "mb of " + fluid.getTranslationKey()); + } + return IVariable.wrap("None"); + default: + return null; + } + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/AlchemyArrayProcessor.java b/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/AlchemyArrayProcessor.java new file mode 100644 index 00000000..5abc768b --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/AlchemyArrayProcessor.java @@ -0,0 +1,61 @@ +package wayoftime.bloodmagic.compat.patchouli.processors; + +import java.util.Arrays; +import java.util.Optional; +import java.util.stream.Collectors; + +import org.apache.logging.log4j.LogManager; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.ResourceLocation; +import vazkii.patchouli.api.IComponentProcessor; +import vazkii.patchouli.api.IVariable; +import vazkii.patchouli.api.IVariableProvider; +import wayoftime.bloodmagic.common.recipe.BloodMagicRecipeType; +import wayoftime.bloodmagic.recipe.RecipeAlchemyArray; + +public class AlchemyArrayProcessor implements IComponentProcessor +{ + private RecipeAlchemyArray recipe; + + @Override + public void setup(IVariableProvider variables) + { + ResourceLocation id = new ResourceLocation(variables.get("recipe").asString()); + Optional> recipeHandler = Minecraft.getInstance().world.getRecipeManager().getRecipe(id); + if (recipeHandler.isPresent()) + { + IRecipe recipe = Minecraft.getInstance().world.getRecipeManager().getRecipe(id).get(); + if (recipe.getType().equals(BloodMagicRecipeType.ARRAY)) + { + this.recipe = (RecipeAlchemyArray) recipe; + } + } + if (this.recipe == null) + { + LogManager.getLogger().warn("Guidebook missing Alchemy Array recipe {}", id); + } + } + + @Override + public IVariable process(String key) + { + if (recipe == null) + { + return null; + } + switch (key) + { + case "baseinput": + return IVariable.wrapList(Arrays.stream(recipe.getBaseInput().getMatchingStacks()).map(IVariable::from).collect(Collectors.toList())); + case "addedinput": + return IVariable.wrapList(Arrays.stream(recipe.getAddedInput().getMatchingStacks()).map(IVariable::from).collect(Collectors.toList())); + case "output": + return IVariable.from(recipe.getOutput()); + default: + return null; + } + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/AlchemyTableProcessor.java b/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/AlchemyTableProcessor.java new file mode 100644 index 00000000..a62f02b5 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/AlchemyTableProcessor.java @@ -0,0 +1,94 @@ +package wayoftime.bloodmagic.compat.patchouli.processors; + +import java.util.Arrays; +import java.util.Optional; +import java.util.stream.Collectors; + +import org.apache.logging.log4j.LogManager; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.ResourceLocation; +import vazkii.patchouli.api.IComponentProcessor; +import vazkii.patchouli.api.IVariable; +import vazkii.patchouli.api.IVariableProvider; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.recipe.BloodMagicRecipeType; +import wayoftime.bloodmagic.recipe.RecipeAlchemyTable; + +public class AlchemyTableProcessor implements IComponentProcessor +{ + private RecipeAlchemyTable recipe; + + @Override + public void setup(IVariableProvider variables) + { + ResourceLocation id = new ResourceLocation(variables.get("recipe").asString()); + Optional> recipeHandler = Minecraft.getInstance().world.getRecipeManager().getRecipe(id); + if (recipeHandler.isPresent()) + { + IRecipe recipe = recipeHandler.get(); + if (recipe.getType().equals(BloodMagicRecipeType.ALCHEMYTABLE)) + { + this.recipe = (RecipeAlchemyTable) recipe; + } + } + if (this.recipe == null) + { + LogManager.getLogger().warn("Guidebook missing Alchemy Table recipe {}", id); + } + } + + @Override + public IVariable process(String key) + { + if (recipe == null) + { + return null; + } else if (key.startsWith("input")) + { + int index = Integer.parseInt(key.substring(5)) - 1; + if (recipe.getInput().size() > index) + { + return IVariable.wrapList(Arrays.stream(recipe.getInput().get(index).getMatchingStacks()).map(IVariable::from).collect(Collectors.toList())); + } else + { + return null; + } + } + switch (key) + { + case "output": + return IVariable.from(recipe.getOutput()); + case "syphon": + return IVariable.wrap(recipe.getSyphon()); + case "time": + return IVariable.wrap(recipe.getTicks()); + case "orb": + switch (recipe.getMinimumTier()) + { + case 0: // same as Case 1 + case 1: + return IVariable.from(new ItemStack(BloodMagicItems.WEAK_BLOOD_ORB.get())); + case 2: + return IVariable.from(new ItemStack(BloodMagicItems.APPRENTICE_BLOOD_ORB.get())); + case 3: + return IVariable.from(new ItemStack(BloodMagicItems.MAGICIAN_BLOOD_ORB.get())); + case 4: + return IVariable.from(new ItemStack(BloodMagicItems.MASTER_BLOOD_ORB.get())); + // case 5: return IVariable.from(new + // ItemStack(BloodMagicItems.ARCHMAGES_BLOOD_ORB.get())); + // case 6: return IVariable.from(new + // ItemStack(BloodMagicItems.TRANSCENDENT_BLOOD_ORB.get())); + default: + LogManager.getLogger().warn("Guidebook unable to find large enough Blood Orb for {}", recipe.getId()); + return IVariable.from(new ItemStack(Items.BARRIER)); + } + default: + return null; + } + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/BloodAltarProcessor.java b/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/BloodAltarProcessor.java new file mode 100644 index 00000000..81476136 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/BloodAltarProcessor.java @@ -0,0 +1,63 @@ +package wayoftime.bloodmagic.compat.patchouli.processors; + +import java.util.Arrays; +import java.util.Optional; +import java.util.stream.Collectors; + +import org.apache.logging.log4j.LogManager; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.ResourceLocation; +import vazkii.patchouli.api.IComponentProcessor; +import vazkii.patchouli.api.IVariable; +import vazkii.patchouli.api.IVariableProvider; +import wayoftime.bloodmagic.common.recipe.BloodMagicRecipeType; +import wayoftime.bloodmagic.recipe.RecipeBloodAltar; + +public class BloodAltarProcessor implements IComponentProcessor +{ + private RecipeBloodAltar recipe; + + @Override + public void setup(IVariableProvider variables) + { + ResourceLocation id = new ResourceLocation(variables.get("recipe").asString()); + Optional> recipeHandler = Minecraft.getInstance().world.getRecipeManager().getRecipe(id); + if (recipeHandler.isPresent()) + { + IRecipe recipe = recipeHandler.get(); + if (recipe.getType().equals(BloodMagicRecipeType.ALTAR)) + { + this.recipe = (RecipeBloodAltar) recipe; + } + } + if (this.recipe == null) + { + LogManager.getLogger().warn("Guidebook missing Blood Altar recipe {}", id); + } + } + + @Override + public IVariable process(String key) + { + if (recipe == null) + { + return null; + } + switch (key) + { + case "input": + return IVariable.wrapList(Arrays.stream(recipe.getInput().getMatchingStacks()).map(IVariable::from).collect(Collectors.toList())); + case "output": + return IVariable.from(recipe.getOutput()); + case "tier": + return IVariable.wrap(recipe.getMinimumTier() + 1); + case "lp": + return IVariable.wrap(recipe.getSyphon()); + default: + return null; + } + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/TartaricForgeProcessor.java b/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/TartaricForgeProcessor.java new file mode 100644 index 00000000..6815812f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/TartaricForgeProcessor.java @@ -0,0 +1,100 @@ +package wayoftime.bloodmagic.compat.patchouli.processors; + +import java.util.Arrays; +import java.util.Optional; +import java.util.stream.Collectors; + +import org.apache.logging.log4j.LogManager; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.ResourceLocation; +import vazkii.patchouli.api.IComponentProcessor; +import vazkii.patchouli.api.IVariable; +import vazkii.patchouli.api.IVariableProvider; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.recipe.BloodMagicRecipeType; +import wayoftime.bloodmagic.recipe.RecipeTartaricForge; + +public class TartaricForgeProcessor implements IComponentProcessor +{ + private RecipeTartaricForge recipe; + + @Override + public void setup(IVariableProvider variables) + { + ResourceLocation id = new ResourceLocation(variables.get("recipe").asString()); + Optional> recipeHandler = Minecraft.getInstance().world.getRecipeManager().getRecipe(id); + if (recipeHandler.isPresent()) + { + IRecipe recipe = recipeHandler.get(); + if (recipe.getType().equals(BloodMagicRecipeType.TARTARICFORGE)) + { + this.recipe = (RecipeTartaricForge) recipe; + } + } + if (this.recipe == null) + { + LogManager.getLogger().warn("Guidebook missing Hellfire Forge recipe {}", id); + } + } + + @Override + public IVariable process(String key) + { + if (recipe == null) + { + return null; + } + if (key.startsWith("input")) + { + int index = Integer.parseInt(key.substring(5)) - 1; + if (recipe.getInput().size() > index) + { + return IVariable.wrapList(Arrays.stream(recipe.getInput().get(index).getMatchingStacks()).map(IVariable::from).collect(Collectors.toList())); + } else + { + return null; + } + } + switch (key) + { + case "output": + return IVariable.from(recipe.getOutput()); + case "willrequired": + return IVariable.wrap(recipe.getMinimumSouls()); + case "willdrain": + return IVariable.wrap(recipe.getSoulDrain()); + case "will": + if (recipe.getMinimumSouls() <= 1) + { + return IVariable.from(new ItemStack(BloodMagicItems.MONSTER_SOUL_RAW.get())); + } else if (recipe.getMinimumSouls() <= 64) + { + return IVariable.from(new ItemStack(BloodMagicItems.PETTY_GEM.get())); + } else if (recipe.getMinimumSouls() <= 256) + { + return IVariable.from(new ItemStack(BloodMagicItems.LESSER_GEM.get())); + } else if (recipe.getMinimumSouls() <= 1024) + { + return IVariable.from(new ItemStack(BloodMagicItems.COMMON_GEM.get())); + } else if (recipe.getMinimumSouls() <= 4096) + { + return IVariable.from(new ItemStack(BloodMagicItems.GREATER_GEM.get())); + // } else if (recipe.getMinimumSouls() <= 16384) { + // return IVariable.from(new ItemStack(BloodMagicItems.GRAND_GEM.get())); + // } + } else + { + LogManager.getLogger().warn("Guidebook could not find a large enough Tartaric Gem for {}", recipe.getId()); + return IVariable.from(new ItemStack(Items.BARRIER)); + + } + default: + return null; + } + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/core/AnointmentRegistrar.java b/src/main/java/wayoftime/bloodmagic/core/AnointmentRegistrar.java new file mode 100644 index 00000000..4ae45c7f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/core/AnointmentRegistrar.java @@ -0,0 +1,136 @@ +package wayoftime.bloodmagic.core; + +import java.net.URL; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Supplier; + +import com.google.common.base.Charsets; +import com.google.common.io.Resources; + +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.anointment.Anointment; +import wayoftime.bloodmagic.common.registration.impl.AnointmentDeferredRegister; +import wayoftime.bloodmagic.common.registration.impl.AnointmentRegistryObject; +import wayoftime.bloodmagic.gson.Serializers; + +public class AnointmentRegistrar +{ + public static final AnointmentDeferredRegister ANOINTMENTS = new AnointmentDeferredRegister(BloodMagic.MODID); + + public static final Map ANOINTMENT_MAP = new HashMap<>(); + + private static final Map DEFINITIONS = ((Supplier>) () -> { + Map def = new HashMap<>(); + def.put("melee_damage", BloodMagic.rl("melee_damage")); + def.put("holy_water", BloodMagic.rl("holy_water")); + def.put("hidden_knowledge", BloodMagic.rl("hidden_knowledge")); + def.put("quick_draw", BloodMagic.rl("quick_draw")); + def.put("bow_power", BloodMagic.rl("bow_power")); +// def.put("arrow_shot", BloodMagic.rl("arrow_shot")); +// def.put("critical_strike", BloodMagic.rl("critical_strike")); +// def.put("digging", BloodMagic.rl("digging")); +// def.put("experienced", BloodMagic.rl("experienced")); +// def.put("fall_protect", BloodMagic.rl("fall_protect")); +// def.put("fire_resist", BloodMagic.rl("fire_resist")); +// def.put("grave_digger", BloodMagic.rl("grave_digger")); +// def.put("health", BloodMagic.rl("health")); +// def.put("jump", BloodMagic.rl("jump")); +// def.put("knockback_resist", BloodMagic.rl("knockback_resist")); +// def.put("melee_damage", BloodMagic.rl("melee_damage")); +// def.put("physical_protect", BloodMagic.rl("physical_protect")); +// def.put("poison_resist", BloodMagic.rl("poison_resist")); +// def.put("sprint_attack", BloodMagic.rl("sprint_attack")); +// def.put("speed", BloodMagic.rl("speed")); +// def.put("self_sacrifice", BloodMagic.rl("self_sacrifice")); + return def; + }).get(); + +// public static final AnointmentRegistryObject ANOINTMENT_MELEE_DAMAGE = ANOINTMENTS.register("melee_damage", () -> parseDefinition("melee_damage").withAttributeProvider((stats, attributeMap, uuid, upgrade, level) -> { +// attributeMap.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(uuid, "Weapon modifier", upgrade.getBonusValue("damage", level).intValue(), AttributeModifier.Operation.ADDITION)); +// }).setConsumeOnAttack()); + + public static final AnointmentRegistryObject ANOINTMENT_MELEE_DAMAGE = ANOINTMENTS.register("melee_damage", () -> parseDefinition("melee_damage").withDamageProvider((player, weapon, damage, holder, attacked, anoint, level) -> { + return anoint.getBonusValue("damage", level).doubleValue(); + }).setConsumeOnAttack().addIncompatibility(BloodMagic.rl("holy_water"))); + + public static final AnointmentRegistryObject ANOINTMENT_SILK_TOUCH = ANOINTMENTS.register("silk_touch", () -> new Anointment(BloodMagic.rl("silk_touch")).setConsumeOnHarvest().addIncompatibility(BloodMagic.rl("fortune"))); + + public static final AnointmentRegistryObject ANOINTMENT_FORTUNE = ANOINTMENTS.register("fortune", () -> new Anointment(BloodMagic.rl("fortune")).setConsumeOnHarvest().addIncompatibility(BloodMagic.rl("silk_touch"))); + + public static final AnointmentRegistryObject ANOINTMENT_HOLY_WATER = ANOINTMENTS.register("holy_water", () -> parseDefinition("holy_water").withDamageProvider((player, weapon, damage, holder, attacked, anoint, level) -> { + if (attacked.isEntityUndead()) + return anoint.getBonusValue("damage", level).doubleValue(); + else + return 0; + }).setConsumeOnAttack().addIncompatibility(BloodMagic.rl("melee_damage"))); + + public static final AnointmentRegistryObject ANOINTMENT_HIDDEN_KNOWLEDGE = ANOINTMENTS.register("hidden_knowledge", () -> parseDefinition("hidden_knowledge").setConsumeOnHarvest()); + + public static final AnointmentRegistryObject ANOINTMENT_QUICK_DRAW = ANOINTMENTS.register("quick_draw", () -> parseDefinition("quick_draw").setConsumeOnUseFinish()); + + public static final AnointmentRegistryObject ANOINTMENT_LOOTING = ANOINTMENTS.register("looting", () -> new Anointment(BloodMagic.rl("looting")).setConsumeOnAttack()); + + public static final AnointmentRegistryObject ANOINTMENT_BOW_POWER = ANOINTMENTS.register("bow_power", () -> parseDefinition("bow_power").setConsumeOnUseFinish()); + + public static final AnointmentRegistryObject ANOINTMENT_WILL_POWER = ANOINTMENTS.register("will_power", () -> new Anointment(BloodMagic.rl("will_power")).setConsumeOnAttack()); + + public static final AnointmentRegistryObject ANOINTMENT_SMELTING = ANOINTMENTS.register("smelting", () -> new Anointment(BloodMagic.rl("smelting")).setConsumeOnHarvest()); + + public static void register() + { + registerAnointment(ANOINTMENT_MELEE_DAMAGE.get()); + registerAnointment(ANOINTMENT_SILK_TOUCH.get()); + registerAnointment(ANOINTMENT_FORTUNE.get()); + registerAnointment(ANOINTMENT_HOLY_WATER.get()); + registerAnointment(ANOINTMENT_HIDDEN_KNOWLEDGE.get()); + registerAnointment(ANOINTMENT_QUICK_DRAW.get()); + registerAnointment(ANOINTMENT_LOOTING.get()); + registerAnointment(ANOINTMENT_BOW_POWER.get()); + registerAnointment(ANOINTMENT_WILL_POWER.get()); + registerAnointment(ANOINTMENT_SMELTING.get()); + +// Registry.register(UPGRADES, UPGRADE_ARROW_PROTECT.getKey(), UPGRADE_ARROW_PROTECT); +// Registry.register(UPGRADES, UPGRADE_ARROW_SHOT.getKey(), UPGRADE_ARROW_SHOT); +// Registry.register(UPGRADES, UPGRADE_CRITICAL_STRIKE.getKey(), UPGRADE_CRITICAL_STRIKE); +// Registry.register(UPGRADES, UPGRADE_JUMP.getKey(), UPGRADE_JUMP); + +// Registry.register(Registry.ITEM, new ResourceLocation("livingarmor", "living_helmet"), LIVING_HELMET); +// Registry.register(Registry.ITEM, new Identifier("livingarmor", "living_chestplate"), LIVING_CHESTPLATE); +// Registry.register(Registry.ITEM, new Identifier("livingarmor", "living_leggings"), LIVING_LEGGINGS); +// Registry.register(Registry.ITEM, new Identifier("livingarmor", "living_boots"), LIVING_BOOTS); +// Registry.register(Registry.ITEM, new Identifier("livingarmor", "trainer"), TRAINER); +// Registry.register(Registry.ITEM, new Identifier("livingarmor", "tome"), TOME); + } + + public static void registerAnointment(Anointment anoint) + { + ANOINTMENT_MAP.put(anoint.getKey(), anoint); + } + + public static Anointment parseDefinition(String fileName) + { +// System.out.println("Attempting to parse Anointment: " + fileName); + ResourceLocation path = DEFINITIONS.get(fileName); + if (path == null) + return Anointment.DUMMY; + + try + { + URL schematicURL = Anointment.class.getResource(resLocToResourcePath(path)); + System.out.println("Attempting to load Anointment: " + schematicURL + ", path: " + resLocToResourcePath(path)); + return Serializers.GSON.fromJson(Resources.toString(schematicURL, Charsets.UTF_8), Anointment.class); +// return GSON.fromJson(IOUtils.toString(path.toUri(), StandardCharsets.UTF_8), LivingUpgrade.class); + } catch (Exception e) + { + e.printStackTrace(); + return Anointment.DUMMY; + } + } + + public static String resLocToResourcePath(ResourceLocation resourceLocation) + { + return "/data/" + resourceLocation.getNamespace() + "/anointment/" + resourceLocation.getPath() + ".json"; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/core/LivingArmorRegistrar.java b/src/main/java/wayoftime/bloodmagic/core/LivingArmorRegistrar.java new file mode 100644 index 00000000..80bd8035 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/core/LivingArmorRegistrar.java @@ -0,0 +1,221 @@ +package wayoftime.bloodmagic.core; + +import java.net.URL; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Supplier; + +import com.google.common.base.Charsets; +import com.google.common.io.Resources; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.ai.attributes.Attributes; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.registration.impl.LivingUpgradeDeferredRegister; +import wayoftime.bloodmagic.common.registration.impl.LivingUpgradeRegistryObject; +import wayoftime.bloodmagic.core.living.LivingUpgrade; +import wayoftime.bloodmagic.gson.Serializers; + +public class LivingArmorRegistrar +{ + + public static final LivingUpgradeDeferredRegister UPGRADES = new LivingUpgradeDeferredRegister(BloodMagic.MODID); + + public static final Map UPGRADE_MAP = new HashMap<>(); + +// public static final DefaultedRegistry UPGRADES = (DefaultedRegistry) createRegistry("livingarmor:upgrades", LivingUpgrade.DUMMY.getKey().toString(), () -> LivingUpgrade.DUMMY); +// private static final Map DEFINITIONS = ((Supplier>) () -> { +// Map def = new HashMap<>(); +// def.put("arrow_protect", Paths.get(MinecraftForge.getInstance().getConfigDirectory().getAbsolutePath(), "livingarmor", "arrow_protect.json")); +// def.put("arrow_shot", Paths.get(FabricLoader.getInstance().getConfigDirectory().getAbsolutePath(), "livingarmor", "arrow_shot.json")); +// def.put("critical_strike", Paths.get(FabricLoader.getInstance().getConfigDirectory().getAbsolutePath(), "livingarmor", "critical_strike.json")); +// def.put("jump", Paths.get(FabricLoader.getInstance().getConfigDirectory().getAbsolutePath(), "livingarmor", "jump.json")); +// return def; +// }).get(); + private static final Map DEFINITIONS = ((Supplier>) () -> { + Map def = new HashMap<>(); + def.put("arrow_protect", BloodMagic.rl("arrow_protect")); + def.put("arrow_shot", BloodMagic.rl("arrow_shot")); + def.put("critical_strike", BloodMagic.rl("critical_strike")); + def.put("digging", BloodMagic.rl("digging")); + def.put("experienced", BloodMagic.rl("experienced")); + def.put("fall_protect", BloodMagic.rl("fall_protect")); + def.put("fire_resist", BloodMagic.rl("fire_resist")); + def.put("grave_digger", BloodMagic.rl("grave_digger")); + def.put("health", BloodMagic.rl("health")); + def.put("jump", BloodMagic.rl("jump")); + def.put("knockback_resist", BloodMagic.rl("knockback_resist")); + def.put("melee_damage", BloodMagic.rl("melee_damage")); + def.put("physical_protect", BloodMagic.rl("physical_protect")); + def.put("poison_resist", BloodMagic.rl("poison_resist")); + def.put("sprint_attack", BloodMagic.rl("sprint_attack")); + def.put("speed", BloodMagic.rl("speed")); + def.put("self_sacrifice", BloodMagic.rl("self_sacrifice")); + return def; + }).get(); + // private static final Map DEFINITIONS = + // ResourceUtil.gatherResources("/data", "living_armor", p -> + // FilenameUtils.getExtension(p.toFile().getName()).equals("json")) +// .stream() +// .collect(Collectors.toMap(key -> FilenameUtils.getBaseName(key.toFile().getName()), value -> value)); + private static final Gson GSON = new GsonBuilder().serializeNulls().create(); + +// public static final ItemLivingArmor LIVING_HELMET = new ItemLivingArmor(EquipmentSlotType.HEAD); +// public static final ItemLivingArmor LIVING_CHESTPLATE = new ItemLivingArmor(EquipmentSlotType.CHEST); +// public static final ItemLivingArmor LIVING_LEGGINGS = new ItemLivingArmor(EquipmentSlotType.LEGS); +// public static final ItemLivingArmor LIVING_BOOTS = new ItemLivingArmor(EquipmentSlotType.FEET); +// public static final ItemLivingTrainer TRAINER = new ItemLivingTrainer(); +// public static final ItemLivingTome TOME = new ItemLivingTome(); + + public static final LivingUpgradeRegistryObject UPGRADE_ARROW_PROTECT = UPGRADES.register("arrow_protect", () -> parseDefinition("arrow_protect").withArmorProvider((player, stats, source, upgrade, level) -> { + if (source.isProjectile()) + { + return upgrade.getBonusValue("protection", level).doubleValue(); + } + return 0; + })); + public static final LivingUpgradeRegistryObject UPGRADE_FALL_PROTECT = UPGRADES.register("fall_protect", () -> parseDefinition("fall_protect").withArmorProvider((player, stats, source, upgrade, level) -> { + if (source == DamageSource.FALL) + { + return upgrade.getBonusValue("protection", level).doubleValue(); + } + return 0; + })); + public static final LivingUpgradeRegistryObject UPGRADE_PHYSICAL_PROTECT = UPGRADES.register("physical_protect", () -> parseDefinition("physical_protect").withArmorProvider((player, stats, source, upgrade, level) -> { + if (!source.isProjectile()) + { + return upgrade.getBonusValue("protection", level).doubleValue(); + } + return 0; + })); + public static final LivingUpgradeRegistryObject UPGRADE_JUMP = UPGRADES.register("jump", () -> parseDefinition("jump")); + + public static final LivingUpgradeRegistryObject UPGRADE_HEALTH = UPGRADES.register("health", () -> parseDefinition("health").withAttributeProvider((stats, attributeMap, uuid, upgrade, level) -> { + attributeMap.put(Attributes.MAX_HEALTH, new AttributeModifier(uuid, "Health Modifier", upgrade.getBonusValue("hp", level).intValue(), AttributeModifier.Operation.ADDITION)); + })); + + public static final LivingUpgradeRegistryObject UPGRADE_EXPERIENCE = UPGRADES.register("experienced", () -> parseDefinition("experienced")); + public static final LivingUpgradeRegistryObject UPGRADE_SPRINT_ATTACK = UPGRADES.register("sprint_attack", () -> parseDefinition("sprint_attack").withDamageProvider((player, weapon, damage, stats, attackedEntity, upgrade, level) -> { + if (player.isSprinting()) + { + return damage * upgrade.getBonusValue("damage_boost", level).doubleValue(); + } + return 0; + })); + public static final LivingUpgradeRegistryObject UPGRADE_SELF_SACRIFICE = UPGRADES.register("self_sacrifice", () -> parseDefinition("self_sacrifice")); + public static final LivingUpgradeRegistryObject UPGRADE_SPEED = UPGRADES.register("speed", () -> parseDefinition("speed").withAttributeProvider((stats, attributeMap, uuid, upgrade, level) -> { + attributeMap.put(Attributes.MOVEMENT_SPEED, new AttributeModifier(uuid, "Movement Modifier 2", upgrade.getBonusValue("speed_modifier", level).doubleValue(), AttributeModifier.Operation.MULTIPLY_BASE)); + })); + public static final LivingUpgradeRegistryObject UPGRADE_POISON_RESIST = UPGRADES.register("poison_resist", () -> parseDefinition("poison_resist")); + public static final LivingUpgradeRegistryObject UPGRADE_FIRE_RESIST = UPGRADES.register("fire_resist", () -> parseDefinition("fire_resist")); + public static final LivingUpgradeRegistryObject UPGRADE_DIGGING = UPGRADES.register("digging", () -> parseDefinition("digging")); + public static final LivingUpgradeRegistryObject UPGRADE_KNOCKBACK_RESIST = UPGRADES.register("knockback_resist", () -> parseDefinition("knockback_resist").withAttributeProvider((stats, attributeMap, uuid, upgrade, level) -> { + attributeMap.put(Attributes.KNOCKBACK_RESISTANCE, new AttributeModifier(uuid, "KB Modifier", upgrade.getBonusValue("kb", level).doubleValue(), AttributeModifier.Operation.ADDITION)); + attributeMap.put(Attributes.MAX_HEALTH, new AttributeModifier(uuid, "Health Modifier 2", upgrade.getBonusValue("hp", level).intValue(), AttributeModifier.Operation.ADDITION)); + })); +// public static final LivingUpgrade UPGRADE_ARROW_PROTECT = parseDefinition("arrow_protect").withArmorProvider((player, stats, source, upgrade, level) -> { +// if (source.isProjectile()) +// { +// return upgrade.getBonusValue("protection", level).doubleValue(); +// } +// return 0; +// }); +// public static final LivingUpgrade UPGRADE_ARROW_SHOT = parseDefinition("arrow_shot"); +// public static final LivingUpgrade UPGRADE_CRITICAL_STRIKE = parseDefinition("critical_strike").withAttributeProvider((stats, attributeMap, uuid, upgrade, level) -> { +// attributeMap.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(uuid, "Weapon modifier", upgrade.getBonusValue("damage_boost", level).doubleValue(), AttributeModifier.Operation.ADDITION)); +//// attributeMap.put(EntityAttributes.ATTACK_DAMAGE.getId(), AttributeModifiers.create(upgrade, "damage_boost", upgrade.getBonusValue("damage_boost", level).doubleValue(), EntityAttributeModifier.Operation.ADDITION)); +//// attributeMap.put(EntityAttributes.ATTACK_DAMAGE.getId(), AttributeModifiers.create(upgrade, "damage_boost", level, EntityAttributeModifier.Operation.ADDITION)); +// }); +// public static final LivingUpgrade UPGRADE_JUMP = parseDefinition("jump"); + + public static void register() + { + registerUpgrade(UPGRADE_ARROW_PROTECT.get()); + registerUpgrade(UPGRADE_HEALTH.get()); + registerUpgrade(UPGRADE_EXPERIENCE.get()); + registerUpgrade(UPGRADE_SPRINT_ATTACK.get()); + registerUpgrade(UPGRADE_SELF_SACRIFICE.get()); + registerUpgrade(UPGRADE_SPEED.get()); + registerUpgrade(UPGRADE_POISON_RESIST.get()); + registerUpgrade(UPGRADE_DIGGING.get()); + registerUpgrade(UPGRADE_FALL_PROTECT.get()); + registerUpgrade(UPGRADE_PHYSICAL_PROTECT.get()); + registerUpgrade(UPGRADE_JUMP.get()); + registerUpgrade(UPGRADE_KNOCKBACK_RESIST.get()); + registerUpgrade(UPGRADE_FIRE_RESIST.get()); +// Registry.register(UPGRADES, UPGRADE_ARROW_PROTECT.getKey(), UPGRADE_ARROW_PROTECT); +// Registry.register(UPGRADES, UPGRADE_ARROW_SHOT.getKey(), UPGRADE_ARROW_SHOT); +// Registry.register(UPGRADES, UPGRADE_CRITICAL_STRIKE.getKey(), UPGRADE_CRITICAL_STRIKE); +// Registry.register(UPGRADES, UPGRADE_JUMP.getKey(), UPGRADE_JUMP); + +// Registry.register(Registry.ITEM, new ResourceLocation("livingarmor", "living_helmet"), LIVING_HELMET); +// Registry.register(Registry.ITEM, new Identifier("livingarmor", "living_chestplate"), LIVING_CHESTPLATE); +// Registry.register(Registry.ITEM, new Identifier("livingarmor", "living_leggings"), LIVING_LEGGINGS); +// Registry.register(Registry.ITEM, new Identifier("livingarmor", "living_boots"), LIVING_BOOTS); +// Registry.register(Registry.ITEM, new Identifier("livingarmor", "trainer"), TRAINER); +// Registry.register(Registry.ITEM, new Identifier("livingarmor", "tome"), TOME); + } + + public static void registerUpgrade(LivingUpgrade upgrade) + { + UPGRADE_MAP.put(upgrade.getKey(), upgrade); + } + + public static LivingUpgrade parseDefinition(String fileName) + { + ResourceLocation path = DEFINITIONS.get(fileName); + if (path == null) + return LivingUpgrade.DUMMY; + + try + { + URL schematicURL = LivingUpgrade.class.getResource(resLocToResourcePath(path)); + System.out.println("Attempting to load Living Armour Upgrade: " + schematicURL + ", path: " + resLocToResourcePath(path)); + return Serializers.GSON.fromJson(Resources.toString(schematicURL, Charsets.UTF_8), LivingUpgrade.class); +// return GSON.fromJson(IOUtils.toString(path.toUri(), StandardCharsets.UTF_8), LivingUpgrade.class); + } catch (Exception e) + { + e.printStackTrace(); + return LivingUpgrade.DUMMY; + } +// Path path = DEFINITIONS.get(fileName); +// if (path == null) +// return LivingUpgrade.DUMMY; +// +// try +// { +// return GSON.fromJson(IOUtils.toString(path.toUri(), StandardCharsets.UTF_8), LivingUpgrade.class); +// } catch (Exception e) +// { +// e.printStackTrace(); +// return LivingUpgrade.DUMMY; +// } + } + + public static String resLocToResourcePath(ResourceLocation resourceLocation) + { + return "/data/" + resourceLocation.getNamespace() + "/living_armor/" + resourceLocation.getPath() + ".json"; + } + +// private static Registry createRegistry(String registryId, String defaultId, Supplier defaultProvider) +// { +// try +// { +// Method _createRegistry = Registry.class.getDeclaredMethod("create", String.class, String.class, Supplier.class); // FIXME +// // yarn +// // name +// _createRegistry.setAccessible(true); +// return (Registry) _createRegistry.invoke(null, registryId, defaultId, defaultProvider); +// } catch (Exception e) +// { +// e.printStackTrace(); +// MutableRegistry registry = new DefaultedRegistry(defaultId, null, null); +// registry.add(new ResourceLocation(defaultId), defaultProvider.get()); +// return registry; +// } +// } +} diff --git a/src/main/java/wayoftime/bloodmagic/core/RegistrarBloodMagic.java b/src/main/java/wayoftime/bloodmagic/core/RegistrarBloodMagic.java new file mode 100644 index 00000000..521fba53 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/core/RegistrarBloodMagic.java @@ -0,0 +1,30 @@ +package wayoftime.bloodmagic.core; + +import net.minecraftforge.fml.common.Mod; +import wayoftime.bloodmagic.BloodMagic; + +@Mod.EventBusSubscriber(modid = BloodMagic.MODID) +public class RegistrarBloodMagic +{ + private RegistrarBloodMagic() + { + + } + +// public static final BloodOrbDeferredRegister BLOOD_ORBS = new BloodOrbDeferredRegister(BloodMagic.MODID); +// +// public static final BloodOrbRegistryObject ORB_WEAK = BLOOD_ORBS.register("weakbloodorb", () -> new BloodOrb(new ResourceLocation(BloodMagic.MODID, "weakbloodorb"), 0, 5000, 10)); + +// public static IForgeRegistry BLOOD_ORBS = new RegistryBuilder().setName(new ResourceLocation(BloodMagic.MODID, "blood_orb")).setIDRange(0, Short.MAX_VALUE).setType(BloodOrb.class).addCallback((IForgeRegistry.AddCallback) ( +// owner, stage, id, obj, +// oldObj) -> OrbRegistry.tierMap.put(obj.getTier(), OrbRegistry.getOrbStack(obj))).create(); + +// @SubscribeEvent +// public static void onRegistryCreation(RegistryEvent.NewRegistry event) +// { +// System.out.println("Testification3"); +// BLOOD_ORBS = new RegistryBuilder().setName(new ResourceLocation(BloodMagic.MODID, "blood_orb")).setIDRange(0, Short.MAX_VALUE).setType(BloodOrb.class).addCallback((IForgeRegistry.AddCallback) ( +// owner, stage, id, obj, +// oldObj) -> OrbRegistry.tierMap.put(obj.getTier(), OrbRegistry.getOrbStack(obj))).create(); +// } +} diff --git a/src/main/java/wayoftime/bloodmagic/core/RegistrarBloodMagicRecipes.java b/src/main/java/wayoftime/bloodmagic/core/RegistrarBloodMagicRecipes.java new file mode 100644 index 00000000..87cd3843 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/core/RegistrarBloodMagicRecipes.java @@ -0,0 +1,71 @@ +package wayoftime.bloodmagic.core; + +import wayoftime.bloodmagic.impl.BloodMagicRecipeRegistrar; + +public class RegistrarBloodMagicRecipes +{ + +// @SubscribeEvent +// public static void registerRecipes(RegistryEvent.Register event) { +// for (int i = 0; i < ItemSoulGem.names.length; i++) { +// for (EnumDemonWillType willType : EnumDemonWillType.values()) { +// ItemStack baseGemStack = new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, i); +// ItemStack newGemStack = new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, i); +// +// ((ItemSoulGem) RegistrarBloodMagicItems.SOUL_GEM).setCurrentType(willType, newGemStack); +// ShapelessOreRecipe shapeless = new ShapelessOreRecipe(new ResourceLocation(BloodMagic.MODID, "soul_gem"), newGemStack, baseGemStack, willType.getStack()); +// event.getRegistry().register(shapeless.setRegistryName("soul_gem_" + willType.getName())); +// } +// } +// +// OreDictionary.registerOre("dustIron", ComponentTypes.SAND_IRON.getStack()); +// OreDictionary.registerOre("dustGold", ComponentTypes.SAND_GOLD.getStack()); +// OreDictionary.registerOre("dustCoal", ComponentTypes.SAND_COAL.getStack()); +// +// PluginUtil.handlePluginStep(PluginUtil.RegistrationStep.RECIPE_REGISTER); +// +// RegistrarBloodMagicItems.SOUL_TOOL_MATERIAL.setRepairItem(EnumDemonWillType.DEFAULT.getStack()); +// } + + public static void registerAltarRecipes(BloodMagicRecipeRegistrar registrar) + { +// Ingredient d; + // ONE +// registrar.addBloodAltar(new OreIngredient("gemDiamond"), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_WEAK), AltarTier.ONE.ordinal(), 2000, 2, 1); +// registrar.addBloodAltar(new OreIngredient("stone"), ItemSlate.SlateType.BLANK.getStack(), AltarTier.ONE.ordinal(), 1000, 5, 5); +// registrar.addBloodAltar(Ingredient.fromItem(Items.BUCKET), FluidUtil.getFilledBucket(new FluidStack(BlockLifeEssence.getLifeEssence(), Fluid.BUCKET_VOLUME)), AltarTier.ONE.ordinal(), 1000, 5, 0); +// registrar.addBloodAltar(Ingredient.fromItem(Items.BOOK), new ItemStack(RegistrarBloodMagicItems.SANGUINE_BOOK), AltarTier.ONE.ordinal(), 1000, 20, 0); +// +// // TWO +// registrar.addBloodAltar(new OreIngredient("blockRedstone"), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_APPRENTICE), AltarTier.TWO.ordinal(), 5000, 5, 5); +// registrar.addBloodAltar(Ingredient.fromStacks(ItemSlate.SlateType.BLANK.getStack()), ItemSlate.SlateType.REINFORCED.getStack(), AltarTier.TWO.ordinal(), 2000, 5, 5); +// registrar.addBloodAltar(Ingredient.fromItem(Items.IRON_SWORD), new ItemStack(RegistrarBloodMagicItems.DAGGER_OF_SACRIFICE), AltarTier.TWO.ordinal(), 3000, 5, 5); +// +// // THREE +// registrar.addBloodAltar(new OreIngredient("blockGold"), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_MAGICIAN), AltarTier.THREE.ordinal(), 25000, 20, 20); +// registrar.addBloodAltar(Ingredient.fromStacks(ItemSlate.SlateType.REINFORCED.getStack()), ItemSlate.SlateType.IMBUED.getStack(), AltarTier.THREE.ordinal(), 5000, 15, 10); +// registrar.addBloodAltar(new OreIngredient("obsidian"), EnumRuneType.EARTH.getStack(), AltarTier.THREE.ordinal(), 1000, 5, 5); +// registrar.addBloodAltar(new OreIngredient("blockLapis"), EnumRuneType.WATER.getStack(), AltarTier.THREE.ordinal(), 1000, 5, 5); +// registrar.addBloodAltar(Ingredient.fromItem(Items.MAGMA_CREAM), EnumRuneType.FIRE.getStack(), AltarTier.THREE.ordinal(), 1000, 5, 5); +// registrar.addBloodAltar(Ingredient.fromItem(Items.GHAST_TEAR), EnumRuneType.AIR.getStack(), AltarTier.THREE.ordinal(), 1000, 5, 5); +// registrar.addBloodAltar(Ingredient.fromItem(RegistrarBloodMagicItems.LAVA_CRYSTAL), new ItemStack(RegistrarBloodMagicItems.ACTIVATION_CRYSTAL), AltarTier.THREE.ordinal(), 10000, 20, 10); +// +// // FOUR +// registrar.addBloodAltar(Ingredient.fromStacks(new ItemStack(RegistrarBloodMagicItems.BLOOD_SHARD)), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_MASTER), AltarTier.FOUR.ordinal(), 40000, 30, 50); +// registrar.addBloodAltar(Ingredient.fromStacks(ItemSlate.SlateType.IMBUED.getStack()), ItemSlate.SlateType.DEMONIC.getStack(), AltarTier.FOUR.ordinal(), 15000, 20, 20); +// registrar.addBloodAltar(new OreIngredient("blockCoal"), EnumRuneType.DUSK.getStack(), AltarTier.FOUR.ordinal(), 2000, 20, 10); +// registrar.addBloodAltar(new OreIngredient("enderpearl"), new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS), AltarTier.FOUR.ordinal(), 2000, 10, 10); +// registrar.addBloodAltar(Ingredient.fromStacks(new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS)), new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS, 1, 1), AltarTier.FOUR.ordinal(), 10000, 20, 10); +// +// // FIVE +// registrar.addBloodAltar(new OreIngredient("netherStar"), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_ARCHMAGE), AltarTier.FIVE.ordinal(), 80000, 50, 100); +// registrar.addBloodAltar(Ingredient.fromStacks(ItemSlate.SlateType.DEMONIC.getStack()), ItemSlate.SlateType.ETHEREAL.getStack(), AltarTier.FIVE.ordinal(), 30000, 40, 100); + +// // SIX +// if (ConfigHandler.general.enableTierSixEvenThoughThereIsNoContent) +// { +// registrar.addBloodAltar(Ingredient.fromStacks(new ItemStack(RegistrarBloodMagicBlocks.DECORATIVE_BRICK, 1, 2)), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_TRANSCENDENT), AltarTier.SIX.ordinal(), 200000, 100, 200); +// registrar.addBloodAltar(new OreIngredient("glowstone"), EnumRuneType.DAWN.getStack(), AltarTier.SIX.ordinal(), 200000, 100, 200); +// } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/core/data/BMWorldSavedData.java b/src/main/java/wayoftime/bloodmagic/core/data/BMWorldSavedData.java new file mode 100644 index 00000000..02ad80a4 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/core/data/BMWorldSavedData.java @@ -0,0 +1,66 @@ +package wayoftime.bloodmagic.core.data; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.ListNBT; +import net.minecraft.world.storage.WorldSavedData; +import wayoftime.bloodmagic.util.helper.PlayerHelper; + +public class BMWorldSavedData extends WorldSavedData +{ + public static final String ID = "BloodMagic-SoulNetworks"; + + private Map soulNetworks = new HashMap<>(); + + public BMWorldSavedData(String id) + { + super(id); + } + + public BMWorldSavedData() + { + this(ID); + } + + public SoulNetwork getNetwork(PlayerEntity player) + { + return getNetwork(PlayerHelper.getUUIDFromPlayer(player)); + } + + public SoulNetwork getNetwork(UUID playerId) + { + if (!soulNetworks.containsKey(playerId)) + soulNetworks.put(playerId, SoulNetwork.newEmpty(playerId).setParent(this)); + return soulNetworks.get(playerId); + } + + @Override + public void read(CompoundNBT tagCompound) + { + ListNBT networkData = tagCompound.getList("networkData", 10); + + for (int i = 0; i < networkData.size(); i++) + { + CompoundNBT data = networkData.getCompound(i); + SoulNetwork network = SoulNetwork.fromNBT(data); + network.setParent(this); + soulNetworks.put(network.getPlayerId(), network); + } + } + + @Override + public CompoundNBT write(CompoundNBT tagCompound) + { + ListNBT networkData = new ListNBT(); + for (SoulNetwork soulNetwork : soulNetworks.values()) + networkData.add(soulNetwork.serializeNBT()); + + tagCompound.put("networkData", networkData); + + return tagCompound; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/core/data/Binding.java b/src/main/java/wayoftime/bloodmagic/core/data/Binding.java new file mode 100644 index 00000000..e6a4bbc8 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/core/data/Binding.java @@ -0,0 +1,89 @@ +package wayoftime.bloodmagic.core.data; + +import java.util.UUID; + +import javax.annotation.Nullable; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.INBT; +import net.minecraft.nbt.NBTUtil; +import net.minecraftforge.common.util.INBTSerializable; + +public class Binding implements INBTSerializable +{ + private UUID uuid; + private String name; + + public Binding(UUID uuid, String name) + { + this.uuid = uuid; + this.name = name; + } + + private Binding() + { + // No-op + } + + @Override + public CompoundNBT serializeNBT() + { + CompoundNBT tag = new CompoundNBT(); +// tag.put("id", NBTUtil.writeUniqueId(uuid)); + tag.put("id", NBTUtil.func_240626_a_(uuid)); + tag.putString("name", name); + return tag; + } + + @Override + public void deserializeNBT(CompoundNBT nbt) + { + this.uuid = NBTUtil.readUniqueId(nbt.get("id")); + this.name = nbt.getString("name"); + } + + public UUID getOwnerId() + { + return uuid; + } + + public Binding setOwnerId(UUID uuid) + { + this.uuid = uuid; + return this; + } + + public String getOwnerName() + { + return name; + } + + public Binding setOwnerName(String name) + { + this.name = name; + return this; + } + + @Nullable + public static Binding fromStack(ItemStack stack) + { + if (!stack.hasTag()) // Definitely hasn't been bound yet. + return null; + + INBT bindingTag = stack.getTag().get("binding"); + if (bindingTag == null || bindingTag.getId() != 10) // Make sure it's both a tag compound and that it has actual + // data. + return null; + + Binding binding = new Binding(); + binding.deserializeNBT((CompoundNBT) bindingTag); + return binding; + } + + @Override + public String toString() + { + return "Binding{" + "uuid=" + uuid + ", name='" + name + '\'' + '}'; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/core/data/SoulNetwork.java b/src/main/java/wayoftime/bloodmagic/core/data/SoulNetwork.java new file mode 100644 index 00000000..aa63bc1e --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/core/data/SoulNetwork.java @@ -0,0 +1,293 @@ +package wayoftime.bloodmagic.core.data; + +import java.util.List; +import java.util.Queue; +import java.util.UUID; + +import javax.annotation.Nullable; + +import com.google.common.collect.EvictingQueue; +import com.google.common.collect.ImmutableList; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.potion.EffectInstance; +import net.minecraft.potion.Effects; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.INBTSerializable; +import wayoftime.bloodmagic.event.SoulNetworkEvent; +import wayoftime.bloodmagic.util.BMLog; +import wayoftime.bloodmagic.util.BooleanResult; +import wayoftime.bloodmagic.util.DamageSourceBloodMagic; +import wayoftime.bloodmagic.util.helper.PlayerHelper; + +public class SoulNetwork implements INBTSerializable +{ + + private final Queue ticketHistory; + private BMWorldSavedData parent; + private PlayerEntity cachedPlayer; + private UUID playerId; + private int currentEssence; + private int orbTier; + + private SoulNetwork() + { + // No-op - For creation via NBT only + ticketHistory = EvictingQueue.create(16); + } + + public void clear() + { + ticketHistory.clear(); + } + + public int add(SoulTicket ticket, int maximum) + { + SoulNetworkEvent.Fill event = new SoulNetworkEvent.Fill(this, ticket, maximum); + if (MinecraftForge.EVENT_BUS.post(event)) + return 0; + + int currEss = getCurrentEssence(); + + if (currEss >= event.getMaximum()) + return 0; + + int newEss = Math.min(event.getMaximum(), currEss + event.getTicket().getAmount()); + setCurrentEssence(newEss); + + if (ticketHistory.contains(ticket)) + ticketHistory.remove(ticket); // "Pops" the existing ticket to the top of the queue + + ticketHistory.add(ticket); + + return newEss - currEss; + } + + /** + * @deprecated For future proofing, use {@link #add(SoulTicket, int)} instead. + */ + @Deprecated + public int add(int toAdd, int maximum) + { + return add(new SoulTicket(toAdd), maximum); + } + + /** + * @deprecated Use {@link #add(SoulTicket, int)} instead. + */ + @Deprecated + public int addLifeEssence(int toAdd, int maximum) + { + return add(toAdd, maximum); + } + + public int syphon(SoulTicket ticket) + { + return syphon(ticket, false); + } + + public int syphon(SoulTicket ticket, boolean skipEvent) + { + SoulNetworkEvent.Syphon event = new SoulNetworkEvent.Syphon(this, ticket); + if (!skipEvent && MinecraftForge.EVENT_BUS.post(event)) + return 0; + + int syphon = event.getTicket().getAmount(); + if (getCurrentEssence() >= syphon) + { + setCurrentEssence(getCurrentEssence() - syphon); + if (ticketHistory.contains(ticket)) + ticketHistory.remove(ticket); + + ticketHistory.add(ticket); + return syphon; + } + + return 0; + } + + /** + * @deprecated For future proofing, use {@link #syphon(SoulTicket)} instead. + */ + @Deprecated + public int syphon(int amount) + { + return syphon(new SoulTicket(amount)); + } + + public BooleanResult syphonAndDamage(PlayerEntity user, SoulTicket ticket) + { + if (user.getEntityWorld().isRemote) + return BooleanResult.newResult(false, 0); + + SoulNetworkEvent.Syphon.User event = new SoulNetworkEvent.Syphon.User(this, ticket, user); + + if (MinecraftForge.EVENT_BUS.post(event)) + return BooleanResult.newResult(false, 0); + + int drainAmount = syphon(event.getTicket(), true); + + if (drainAmount <= 0 || event.shouldDamage()) + hurtPlayer(user, event.getTicket().getAmount()); + + if (ticketHistory.contains(ticket)) + ticketHistory.remove(ticket); + + ticketHistory.add(ticket); + + return BooleanResult.newResult(true, event.getTicket().getAmount()); + } + + /** + * @deprecated Use {@link #syphonAndDamage(PlayerEntity, SoulTicket)} instead. + */ + @Deprecated + public boolean syphonAndDamage(PlayerEntity user, int amount) + { + return syphonAndDamage(user, new SoulTicket(amount)).isSuccess(); + } + + public void causeNausea() + { + if (getPlayer() != null) + getPlayer().addPotionEffect(new EffectInstance(Effects.NAUSEA, 99)); + } + + /** + * @deprecated - Please use {@link #causeNausea()} + */ + @Deprecated + public void causeNauseaToPlayer() + { + causeNausea(); + } + + public void hurtPlayer(PlayerEntity user, float syphon) + { + if (user != null) + { + if (syphon < 100 && syphon > 0) + { + if (!user.isCreative()) + { + user.hurtResistantTime = 0; + user.attackEntityFrom(DamageSourceBloodMagic.INSTANCE, 1.0F); + } + + } else if (syphon >= 100) + { + if (!user.isCreative()) + { + for (int i = 0; i < ((syphon + 99) / 100); i++) + { + user.hurtResistantTime = 0; + user.attackEntityFrom(DamageSourceBloodMagic.INSTANCE, 1.0F); + } + } + } + } + } + + private void markDirty() + { + if (getParent() != null) + getParent().markDirty(); + else + BMLog.DEFAULT.error("A SoulNetwork was created, but a parent was not set to allow saving."); + } + + @Nullable + public PlayerEntity getPlayer() + { + if (cachedPlayer == null) + cachedPlayer = PlayerHelper.getPlayerFromUUID(playerId); + + return cachedPlayer; + } + + public BMWorldSavedData getParent() + { + return parent; + } + + public SoulNetwork setParent(BMWorldSavedData parent) + { + this.parent = parent; + markDirty(); + return this; + } + + public PlayerEntity getCachedPlayer() + { + return cachedPlayer; + } + + public UUID getPlayerId() + { + return playerId; + } + + public int getCurrentEssence() + { + return currentEssence; + } + + public SoulNetwork setCurrentEssence(int currentEssence) + { + this.currentEssence = currentEssence; + markDirty(); + return this; + } + + public int getOrbTier() + { + return orbTier; + } + + public SoulNetwork setOrbTier(int orbTier) + { + this.orbTier = orbTier; + markDirty(); + return this; + } + + public List getTicketHistory() + { + return ImmutableList.copyOf(ticketHistory); + } + + // INBTSerializable + + @Override + public CompoundNBT serializeNBT() + { + CompoundNBT tagCompound = new CompoundNBT(); + tagCompound.putString("playerId", getPlayerId().toString()); + tagCompound.putInt("currentEssence", getCurrentEssence()); + tagCompound.putInt("orbTier", getOrbTier()); + return tagCompound; + } + + @Override + public void deserializeNBT(CompoundNBT nbt) + { + this.playerId = UUID.fromString(nbt.getString("playerId")); + this.currentEssence = nbt.getInt("currentEssence"); + this.orbTier = nbt.getInt("orbTier"); + } + + public static SoulNetwork fromNBT(CompoundNBT tagCompound) + { + SoulNetwork soulNetwork = new SoulNetwork(); + soulNetwork.deserializeNBT(tagCompound); + return soulNetwork; + } + + public static SoulNetwork newEmpty(UUID uuid) + { + SoulNetwork network = new SoulNetwork(); + network.playerId = uuid; + return network; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/core/data/SoulTicket.java b/src/main/java/wayoftime/bloodmagic/core/data/SoulTicket.java new file mode 100644 index 00000000..fd20d500 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/core/data/SoulTicket.java @@ -0,0 +1,107 @@ +package wayoftime.bloodmagic.core.data; + +import net.minecraft.command.ICommandSource; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.world.World; + +/** + * Wrapper for any interactions with the SoulNetwork + * Contains a description on what the interaction is and any extra data + */ +public class SoulTicket +{ + private static final ITextComponent EMPTY = new StringTextComponent(""); + + private final ITextComponent description; + private final int amount; + + public SoulTicket(ITextComponent description, int amount) + { + this.description = description; + this.amount = amount; + } + + public SoulTicket(int amount) + { + this(EMPTY, amount); + } + + public boolean isSyphon() + { + return amount < 0; + } + + public ITextComponent getDescription() + { + return description; + } + + public int getAmount() + { + return amount; + } + + /** + * @return A description in the format block|dimensionID|pos + */ + public static SoulTicket block(World world, BlockPos pos, int amount) + { + // func_234923_W_() = getDimension + return new SoulTicket(new StringTextComponent("block|" + world.getDimensionKey().getRegistryName() + "|" + + pos.toLong()), amount); + } + + /** + * @return A description in the format item|item registry + * name|dimensionID|entityName|entityPos + */ + public static SoulTicket item(ItemStack itemStack, World world, Entity entity, int amount) + { + return new SoulTicket(new StringTextComponent("item|" + itemStack.getItem().getRegistryName() + "|" + + world.getDimensionKey().getRegistryName() + "|" + entity.getCachedUniqueIdString()), amount); + } + + /** + * @return A description in the format item|item registry name|dimensionID|pos + */ + public static SoulTicket item(ItemStack itemStack, World world, BlockPos pos, int amount) + { + return new SoulTicket(new StringTextComponent("item|" + itemStack.getItem().getRegistryName() + "|" + + world.getDimensionKey().getRegistryName() + "|" + pos.toLong()), amount); + } + + /** + * @return A description in the format item|item registry name|dimensionID + */ + public static SoulTicket item(ItemStack itemStack, int amount) + { + return new SoulTicket(new StringTextComponent("item|" + itemStack.getItem().getRegistryName()), amount); + } + + public static SoulTicket command(ICommandSource sender, String command, int amount) + { + return new SoulTicket(new StringTextComponent("command|" + command + "|" + sender.toString()), amount); + } + + // TODO maybe make it check the amount?? + @Override + public boolean equals(Object o) + { + if (this == o) + return true; + if (o instanceof SoulTicket) + return ((SoulTicket) o).getDescription().equals(description); + + return false; + } + + @Override + public int hashCode() + { + return description.hashCode(); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/core/living/ILivingContainer.java b/src/main/java/wayoftime/bloodmagic/core/living/ILivingContainer.java new file mode 100644 index 00000000..0e6db181 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/core/living/ILivingContainer.java @@ -0,0 +1,60 @@ +package wayoftime.bloodmagic.core.living; + +import java.util.List; + +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +public interface ILivingContainer +{ + default LivingStats getLivingStats(ItemStack stack) + { + if (!stack.hasTag() || !stack.getTag().contains("livingStats")) + return null; + + return LivingStats.fromNBT(stack.getTag().getCompound("livingStats")); + } + + default void updateLivingStats(ItemStack stack, LivingStats stats) + { + if (stats == null) + { + if (stack.hasTag()) + stack.getTag().remove("livingStats"); + return; + } + + if (!stack.hasTag()) + stack.setTag(new CompoundNBT()); + + stack.getTag().put("livingStats", stats.serialize()); + } + + @OnlyIn(Dist.CLIENT) + static void appendLivingTooltip(LivingStats stats, List tooltip, boolean trainable) + { + if (stats != null) + { + if (trainable) + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.livingarmour.upgrade.points", stats.getUsedPoints(), stats.getMaxPoints()).mergeStyle(TextFormatting.GOLD)); + + stats.getUpgrades().forEach((k, v) -> { + if (k.getLevel(v.intValue()) <= 0) + return; + + boolean sneaking = Screen.hasShiftDown(); +// if (!InputUtil.isKeyPressed(MinecraftClient.getInstance().getWindow().getHandle(), 340) || k.getNextRequirement(v) == 0) + if (!sneaking || k.getNextRequirement(v.intValue()) == 0) + tooltip.add(new TranslationTextComponent("%s %s", new TranslationTextComponent(k.getTranslationKey()), new TranslationTextComponent("enchantment.level." + k.getLevel(v.intValue()))).mergeStyle(TextFormatting.GRAY)); + else + tooltip.add(new TranslationTextComponent("%s %s", new TranslationTextComponent(k.getTranslationKey()), (": " + v.intValue() + "/" + k.getNextRequirement(v.intValue()))).mergeStyle(TextFormatting.GRAY)); + }); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/core/living/LivingStats.java b/src/main/java/wayoftime/bloodmagic/core/living/LivingStats.java new file mode 100644 index 00000000..3e158c7d --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/core/living/LivingStats.java @@ -0,0 +1,163 @@ +package wayoftime.bloodmagic.core.living; + +import java.util.Map; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.ListNBT; +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.core.LivingArmorRegistrar; + +public class LivingStats +{ + + public static final int DEFAULT_UPGRADE_POINTS = 100; + + private final Map upgrades; + private int maxPoints = DEFAULT_UPGRADE_POINTS; + + public LivingStats(Map upgrades) + { + this.upgrades = upgrades; + } + + public LivingStats() + { + this(Maps.newHashMap()); + } + + public Map getUpgrades() + { + return ImmutableMap.copyOf(upgrades); + } + + public LivingStats addExperience(ResourceLocation key, double experience) + { +// LivingUpgrade upgrade = LivingArmorRegistrar.UPGRADES.getOrDefault(key); + LivingUpgrade upgrade = LivingArmorRegistrar.UPGRADE_MAP.getOrDefault(key, LivingUpgrade.DUMMY); + double current = upgrades.getOrDefault(upgrade, 0d); + +// System.out.println("Upgrade: " + upgrade); + + if (upgrade.getNextRequirement((int) current) == 0) + return this; + + upgrades.put(upgrade, current + experience); + return this; + } + + public LivingStats resetExperience(ResourceLocation key) + { + LivingUpgrade upgrade = LivingArmorRegistrar.UPGRADE_MAP.getOrDefault(key, LivingUpgrade.DUMMY); + double current = upgrades.getOrDefault(upgrade, 0d); + + if (upgrade.getNextRequirement((int) current) == 0) + return this; + + upgrades.put(upgrade, 0d); + + return this; + } + + public int getLevel(ResourceLocation key) + { + LivingUpgrade upgrade = LivingArmorRegistrar.UPGRADE_MAP.getOrDefault(key, LivingUpgrade.DUMMY); +// LivingUpgrade upgrade = LivingArmorRegistrar.UPGRADES.getOrDefault(key); + return upgrade.getLevel(upgrades.getOrDefault(upgrade, 0d).intValue()); + } + + public int getUsedPoints() + { + int total = 0; + for (Map.Entry applied : upgrades.entrySet()) + { + double experience = applied.getValue(); + int level = applied.getKey().getLevel((int) experience); + int cost = applied.getKey().getLevelCost(level); + total += cost; + } + + return total; + } + + public int getMaxPoints() + { + return maxPoints; + } + + public LivingStats setMaxPoints(int maxPoints) + { + this.maxPoints = maxPoints; + return this; + } + + public CompoundNBT serialize() + { + CompoundNBT compound = new CompoundNBT(); + ListNBT statList = new ListNBT(); + upgrades.forEach((k, v) -> { + CompoundNBT upgrade = new CompoundNBT(); + upgrade.putString("key", k.getKey().toString()); + upgrade.putDouble("exp", v); + statList.add(upgrade); + }); + compound.put("upgrades", statList); + + compound.putInt("maxPoints", maxPoints); + + return compound; + } + + public void deserialize(CompoundNBT nbt) + { + ListNBT statList = nbt.getList("upgrades", 10); + statList.forEach(tag -> { + if (!(tag instanceof CompoundNBT)) + return; + + LivingUpgrade upgrade = LivingArmorRegistrar.UPGRADE_MAP.getOrDefault(new ResourceLocation(((CompoundNBT) tag).getString("key")), LivingUpgrade.DUMMY); + if (upgrade == LivingUpgrade.DUMMY) + return; + double experience = ((CompoundNBT) tag).getDouble("exp"); + upgrades.put(upgrade, experience); + }); + + maxPoints = nbt.getInt("maxPoints"); + } + + public static LivingStats fromNBT(CompoundNBT statTag) + { + LivingStats stats = new LivingStats(); + stats.deserialize(statTag); + return stats; + } + + public static LivingStats fromPlayer(PlayerEntity player) + { + return fromPlayer(player, false); + } + + public static LivingStats fromPlayer(PlayerEntity player, boolean createNew) + { + if (!LivingUtil.hasFullSet(player)) + return null; + + ItemStack chest = player.getItemStackFromSlot(EquipmentSlotType.CHEST); + LivingStats stats = ((ILivingContainer) chest.getItem()).getLivingStats(chest); + return stats == null && createNew ? new LivingStats() : stats; + } + + public static void toPlayer(PlayerEntity player, LivingStats stats) + { + if (!LivingUtil.hasFullSet(player)) + return; + + ItemStack chest = player.getItemStackFromSlot(EquipmentSlotType.CHEST); + ((ILivingContainer) chest.getItem()).updateLivingStats(chest, stats); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/core/living/LivingUpgrade.java b/src/main/java/wayoftime/bloodmagic/core/living/LivingUpgrade.java new file mode 100644 index 00000000..8f6b0e82 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/core/living/LivingUpgrade.java @@ -0,0 +1,267 @@ +package wayoftime.bloodmagic.core.living; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.UUID; +import java.util.function.Consumer; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; +import com.google.common.reflect.TypeToken; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.ai.attributes.Attribute; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Util; +import net.minecraftforge.registries.ForgeRegistryEntry; + +@JsonAdapter(LivingUpgrade.Deserializer.class) +public class LivingUpgrade extends ForgeRegistryEntry +{ + public static final LivingUpgrade DUMMY = new LivingUpgrade(new ResourceLocation("dummy"), levels -> levels.add(new Level(0, 0))); + + private final ResourceLocation key; + private final Set incompatible; + private final TreeMap experienceToLevel; + private final Map levelToCost; + private final Map bonuses; + private boolean isNegative; + private String translationKey = null; + private IAttributeProvider attributeProvider; + private IArmorProvider armorProvider; + private IDamageProvider damageProvider; + + public LivingUpgrade(ResourceLocation key, Consumer> experienceMapper) + { + this.key = key; + this.incompatible = Sets.newHashSet(); + this.experienceToLevel = Maps.newTreeMap(); + this.levelToCost = Maps.newHashMap(); + this.bonuses = Maps.newHashMap(); + + List levels = Lists.newArrayList(); + experienceMapper.accept(levels); + + for (int i = 0; i < levels.size(); i++) + { + Level level = levels.get(i); + experienceToLevel.put(level.experienceNeeded, i + 1); + levelToCost.put(i + 1, level.upgradeCost); + } + } + + public LivingUpgrade withBonusSet(String id, Consumer> modifiers) + { +// List values = DefaultedList.of(); + List values = new ArrayList(); + modifiers.accept(values); + if (values.size() != levelToCost.size()) + throw new RuntimeException("Bonus size and level size must be the same."); + + bonuses.put(id, new Bonus(id, values)); + return this; + } + + public Number getBonusValue(String id, int level) + { + List modifiers = bonuses.getOrDefault(id, Bonus.DEFAULT).modifiers; + if (modifiers.isEmpty() || level == 0) + return 0; + + return modifiers.get(level - 1); + } + + public LivingUpgrade withAttributeProvider(IAttributeProvider attributeProvider) + { + this.attributeProvider = attributeProvider; + return this; + } + + public IAttributeProvider getAttributeProvider() + { + return attributeProvider; + } + + public LivingUpgrade withArmorProvider(IArmorProvider armorProvider) + { + this.armorProvider = armorProvider; + return this; + } + + public IArmorProvider getArmorProvider() + { + return armorProvider; + } + + public LivingUpgrade withDamageProvider(IDamageProvider damageProvider) + { + this.damageProvider = damageProvider; + return this; + } + + public IDamageProvider getDamageProvider() + { + return damageProvider; + } + + public String getTranslationKey() + { + return translationKey == null ? translationKey = Util.makeTranslationKey("living_upgrade", key) + : translationKey; + } + + public boolean isNegative() + { + return isNegative; + } + + public boolean isCompatible(ResourceLocation otherUpgrade) + { + return !incompatible.contains(otherUpgrade); + } + + public LivingUpgrade addIncompatibility(ResourceLocation key, ResourceLocation... otherKeys) + { + incompatible.add(key); + Collections.addAll(incompatible, otherKeys); + return this; + } + + public int getLevel(int experience) + { + Map.Entry floor = experienceToLevel.floorEntry(experience); + return floor == null ? 0 : floor.getValue(); + } + + public int getNextRequirement(int experience) + { + Integer ret = experienceToLevel.ceilingKey(experience + 1); + return ret == null ? 0 : ret; + } + + public int getLevelCost(int level) + { + return levelToCost.getOrDefault(level, 0); + } + + public ResourceLocation getKey() + { + return key; + } + + public LivingUpgrade asDowngrade() + { + this.isNegative = true; + return this; + } + + @Override + public String toString() + { + return key.toString(); + } + + public interface IAttributeProvider + { + void handleAttributes(LivingStats stats, Multimap modifiers, UUID uuid, LivingUpgrade upgrade, int level); + } + + public interface IArmorProvider + { + double getProtection(PlayerEntity player, LivingStats stats, DamageSource source, LivingUpgrade upgrade, int level); + } + + public interface IDamageProvider + { + double getAdditionalDamage(PlayerEntity player, ItemStack weapon, double damage, LivingStats stats, LivingEntity attacked, LivingUpgrade upgrade, int level); + } + + public static class Level + { + @SerializedName("xp") + private final int experienceNeeded; + @SerializedName("cost") + private final int upgradeCost; + + public Level(int experienceNeeded, int upgradeCost) + { + this.experienceNeeded = experienceNeeded; + this.upgradeCost = upgradeCost; + } + } + + public static class Bonus + { + + private static final Bonus DEFAULT = new Bonus("null", Collections.emptyList()); + + private final String id; + private final List modifiers; + + public Bonus(String id, List modifiers) + { + this.id = id; + this.modifiers = modifiers; + } + + public String getId() + { + return id; + } + } + + public static class Deserializer implements JsonDeserializer + { + @Override + public LivingUpgrade deserialize(JsonElement element, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException + { + JsonObject json = element.getAsJsonObject(); + ResourceLocation id = new ResourceLocation(json.getAsJsonPrimitive("id").getAsString()); + List levels = context.deserialize(json.getAsJsonArray("levels"), new TypeToken>() + { + }.getType()); + boolean negative = json.has("negative") && json.getAsJsonPrimitive("negative").getAsBoolean(); + + LivingUpgrade upgrade = new LivingUpgrade(id, upgradeLevels -> upgradeLevels.addAll(levels)); + if (negative) + upgrade.asDowngrade(); + + if (json.has("incompatibilities")) + { + String[] incompatibilities = context.deserialize(json.getAsJsonArray("incompatibilities"), String[].class); + for (String incompatible : incompatibilities) + upgrade.addIncompatibility(new ResourceLocation(incompatible)); + } + + if (json.has("bonuses")) + { + Map bonuses = context.deserialize(json.getAsJsonObject("bonuses"), new TypeToken>() + { + }.getType()); + bonuses.forEach((k, v) -> upgrade.withBonusSet(k, numbers -> Collections.addAll(numbers, v))); + } + + return upgrade; + } + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/core/living/LivingUtil.java b/src/main/java/wayoftime/bloodmagic/core/living/LivingUtil.java new file mode 100644 index 00000000..605d8616 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/core/living/LivingUtil.java @@ -0,0 +1,191 @@ +package wayoftime.bloodmagic.core.living; + +import java.util.Map; +import java.util.Map.Entry; + +import org.apache.commons.lang3.tuple.Pair; + +import com.google.common.collect.Multimap; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.ai.attributes.Attribute; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.ArmorItem; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraftforge.common.MinecraftForge; +import wayoftime.bloodmagic.common.item.ItemLivingTrainer; +import wayoftime.bloodmagic.core.util.PlayerUtil; +import wayoftime.bloodmagic.event.LivingEquipmentEvent; + +public class LivingUtil +{ + // @return Pair containing the LivingStats of the player, and if the LivingStats + // upgraded due to the applied EXP. + public static Pair applyNewExperience(PlayerEntity player, LivingUpgrade upgrade, double experience) + { + LivingStats stats = LivingStats.fromPlayer(player, true); + if (stats == null) + return Pair.of(null, false); + + if (!canTrain(player, upgrade, upgrade.getLevel((int) experience))) + return Pair.of(stats, false); + + LivingEquipmentEvent.GainExperience event = new LivingEquipmentEvent.GainExperience(player, stats, upgrade, experience); +// EventResult result = LivingEquipmentEvent.EXPERIENCE_GAIN.invoker().gainExperience(event); + MinecraftForge.EVENT_BUS.post(event); + if (event.isCanceled()) + return Pair.of(stats, false); + + experience = event.getExperience(); + + double currentExperience = stats.getUpgrades().getOrDefault(upgrade, 0d); + double requiredForLevel = upgrade.getNextRequirement((int) currentExperience) - currentExperience; + + // If we're going to level up from this, check points + if (requiredForLevel <= experience) + { + int currentPoints = stats.getUsedPoints(); + // If we're already capped or somehow over the cap, we don't want to add + // experience + if (currentPoints >= stats.getMaxPoints()) + return Pair.of(stats, false); + + int currentPointCost = upgrade.getLevelCost(upgrade.getLevel((int) currentExperience)); + int nextPointCost = upgrade.getLevelCost(upgrade.getLevel((int) (currentExperience + experience))); + +// System.out.println("Current point cost: " + currentPointCost + ", Next point cost: " + nextPointCost); + // If there's no more levels in this upgrade, we don't want to add experience + if (nextPointCost == -1) + return Pair.of(stats, false); + + int pointDif = nextPointCost - currentPointCost; + if (pointDif < 0) + { + return Pair.of(stats, false); + } + + // If applying this new level will go over our cap, we don't want to add + // experience + if (currentPoints + pointDif > stats.getMaxPoints()) + return Pair.of(stats, false); + } + + int newLevel = upgrade.getLevel((int) (currentExperience + experience)); + boolean didUpgrade = false; + if (upgrade.getLevel((int) currentExperience) != newLevel) + { + LivingEquipmentEvent.LevelUp levelUpEvent = new LivingEquipmentEvent.LevelUp(player, stats, upgrade); +// LivingEquipmentEvent.LEVEL_UP.invoker().levelUp(levelUpEvent); + MinecraftForge.EVENT_BUS.post(levelUpEvent); + didUpgrade = true; + + player.sendStatusMessage(new TranslationTextComponent("chat.bloodmagic.living_upgrade_level_increase", new TranslationTextComponent(upgrade.getTranslationKey()), newLevel), true); + } + +// System.out.println("Adding experience! Total experience is: " + currentExperience); + + stats.addExperience(upgrade.getKey(), experience); + LivingStats.toPlayer(player, stats); + return Pair.of(stats, didUpgrade); + } + + public static double getDamageReceivedForArmour(PlayerEntity player, DamageSource source, double damage) + { +// System.out.println("Initial damage from " + source + ": " + damage); + LivingStats stats = LivingStats.fromPlayer(player, true); + if (stats == null) + return damage; + + Map upgrades = stats.getUpgrades(); + for (Entry entry : upgrades.entrySet()) + { + LivingUpgrade upgrade = entry.getKey(); + if (upgrade.getArmorProvider() == null) + { + continue; + } + + int level = upgrade.getLevel(entry.getValue().intValue()); + damage *= 1 - upgrade.getArmorProvider().getProtection(player, stats, source, upgrade, level); + } + +// System.out.println("Final damage: " + damage); + + return damage; + } + + public static double getAdditionalDamage(PlayerEntity player, ItemStack weapon, LivingEntity attackedEntity, double damage) + { +// System.out.println("Initial damage from " + source + ": " + damage); + LivingStats stats = LivingStats.fromPlayer(player, true); + if (stats == null) + return 0; + + double additionalDamage = 0; + + Map upgrades = stats.getUpgrades(); + for (Entry entry : upgrades.entrySet()) + { + LivingUpgrade upgrade = entry.getKey(); + if (upgrade.getArmorProvider() == null) + { + continue; + } + + int level = upgrade.getLevel(entry.getValue().intValue()); + if (upgrade.getDamageProvider() == null) + { + continue; + } + additionalDamage += upgrade.getDamageProvider().getAdditionalDamage(player, weapon, damage, stats, attackedEntity, upgrade, level); + } + +// System.out.println("Final damage: " + damage); + + return additionalDamage; + } + + public static boolean canTrain(PlayerEntity player, LivingUpgrade upgrade, int currentLevel) + { + ItemStack trainer = PlayerUtil.findItem(player, stack -> stack.getItem() instanceof ItemLivingTrainer && stack.hasTag() && stack.getTag().contains("livingStats")); + if (trainer.isEmpty()) + return true; + + String mode = trainer.getTag().getString("livingLock"); + LivingStats stats = ((ILivingContainer) trainer.getItem()).getLivingStats(trainer); + + int levelLimit = stats.getLevel(upgrade.getKey()); + if (mode.equalsIgnoreCase("whitelist")) + { + return levelLimit != 0 && levelLimit > currentLevel; + } else if (mode.equalsIgnoreCase("blacklist")) + { + return levelLimit == 0; + } + + return true; + } + + public static boolean hasFullSet(PlayerEntity player) + { + for (ItemStack stack : player.inventory.armorInventory) + if (stack.isEmpty() || !(stack.getItem() instanceof ILivingContainer)) + return false; + + return true; + } + + public static void applyAttributes(Multimap attributes, ItemStack stack, PlayerEntity player, EquipmentSlotType slot) + { + if (player == null || !hasFullSet(player)) + return; + + Multimap newAttributes = ((ArmorItem) stack.getItem()).getAttributeModifiers(slot, stack); +// newAttributes.values().forEach(e -> e.setSerialize(false)); + attributes.putAll(newAttributes); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/core/living/ProjectileArmorProvider.java b/src/main/java/wayoftime/bloodmagic/core/living/ProjectileArmorProvider.java new file mode 100644 index 00000000..f1b10b44 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/core/living/ProjectileArmorProvider.java @@ -0,0 +1,15 @@ +package wayoftime.bloodmagic.core.living; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.DamageSource; + +public class ProjectileArmorProvider implements LivingUpgrade.IArmorProvider +{ + @Override + public double getProtection(PlayerEntity player, LivingStats stats, DamageSource source, LivingUpgrade upgrade, int level) + { + // TODO Auto-generated method stub + return 0; + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/core/recipe/IngredientBloodOrb.java b/src/main/java/wayoftime/bloodmagic/core/recipe/IngredientBloodOrb.java new file mode 100644 index 00000000..9e69b0f2 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/core/recipe/IngredientBloodOrb.java @@ -0,0 +1,83 @@ +package wayoftime.bloodmagic.core.recipe; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Stream; + +import com.google.gson.JsonObject; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.crafting.IIngredientSerializer; +import net.minecraftforge.common.crafting.VanillaIngredientSerializer; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.core.registry.OrbRegistry; +import wayoftime.bloodmagic.common.item.BloodOrb; + +public class IngredientBloodOrb extends Ingredient +{ + public static final ResourceLocation NAME = new ResourceLocation(BloodMagic.MODID, "bloodorb"); + + public final int orbTier; + + public static IngredientBloodOrb fromTier(int orbTier) + { + return new IngredientBloodOrb(orbTier); + } + + public static IngredientBloodOrb fromOrb(BloodOrb orb) + { + return new IngredientBloodOrb(orb.getTier()); + } + + protected IngredientBloodOrb(int orbTier) + { + super(Stream.of(new ItemList(orbTier))); + this.orbTier = orbTier; + } + + public net.minecraftforge.common.crafting.IIngredientSerializer getSerializer() + { + return Serializer.INSTANCE; + } + + private static class ItemList implements IItemList + { + private final int orbTier; + + public ItemList(int orbTier) + { + this.orbTier = orbTier; + } + + @Override + public Collection getStacks() + { + List orbGet = OrbRegistry.getOrbsDownToTier(orbTier); + + return orbGet; + } + + @Override + public JsonObject serialize() + { + JsonObject object = new JsonObject(); + object.addProperty("type", NAME.toString()); + object.addProperty("orb_tier", orbTier); + return object; + } + } + + public static class Serializer extends VanillaIngredientSerializer + { + public static final IIngredientSerializer INSTANCE = new Serializer(); + + @Override + public Ingredient parse(JsonObject json) + { + return new IngredientBloodOrb(JSONUtils.getInt(json, "orb_tier")); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/core/registry/AlchemyArrayRegistry.java b/src/main/java/wayoftime/bloodmagic/core/registry/AlchemyArrayRegistry.java new file mode 100644 index 00000000..93dd38c6 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/core/registry/AlchemyArrayRegistry.java @@ -0,0 +1,77 @@ +package wayoftime.bloodmagic.core.registry; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.lang3.tuple.Pair; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.alchemyarray.AlchemyArrayEffect; +import wayoftime.bloodmagic.common.alchemyarray.AlchemyArrayEffectBinding; +import wayoftime.bloodmagic.common.alchemyarray.AlchemyArrayEffectBounce; +import wayoftime.bloodmagic.common.alchemyarray.AlchemyArrayEffectCrafting; +import wayoftime.bloodmagic.common.alchemyarray.AlchemyArrayEffectDay; +import wayoftime.bloodmagic.common.alchemyarray.AlchemyArrayEffectMovement; +import wayoftime.bloodmagic.common.alchemyarray.AlchemyArrayEffectNight; +import wayoftime.bloodmagic.common.alchemyarray.AlchemyArrayEffectSpike; +import wayoftime.bloodmagic.common.alchemyarray.AlchemyArrayEffectUpdraft; +import wayoftime.bloodmagic.impl.BloodMagicAPI; +import wayoftime.bloodmagic.recipe.RecipeAlchemyArray; + +public class AlchemyArrayRegistry +{ + public static Map effectMap = new HashMap(); + public static final ResourceLocation BINDING_ARRAY = BloodMagic.rl("textures/models/alchemyarrays/bindingarray.png"); + + public static boolean registerEffect(ResourceLocation rl, AlchemyArrayEffect effect) + { + boolean hadKey = effectMap.containsKey(rl); + + effectMap.put(rl, effect); + + return hadKey; + } + + public static void registerBaseArrays() + { + registerEffect(BloodMagic.rl("array/movement"), new AlchemyArrayEffectMovement()); + registerEffect(BloodMagic.rl("array/updraft"), new AlchemyArrayEffectUpdraft()); + registerEffect(BloodMagic.rl("array/spike"), new AlchemyArrayEffectSpike()); + registerEffect(BloodMagic.rl("array/day"), new AlchemyArrayEffectDay()); + registerEffect(BloodMagic.rl("array/night"), new AlchemyArrayEffectNight()); + registerEffect(BloodMagic.rl("array/bounce"), new AlchemyArrayEffectBounce()); + } + + public static AlchemyArrayEffect getEffect(World world, ResourceLocation rl, RecipeAlchemyArray recipe) + { + if (effectMap.containsKey(rl)) + { + return effectMap.get(rl).getNewCopy(); + } + + if (!recipe.getOutput().isEmpty()) + { + if (recipe.getTexture().equals(BINDING_ARRAY)) + { + return new AlchemyArrayEffectBinding(recipe.getOutput()); + } + // Return a new instance of AlchemyEffectCrafting + return new AlchemyArrayEffectCrafting(recipe.getOutput()); + } + + return null; + } + + public static AlchemyArrayEffect getEffect(World world, ItemStack input, ItemStack catalyst) + { + Pair array = BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAlchemyArray(world, input, catalyst); + if (array == null || array.getRight() == null || !array.getLeft()) + return null; + + return getEffect(world, array.getRight().getId(), array.getRight()); + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/core/registry/AlchemyArrayRendererRegistry.java b/src/main/java/wayoftime/bloodmagic/core/registry/AlchemyArrayRendererRegistry.java new file mode 100644 index 00000000..e650f454 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/core/registry/AlchemyArrayRendererRegistry.java @@ -0,0 +1,71 @@ +package wayoftime.bloodmagic.core.registry; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.lang3.tuple.Pair; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import wayoftime.bloodmagic.client.render.alchemyarray.AlchemyArrayRenderer; +import wayoftime.bloodmagic.client.render.alchemyarray.BindingAlchemyCircleRenderer; +import wayoftime.bloodmagic.impl.BloodMagicAPI; +import wayoftime.bloodmagic.recipe.RecipeAlchemyArray; + +public class AlchemyArrayRendererRegistry +{ + @OnlyIn(Dist.CLIENT) + public static final AlchemyArrayRenderer DEFAULT_RENDERER = new AlchemyArrayRenderer(new ResourceLocation("bloodmagic", "textures/models/alchemyarrays/basearray.png")); + + @OnlyIn(Dist.CLIENT) + public static Map rendererMap = new HashMap(); + + /** + * + * @param rl + * @param renderer + * @return True if there was already a renderer registered for this rl. + */ + @OnlyIn(Dist.CLIENT) + public static boolean registerRenderer(ResourceLocation rl, AlchemyArrayRenderer renderer) + { + boolean hadKey = rendererMap.containsKey(rl); + + rendererMap.put(rl, renderer); + + return hadKey; + } + + @OnlyIn(Dist.CLIENT) + public static AlchemyArrayRenderer getRenderer(World world, ResourceLocation rl, RecipeAlchemyArray recipe) + { + if (rendererMap.containsKey(rl)) + { + return rendererMap.get(rl); + } + + ResourceLocation texture = recipe.getTexture(); + if (AlchemyArrayRegistry.BINDING_ARRAY.equals(texture)) + return new BindingAlchemyCircleRenderer(); + + if (texture != null) + return new AlchemyArrayRenderer(texture); + + return null; + } + + @OnlyIn(Dist.CLIENT) + public static AlchemyArrayRenderer getRenderer(World world, ItemStack input, ItemStack catalyst) + { + Pair array = BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAlchemyArray(world, input, catalyst); + if (array == null || array.getRight() == null) + { + return null; + } + + return getRenderer(world, array.getRight().getId(), array.getRight()); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/core/registry/OrbRegistry.java b/src/main/java/wayoftime/bloodmagic/core/registry/OrbRegistry.java new file mode 100644 index 00000000..9db6a683 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/core/registry/OrbRegistry.java @@ -0,0 +1,63 @@ +package wayoftime.bloodmagic.core.registry; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import com.google.common.collect.ArrayListMultimap; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.registries.ForgeRegistries; +import wayoftime.bloodmagic.altar.AltarTier; +import wayoftime.bloodmagic.common.item.BloodOrb; + +/** + * This is only for those who wish to add a basic {@link BloodOrb}. If you need + * custom handling, you will need your own item class. + */ +public class OrbRegistry +{ + public static ArrayListMultimap tierMap = ArrayListMultimap.create(); + private static List orbs = new ArrayList<>(); + + public static List getOrbsForTier(int tier) + { + if (getTierMap().containsKey(tier)) + return getTierMap().get(tier); + + return Collections.emptyList(); + } + + public static List getOrbsUpToTier(int tier) + { + List ret = new ArrayList<>(); + + for (int i = 1; i <= tier; i++) ret.addAll(getOrbsForTier(i)); + + return ret; + } + + public static List getOrbsDownToTier(int tier) + { + List ret = new ArrayList<>(); + + for (int i = AltarTier.MAXTIERS; i >= tier; i--) ret.addAll(getOrbsForTier(i)); + + return ret; + } + + public static ItemStack getOrbStack(BloodOrb orb) + { + Item orbItem = ForgeRegistries.ITEMS.getValue(orb.getResourceLocation()); + if (orbItem == null) + return null; + + return new ItemStack(orbItem); + } + + public static ArrayListMultimap getTierMap() + { + return ArrayListMultimap.create(tierMap); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/core/util/PlayerUtil.java b/src/main/java/wayoftime/bloodmagic/core/util/PlayerUtil.java new file mode 100644 index 00000000..5c6e2f42 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/core/util/PlayerUtil.java @@ -0,0 +1,57 @@ +package wayoftime.bloodmagic.core.util; + +import java.util.function.Predicate; + +import com.google.common.collect.Multimap; + +import net.minecraft.entity.ai.attributes.Attribute; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.ItemStack; +import wayoftime.bloodmagic.common.item.ExpandedArmor; +import wayoftime.bloodmagic.core.living.LivingUtil; + +public class PlayerUtil +{ + + public static ItemStack findItem(PlayerEntity player, Predicate requirements) + { + + // Check offhand first + ItemStack offHand = player.getHeldItemOffhand(); + if (requirements.test(offHand)) + return offHand; + + // Check inventory next + for (int slot = 0; slot < player.inventory.getSizeInventory(); slot++) + { + ItemStack foundStack = player.inventory.getStackInSlot(slot); + if (!foundStack.isEmpty() && requirements.test(foundStack)) + return foundStack; + } + + return ItemStack.EMPTY; + } + + public static Multimap handle(PlayerEntity player, Multimap existing) + { + + ItemStack chest = player.getItemStackFromSlot(EquipmentSlotType.CHEST); + boolean hasFullSet = LivingUtil.hasFullSet(player); + + if (hasFullSet && existing == null) + { + existing = ((ExpandedArmor) chest.getItem()).getAttributeModifiers(EquipmentSlotType.CHEST, chest); + player.getAttributeManager().reapplyModifiers(existing); + } + + if (!hasFullSet && existing != null) + { + player.getAttributeManager().removeModifiers(existing); + existing = null; + } + + return existing; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/core/util/ResourceUtil.java b/src/main/java/wayoftime/bloodmagic/core/util/ResourceUtil.java new file mode 100644 index 00000000..81f6b0d1 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/core/util/ResourceUtil.java @@ -0,0 +1,78 @@ +package wayoftime.bloodmagic.core.util; + +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.file.FileSystem; +import java.nio.file.FileSystemAlreadyExistsException; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Collections; +import java.util.Set; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import org.apache.commons.io.IOUtils; + +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.BloodMagic; + +public class ResourceUtil +{ + public static Set gatherResources(String home, String following, Predicate predicate) + { + FileSystem fileSystem = null; + try + { + URL url = ResourceUtil.class.getResource(home); + if (url != null) + { + URI uri = url.toURI(); + Path path; + if (uri.getScheme().equals("file")) + { + path = Paths.get(ResourceUtil.class.getResource(home + "/" + following).toURI()); + } else + { + if (!uri.getScheme().equals("jar")) + { + BloodMagic.LOGGER.error("Unsupported URI scheme {}", uri.getScheme()); + return Collections.emptySet(); + } + + try + { + fileSystem = FileSystems.newFileSystem(uri, Collections.emptyMap()); + } catch (FileSystemAlreadyExistsException e) + { + fileSystem = FileSystems.getFileSystem(uri); + } + path = fileSystem.getPath(home + "/" + following); + } + + return Files.walk(path).filter(predicate).collect(Collectors.toSet()); + } + } catch (IOException | URISyntaxException e) + { + e.printStackTrace(); + } finally + { + IOUtils.closeQuietly(fileSystem); + } + + return Collections.emptySet(); + } + + public static Set gatherResources(String home, String following) + { + return gatherResources(home, following, p -> true); + } + + public static ResourceLocation addContext(ResourceLocation rl, String context) + { + return new ResourceLocation(rl.getNamespace(), context + rl.getPath()); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/core/util/Value.java b/src/main/java/wayoftime/bloodmagic/core/util/Value.java new file mode 100644 index 00000000..4ffbd20f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/core/util/Value.java @@ -0,0 +1,27 @@ +package wayoftime.bloodmagic.core.util; + +public final class Value +{ + private T value; + + private Value(T t) + { + this.value = t; + } + + public T get() + { + return value; + } + + public Value set(T t) + { + this.value = t; + return this; + } + + public static Value of(T t) + { + return new Value<>(t); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/demonaura/PosXY.java b/src/main/java/wayoftime/bloodmagic/demonaura/PosXY.java new file mode 100644 index 00000000..2e2fd6da --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/demonaura/PosXY.java @@ -0,0 +1,76 @@ +package wayoftime.bloodmagic.demonaura; + +import org.apache.commons.lang3.builder.ToStringBuilder; + +public class PosXY implements Comparable +{ + public int x; + public int y; + + public PosXY() + { + } + + public PosXY(int x, int y) + { + this.x = x; + this.y = y; + } + + @Override + public int compareTo(PosXY c) + { + return this.y == c.y ? this.x - c.x : this.y - c.y; + } + + public float getDistanceSquared(int x, int z) + { + float f = this.x - x; + float f2 = this.y - z; + return f * f + f2 * f2; + } + + public float getDistanceSquaredToChunkCoordinates(PosXY c) + { + return getDistanceSquared(c.x, c.y); + } + + public void setX(int x) + { + this.x = x; + } + + public void setY(int y) + { + this.y = y; + } + + @Override + public String toString() + { + return new ToStringBuilder(this).append("x", x).append("y", y).toString(); + } + + @Override + public boolean equals(Object o) + { + if (this == o) + return true; + if (!(o instanceof PosXY)) + return false; + + PosXY posXY = (PosXY) o; + + if (x != posXY.x) + return false; + return y == posXY.y; + } + + @Override + public int hashCode() + { + int result = x; + result = 31 * result + y; + return result; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/demonaura/WillChunk.java b/src/main/java/wayoftime/bloodmagic/demonaura/WillChunk.java new file mode 100644 index 00000000..14cb3f02 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/demonaura/WillChunk.java @@ -0,0 +1,72 @@ +package wayoftime.bloodmagic.demonaura; + +import java.lang.ref.WeakReference; + +import net.minecraft.world.chunk.IChunk; +import wayoftime.bloodmagic.will.DemonWillHolder; + +public class WillChunk +{ + PosXY loc; + private short base; + private DemonWillHolder currentWill = new DemonWillHolder(); + private WeakReference chunkRef; + + public WillChunk(PosXY loc) + { + this.loc = loc; + } + + public WillChunk(IChunk chunk, short base, DemonWillHolder currentWill) + { + this.loc = new PosXY(chunk.getPos().x, chunk.getPos().z); + this.chunkRef = new WeakReference(chunk); + this.base = base; + this.currentWill = currentWill; + } + + public boolean isModified() + { + return (this.chunkRef != null) && (this.chunkRef.get() != null) && this.chunkRef.get().isModified(); + } + + public PosXY getLoc() + { + return loc; + } + + public void setLoc(PosXY loc) + { + this.loc = loc; + } + + public short getBase() + { + return base; + } + + public void setBase(short base) + { + this.base = base; + } + + public DemonWillHolder getCurrentWill() + { + return currentWill; + } + + public void setCurrentWill(DemonWillHolder currentWill) + { + this.currentWill = currentWill; + } + + public WeakReference getChunkRef() + { + return chunkRef; + } + + public void setChunkRef(WeakReference chunkRef) + { + this.chunkRef = chunkRef; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/demonaura/WillWorld.java b/src/main/java/wayoftime/bloodmagic/demonaura/WillWorld.java new file mode 100644 index 00000000..b1f92d9a --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/demonaura/WillWorld.java @@ -0,0 +1,49 @@ +package wayoftime.bloodmagic.demonaura; + +import java.util.concurrent.ConcurrentHashMap; + +import net.minecraft.util.ResourceLocation; + +public class WillWorld +{ + // TODO: It was noted I may need to use RegistryKey instead. + ResourceLocation dim; + ConcurrentHashMap willChunks = new ConcurrentHashMap<>(); + +// private static ConcurrentHashMap nodeTickets = new ConcurrentHashMap(); + + public WillWorld(ResourceLocation resourceLocation) + { + this.dim = resourceLocation; + } + + public WillChunk getWillChunkAt(int x, int y) + { + return getWillChunkAt(new PosXY(x, y)); + } + + public WillChunk getWillChunkAt(PosXY loc) + { + return this.willChunks.get(loc); + } + + public ConcurrentHashMap getWillChunks() + { + return willChunks; + } + + public void setWillChunks(ConcurrentHashMap willChunks) + { + this.willChunks = willChunks; + } + +// public static ConcurrentHashMap getNodeTickets() +// { +// return nodeTickets; +// } +// +// public static void setNodeTickets(ConcurrentHashMap nodeTickets) +// { +// nodeTickets = nodeTickets; +// } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/demonaura/WorldDemonWillHandler.java b/src/main/java/wayoftime/bloodmagic/demonaura/WorldDemonWillHandler.java new file mode 100644 index 00000000..eccb6748 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/demonaura/WorldDemonWillHandler.java @@ -0,0 +1,220 @@ +package wayoftime.bloodmagic.demonaura; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedQueue; + +import javax.annotation.Nullable; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.IChunk; +import wayoftime.bloodmagic.util.BMLog; +import wayoftime.bloodmagic.will.DemonWillHolder; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; + +public class WorldDemonWillHandler +{ + public static ConcurrentHashMap> dirtyChunks = new ConcurrentHashMap<>(); + static ConcurrentHashMap containedWills = new ConcurrentHashMap<>(); + + @Nullable + public static DemonWillHolder getWillHolder(ResourceLocation resourceLocation, int x, int y) + { + WillChunk chunk = getWillChunk(resourceLocation, x, y); + if (chunk != null) + { + return chunk.getCurrentWill(); + } + + return null; + } + + public static DemonWillHolder getWillHolder(World world, BlockPos pos) + { + return getWillHolder(getDimensionResourceLocation(world), pos.getX() >> 4, pos.getZ() >> 4); + } + + public static WillWorld getWillWorld(ResourceLocation rl) + { + return containedWills.get(rl); + } + + @Nullable + public static WillChunk getWillChunk(ResourceLocation resourceLocation, int x, int y) + { + if (!containedWills.containsKey(resourceLocation)) + { + addWillWorld(resourceLocation); + } + + return (containedWills.get(resourceLocation)).getWillChunkAt(x, y); + } + + public static void addWillWorld(ResourceLocation resourceLocation) + { + if (!containedWills.containsKey(resourceLocation)) + { + containedWills.put(resourceLocation, new WillWorld(resourceLocation)); + BMLog.DEBUG.info("Creating demon will cache for world {}", resourceLocation); + } + } + + public static void removeWillWorld(ResourceLocation rl) + { + containedWills.remove(rl); + BMLog.DEBUG.info("Removing demon will cache for world {}", rl); + } + + public static void addWillChunk(ResourceLocation resourceLocation, IChunk chunk, short base, DemonWillHolder currentWill) + { + WillWorld aw = containedWills.get(resourceLocation); + if (aw == null) + { + aw = new WillWorld(resourceLocation); + } + aw.getWillChunks().put(new PosXY(chunk.getPos().x, chunk.getPos().z), new WillChunk(chunk, base, currentWill)); + + containedWills.put(resourceLocation, aw); + } + + public static void removeWillChunk(ResourceLocation resourceLocation, int x, int y) + { + WillWorld aw = containedWills.get(resourceLocation); + if (aw != null) + { + WillChunk chunk = aw.getWillChunks().remove(new PosXY(x, y)); + if (chunk != null) + { + markChunkAsDirty(chunk, resourceLocation); + } + } + } + + public static EnumDemonWillType getHighestDemonWillType(World world, BlockPos pos) + { + double currentMax = 0; + EnumDemonWillType currentHighest = EnumDemonWillType.DEFAULT; + + WillChunk willChunk = getWillChunk(world, pos); + + DemonWillHolder currentWill = willChunk.getCurrentWill(); + for (EnumDemonWillType type : EnumDemonWillType.values()) + { + if (currentWill.getWill(type) > currentMax) + { + currentMax = currentWill.getWill(type); + currentHighest = type; + } + } + + return currentHighest; + } + + public static double drainWill(World world, BlockPos pos, EnumDemonWillType type, double amount, boolean doDrain) + { + WillChunk willChunk = getWillChunk(world, pos); + + DemonWillHolder currentWill = willChunk.getCurrentWill(); + double drain = Math.min(currentWill.getWill(type), amount); + if (!doDrain) + { + return drain; + } + + drain = currentWill.drainWill(type, drain); + markChunkAsDirty(willChunk, getDimensionResourceLocation(world)); + + return drain; + } + + public static double fillWillToMaximum(World world, BlockPos pos, EnumDemonWillType type, double amount, double max, boolean doFill) + { + WillChunk willChunk = getWillChunk(world, pos); + + DemonWillHolder currentWill = willChunk.getCurrentWill(); + double fill = Math.min(amount, max - currentWill.getWill(type)); + if (!doFill || fill <= 0) + { + return fill > 0 ? fill : 0; + } + + fill = currentWill.addWill(type, amount, max); + markChunkAsDirty(willChunk, getDimensionResourceLocation(world)); + + return fill; + } + + public static double fillWill(World world, BlockPos pos, EnumDemonWillType type, double amount, boolean doFill) + { + WillChunk willChunk = getWillChunk(world, pos); + + DemonWillHolder currentWill = willChunk.getCurrentWill(); + if (!doFill) + { + return amount; + } + + currentWill.addWill(type, amount); + markChunkAsDirty(willChunk, getDimensionResourceLocation(world)); + + return amount; + } + + public static WillChunk getWillChunk(World world, BlockPos pos) + { + WillChunk willChunk = getWillChunk(getDimensionResourceLocation(world), pos.getX() >> 4, pos.getZ() >> 4); + if (willChunk == null) + { + Chunk chunk = world.getChunk(pos.getX() >> 4, pos.getZ() >> 4); + generateWill(chunk, world); + + willChunk = getWillChunk(getDimensionResourceLocation(world), pos.getX() >> 4, pos.getZ() >> 4); + } + + return willChunk; + } + + public static double getCurrentWill(World world, BlockPos pos, EnumDemonWillType type) + { + WillChunk willChunk = getWillChunk(world, pos); + + if (willChunk == null) + { + return 0; + } + + DemonWillHolder currentWill = willChunk.getCurrentWill(); + return currentWill.getWill(type); + } + + private static void markChunkAsDirty(WillChunk chunk, ResourceLocation resourceLocation) + { + if (chunk.isModified()) + { + return; + } + PosXY pos = new PosXY(chunk.loc.x, chunk.loc.y); + if (!dirtyChunks.containsKey(resourceLocation)) + { + dirtyChunks.put(resourceLocation, new ConcurrentLinkedQueue<>()); + } + ConcurrentLinkedQueue dc = dirtyChunks.get(resourceLocation); + if (!dc.contains(pos)) + { + dc.add(pos); + } + } + + public static void generateWill(IChunk chunk, World world) + { + addWillChunk(getDimensionResourceLocation(world), chunk, (short) 1, new DemonWillHolder()); + } + + public static ResourceLocation getDimensionResourceLocation(World world) + { + return world.getDimensionKey().getLocation(); + } + +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/entity/BloodMagicEntities.java b/src/main/java/wayoftime/bloodmagic/entity/BloodMagicEntities.java new file mode 100644 index 00000000..9ae8814d --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/entity/BloodMagicEntities.java @@ -0,0 +1,30 @@ +package wayoftime.bloodmagic.entity; + +import net.minecraft.entity.EntityType; +import net.minecraftforge.client.event.ModelRegistryEvent; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import wayoftime.bloodmagic.BloodMagic; + +@Mod.EventBusSubscriber(modid = BloodMagic.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class BloodMagicEntities +{ + private BloodMagicEntities() + { + } + + @SubscribeEvent + public static void registerEntities(RegistryEvent.Register> event) + { +// System.out.println("Ow O"); +// event.getRegistry().register(EntityType.Builder.create(EntitySoulSnare::new, EntityClassification.MISC).setTrackingRange(64).setUpdateInterval(1).setShouldReceiveVelocityUpdates(false).setCustomClientFactory(((spawnEntity, world) -> new EntitySoulSnare(EntitySoulSnare.TYPE, world))).build("").setRegistryName(BloodMagic.rl("entitysoulsnare"))); + } + + @SubscribeEvent + public static void registerModels(ModelRegistryEvent evt) + { +// System.out.println("O wO"); +// RenderingRegistry.registerEntityRenderingHandler(BloodMagicEntityTypes.SNARE.getEntityType(), SoulSnareRenderer::new); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/entity/projectile/AbstractEntityThrowingDagger.java b/src/main/java/wayoftime/bloodmagic/entity/projectile/AbstractEntityThrowingDagger.java new file mode 100644 index 00000000..ad24d4ba --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/entity/projectile/AbstractEntityThrowingDagger.java @@ -0,0 +1,687 @@ +package wayoftime.bloodmagic.entity.projectile; + +import java.util.List; + +import javax.annotation.Nullable; + +import com.google.common.collect.Lists; + +import it.unimi.dsi.fastutil.ints.IntOpenHashSet; +import net.minecraft.block.BlockState; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.entity.projectile.AbstractArrowEntity; +import net.minecraft.entity.projectile.ProjectileHelper; +import net.minecraft.entity.projectile.ProjectileItemEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.network.IPacket; +import net.minecraft.network.play.server.SChangeGameStatePacket; +import net.minecraft.particles.IParticleData; +import net.minecraft.particles.ItemParticleData; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.util.DamageSource; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.EntityRayTraceResult; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceContext; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.registry.Registry; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.network.NetworkHooks; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.will.PlayerDemonWillHandler; + +public class AbstractEntityThrowingDagger extends ProjectileItemEntity +{ + @Nullable + private BlockState inBlockState; + protected boolean inGround; + protected int timeInGround; + public AbstractArrowEntity.PickupStatus pickupStatus = AbstractArrowEntity.PickupStatus.ALLOWED; + public int arrowShake; + private int ticksInGround; + private double damage = 2.0D; + private int knockbackStrength; + private SoundEvent hitSound = this.getHitEntitySound(); + private IntOpenHashSet piercedEntities; + private List hitEntities; + +// private ItemStack containedStack = ItemStack.EMPTY; + private double willDrop = 0; + private EnumDemonWillType willType = EnumDemonWillType.DEFAULT; + + public AbstractEntityThrowingDagger(EntityType type, World world) + { + super(type, world); + } + + public AbstractEntityThrowingDagger(EntityType type, ItemStack stack, World worldIn, LivingEntity throwerIn) + { + super(type, throwerIn, worldIn); + this.setItem(stack); + if (throwerIn instanceof PlayerEntity) + { + this.pickupStatus = AbstractArrowEntity.PickupStatus.ALLOWED; + } + } + + public AbstractEntityThrowingDagger(EntityType type, ItemStack stack, World worldIn, double x, double y, double z) + { + super(type, x, y, z, worldIn); + this.setItem(stack); + } + + @Override + public void setItem(ItemStack stack) + { + super.setItem(stack); +// this.containedStack = stack; + } + + protected Item getDefaultItem() + { + return BloodMagicItems.THROWING_DAGGER.get(); + } + + @Override + public IPacket createSpawnPacket() + { + return NetworkHooks.getEntitySpawningPacket(this); + } + + @Override + public void tick() + { +// super.tick(); +// RayTraceResult raytraceresult = ProjectileHelper.func_234618_a_(this, this::func_230298_a_); +//// boolean flag = false; +// if (raytraceresult.getType() == RayTraceResult.Type.BLOCK) +// { +// BlockPos blockpos = ((BlockRayTraceResult) raytraceresult).getPos().offset(((BlockRayTraceResult) raytraceresult).getFace()); +// BlockState blockstate = this.world.getBlockState(blockpos); +// Material material = blockstate.getMaterial(); +// if (blockstate.isAir() || blockstate.isIn(BlockTags.FIRE) || material.isLiquid() || material.isReplaceable()) +// { +// this.getEntityWorld().setBlockState(blockpos, BloodMagicBlocks.BLOOD_LIGHT.get().getDefaultState()); +// this.setDead(); +// } +// } + +// super.tick(); + this.baseTick(); + boolean flag = this.getNoClip(); + flag = false; + Vector3d vector3d = this.getMotion(); + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt(horizontalMag(vector3d)); + this.rotationYaw = (float) (MathHelper.atan2(vector3d.x, vector3d.z) * (double) (180F / (float) Math.PI)); + this.rotationPitch = (float) (MathHelper.atan2(vector3d.y, (double) f) * (double) (180F / (float) Math.PI)); + this.prevRotationYaw = this.rotationYaw; + this.prevRotationPitch = this.rotationPitch; + } + + BlockPos blockpos = this.getPosition(); + BlockState blockstate = this.world.getBlockState(blockpos); + if (!blockstate.isAir(this.world, blockpos) && !flag) + { + VoxelShape voxelshape = blockstate.getCollisionShape(this.world, blockpos); + if (!voxelshape.isEmpty()) + { + Vector3d vector3d1 = this.getPositionVec(); + + for (AxisAlignedBB axisalignedbb : voxelshape.toBoundingBoxList()) + { + if (axisalignedbb.offset(blockpos).contains(vector3d1)) + { + this.inGround = true; + break; + } + } + } + } + + if (this.arrowShake > 0) + { + --this.arrowShake; + } + + if (this.isWet()) + { + this.extinguish(); + } + +// this.inBlockState.getBlock() + + if (this.inGround && !flag) + { + if (this.inBlockState != blockstate && this.func_234593_u_()) + { + this.func_234594_z_(); + } else if (!this.world.isRemote) + { + this.func_225516_i_(); + } + + ++this.timeInGround; + } else + { + this.timeInGround = 0; + Vector3d vector3d2 = this.getPositionVec(); + Vector3d vector3d3 = vector3d2.add(vector3d); + RayTraceResult raytraceresult = this.world.rayTraceBlocks(new RayTraceContext(vector3d2, vector3d3, RayTraceContext.BlockMode.COLLIDER, RayTraceContext.FluidMode.NONE, this)); + if (raytraceresult.getType() != RayTraceResult.Type.MISS) + { + vector3d3 = raytraceresult.getHitVec(); + } + + while (!this.removed) + { + EntityRayTraceResult entityraytraceresult = this.rayTraceEntities(vector3d2, vector3d3); + if (entityraytraceresult != null) + { + raytraceresult = entityraytraceresult; + } + + if (raytraceresult != null && raytraceresult.getType() == RayTraceResult.Type.ENTITY) + { + Entity entity = ((EntityRayTraceResult) raytraceresult).getEntity(); + Entity entity1 = this.func_234616_v_(); + if (entity instanceof PlayerEntity && entity1 instanceof PlayerEntity && !((PlayerEntity) entity1).canAttackPlayer((PlayerEntity) entity)) + { + raytraceresult = null; + entityraytraceresult = null; + } + } + + if (raytraceresult != null && raytraceresult.getType() != RayTraceResult.Type.MISS && !flag && !net.minecraftforge.event.ForgeEventFactory.onProjectileImpact(this, raytraceresult)) + { + this.onImpact(raytraceresult); + this.isAirBorne = true; + } + + if (entityraytraceresult == null || this.getPierceLevel() <= 0) + { + break; + } + + raytraceresult = null; + } + + vector3d = this.getMotion(); + double d3 = vector3d.x; + double d4 = vector3d.y; + double d0 = vector3d.z; + if (this.getIsCritical()) + { + for (int i = 0; i < 4; ++i) + { + this.world.addParticle(ParticleTypes.CRIT, this.getPosX() + d3 * (double) i / 4.0D, this.getPosY() + d4 * (double) i / 4.0D, this.getPosZ() + d0 * (double) i / 4.0D, -d3, -d4 + 0.2D, -d0); + } + } + + double d5 = this.getPosX() + d3; + double d1 = this.getPosY() + d4; + double d2 = this.getPosZ() + d0; + float f1 = MathHelper.sqrt(horizontalMag(vector3d)); + if (flag) + { + this.rotationYaw = (float) (MathHelper.atan2(-d3, -d0) * (double) (180F / (float) Math.PI)); + } else + { + this.rotationYaw = (float) (MathHelper.atan2(d3, d0) * (double) (180F / (float) Math.PI)); + } + + this.rotationPitch = (float) (MathHelper.atan2(d4, (double) f1) * (double) (180F / (float) Math.PI)); + this.rotationPitch = func_234614_e_(this.prevRotationPitch, this.rotationPitch); + this.rotationYaw = func_234614_e_(this.prevRotationYaw, this.rotationYaw); + float f2 = 0.99F; + float f3 = 0.05F; + if (this.isInWater()) + { + for (int j = 0; j < 4; ++j) + { + float f4 = 0.25F; + this.world.addParticle(ParticleTypes.BUBBLE, d5 - d3 * 0.25D, d1 - d4 * 0.25D, d2 - d0 * 0.25D, d3, d4, d0); + } + + f2 = this.getWaterDrag(); + } + + this.setMotion(vector3d.scale((double) f2)); + if (!this.hasNoGravity() && !flag) + { + Vector3d vector3d4 = this.getMotion(); + this.setMotion(vector3d4.x, vector3d4.y - (double) 0.05F, vector3d4.z); + } + + this.setPosition(d5, d1, d2); + this.doBlockCollisions(); + } + } + + @Override + public void move(MoverType typeIn, Vector3d pos) + { + super.move(typeIn, pos); + if (typeIn != MoverType.SELF && this.func_234593_u_()) + { + this.func_234594_z_(); + } + + } + + public void writeAdditional(CompoundNBT compound) + { + super.writeAdditional(compound); + compound.putShort("life", (short) this.ticksInGround); + if (this.inBlockState != null) + { + compound.put("inBlockState", NBTUtil.writeBlockState(this.inBlockState)); + } + + compound.putByte("shake", (byte) this.arrowShake); + compound.putBoolean("inGround", this.inGround); + compound.putByte("pickup", (byte) this.pickupStatus.ordinal()); + compound.putDouble("damage", this.damage); +// compound.putBoolean("crit", this.getIsCritical()); +// compound.putByte("PierceLevel", this.getPierceLevel()); + compound.putString("SoundEvent", Registry.SOUND_EVENT.getKey(this.hitSound).toString()); +// compound.putBoolean("ShotFromCrossbow", this.getShotFromCrossbow()); + compound.putDouble("willDrop", willDrop); +// this.containedStack.write(compound); + compound.putString("willType", this.willType.name); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readAdditional(CompoundNBT compound) + { + super.readAdditional(compound); + this.ticksInGround = compound.getShort("life"); + if (compound.contains("inBlockState", 10)) + { + this.inBlockState = NBTUtil.readBlockState(compound.getCompound("inBlockState")); + } + + this.arrowShake = compound.getByte("shake") & 255; + this.inGround = compound.getBoolean("inGround"); + if (compound.contains("damage", 99)) + { + this.damage = compound.getDouble("damage"); + } + + if (compound.contains("pickup", 99)) + { + this.pickupStatus = AbstractArrowEntity.PickupStatus.getByOrdinal(compound.getByte("pickup")); + } else if (compound.contains("player", 99)) + { + this.pickupStatus = compound.getBoolean("player") ? AbstractArrowEntity.PickupStatus.ALLOWED + : AbstractArrowEntity.PickupStatus.DISALLOWED; + } + this.willDrop = compound.getDouble("willDrop"); +// this.containedStack = ItemStack.read(compound); + this.willType = EnumDemonWillType.getType(compound.getString("willType")); + +// this.setIsCritical(compound.getBoolean("crit")); +// this.setPierceLevel(compound.getByte("PierceLevel")); +// if (compound.contains("SoundEvent", 8)) { +// this.hitSound = Registry.SOUND_EVENT.getOptional(new ResourceLocation(compound.getString("SoundEvent"))).orElse(this.getHitEntitySound()); +// } +// +// this.setShotFromCrossbow(compound.getBoolean("ShotFromCrossbow")); + } + + public void setDamage(double damage) + { + this.damage = damage; + } + + public double getDamage() + { + return this.damage; + } + + protected void onEntityHit(EntityRayTraceResult p_213868_1_) + { + super.onEntityHit(p_213868_1_); + Entity entity = p_213868_1_.getEntity(); + float f = (float) this.getMotion().length(); + int i = MathHelper.ceil(MathHelper.clamp(this.damage, 0.0D, 2.147483647E9D)); + if (this.getPierceLevel() > 0) + { + if (this.piercedEntities == null) + { + this.piercedEntities = new IntOpenHashSet(5); + } + + if (this.hitEntities == null) + { + this.hitEntities = Lists.newArrayListWithCapacity(5); + } + + if (this.piercedEntities.size() >= this.getPierceLevel() + 1) + { + this.remove(); + return; + } + + this.piercedEntities.add(entity.getEntityId()); + } + + if (this.getIsCritical()) + { + long j = (long) this.rand.nextInt(i / 2 + 2); + i = (int) Math.min(j + (long) i, 2147483647L); + } + + Entity entity1 = this.func_234616_v_(); + DamageSource damagesource; + if (entity1 == null) + { + damagesource = DamageSource.causeThrownDamage(this, this); + } else + { + damagesource = DamageSource.causeThrownDamage(this, entity1); + if (entity1 instanceof LivingEntity) + { + ((LivingEntity) entity1).setLastAttackedEntity(entity); + } + } + + boolean flag = entity.getType() == EntityType.ENDERMAN; + int k = entity.getFireTimer(); + if (this.isBurning() && !flag) + { + entity.setFire(5); + } + + if (entity.attackEntityFrom(damagesource, (float) i)) + { + if (flag) + { + return; + } + + if (!entity.isAlive() && entity1 instanceof PlayerEntity && entity instanceof LivingEntity) + { + PlayerDemonWillHandler.addDemonWill(willType, (PlayerEntity) entity1, this.getWillDropForMobHealth(((LivingEntity) entity).getMaxHealth())); + } + + if (entity instanceof LivingEntity) + { + LivingEntity livingentity = (LivingEntity) entity; +// if (!this.world.isRemote && this.getPierceLevel() <= 0) +// { +// livingentity.setArrowCountInEntity(livingentity.getArrowCountInEntity() + 1); +// } + + if (this.knockbackStrength > 0) + { + Vector3d vector3d = this.getMotion().mul(1.0D, 0.0D, 1.0D).normalize().scale((double) this.knockbackStrength * 0.6D); + if (vector3d.lengthSquared() > 0.0D) + { + livingentity.addVelocity(vector3d.x, 0.1D, vector3d.z); + } + } + + if (!this.world.isRemote && entity1 instanceof LivingEntity) + { + EnchantmentHelper.applyThornEnchantments(livingentity, entity1); + EnchantmentHelper.applyArthropodEnchantments((LivingEntity) entity1, livingentity); + } + + this.daggerHit(livingentity); + if (entity1 != null && livingentity != entity1 && livingentity instanceof PlayerEntity && entity1 instanceof ServerPlayerEntity && !this.isSilent()) + { + ((ServerPlayerEntity) entity1).connection.sendPacket(new SChangeGameStatePacket(SChangeGameStatePacket.field_241770_g_, 0.0F)); + } + + if (!entity.isAlive() && this.hitEntities != null) + { + this.hitEntities.add(livingentity); + } + } + + this.playSound(this.hitSound, 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + if (this.getPierceLevel() <= 0) + { + this.remove(); + } + } else + { + entity.forceFireTicks(k); + this.setMotion(this.getMotion().scale(-0.1D)); + this.rotationYaw += 180.0F; + this.prevRotationYaw += 180.0F; + if (!this.world.isRemote && this.getMotion().lengthSquared() < 1.0E-7D) + { + if (this.pickupStatus == AbstractArrowEntity.PickupStatus.ALLOWED) + { + this.entityDropItem(this.getArrowStack(), 0.1F); + } + + this.remove(); + } + } + + } + + /** + * Called by a player entity when they collide with an entity + */ + @Override + public void onCollideWithPlayer(PlayerEntity entityIn) + { + if (!this.world.isRemote && (this.inGround || this.getNoClip()) && this.arrowShake <= 0) + { + boolean flag = this.pickupStatus == AbstractArrowEntity.PickupStatus.ALLOWED || this.pickupStatus == AbstractArrowEntity.PickupStatus.CREATIVE_ONLY && entityIn.abilities.isCreativeMode || this.getNoClip() && this.func_234616_v_().getUniqueID() == entityIn.getUniqueID(); + if (this.pickupStatus == AbstractArrowEntity.PickupStatus.ALLOWED && !entityIn.inventory.addItemStackToInventory(this.getArrowStack())) + { + flag = false; + } + + if (flag) + { +// System.out.println("Um test?"); + +// entityIn.onItemPickup(this, 1); + world.playSound(null, entityIn.getPosX(), entityIn.getPosY() + 0.5, entityIn.getPosZ(), SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, 0.2F, ((world.rand.nextFloat() - world.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + this.remove(); + } + + } + } + + protected ItemStack getArrowStack() + { + // Gets the item from the data manager + return getItem(); + } + + // OnHitBlock + protected void func_230299_a_(BlockRayTraceResult p_230299_1_) + { + this.inBlockState = this.world.getBlockState(p_230299_1_.getPos()); + super.func_230299_a_(p_230299_1_); + Vector3d vector3d = p_230299_1_.getHitVec().subtract(this.getPosX(), this.getPosY(), this.getPosZ()); + this.setMotion(vector3d); + Vector3d vector3d1 = vector3d.normalize().scale((double) 0.05F); + this.setRawPosition(this.getPosX() - vector3d1.x, this.getPosY() - vector3d1.y, this.getPosZ() - vector3d1.z); + this.playSound(this.getHitGroundSound(), 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + this.inGround = true; + this.arrowShake = 7; +// this.setIsCritical(false); +// this.setPierceLevel((byte) 0); + this.setHitSound(SoundEvents.ENTITY_ARROW_HIT); +// this.setShotFromCrossbow(false); + this.func_213870_w(); + } + + private void func_234594_z_() + { + this.inGround = false; + Vector3d vector3d = this.getMotion(); + this.setMotion(vector3d.mul((double) (this.rand.nextFloat() * 0.2F), (double) (this.rand.nextFloat() * 0.2F), (double) (this.rand.nextFloat() * 0.2F))); + this.ticksInGround = 0; + } + + private boolean func_234593_u_() + { + return this.inGround && this.world.hasNoCollisions((new AxisAlignedBB(this.getPositionVec(), this.getPositionVec())).grow(0.06D)); + } + + protected void func_225516_i_() + { + ++this.ticksInGround; + if (this.ticksInGround >= 1200) + { + this.remove(); + } + + } + + protected void daggerHit(LivingEntity living) + { + } + + /** + * The sound made when an entity is hit by this projectile + */ + protected SoundEvent getHitEntitySound() + { + return SoundEvents.ENTITY_ARROW_HIT; + } + + protected final SoundEvent getHitGroundSound() + { + return this.hitSound; + } + + private void func_213870_w() + { + if (this.hitEntities != null) + { + this.hitEntities.clear(); + } + + if (this.piercedEntities != null) + { + this.piercedEntities.clear(); + } + + } + + public void setHitSound(SoundEvent soundIn) + { + this.hitSound = soundIn; + } + + public boolean getNoClip() + { + if (!this.world.isRemote) + { + return this.noClip; + } else + { + return false; +// return (this.dataManager.get(CRITICAL) & 2) != 0; + } + } + + public boolean getIsCritical() + { +// byte b0 = this.dataManager.get(CRITICAL); +// return (b0 & 1) != 0; + return false; + } + + public byte getPierceLevel() + { + return 0; +// return this.dataManager.get(PIERCE_LEVEL); + } + + protected float getWaterDrag() + { + return 0.6F; + } + + /** + * Gets the EntityRayTraceResult representing the entity hit + */ + @Nullable + protected EntityRayTraceResult rayTraceEntities(Vector3d startVec, Vector3d endVec) + { + return ProjectileHelper.rayTraceEntities(this.world, this, startVec, endVec, this.getBoundingBox().expand(this.getMotion()).grow(1.0D), this::func_230298_a_); + } + + protected boolean func_230298_a_(Entity p_230298_1_) + { + return super.func_230298_a_(p_230298_1_) && (this.piercedEntities == null || !this.piercedEntities.contains(p_230298_1_.getEntityId())); + } + +// protected float getGravityVelocity() +// { +// return 0; +// } + + public void setWillDrop(double willDrop) + { + this.willDrop = willDrop; + } + + public double getWillDropForMobHealth(double hp) + { + return this.willDrop * hp / 20D; + } + + public void setWillType(EnumDemonWillType type) + { + this.willType = type; + } + + @OnlyIn(Dist.CLIENT) + private IParticleData makeParticle() + { + ItemStack itemstack = this.func_213882_k(); + return (IParticleData) (itemstack.isEmpty() ? ParticleTypes.LAVA + : new ItemParticleData(ParticleTypes.ITEM, itemstack)); + } + + /** + * Handler for {@link World#setEntityState} + */ + @OnlyIn(Dist.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 3) + { + IParticleData iparticledata = this.makeParticle(); + + for (int i = 0; i < 8; ++i) + { + this.world.addParticle(iparticledata, this.getPosX(), this.getPosY(), this.getPosZ(), 0.0D, 0.0D, 0.0D); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/entity/projectile/EntityBloodLight.java b/src/main/java/wayoftime/bloodmagic/entity/projectile/EntityBloodLight.java new file mode 100644 index 00000000..2a82cb10 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/entity/projectile/EntityBloodLight.java @@ -0,0 +1,103 @@ +package wayoftime.bloodmagic.entity.projectile; + +import net.minecraft.block.BlockState; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.projectile.ProjectileHelper; +import net.minecraft.entity.projectile.ProjectileItemEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.network.IPacket; +import net.minecraft.particles.IParticleData; +import net.minecraft.particles.ItemParticleData; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.network.NetworkHooks; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.registries.BloodMagicEntityTypes; + +public class EntityBloodLight extends ProjectileItemEntity +{ + public EntityBloodLight(EntityType p_i50159_1_, World p_i50159_2_) + { + super(p_i50159_1_, p_i50159_2_); + } + + public EntityBloodLight(World worldIn, LivingEntity throwerIn) + { + super(BloodMagicEntityTypes.BLOOD_LIGHT.getEntityType(), throwerIn, worldIn); + } + + public EntityBloodLight(World worldIn, double x, double y, double z) + { + super(BloodMagicEntityTypes.BLOOD_LIGHT.getEntityType(), x, y, z, worldIn); + } + + protected Item getDefaultItem() + { + return BloodMagicItems.REAGENT_BLOOD_LIGHT.get(); + } + + @Override + public IPacket createSpawnPacket() + { + return NetworkHooks.getEntitySpawningPacket(this); + } + + @Override + public void tick() + { + super.tick(); + RayTraceResult raytraceresult = ProjectileHelper.func_234618_a_(this, this::func_230298_a_); +// boolean flag = false; + if (raytraceresult.getType() == RayTraceResult.Type.BLOCK) + { + BlockPos blockpos = ((BlockRayTraceResult) raytraceresult).getPos().offset(((BlockRayTraceResult) raytraceresult).getFace()); + BlockState blockstate = this.world.getBlockState(blockpos); + Material material = blockstate.getMaterial(); + if (blockstate.isAir() || blockstate.isIn(BlockTags.FIRE) || material.isLiquid() || material.isReplaceable()) + { + this.getEntityWorld().setBlockState(blockpos, BloodMagicBlocks.BLOOD_LIGHT.get().getDefaultState()); + this.setDead(); + } + } + } + + protected float getGravityVelocity() + { + return 0; + } + + @OnlyIn(Dist.CLIENT) + private IParticleData makeParticle() + { + ItemStack itemstack = this.func_213882_k(); + return (IParticleData) (itemstack.isEmpty() ? ParticleTypes.LAVA + : new ItemParticleData(ParticleTypes.ITEM, itemstack)); + } + + /** + * Handler for {@link World#setEntityState} + */ + @OnlyIn(Dist.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 3) + { + IParticleData iparticledata = this.makeParticle(); + + for (int i = 0; i < 8; ++i) + { + this.world.addParticle(iparticledata, this.getPosX(), this.getPosY(), this.getPosZ(), 0.0D, 0.0D, 0.0D); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/entity/projectile/EntityShapedCharge.java b/src/main/java/wayoftime/bloodmagic/entity/projectile/EntityShapedCharge.java new file mode 100644 index 00000000..7c2304a2 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/entity/projectile/EntityShapedCharge.java @@ -0,0 +1,191 @@ +package wayoftime.bloodmagic.entity.projectile; + +import java.util.Optional; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.projectile.ProjectileHelper; +import net.minecraft.entity.projectile.ThrowableEntity; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.network.IPacket; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.tags.BlockTags; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.network.NetworkHooks; +import wayoftime.bloodmagic.anointment.AnointmentHolder; +import wayoftime.bloodmagic.common.block.BlockShapedExplosive; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.registries.BloodMagicEntityTypes; +import wayoftime.bloodmagic.tile.TileExplosiveCharge; + +public class EntityShapedCharge extends ThrowableEntity +{ + private static final DataParameter> ITEMSTACK_DATA = EntityDataManager.createKey(EntityShapedCharge.class, DataSerializers.OPTIONAL_BLOCK_STATE); +// private BlockState fallTile = BloodMagicBlocks.SHAPED_CHARGE.get().getDefaultState(); + private AnointmentHolder holder; + + public EntityShapedCharge(EntityType p_i50159_1_, World p_i50159_2_) + { + super(p_i50159_1_, p_i50159_2_); + } + + public EntityShapedCharge(World worldIn, Block block, LivingEntity throwerIn) + { + super(BloodMagicEntityTypes.SHAPED_CHARGE.getEntityType(), throwerIn, worldIn); +// this.fallTile = block.getDefaultState(); + this.setFallTile(block.getDefaultState()); + } + + public EntityShapedCharge(World worldIn, Block block, double x, double y, double z) + { + super(BloodMagicEntityTypes.SHAPED_CHARGE.getEntityType(), x, y, z, worldIn); +// this.fallTile = block.getDefaultState(); + this.setFallTile(block.getDefaultState()); + } + + public void setAnointmentHolder(AnointmentHolder holder) + { + this.holder = holder; + } + + public void setFallTile(BlockState state) + { + this.dataManager.set(ITEMSTACK_DATA, Optional.of(state)); + } + + @Override + public void tick() + { + super.tick(); + RayTraceResult raytraceresult = ProjectileHelper.func_234618_a_(this, this::func_230298_a_); +// boolean flag = false; + if (world.isRemote) + { + return; + } + if (raytraceresult.getType() == RayTraceResult.Type.BLOCK) + { + Direction faceHit = ((BlockRayTraceResult) raytraceresult).getFace(); + BlockPos blockpos = ((BlockRayTraceResult) raytraceresult).getPos().offset(((BlockRayTraceResult) raytraceresult).getFace()); + BlockState blockstate = this.world.getBlockState(blockpos); + Material material = blockstate.getMaterial(); +// return state.isAir() || state.isIn(BlockTags.FIRE) || material.isLiquid() || material.isReplaceable(); + BlockState fallTile = this.getBlockState(); + if (blockstate.isAir() || blockstate.isIn(BlockTags.FIRE) || material.isLiquid() || material.isReplaceable()) + { + this.getEntityWorld().setBlockState(blockpos, fallTile.with(BlockShapedExplosive.ATTACHED, faceHit)); + TileEntity tile = this.getEntityWorld().getTileEntity(blockpos); + if (tile instanceof TileExplosiveCharge) + { + ((TileExplosiveCharge) tile).setAnointmentHolder(holder); + } + this.setDead(); + } else + { +// BlockItem d; + this.entityDropItem(fallTile.getBlock()); + this.setDead(); +// blockstate.isReplaceable(BlockItemUseContext) + } + } + } + + @Override + protected void writeAdditional(CompoundNBT compound) + { + compound.put("BlockState", NBTUtil.writeBlockState(this.getBlockState())); + if (holder != null) + compound.put("holder", holder.serialize()); +// compound.putInt("Time", this.fallTime); +// compound.putBoolean("DropItem", this.shouldDropItem); +// compound.putBoolean("HurtEntities", this.hurtEntities); +// compound.putFloat("FallHurtAmount", this.fallHurtAmount); +// compound.putInt("FallHurtMax", this.fallHurtMax); +// if (this.tileEntityData != null) { +// compound.put("TileEntityData", this.tileEntityData); +// } + + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + @Override + protected void readAdditional(CompoundNBT compound) + { + BlockState fallTile = NBTUtil.readBlockState(compound.getCompound("BlockState")); + this.setFallTile(fallTile); + if (compound.contains("holder")) + this.holder = AnointmentHolder.fromNBT(compound.getCompound("holder")); +// this.fallTime = compound.getInt("Time"); +// if (compound.contains("HurtEntities", 99)) { +// this.hurtEntities = compound.getBoolean("HurtEntities"); +// this.fallHurtAmount = compound.getFloat("FallHurtAmount"); +// this.fallHurtMax = compound.getInt("FallHurtMax"); +// } else if (this.fallTile.isIn(BlockTags.ANVIL)) { +// this.hurtEntities = true; +// } +// +// if (compound.contains("DropItem", 99)) { +// this.shouldDropItem = compound.getBoolean("DropItem"); +// } +// +// if (compound.contains("TileEntityData", 10)) { +// this.tileEntityData = compound.getCompound("TileEntityData"); +// } + + if (fallTile.isAir()) + { + fallTile = BloodMagicBlocks.SHAPED_CHARGE.get().getDefaultState(); + } + + } + + @Override + protected void registerData() + { +// FallingBlockEntity d; +// super.registerData(); + // TODO Auto-generated method stub +// super.registerData(); + this.dataManager.register(ITEMSTACK_DATA, Optional.of(Blocks.SAND.getDefaultState())); + } + + public BlockState getBlockState() + { + // TODO Auto-generated method stub + return this.dataManager.get(ITEMSTACK_DATA).get(); + } + + @OnlyIn(Dist.CLIENT) + public World getWorldObj() + { + return this.world; + } + +// @Override +// public IPacket createSpawnPacket() +// { +// return new SSpawnObjectPacket(this, Block.getStateId(this.getBlockState())); +// } + + @Override + public IPacket createSpawnPacket() + { + return NetworkHooks.getEntitySpawningPacket(this); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/entity/projectile/EntitySoulSnare.java b/src/main/java/wayoftime/bloodmagic/entity/projectile/EntitySoulSnare.java new file mode 100644 index 00000000..699f79a8 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/entity/projectile/EntitySoulSnare.java @@ -0,0 +1,95 @@ +package wayoftime.bloodmagic.entity.projectile; + +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.projectile.ArrowEntity; +import net.minecraft.entity.projectile.ProjectileItemEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.network.IPacket; +import net.minecraft.particles.IParticleData; +import net.minecraft.particles.ItemParticleData; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.potion.EffectInstance; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.EntityRayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.network.NetworkHooks; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.registries.BloodMagicEntityTypes; +import wayoftime.bloodmagic.potion.BloodMagicPotions; + +public class EntitySoulSnare extends ProjectileItemEntity +{ + public EntitySoulSnare(EntityType p_i50159_1_, World p_i50159_2_) + { + super(p_i50159_1_, p_i50159_2_); + } + + public EntitySoulSnare(World worldIn, LivingEntity throwerIn) + { + super(BloodMagicEntityTypes.SNARE.getEntityType(), throwerIn, worldIn); + } + + public EntitySoulSnare(World worldIn, double x, double y, double z) + { + super(BloodMagicEntityTypes.SNARE.getEntityType(), x, y, z, worldIn); + } + + protected Item getDefaultItem() + { + ArrowEntity d; + return BloodMagicItems.SOUL_SNARE.get(); + } + + @Override + public IPacket createSpawnPacket() + { + return NetworkHooks.getEntitySpawningPacket(this); + } + + /** + * Called when the arrow hits an entity + */ + protected void onEntityHit(EntityRayTraceResult result) + { + if (result.getEntity() == this.func_234616_v_() || this.ticksExisted < 2 || getEntityWorld().isRemote) + return; + + if (result.getEntity() instanceof LivingEntity) + { + ((LivingEntity) result.getEntity()).addPotionEffect(new EffectInstance(BloodMagicPotions.SOUL_SNARE, 300, 0)); + + result.getEntity().attackEntityFrom(DamageSource.causeThrownDamage(this, this.func_234616_v_()), (float) 0); + } + + this.setDead(); + } + + @OnlyIn(Dist.CLIENT) + private IParticleData makeParticle() + { + ItemStack itemstack = this.func_213882_k(); + return (IParticleData) (itemstack.isEmpty() ? ParticleTypes.ITEM_SNOWBALL + : new ItemParticleData(ParticleTypes.ITEM, itemstack)); + } + + /** + * Handler for {@link World#setEntityState} + */ + @OnlyIn(Dist.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 3) + { + IParticleData iparticledata = this.makeParticle(); + + for (int i = 0; i < 8; ++i) + { + this.world.addParticle(iparticledata, this.getPosX(), this.getPosY(), this.getPosZ(), 0.0D, 0.0D, 0.0D); + } + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/entity/projectile/EntityThrowingDagger.java b/src/main/java/wayoftime/bloodmagic/entity/projectile/EntityThrowingDagger.java new file mode 100644 index 00000000..259d70f3 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/entity/projectile/EntityThrowingDagger.java @@ -0,0 +1,26 @@ +package wayoftime.bloodmagic.entity.projectile; + +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import wayoftime.bloodmagic.common.registries.BloodMagicEntityTypes; + +public class EntityThrowingDagger extends AbstractEntityThrowingDagger +{ + public EntityThrowingDagger(EntityType type, World world) + { + super(type, world); + } + + public EntityThrowingDagger(ItemStack stack, World worldIn, LivingEntity throwerIn) + { + super(BloodMagicEntityTypes.THROWING_DAGGER.get(), stack, worldIn, throwerIn); + + } + + public EntityThrowingDagger(ItemStack stack, World worldIn, double x, double y, double z) + { + super(BloodMagicEntityTypes.THROWING_DAGGER.get(), stack, worldIn, x, y, z); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/entity/projectile/EntityThrowingDaggerSyringe.java b/src/main/java/wayoftime/bloodmagic/entity/projectile/EntityThrowingDaggerSyringe.java new file mode 100644 index 00000000..96838084 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/entity/projectile/EntityThrowingDaggerSyringe.java @@ -0,0 +1,48 @@ +package wayoftime.bloodmagic.entity.projectile; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.EntityRayTraceResult; +import net.minecraft.world.World; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.registries.BloodMagicEntityTypes; + +public class EntityThrowingDaggerSyringe extends AbstractEntityThrowingDagger +{ + public EntityThrowingDaggerSyringe(EntityType type, World world) + { + super(type, world); + } + + public EntityThrowingDaggerSyringe(ItemStack stack, World worldIn, LivingEntity throwerIn) + { + super(BloodMagicEntityTypes.THROWING_DAGGER.get(), stack, worldIn, throwerIn); + + } + + public EntityThrowingDaggerSyringe(ItemStack stack, World worldIn, double x, double y, double z) + { + super(BloodMagicEntityTypes.THROWING_DAGGER.get(), stack, worldIn, x, y, z); + } + + @Override + protected void onEntityHit(EntityRayTraceResult p_213868_1_) + { + super.onEntityHit(p_213868_1_); + Entity entity = p_213868_1_.getEntity(); + + if (entity instanceof LivingEntity) + { + double maxHealth = ((LivingEntity) entity).getMaxHealth(); + if (!entity.isAlive()) + { + int count = (int) (maxHealth / 20D) + (world.rand.nextDouble() < ((maxHealth % 20D) / 20D) ? 1 : 0); + if (count > 0) + InventoryHelper.spawnItemStack(world, this.getPosX(), this.getPosY(), this.getPosZ(), new ItemStack(BloodMagicItems.SLATE_AMPOULE.get(), count)); + } + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/event/ItemBindEvent.java b/src/main/java/wayoftime/bloodmagic/event/ItemBindEvent.java new file mode 100644 index 00000000..80e11c1c --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/event/ItemBindEvent.java @@ -0,0 +1,39 @@ +package wayoftime.bloodmagic.event; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraftforge.eventbus.api.Cancelable; +import net.minecraftforge.eventbus.api.Event; +import wayoftime.bloodmagic.common.item.IBindable; + +@Cancelable +public class ItemBindEvent extends Event +{ + private final PlayerEntity player; + private final ItemStack itemStack; + + /** + * This event is called whenever a player attempts to bind a + * {@link IBindable} item. + * + * @param player The player doing the binding + * @param itemStack The {@link ItemStack} that the player is binding + *

+ * This event is {@link Cancelable}.
+ */ + public ItemBindEvent(PlayerEntity player, ItemStack itemStack) + { + this.player = player; + this.itemStack = itemStack; + } + + public PlayerEntity getNewOwner() + { + return player; + } + + public ItemStack getBindingStack() + { + return itemStack; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/event/LivingEquipmentEvent.java b/src/main/java/wayoftime/bloodmagic/event/LivingEquipmentEvent.java new file mode 100644 index 00000000..82d9e007 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/event/LivingEquipmentEvent.java @@ -0,0 +1,96 @@ +package wayoftime.bloodmagic.event; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraftforge.eventbus.api.Event; +import wayoftime.bloodmagic.core.living.LivingStats; +import wayoftime.bloodmagic.core.living.LivingUpgrade; + +public class LivingEquipmentEvent extends Event +{ + +// public static final Event EXPERIENCE_GAIN = EventFactory.createArrayBacked(OnExperienceGain.class, handlers -> e -> { +// for (OnExperienceGain gain : handlers) if (gain.gainExperience(e) == EventResult.CANCEL) +// return EventResult.CANCEL; +// +// return EventResult.PASS; +// }); +// public static final Event LEVEL_UP = EventFactory.createArrayBacked(OnLevelUp.class, handlers -> e -> { +// for (OnLevelUp levelUp : handlers) levelUp.levelUp(e); +// }); +// +// public interface OnExperienceGain +// { +// EventResult gainExperience(GainExperience event); +// } +// +// public interface OnLevelUp +// { +// void levelUp(LevelUp event); +// } + + private final PlayerEntity player; + private final LivingStats stats; + + private LivingEquipmentEvent(PlayerEntity player, LivingStats stats) + { + this.player = player; + this.stats = stats; + } + + public PlayerEntity getPlayer() + { + return player; + } + + public LivingStats getStats() + { + return stats; + } + + public static class GainExperience extends LivingEquipmentEvent + { + + private final LivingUpgrade upgrade; + private double experience; + + public GainExperience(PlayerEntity player, LivingStats stats, LivingUpgrade upgrade, double experience) + { + super(player, stats); + this.upgrade = upgrade; + this.experience = experience; + } + + public LivingUpgrade getUpgrade() + { + return upgrade; + } + + public double getExperience() + { + return experience; + } + + public void setExperience(double experience) + { + this.experience = experience; + } + } + + public static class LevelUp extends LivingEquipmentEvent + { + + private final LivingUpgrade upgrade; + + public LevelUp(PlayerEntity player, LivingStats stats, LivingUpgrade upgrade) + { + super(player, stats); + + this.upgrade = upgrade; + } + + public LivingUpgrade getUpgrade() + { + return upgrade; + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/event/LivingEvent.java b/src/main/java/wayoftime/bloodmagic/event/LivingEvent.java new file mode 100644 index 00000000..57172317 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/event/LivingEvent.java @@ -0,0 +1,30 @@ +package wayoftime.bloodmagic.event; + +import net.minecraftforge.eventbus.api.Event; + +public class LivingEvent extends Event +{ + +// public static final Event JUMP = EventFactory.createArrayBacked(Jump.class, handlers -> e -> { +// for (Jump handler : handlers) if (handler.onJump(e) == EventResult.CANCEL) +// return EventResult.CANCEL; +// +// return EventResult.PASS; +// }); +// public static final Event DAMAGE = EventFactory.createArrayBacked(Damage.class, handlers -> (e, s, d) -> { +// for (Damage handler : handlers) if (handler.onDamage(e, s, d) == EventResult.CANCEL) +// return EventResult.CANCEL; +// +// return EventResult.PASS; +// }); +// +// public interface Jump +// { +// EventResult onJump(LivingEntity livingEntity); +// } +// +// public interface Damage +// { +// EventResult onDamage(LivingEntity livingEntity, DamageSource source, Value damage); +// } +} diff --git a/src/main/java/wayoftime/bloodmagic/event/RitualEvent.java b/src/main/java/wayoftime/bloodmagic/event/RitualEvent.java new file mode 100644 index 00000000..f5356ec8 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/event/RitualEvent.java @@ -0,0 +1,151 @@ +package wayoftime.bloodmagic.event; + +import java.util.UUID; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.eventbus.api.Cancelable; +import net.minecraftforge.eventbus.api.Event; +import wayoftime.bloodmagic.ritual.IMasterRitualStone; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.ritual.imperfect.IImperfectRitualStone; +import wayoftime.bloodmagic.ritual.imperfect.ImperfectRitual; + +public class RitualEvent extends Event +{ + private final IMasterRitualStone mrs; + private final UUID ownerId; + private final Ritual ritual; + + private RitualEvent(IMasterRitualStone mrs, UUID ownerId, Ritual ritual) + { + this.mrs = mrs; + this.ownerId = ownerId; + this.ritual = ritual; + } + + public IMasterRitualStone getRitualStone() + { + return mrs; + } + + public UUID getOwnerId() + { + return ownerId; + } + + public Ritual getRitual() + { + return ritual; + } + + /** + * This event is called when a ritual is activated. If cancelled, it will not + * activate. + *

+ * {@link WayofTime.bloodmagic.tile.TileMasterRitualStone#activateRitual(ItemStack, PlayerEntity, Ritual)} + */ + @Cancelable + public static class RitualActivatedEvent extends RitualEvent + { + + private final PlayerEntity player; + private final ItemStack crystalStack; + private final int crystalTier; + + public RitualActivatedEvent(IMasterRitualStone mrs, UUID ownerId, Ritual ritual, PlayerEntity player, ItemStack activationCrystal, int crystalTier) + { + super(mrs, ownerId, ritual); + + this.player = player; + this.crystalStack = activationCrystal; + this.crystalTier = crystalTier; + } + + public PlayerEntity getPlayer() + { + return player; + } + + public ItemStack getCrystalStack() + { + return crystalStack; + } + + public int getCrystalTier() + { + return crystalTier; + } + } + + /** + * This event is called when a Ritual effect is performed. If cancelled, the + * effect will not happen. + *

+ * {@link WayofTime.bloodmagic.tile.TileMasterRitualStone#performRitual(World, net.minecraft.util.math.BlockPos)} + */ + @Cancelable + public static class RitualRunEvent extends RitualEvent + { + + public RitualRunEvent(IMasterRitualStone mrs, UUID ownerId, Ritual ritual) + { + super(mrs, ownerId, ritual); + } + } + + /** + * This event is called when a Ritual is stopped by a {@link Ritual.BreakType}. + *

+ * {@link WayofTime.bloodmagic.tile.TileMasterRitualStone#stopRitual(Ritual.BreakType)} + */ + public static class RitualStopEvent extends RitualEvent + { + + private final Ritual.BreakType method; + + public RitualStopEvent(IMasterRitualStone mrs, UUID ownerId, Ritual ritual, Ritual.BreakType method) + { + super(mrs, ownerId, ritual); + + this.method = method; + } + + public Ritual.BreakType getMethod() + { + return method; + } + } + + @Cancelable + public static class ImperfectRitualActivatedEvent extends Event + { + + private final IImperfectRitualStone ims; + private final PlayerEntity activator; + private final ImperfectRitual imperfectRitual; + + public ImperfectRitualActivatedEvent(IImperfectRitualStone ims, PlayerEntity activator, ImperfectRitual imperfectRitual) + { + this.ims = ims; + this.activator = activator; + this.imperfectRitual = imperfectRitual; + } + + public IImperfectRitualStone getRitualStone() + { + return ims; + } + + public PlayerEntity getActivator() + { + return activator; + } + + public ImperfectRitual getImperfectRitual() + { + return imperfectRitual; + } + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/event/SacrificeKnifeUsedEvent.java b/src/main/java/wayoftime/bloodmagic/event/SacrificeKnifeUsedEvent.java new file mode 100644 index 00000000..6fc6bbd4 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/event/SacrificeKnifeUsedEvent.java @@ -0,0 +1,37 @@ +package wayoftime.bloodmagic.event; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraftforge.eventbus.api.Cancelable; +import net.minecraftforge.eventbus.api.Event; + +@Cancelable +public class SacrificeKnifeUsedEvent extends Event +{ + public final PlayerEntity player; + public final int healthDrained; + public int lpAdded; + public boolean shouldDrainHealth; + public boolean shouldFillAltar; + + /** + * This event is called whenever a player attempts to use a + * {@link WayofTime.bloodmagic.item.ItemSacrificialDagger} to self-sacrifice + * near an altar. + * + * @param player The player doing the sacrificing + * @param shouldDrainHealth Determines whether or not health is lost + * @param shouldFillAltar Determines whether or not an altar should be filled + * @param hp Amount of health lost + * @param lpAdded Amount of LP added to the altar + *

+ * This event is {@link Cancelable}.
+ */ + public SacrificeKnifeUsedEvent(PlayerEntity player, boolean shouldDrainHealth, boolean shouldFillAltar, int hp, int lpAdded) + { + this.player = player; + this.shouldDrainHealth = shouldDrainHealth; + this.shouldFillAltar = shouldFillAltar; + this.healthDrained = hp; + this.lpAdded = lpAdded; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/event/SoulNetworkEvent.java b/src/main/java/wayoftime/bloodmagic/event/SoulNetworkEvent.java new file mode 100644 index 00000000..c4079c4d --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/event/SoulNetworkEvent.java @@ -0,0 +1,116 @@ +package wayoftime.bloodmagic.event; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraftforge.eventbus.api.Cancelable; +import net.minecraftforge.eventbus.api.Event; +import wayoftime.bloodmagic.core.data.SoulNetwork; +import wayoftime.bloodmagic.core.data.SoulTicket; + +public class SoulNetworkEvent extends Event +{ + private final SoulNetwork network; + private SoulTicket ticket; + + public SoulNetworkEvent(SoulNetwork network, SoulTicket ticket) + { + this.network = network; + this.ticket = ticket; + } + + public SoulNetwork getNetwork() + { + return network; + } + + public SoulTicket getTicket() + { + return ticket; + } + + public void setTicket(SoulTicket ticket) + { + this.ticket = ticket; + } + + @Cancelable + public static class Syphon extends SoulNetworkEvent + { + private boolean shouldDamage; + + public Syphon(SoulNetwork network, SoulTicket ticket) + { + super(network, ticket); + } + + public boolean shouldDamage() + { + return shouldDamage; + } + + public void setShouldDamage(boolean shouldDamage) + { + this.shouldDamage = shouldDamage; + } + + public static class Item extends Syphon + { + + private final ItemStack stack; + + public Item(SoulNetwork network, SoulTicket ticket, ItemStack stack) + { + super(network, ticket); + + this.stack = stack; + } + + public ItemStack getStack() + { + return stack; + } + } + + public static class User extends Syphon + { + + private final PlayerEntity user; + + public User(SoulNetwork network, SoulTicket ticket, PlayerEntity user) + { + super(network, ticket); + + this.user = user; + } + + public PlayerEntity getUser() + { + return user; + } + } + } + + @Cancelable + public static class Fill extends SoulNetworkEvent + { + + private int maximum; + + public Fill(SoulNetwork network, SoulTicket ticket, int maximum) + { + super(network, ticket); + + this.maximum = maximum; + } + + public int getMaximum() + { + return maximum; + } + + public void setMaximum(int maximum) + { + this.maximum = maximum; + } + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/gson/SerializerBase.java b/src/main/java/wayoftime/bloodmagic/gson/SerializerBase.java new file mode 100644 index 00000000..80bd8135 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/gson/SerializerBase.java @@ -0,0 +1,28 @@ +package wayoftime.bloodmagic.gson; + +import java.lang.reflect.Type; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +public abstract class SerializerBase implements JsonDeserializer, JsonSerializer +{ + @Override + public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException + { + return context.deserialize(json, getType()); + } + + @Override + public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext context) + { + return context.serialize(src); + } + + public abstract Class getType(); +} diff --git a/src/main/java/wayoftime/bloodmagic/gson/Serializers.java b/src/main/java/wayoftime/bloodmagic/gson/Serializers.java new file mode 100644 index 00000000..f5546799 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/gson/Serializers.java @@ -0,0 +1,128 @@ +package wayoftime.bloodmagic.gson; + +import java.lang.reflect.Type; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSerializationContext; + +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.IDataSerializer; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.registries.ForgeRegistries; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; + +public class Serializers +{ + // Data serializers + public static final IDataSerializer WILL_TYPE_SERIALIZER = new IDataSerializer() + { + @Override + public void write(PacketBuffer buf, EnumDemonWillType value) + { + buf.writeEnumValue(value); + } + + @Override + public EnumDemonWillType read(PacketBuffer buf) + { + return buf.readEnumValue(EnumDemonWillType.class); + } + + @Override + public DataParameter createKey(int id) + { + return new DataParameter<>(id, this); + } + + @Override + public EnumDemonWillType copyValue(EnumDemonWillType value) + { + return EnumDemonWillType.valueOf(value.name()); + } + }; + + // Serializers + public static final SerializerBase FACING_SERIALIZER = new SerializerBase() + { + @Override + public Class getType() + { + return Direction.class; + } + + @Override + public Direction deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException + { + return Direction.byName(json.getAsString()); + } + }; + public static final SerializerBase RESOURCELOCATION_SERIALIZER = new SerializerBase() + { + @Override + public Class getType() + { + return ResourceLocation.class; + } + + @Override + public ResourceLocation deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException + { + String domain = json.getAsJsonObject().get("domain").getAsString(); + String path = json.getAsJsonObject().get("path").getAsString(); + return new ResourceLocation(domain, path); + } + + @Override + public JsonElement serialize(ResourceLocation src, Type typeOfSrc, JsonSerializationContext context) + { + JsonObject object = new JsonObject(); + object.addProperty("domain", src.getNamespace()); + object.addProperty("path", src.getPath()); + return object; + } + }; + public static final SerializerBase ITEMMETA_SERIALIZER = new SerializerBase() + { + @Override + public Class getType() + { + return ItemStack.class; + } + + @Override + public ItemStack deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException + { + ResourceLocation registryName = context.deserialize(json.getAsJsonObject().get("registryName").getAsJsonObject(), ResourceLocation.class); + int meta = json.getAsJsonObject().get("meta").getAsInt(); + return new ItemStack(ForgeRegistries.ITEMS.getValue(registryName), 1); + } + + @Override + public JsonElement serialize(ItemStack src, Type typeOfSrc, JsonSerializationContext context) + { + JsonObject jsonObject = new JsonObject(); + jsonObject.add("registryName", context.serialize(src.getItem().getRegistryName())); + jsonObject.addProperty("meta", src.getDamage()); + return jsonObject; + } + }; + + public static final Gson GSON = new GsonBuilder().serializeNulls().setPrettyPrinting().disableHtmlEscaping().registerTypeAdapter(FACING_SERIALIZER.getType(), FACING_SERIALIZER).registerTypeAdapter(RESOURCELOCATION_SERIALIZER.getType(), RESOURCELOCATION_SERIALIZER).registerTypeAdapter(ITEMMETA_SERIALIZER.getType(), ITEMMETA_SERIALIZER).create(); + + static + { + DataSerializers.registerSerializer(WILL_TYPE_SERIALIZER); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/impl/BloodMagicAPI.java b/src/main/java/wayoftime/bloodmagic/impl/BloodMagicAPI.java new file mode 100644 index 00000000..2b4b1143 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/impl/BloodMagicAPI.java @@ -0,0 +1,114 @@ +package wayoftime.bloodmagic.impl; + +import java.util.List; +import java.util.function.Predicate; + +import javax.annotation.Nonnull; + +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; + +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import wayoftime.bloodmagic.altar.ComponentType; +import wayoftime.bloodmagic.api.IBloodMagicAPI; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.incense.EnumTranquilityType; +import wayoftime.bloodmagic.incense.IncenseTranquilityRegistry; +import wayoftime.bloodmagic.incense.TranquilityStack; +import wayoftime.bloodmagic.util.BMLog; +import wayoftime.bloodmagic.will.PlayerDemonWillHandler; + +public class BloodMagicAPI implements IBloodMagicAPI +{ + + public static final BloodMagicAPI INSTANCE = new BloodMagicAPI(); + + private final BloodMagicBlacklist blacklist; + private final BloodMagicRecipeRegistrar recipeRegistrar; + private final BloodMagicValueManager valueManager; + private final Multimap altarComponents; + + public BloodMagicAPI() + { + this.blacklist = new BloodMagicBlacklist(); + this.recipeRegistrar = new BloodMagicRecipeRegistrar(); + this.valueManager = new BloodMagicValueManager(); + this.altarComponents = ArrayListMultimap.create(); + } + + @Nonnull + @Override + public BloodMagicBlacklist getBlacklist() + { + return blacklist; + } + + @Nonnull + public BloodMagicRecipeRegistrar getRecipeRegistrar() + { + return recipeRegistrar; + } + +// + @Nonnull + @Override + public BloodMagicValueManager getValueManager() + { + return valueManager; + } + + @Override + public void registerAltarComponent(@Nonnull BlockState state, @Nonnull String componentType) + { + ComponentType component = ComponentType.getType(componentType); + + if (component != null) + { + BMLog.API_VERBOSE.info("Registered {} as a {} altar component.", state, componentType); + altarComponents.put(component, state); + } else + BMLog.API.warn("Invalid Altar component type: {}.", componentType); + } + + @Override + public void unregisterAltarComponent(@Nonnull BlockState state, @Nonnull String componentType) + { + ComponentType component = ComponentType.getType(componentType); + + if (component != null) + { + BMLog.API_VERBOSE.info("Unregistered {} from being a {} altar component.", state, componentType); + altarComponents.remove(component, state); + } else + BMLog.API.warn("Invalid Altar component type: {}.", componentType); + } + + @Override + public void registerTranquilityHandler(@Nonnull Predicate blockState, @Nonnull String tranquilityType, double value) + { + EnumTranquilityType type = EnumTranquilityType.getType(tranquilityType); + + if (type != null) + { + IncenseTranquilityRegistry.registerTranquilityHandler((world, pos, block, state) -> blockState.test(state) + ? new TranquilityStack(type, value) + : null); + } else + { + BMLog.API.warn("Invalid Tranquility type: {}.", tranquilityType); + } + } + + @Override + public double getTotalDemonWill(String willType, PlayerEntity player) + { + return PlayerDemonWillHandler.getTotalDemonWill(EnumDemonWillType.getType(willType), player); + } + + @Nonnull + public List getComponentStates(ComponentType component) + { + return (List) altarComponents.get(component); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/impl/BloodMagicBlacklist.java b/src/main/java/wayoftime/bloodmagic/impl/BloodMagicBlacklist.java new file mode 100644 index 00000000..e9d5d81b --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/impl/BloodMagicBlacklist.java @@ -0,0 +1,125 @@ +package wayoftime.bloodmagic.impl; + +import java.util.Set; + +import javax.annotation.Nonnull; + +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.api.IBloodMagicBlacklist; +import wayoftime.bloodmagic.util.BMLog; + +public class BloodMagicBlacklist implements IBloodMagicBlacklist +{ + + private final Set teleposer; + private final Set teleposerEntities; + private final Set transposition; + private final Set greenGrove; + private final Set sacrifice; + + public BloodMagicBlacklist() + { + this.teleposer = Sets.newHashSet(); + this.teleposerEntities = Sets.newHashSet(); + this.transposition = Sets.newHashSet(); + this.greenGrove = Sets.newHashSet(); + this.sacrifice = Sets.newHashSet(); + } + + @Override + public void addTeleposer(@Nonnull BlockState state) + { + if (!teleposer.contains(state)) + { + BMLog.API_VERBOSE.info("Blacklist: Added {} to the Teleposer blacklist.", state); + teleposer.add(state); + } + } + + public void addTeleposer(@Nonnull Block block) + { + for (BlockState state : block.getStateContainer().getValidStates()) addTeleposer(state); + } + + @Override + public void addTeleposer(@Nonnull ResourceLocation entityId) + { + if (!teleposerEntities.contains(entityId)) + { + BMLog.API_VERBOSE.info("Blacklist: Added {} to the Teleposer blacklist.", entityId); + teleposerEntities.add(entityId); + } + } + + @Override + public void addTransposition(@Nonnull BlockState state) + { + if (!transposition.contains(state)) + { + BMLog.API_VERBOSE.info("Blacklist: Added {} to the Transposition blacklist.", state); + transposition.add(state); + } + } + + public void addTransposition(@Nonnull Block block) + { + for (BlockState state : block.getStateContainer().getValidStates()) addTransposition(state); + } + + @Override + public void addGreenGrove(@Nonnull BlockState state) + { + if (!greenGrove.contains(state)) + { + BMLog.API_VERBOSE.info("Blacklist: Added {} to the Green Grove blacklist.", state); + greenGrove.add(state); + } + } + + public void addGreenGrove(@Nonnull Block block) + { + for (BlockState state : block.getStateContainer().getValidStates()) addGreenGrove(state); + } + + @Override + public void addWellOfSuffering(@Nonnull ResourceLocation entityId) + { + if (!sacrifice.contains(entityId)) + { + BMLog.API_VERBOSE.info("Blacklist: Added {} to the Well of Suffering blacklist.", entityId); + sacrifice.add(entityId); + } + } + + // Internal use getters + + public Set getTeleposer() + { + return ImmutableSet.copyOf(teleposer); + } + + public Set getTeleposerEntities() + { + return ImmutableSet.copyOf(teleposerEntities); + } + + public Set getTransposition() + { + return ImmutableSet.copyOf(transposition); + } + + public Set getGreenGrove() + { + return ImmutableSet.copyOf(greenGrove); + } + + public Set getSacrifice() + { + return ImmutableSet.copyOf(sacrifice); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/impl/BloodMagicCorePlugin.java b/src/main/java/wayoftime/bloodmagic/impl/BloodMagicCorePlugin.java new file mode 100644 index 00000000..20d58bb1 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/impl/BloodMagicCorePlugin.java @@ -0,0 +1,60 @@ +package wayoftime.bloodmagic.impl; + +import net.minecraft.block.Blocks; +import net.minecraft.block.FireBlock; +import net.minecraft.block.GrassBlock; +import net.minecraft.block.LeavesBlock; +import net.minecraft.tags.BlockTags; +import wayoftime.bloodmagic.altar.ComponentType; +import wayoftime.bloodmagic.api.IBloodMagicAPI; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.incense.EnumTranquilityType; +import wayoftime.bloodmagic.incense.IncenseTranquilityRegistry; +import wayoftime.bloodmagic.incense.TranquilityStack; + +public class BloodMagicCorePlugin +{ + public static final BloodMagicCorePlugin INSTANCE = new BloodMagicCorePlugin(); + + public void register(IBloodMagicAPI apiInterface) + { + BloodMagicAPI api = (BloodMagicAPI) apiInterface; + api.getValueManager().setTranquility(Blocks.LAVA, new TranquilityStack(EnumTranquilityType.LAVA, 1.2D)); +// api.getValueManager().setTranquility(Blocks.FLOWING_LAVA, new TranquilityStack(EnumTranquilityType.LAVA, 1.2D)); + api.getValueManager().setTranquility(Blocks.WATER, new TranquilityStack(EnumTranquilityType.WATER, 1.0D)); +// api.getValueManager().setTranquility(Blocks.water, new TranquilityStack(EnumTranquilityType.WATER, 1.0D)); + api.getValueManager().setTranquility(BloodMagicBlocks.LIFE_ESSENCE_BLOCK.get(), new TranquilityStack(EnumTranquilityType.WATER, 1.5D)); + api.getValueManager().setTranquility(Blocks.NETHERRACK, new TranquilityStack(EnumTranquilityType.FIRE, 0.5D)); + api.getValueManager().setTranquility(Blocks.DIRT, new TranquilityStack(EnumTranquilityType.EARTHEN, 0.25D)); + api.getValueManager().setTranquility(Blocks.FARMLAND, new TranquilityStack(EnumTranquilityType.EARTHEN, 1.0D)); + api.getValueManager().setTranquility(Blocks.POTATOES, new TranquilityStack(EnumTranquilityType.CROP, 1.0D)); + api.getValueManager().setTranquility(Blocks.CARROTS, new TranquilityStack(EnumTranquilityType.CROP, 1.0D)); + api.getValueManager().setTranquility(Blocks.WHEAT, new TranquilityStack(EnumTranquilityType.CROP, 1.0D)); + api.getValueManager().setTranquility(Blocks.NETHER_WART, new TranquilityStack(EnumTranquilityType.CROP, 1.0D)); + api.getValueManager().setTranquility(Blocks.BEETROOTS, new TranquilityStack(EnumTranquilityType.CROP, 1.0D)); + + apiInterface.registerTranquilityHandler(state -> state.getBlock() instanceof LeavesBlock, EnumTranquilityType.PLANT.name(), 1.0D); + apiInterface.registerTranquilityHandler(state -> state.getBlock() instanceof FireBlock, EnumTranquilityType.FIRE.name(), 1.0D); + apiInterface.registerTranquilityHandler(state -> state.getBlock() instanceof GrassBlock, EnumTranquilityType.EARTHEN.name(), 0.5D); + apiInterface.registerTranquilityHandler(state -> BlockTags.LOGS.contains(state.getBlock()), EnumTranquilityType.TREE.name(), 1.0D); + + IncenseTranquilityRegistry.registerTranquilityHandler((world, pos, block, state) -> BloodMagicAPI.INSTANCE.getValueManager().getTranquility().get(state)); + + apiInterface.registerAltarComponent(Blocks.GLOWSTONE.getDefaultState(), ComponentType.GLOWSTONE.name()); + apiInterface.registerAltarComponent(Blocks.SEA_LANTERN.getDefaultState(), ComponentType.GLOWSTONE.name()); + apiInterface.registerAltarComponent(BloodMagicBlocks.BLOODSTONE.get().getDefaultState(), ComponentType.BLOODSTONE.name()); + apiInterface.registerAltarComponent(BloodMagicBlocks.BLOODSTONE_BRICK.get().getDefaultState(), ComponentType.BLOODSTONE.name()); + apiInterface.registerAltarComponent(Blocks.BEACON.getDefaultState(), ComponentType.BEACON.name()); + + apiInterface.registerAltarComponent(BloodMagicBlocks.BLANK_RUNE.get().getDefaultState(), ComponentType.BLOODRUNE.name()); + apiInterface.registerAltarComponent(BloodMagicBlocks.SPEED_RUNE.get().getDefaultState(), ComponentType.BLOODRUNE.name()); + apiInterface.registerAltarComponent(BloodMagicBlocks.SACRIFICE_RUNE.get().getDefaultState(), ComponentType.BLOODRUNE.name()); + apiInterface.registerAltarComponent(BloodMagicBlocks.SELF_SACRIFICE_RUNE.get().getDefaultState(), ComponentType.BLOODRUNE.name()); + apiInterface.registerAltarComponent(BloodMagicBlocks.DISPLACEMENT_RUNE.get().getDefaultState(), ComponentType.BLOODRUNE.name()); + apiInterface.registerAltarComponent(BloodMagicBlocks.CAPACITY_RUNE.get().getDefaultState(), ComponentType.BLOODRUNE.name()); + apiInterface.registerAltarComponent(BloodMagicBlocks.AUGMENTED_CAPACITY_RUNE.get().getDefaultState(), ComponentType.BLOODRUNE.name()); + apiInterface.registerAltarComponent(BloodMagicBlocks.ORB_RUNE.get().getDefaultState(), ComponentType.BLOODRUNE.name()); + apiInterface.registerAltarComponent(BloodMagicBlocks.ACCELERATION_RUNE.get().getDefaultState(), ComponentType.BLOODRUNE.name()); + apiInterface.registerAltarComponent(BloodMagicBlocks.CHARGING_RUNE.get().getDefaultState(), ComponentType.BLOODRUNE.name()); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/impl/BloodMagicRecipeRegistrar.java b/src/main/java/wayoftime/bloodmagic/impl/BloodMagicRecipeRegistrar.java new file mode 100644 index 00000000..ee31e7b1 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/impl/BloodMagicRecipeRegistrar.java @@ -0,0 +1,231 @@ +package wayoftime.bloodmagic.impl; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import org.apache.commons.lang3.tuple.Pair; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableSet; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; +import wayoftime.bloodmagic.common.recipe.BloodMagicRecipeType; +import wayoftime.bloodmagic.recipe.RecipeARC; +import wayoftime.bloodmagic.recipe.RecipeAlchemyArray; +import wayoftime.bloodmagic.recipe.RecipeAlchemyTable; +import wayoftime.bloodmagic.recipe.RecipeBloodAltar; +import wayoftime.bloodmagic.recipe.RecipeTartaricForge; + +public class BloodMagicRecipeRegistrar +{ + @Nullable + public RecipeBloodAltar getBloodAltar(World world, @Nonnull ItemStack input) + { + Preconditions.checkNotNull(input, "input cannot be null."); + if (input.isEmpty()) + return null; + + List altarRecipes = world.getRecipeManager().getRecipesForType(BloodMagicRecipeType.ALTAR); + + for (RecipeBloodAltar recipe : altarRecipes) if (recipe.getInput().test(input)) + return recipe; + + return null; + } + + public RecipeARC getARC(World world, @Nonnull ItemStack input, @Nonnull ItemStack arcToolInput, @Nonnull FluidStack inputFluid) + { + Preconditions.checkNotNull(input, "input cannot be null."); + Preconditions.checkNotNull(arcToolInput, "tool cannot be null."); + if (input.isEmpty() || arcToolInput.isEmpty()) + return null; + + List arcRecipes = world.getRecipeManager().getRecipesForType(BloodMagicRecipeType.ARC); + + for (RecipeARC recipe : arcRecipes) + { + if (recipe.getInput().test(input) && recipe.getTool().test(arcToolInput)) + { + if (recipe.getFluidIngredient() == null) + { + return recipe; + } else if (recipe.getFluidIngredient().test(inputFluid)) + { + return recipe; + } + } + } + +// if (input.isEmpty()) +// return null; +// +// List altarRecipes = world.getRecipeManager().getRecipesForType(BloodMagicRecipeType.ALTAR); +// +// for (RecipeBloodAltar recipe : altarRecipes) if (recipe.getInput().test(input)) +// return recipe; + + return null; + } + + @Nullable + public RecipeAlchemyTable getAlchemyTable(World world, @Nonnull List input) + { + Preconditions.checkNotNull(input, "input cannot be null."); + if (input.isEmpty()) + return null; + + List tartaricForgeRecipes = world.getRecipeManager().getRecipesForType(BloodMagicRecipeType.ALCHEMYTABLE); + mainLoop: for (RecipeAlchemyTable recipe : tartaricForgeRecipes) + { + if (recipe.getInput().size() != input.size()) + continue; + + List recipeInput = new ArrayList<>(recipe.getInput()); + + for (int i = 0; i < input.size(); i++) + { + boolean matched = false; + for (int j = 0; j < recipeInput.size(); j++) + { + Ingredient ingredient = recipeInput.get(j); + if (ingredient.test(input.get(i))) + { + matched = true; + recipeInput.remove(j); + break; + } + } + + if (!matched) + continue mainLoop; + } + + return recipe; + } + + return null; + } + + @Nullable + public RecipeTartaricForge getTartaricForge(World world, @Nonnull List input) + { + Preconditions.checkNotNull(input, "input cannot be null."); + if (input.isEmpty()) + return null; + + List tartaricForgeRecipes = world.getRecipeManager().getRecipesForType(BloodMagicRecipeType.TARTARICFORGE); + mainLoop: for (RecipeTartaricForge recipe : tartaricForgeRecipes) + { + if (recipe.getInput().size() != input.size()) + continue; + + List recipeInput = new ArrayList<>(recipe.getInput()); + + for (int i = 0; i < input.size(); i++) + { + boolean matched = false; + for (int j = 0; j < recipeInput.size(); j++) + { + Ingredient ingredient = recipeInput.get(j); + if (ingredient.test(input.get(i))) + { + matched = true; + recipeInput.remove(j); + break; + } + } + + if (!matched) + continue mainLoop; + } + + return recipe; + } + + return null; + } + + /** + * + * @param world + * @param input + * @param catalyst + * @return If false and the recipe is nonnull, it is a partial match. If true, + * the returned recipe is a full match. + */ + @Nullable + public Pair getAlchemyArray(World world, @Nonnull ItemStack input, @Nonnull ItemStack catalyst) + { + Preconditions.checkNotNull(input, "input cannot be null."); + if (input.isEmpty()) + return null; + + List altarRecipes = world.getRecipeManager().getRecipesForType(BloodMagicRecipeType.ARRAY); + + RecipeAlchemyArray partialMatch = null; + for (RecipeAlchemyArray recipe : altarRecipes) + { + if (recipe.getBaseInput().test(input)) + { + if (recipe.getAddedInput().test(catalyst)) + { + return Pair.of(true, recipe); + } else if (partialMatch == null) + { + partialMatch = recipe; + } + } + } + + return Pair.of(false, partialMatch); + } + + public Set getAltarRecipes(World world) + { + return ImmutableSet.copyOf(world.getRecipeManager().getRecipesForType(BloodMagicRecipeType.ALTAR)); + } + + public Set getTartaricForgeRecipes(World world) + { + return ImmutableSet.copyOf(world.getRecipeManager().getRecipesForType(BloodMagicRecipeType.TARTARICFORGE)); + } + + public Set getAlchemyArrayRecipes(World world) + { + return ImmutableSet.copyOf(world.getRecipeManager().getRecipesForType(BloodMagicRecipeType.ARRAY)); + } + + public Set getARCRecipes(World world) + { + return ImmutableSet.copyOf(world.getRecipeManager().getRecipesForType(BloodMagicRecipeType.ARC)); + } + + public Set getAlchemyTableRecipes(World world) + { + return ImmutableSet.copyOf(world.getRecipeManager().getRecipesForType(BloodMagicRecipeType.ALCHEMYTABLE)); + } + + public Set getCraftingAlchemyArrayRecipes(World world) + { + Set recipes = new HashSet(world.getRecipeManager().getRecipesForType(BloodMagicRecipeType.ARRAY)); + + Set copyRecipes = new HashSet(); + for (RecipeAlchemyArray recipe : recipes) + { + if (!recipe.getOutput().isEmpty()) + { + copyRecipes.add(recipe); + } + } + + return copyRecipes; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/impl/BloodMagicValueManager.java b/src/main/java/wayoftime/bloodmagic/impl/BloodMagicValueManager.java new file mode 100644 index 00000000..da7d6cd5 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/impl/BloodMagicValueManager.java @@ -0,0 +1,76 @@ +package wayoftime.bloodmagic.impl; + +import java.util.Map; + +import javax.annotation.Nonnull; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.api.IBloodMagicValueManager; +import wayoftime.bloodmagic.incense.EnumTranquilityType; +import wayoftime.bloodmagic.incense.TranquilityStack; +import wayoftime.bloodmagic.util.BMLog; + +public class BloodMagicValueManager implements IBloodMagicValueManager +{ + + private final Map sacrificial; + private final Map tranquility; + + public BloodMagicValueManager() + { + this.sacrificial = Maps.newHashMap(); + this.tranquility = Maps.newHashMap(); + } + + @Override + public void setSacrificialValue(@Nonnull ResourceLocation entityId, int value) + { + BMLog.API_VERBOSE.info("Value Manager: Set sacrificial value of {} to {}.", entityId, value); + sacrificial.put(entityId, value); + } + + @Override + public void setTranquility(@Nonnull BlockState state, @Nonnull String tranquilityType, double value) + { + EnumTranquilityType tranquility = null; + for (EnumTranquilityType type : EnumTranquilityType.values()) + { + if (type.name().equalsIgnoreCase(tranquilityType)) + { + tranquility = type; + break; + } + } + + if (tranquility != null) + { + BMLog.API_VERBOSE.info("Value Manager: Set tranquility value of {} to {} @ {}", state, tranquilityType, value); + this.tranquility.put(state, new TranquilityStack(tranquility, value)); + } else + BMLog.API.warn("Invalid tranquility type: {}.", tranquilityType); + } + + public void setTranquility(Block block, TranquilityStack tranquilityStack) + { + for (BlockState state : block.getStateContainer().getValidStates()) + { + BMLog.API_VERBOSE.info("Value Manager: Set tranquility value of {} to {} @ {}", state, tranquilityStack.type, tranquilityStack.value); + tranquility.put(state, tranquilityStack); + } + } + + public Map getSacrificial() + { + return ImmutableMap.copyOf(sacrificial); + } + + public Map getTranquility() + { + return ImmutableMap.copyOf(tranquility); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/incense/EnumTranquilityType.java b/src/main/java/wayoftime/bloodmagic/incense/EnumTranquilityType.java new file mode 100644 index 00000000..4c1dc495 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/incense/EnumTranquilityType.java @@ -0,0 +1,25 @@ +package wayoftime.bloodmagic.incense; + +public enum EnumTranquilityType +{ + PLANT(), + CROP(), + TREE(), + EARTHEN(), + WATER(), + FIRE(), + LAVA(),; + + public static EnumTranquilityType getType(String type) + { + for (EnumTranquilityType t : values()) + { + if (t.name().equalsIgnoreCase(type)) + { + return t; + } + } + + return null; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/incense/ITranquilityHandler.java b/src/main/java/wayoftime/bloodmagic/incense/ITranquilityHandler.java new file mode 100644 index 00000000..e0b8d7c0 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/incense/ITranquilityHandler.java @@ -0,0 +1,14 @@ +package wayoftime.bloodmagic.incense; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * This is a functional interface to return the TranquilityStack of a certain Block type + */ +public interface ITranquilityHandler +{ + TranquilityStack getTranquilityOfBlock(World world, BlockPos pos, Block block, BlockState state); +} diff --git a/src/main/java/wayoftime/bloodmagic/incense/IncenseAltarComponent.java b/src/main/java/wayoftime/bloodmagic/incense/IncenseAltarComponent.java new file mode 100644 index 00000000..2bceb3f5 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/incense/IncenseAltarComponent.java @@ -0,0 +1,60 @@ +package wayoftime.bloodmagic.incense; + +import net.minecraft.block.Block; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; + +public class IncenseAltarComponent +{ + public final BlockPos offsetPos; + public final Block block; + + public IncenseAltarComponent(BlockPos offsetPos, Block block) + { + this.offsetPos = offsetPos; + this.block = block; + } + + public boolean doesBlockMatch(Block block) + { + return this.block == block; + } + + /** + * Base rotation is north. + */ + public BlockPos getOffset(Direction rotation) + { + return new BlockPos(this.getX(rotation), offsetPos.getY(), this.getZ(rotation)); + } + + public int getX(Direction direction) + { + switch (direction) + { + case EAST: + return -this.offsetPos.getZ(); + case SOUTH: + return -this.offsetPos.getX(); + case WEST: + return this.offsetPos.getZ(); + default: + return this.offsetPos.getX(); + } + } + + public int getZ(Direction direction) + { + switch (direction) + { + case EAST: + return this.offsetPos.getX(); + case SOUTH: + return -this.offsetPos.getZ(); + case WEST: + return -this.offsetPos.getX(); + default: + return this.offsetPos.getZ(); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/incense/IncenseAltarHandler.java b/src/main/java/wayoftime/bloodmagic/incense/IncenseAltarHandler.java new file mode 100644 index 00000000..eb68885f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/incense/IncenseAltarHandler.java @@ -0,0 +1,114 @@ +package wayoftime.bloodmagic.incense; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class IncenseAltarHandler +{ + public static Map> incenseComponentMap = new TreeMap<>(); + // Incense bonus maximum applied for the tier of blocks. + public static double[] incenseBonuses = new double[] { 0.2, 0.6, 1.2, 2, 3, 4.5 }; + public static double[] tranquilityRequired = new double[] { 0, 6, 14.14, 28, 44.09, 83.14 }; + public static int[] roadsRequired = new int[] { 0, 1, 4, 6, 8, 10, 12 }; // TODO: Change for when the roads are + // fully implemented + + public static void registerIncenseComponent(int altarLevel, IncenseAltarComponent component) + { + if (incenseComponentMap.containsKey(altarLevel)) + { + incenseComponentMap.get(altarLevel).add(component); + } else + { + List list = new ArrayList<>(); + list.add(component); + incenseComponentMap.put(altarLevel, list); + } + } + + public static void registerIncenseComponent(int altarLevel, BlockPos offsetPos, Block block, BlockState state) + { + registerIncenseComponent(altarLevel, new IncenseAltarComponent(offsetPos, block)); + } + + public static double getMaxIncenseBonusFromComponents(World world, BlockPos pos) + { + double accumulatedBonus = 0; + for (int i = 0; i < incenseBonuses.length; i++) + { + double previousBonus = (i <= 0 ? 0 : incenseBonuses[i - 1]); + double nextBonus = incenseBonuses[i]; + if (!incenseComponentMap.containsKey(i)) + { + accumulatedBonus += (nextBonus - previousBonus); + } else + { + boolean hasAllComponentsThisTier = true; + for (IncenseAltarComponent component : incenseComponentMap.get(i)) + { + BlockPos offsetPos = pos.add(component.getOffset(Direction.NORTH)); + BlockState state = world.getBlockState(offsetPos); + Block block = state.getBlock(); + if (component.doesBlockMatch(block)) + { + hasAllComponentsThisTier = false; + } else + { + accumulatedBonus += (nextBonus - previousBonus) / incenseComponentMap.get(i).size(); + } + } + + if (!hasAllComponentsThisTier) + { + break; + } + } + } + + return accumulatedBonus; + } + + public static double getMaxIncenseBonusFromRoads(int roads) + { + double previousBonus = 0; + for (int i = 0; i < incenseBonuses.length; i++) + { + if (roads >= roadsRequired[i]) + { + previousBonus = incenseBonuses[i]; + } else + { + return previousBonus; + } + } + + return previousBonus; + } + + public static double getIncenseBonusFromComponents(World world, BlockPos pos, double tranquility, int roads) + { + double maxBonus = Math.min(getMaxIncenseBonusFromComponents(world, pos), getMaxIncenseBonusFromRoads(roads)); + double possibleBonus = 0; + + for (int i = 0; i < incenseBonuses.length; i++) + { + if (tranquility >= tranquilityRequired[i]) + { + possibleBonus = incenseBonuses[i]; + } else if (i >= 1) + { + possibleBonus += (incenseBonuses[i] - possibleBonus) * (tranquility - tranquilityRequired[i - 1]) / (tranquilityRequired[i] - tranquilityRequired[i - 1]); + break; + } + } + + return Math.min(maxBonus, possibleBonus); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/incense/IncenseTranquilityRegistry.java b/src/main/java/wayoftime/bloodmagic/incense/IncenseTranquilityRegistry.java new file mode 100644 index 00000000..86fe5f01 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/incense/IncenseTranquilityRegistry.java @@ -0,0 +1,33 @@ +package wayoftime.bloodmagic.incense; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class IncenseTranquilityRegistry +{ + public static List handlerList = new ArrayList<>(); + + public static void registerTranquilityHandler(ITranquilityHandler handler) + { + handlerList.add(handler); + } + + public static TranquilityStack getTranquilityOfBlock(World world, BlockPos pos, Block block, BlockState state) + { + for (ITranquilityHandler handler : handlerList) + { + TranquilityStack tranq = handler.getTranquilityOfBlock(world, pos, block, state); + if (tranq != null) + { + return tranq; + } + } + + return null; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/incense/TranquilityStack.java b/src/main/java/wayoftime/bloodmagic/incense/TranquilityStack.java new file mode 100644 index 00000000..470f7b81 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/incense/TranquilityStack.java @@ -0,0 +1,16 @@ +package wayoftime.bloodmagic.incense; + +/** + * Holds the tranquility type and value for valid tranquility modifiers + */ +public class TranquilityStack +{ + public final EnumTranquilityType type; + public double value; + + public TranquilityStack(EnumTranquilityType type, double value) + { + this.type = type; + this.value = value; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/loot/BloodMagicLootConditions.java b/src/main/java/wayoftime/bloodmagic/loot/BloodMagicLootConditions.java new file mode 100644 index 00000000..6e322b92 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/loot/BloodMagicLootConditions.java @@ -0,0 +1,16 @@ +package wayoftime.bloodmagic.loot; + +import net.minecraft.loot.LootConditionType; +import net.minecraft.loot.conditions.MatchTool; +import net.minecraft.util.registry.Registry; +import wayoftime.bloodmagic.BloodMagic; + +public class BloodMagicLootConditions +{ + public static final LootConditionType INVERTED = Registry.register(Registry.LOOT_CONDITION_TYPE, BloodMagic.rl("testing"), new LootConditionType(new MatchTool.Serializer())); + + static + { + + } +} diff --git a/src/main/java/wayoftime/bloodmagic/loot/GlobalLootModifier.java b/src/main/java/wayoftime/bloodmagic/loot/GlobalLootModifier.java new file mode 100644 index 00000000..d2762d38 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/loot/GlobalLootModifier.java @@ -0,0 +1,302 @@ +package wayoftime.bloodmagic.loot; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nonnull; + +import com.google.gson.JsonObject; + +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipe; +import net.minecraft.item.crafting.IRecipeType; +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.util.ResourceLocation; +import net.minecraftforge.common.loot.GlobalLootModifierSerializer; +import net.minecraftforge.common.loot.LootModifier; +import net.minecraftforge.fml.RegistryObject; +import net.minecraftforge.items.ItemHandlerHelper; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.anointment.AnointmentHolder; +import wayoftime.bloodmagic.core.AnointmentRegistrar; + +public class GlobalLootModifier +{ + public static final DeferredRegister> GLM = DeferredRegister.create(ForgeRegistries.LOOT_MODIFIER_SERIALIZERS, BloodMagic.MODID); + public static final RegistryObject SILKTOUCH = GLM.register("silk_touch_bamboo", SilkTouchTestModifier.Serializer::new); + public static final RegistryObject FORTUNE = GLM.register("fortune", FortuneModifier.Serializer::new); + public static final RegistryObject LOOTING = GLM.register("looting", LootingModifier.Serializer::new); + public static final RegistryObject SMELT = GLM.register("smelt", SmeltingModifier.Serializer::new); + + private static class SilkTouchTestModifier extends LootModifier + { + public SilkTouchTestModifier(ILootCondition[] conditionsIn) + { + super(conditionsIn); +// System.out.println("Registering silk touch modifier"); + } + + @Nonnull + @Override + public List doApply(List generatedLoot, LootContext context) + { +// System.out.println("Testing to see if we gotta check it~"); + ItemStack ctxTool = context.get(LootParameters.TOOL); + // return early if silk-touch is already applied (otherwise we'll get stuck in + // an infinite loop). + if (EnchantmentHelper.getEnchantments(ctxTool).containsKey(Enchantments.SILK_TOUCH)) + return generatedLoot; + AnointmentHolder holder = AnointmentHolder.fromItemStack(ctxTool); + if (holder == null || holder.getAnointmentLevel(AnointmentRegistrar.ANOINTMENT_SILK_TOUCH.get()) <= 0) + { + return generatedLoot; + } + ItemStack fakeTool = ctxTool.copy(); + fakeTool.addEnchantment(Enchantments.SILK_TOUCH, 1); + LootContext.Builder builder = new LootContext.Builder(context); + builder.withParameter(LootParameters.TOOL, fakeTool); + LootContext ctx = builder.build(LootParameterSets.BLOCK); + LootTable loottable = context.getWorld().getServer().getLootTableManager().getLootTableFromLocation(context.get(LootParameters.BLOCK_STATE).getBlock().getLootTable()); + return loottable.generate(ctx); + } + + private static class Serializer extends GlobalLootModifierSerializer + { + @Override + public SilkTouchTestModifier read(ResourceLocation name, JsonObject json, ILootCondition[] conditionsIn) + { + return new SilkTouchTestModifier(conditionsIn); + } + + @Override + public JsonObject write(SilkTouchTestModifier instance) + { + return makeConditions(instance.conditions); + } + } + } + + private static class FortuneModifier extends LootModifier + { + public FortuneModifier(ILootCondition[] conditionsIn) + { + super(conditionsIn); +// System.out.println("Registering silk touch modifier"); + } + +// List bufferList = new ArrayList(); + + @Nonnull + @Override + public List doApply(List generatedLoot, LootContext context) + { + ItemStack ctxTool = context.get(LootParameters.TOOL); + // return early if silk-touch is already applied (otherwise we'll get stuck in + // an infinite loop). + if (ctxTool.getTag() != null && ctxTool.getTag().getBoolean("bloodmagic:checked_fortune")) + { + return generatedLoot; + } + + if (EnchantmentHelper.getEnchantments(ctxTool).containsKey(Enchantments.SILK_TOUCH)) + return generatedLoot; + AnointmentHolder holder = AnointmentHolder.fromItemStack(ctxTool); + if (holder == null) + { + return generatedLoot; + } + + int additionalFortune = holder.getAnointmentLevel(AnointmentRegistrar.ANOINTMENT_FORTUNE.get()); + if (additionalFortune <= 0) + { + return generatedLoot; + } + +// if (holder.getAnointmentLevel(AnointmentRegistrar.ANOINTMENT_SILK_TOUCH.get()) > 0) +// { +// return generatedLoot; +// } + + ItemStack fakeTool = ctxTool.copy(); + fakeTool.getOrCreateTag().putBoolean("bloodmagic:checked_fortune", true); + int baseFortuneLevel = EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, ctxTool); + + fakeTool.addEnchantment(Enchantments.FORTUNE, baseFortuneLevel + additionalFortune); + LootContext.Builder builder = new LootContext.Builder(context); + builder.withParameter(LootParameters.TOOL, fakeTool); + LootContext ctx = builder.build(LootParameterSets.BLOCK); + LootTable loottable = context.getWorld().getServer().getLootTableManager().getLootTableFromLocation(context.get(LootParameters.BLOCK_STATE).getBlock().getLootTable()); + return loottable.generate(ctx); + } + + private static class Serializer extends GlobalLootModifierSerializer + { + @Override + public FortuneModifier read(ResourceLocation name, JsonObject json, ILootCondition[] conditionsIn) + { + return new FortuneModifier(conditionsIn); + } + + @Override + public JsonObject write(FortuneModifier instance) + { + return makeConditions(instance.conditions); + } + } + } + + private static class LootingModifier extends LootModifier + { + public LootingModifier(ILootCondition[] conditionsIn) + { + super(conditionsIn); + } + + @Nonnull + @Override + public List doApply(List generatedLoot, LootContext context) + { +// System.out.println("Checking for looting"); +// Entity killerEntity = context.get(LootParameters.KILLER_ENTITY); +// if (!(killerEntity instanceof PlayerEntity)) +// { + return generatedLoot; +// } +// Entity killedEntity = context.get(LootParameters.THIS_ENTITY); +// if (!(killedEntity instanceof LivingEntity)) +// { +// return generatedLoot; +// } +// ItemStack ctxTool = ((PlayerEntity) killerEntity).getHeldItemMainhand(); +// // return early if silk-touch is already applied (otherwise we'll get stuck in +// // an infinite loop). +// +// System.out.println("Checking looting. ItemStack context: "); +//// EndermanEntity d; +// if (ctxTool.getTag() != null && ctxTool.getTag().getBoolean("bloodmagic:checked_looting")) +// { +// return generatedLoot; +// } +// +// if (EnchantmentHelper.getEnchantments(ctxTool).containsKey(Enchantments.SILK_TOUCH)) +// return generatedLoot; +// AnointmentHolder holder = AnointmentHolder.fromItemStack(ctxTool); +// if (holder == null) +// { +// return generatedLoot; +// } +// +// int additionalLooting = holder.getAnointmentLevel(AnointmentRegistrar.ANOINTMENT_LOOTING.get()) * 20; +// if (additionalLooting <= 0) +// { +// return generatedLoot; +// } +// +//// if (holder.getAnointmentLevel(AnointmentRegistrar.ANOINTMENT_SILK_TOUCH.get()) > 0) +//// { +//// return generatedLoot; +//// } +// +// ItemStack fakeTool = ctxTool.copy(); +// fakeTool.getOrCreateTag().putBoolean("bloodmagic:checked_looting", true); +// int baseLootingLevel = EnchantmentHelper.getEnchantmentLevel(Enchantments.LOOTING, ctxTool); +// +// fakeTool.addEnchantment(Enchantments.LOOTING, baseLootingLevel + additionalLooting); +// LootContext.Builder builder = new LootContext.Builder(context); +// builder.withParameter(LootParameters.TOOL, fakeTool); +// LootContext ctx = builder.build(LootParameterSets.ENTITY); +// ResourceLocation resource = ((LivingEntity) killedEntity).getLootTableResourceLocation(); +// LootTable loottable = context.getWorld().getServer().getLootTableManager().getLootTableFromLocation(resource); +// return loottable.generate(ctx); + } + + private static class Serializer extends GlobalLootModifierSerializer + { + @Override + public LootingModifier read(ResourceLocation name, JsonObject json, ILootCondition[] conditionsIn) + { + return new LootingModifier(conditionsIn); + } + + @Override + public JsonObject write(LootingModifier instance) + { + return makeConditions(instance.conditions); + } + } + +// private static class ExtendedLootContext extends LootContext +// { +// public ExtendedLootContext() +// { +// +// } +// } + } + + private static class SmeltingModifier extends LootModifier + { + public SmeltingModifier(ILootCondition[] conditionsIn) + { + super(conditionsIn); + } + + @Nonnull + @Override + public List doApply(List generatedLoot, LootContext context) + { + ItemStack ctxTool = context.get(LootParameters.TOOL); + // return early if silk-touch is already applied (otherwise we'll get stuck in + // an infinite loop). + if (ctxTool.getTag() == null) + { + return generatedLoot; + } + + AnointmentHolder holder = AnointmentHolder.fromItemStack(ctxTool); + if (holder == null) + { + return generatedLoot; + } + + int smeltingLevel = holder.getAnointmentLevel(AnointmentRegistrar.ANOINTMENT_SMELTING.get()); + if (smeltingLevel <= 0) + { + return generatedLoot; + } + + ArrayList ret = new ArrayList(); + generatedLoot.forEach((stack) -> ret.add(smelt(stack, context))); + return ret; + } + + private static ItemStack smelt(ItemStack stack, LootContext context) + { + return context.getWorld().getRecipeManager().getRecipe(IRecipeType.SMELTING, new Inventory(stack), context.getWorld()).map(FurnaceRecipe::getRecipeOutput).filter(itemStack -> !itemStack.isEmpty()).map(itemStack -> ItemHandlerHelper.copyStackWithSize(itemStack, stack.getCount() * itemStack.getCount())).orElse(stack); + } + + private static class Serializer extends GlobalLootModifierSerializer + { + @Override + public SmeltingModifier read(ResourceLocation name, JsonObject json, ILootCondition[] conditionsIn) + { + return new SmeltingModifier(conditionsIn); + } + + @Override + public JsonObject write(SmeltingModifier instance) + { + return makeConditions(instance.conditions); + } + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/network/ARCTanksPacket.java b/src/main/java/wayoftime/bloodmagic/network/ARCTanksPacket.java new file mode 100644 index 00000000..60be5d5c --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/network/ARCTanksPacket.java @@ -0,0 +1,72 @@ +package wayoftime.bloodmagic.network; + +import java.util.function.Supplier; + +import net.minecraft.client.Minecraft; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.network.PacketBuffer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.network.NetworkEvent.Context; +import wayoftime.bloodmagic.tile.TileAlchemicalReactionChamber; + +public class ARCTanksPacket +{ + private BlockPos pos; + private CompoundNBT inputNBT; + private CompoundNBT outputNBT; + + public ARCTanksPacket() + { + pos = BlockPos.ZERO; + inputNBT = new CompoundNBT(); + outputNBT = new CompoundNBT(); + } + + public ARCTanksPacket(TileAlchemicalReactionChamber tile) + { + this(tile.getPos(), tile.inputTank.writeToNBT(new CompoundNBT()), tile.outputTank.writeToNBT(new CompoundNBT())); + } + + public ARCTanksPacket(BlockPos pos, CompoundNBT inputNBT, CompoundNBT outputNBT) + { + this.pos = pos; + this.inputNBT = inputNBT; + this.outputNBT = outputNBT; + } + + public static void encode(ARCTanksPacket pkt, PacketBuffer buf) + { + buf.writeBlockPos(pkt.pos); + buf.writeCompoundTag(pkt.inputNBT); + buf.writeCompoundTag(pkt.outputNBT); + } + + public static ARCTanksPacket decode(PacketBuffer buf) + { + ARCTanksPacket pkt = new ARCTanksPacket(buf.readBlockPos(), buf.readCompoundTag(), buf.readCompoundTag()); + + return pkt; + } + + public static void handle(ARCTanksPacket message, Supplier context) + { + context.get().enqueueWork(() -> updateTanks(message.pos, message.inputNBT, message.outputNBT)); + context.get().setPacketHandled(true); + } + + @OnlyIn(Dist.CLIENT) + public static void updateTanks(BlockPos pos, CompoundNBT inputNBT, CompoundNBT outputNBT) + { + World world = Minecraft.getInstance().world; + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileAlchemicalReactionChamber) + { + ((TileAlchemicalReactionChamber) tile).inputTank.readFromNBT(inputNBT); + ((TileAlchemicalReactionChamber) tile).outputTank.readFromNBT(outputNBT); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/network/AlchemyTableButtonPacket.java b/src/main/java/wayoftime/bloodmagic/network/AlchemyTableButtonPacket.java new file mode 100644 index 00000000..4202043c --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/network/AlchemyTableButtonPacket.java @@ -0,0 +1,76 @@ +package wayoftime.bloodmagic.network; + +import java.util.function.Supplier; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.network.PacketBuffer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.network.NetworkEvent.Context; +import wayoftime.bloodmagic.tile.TileAlchemyTable; + +public class AlchemyTableButtonPacket +{ + private BlockPos pos; + private int slot; + private Direction dir; + private boolean enable; + + public AlchemyTableButtonPacket() + { + this(BlockPos.ZERO, 0, Direction.DOWN, true); + } + + public AlchemyTableButtonPacket(BlockPos pos, int slot, Direction dir, boolean enable) + { + this.pos = pos; + this.slot = slot; + this.dir = dir; + this.enable = enable; + } + + public static void encode(AlchemyTableButtonPacket pkt, PacketBuffer buf) + { + buf.writeBlockPos(pkt.pos); + buf.writeInt(pkt.slot); + buf.writeInt(pkt.dir.ordinal()); + buf.writeBoolean(pkt.enable); + } + + public static AlchemyTableButtonPacket decode(PacketBuffer buf) + { + AlchemyTableButtonPacket pkt = new AlchemyTableButtonPacket(buf.readBlockPos(), buf.readInt(), Direction.byIndex(buf.readInt()), buf.readBoolean()); + + return pkt; + } + + public static void handle(AlchemyTableButtonPacket message, Supplier context) + { + context.get().enqueueWork(() -> { + PlayerEntity player = context.get().getSender(); + if (player == null) + { + return; + } + TileEntity tile = player.getEntityWorld().getTileEntity(message.pos); + if (tile instanceof TileAlchemyTable) + { + ((TileAlchemyTable) tile).setSlotEnabled(message.enable, message.slot, message.dir); + } + }); + context.get().setPacketHandled(true); + } + +// @OnlyIn(Dist.CLIENT) +// public static void updateTanks(BlockPos pos, CompoundNBT inputNBT, CompoundNBT outputNBT) +// { +// World world = Minecraft.getInstance().world; +// TileEntity tile = world.getTileEntity(pos); +// if (tile instanceof TileAlchemicalReactionChamber) +// { +// ((TileAlchemicalReactionChamber) tile).inputTank.readFromNBT(inputNBT); +// ((TileAlchemicalReactionChamber) tile).outputTank.readFromNBT(outputNBT); +// } +// } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/network/BasePacketHandler.java b/src/main/java/wayoftime/bloodmagic/network/BasePacketHandler.java new file mode 100644 index 00000000..74d39066 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/network/BasePacketHandler.java @@ -0,0 +1,151 @@ +package wayoftime.bloodmagic.network; + +import java.util.Optional; +import java.util.function.BiConsumer; +import java.util.function.Function; +import java.util.function.Supplier; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.network.PacketBuffer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.RegistryKey; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.fml.network.NetworkDirection; +import net.minecraftforge.fml.network.NetworkEvent.Context; +import net.minecraftforge.fml.network.NetworkRegistry; +import net.minecraftforge.fml.network.PacketDistributor; +import net.minecraftforge.fml.network.simple.SimpleChannel; + +/** + * Copied liberally from Mekanism. Many thanks to pupnewfster! + * + */ +public abstract class BasePacketHandler +{ + + protected static SimpleChannel createChannel(ResourceLocation name) + { + return NetworkRegistry.ChannelBuilder.named(name).clientAcceptedVersions(getProtocolVersion()::equals).serverAcceptedVersions(getProtocolVersion()::equals).networkProtocolVersion(BasePacketHandler::getProtocolVersion).simpleChannel(); + } + + private static String getProtocolVersion() + { + return "1"; + } + + /** + * Helper for reading strings to make sure we don't accidentally call + * PacketBuffer#readString on the server + */ + public static String readString(PacketBuffer buffer) + { + return buffer.readString(Short.MAX_VALUE); + } + +// public static void log(String log) +// { +// // TODO: Add more logging for packets using this +// if (MekanismConfig.general.logPackets.get()) +// { +// Mekanism.logger.info(log); +// } +// } +// + public static PlayerEntity getPlayer(Supplier context) + { + return context.get().getSender(); + } + + private int index = 0; + + protected abstract SimpleChannel getChannel(); + + public abstract void initialize(); + + protected void registerClientToServer(Class type, BiConsumer encoder, + Function decoder, BiConsumer> consumer) + { + getChannel().registerMessage(index++, type, encoder, decoder, consumer, Optional.of(NetworkDirection.PLAY_TO_SERVER)); + } + + protected void registerServerToClient(Class type, BiConsumer encoder, + Function decoder, BiConsumer> consumer) + { + getChannel().registerMessage(index++, type, encoder, decoder, consumer, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); + } + + /** + * Send this message to the specified player. + * + * @param message - the message to send + * @param player - the player to send it to + */ + public void sendTo(MSG message, ServerPlayerEntity player) + { + getChannel().sendTo(message, player.connection.getNetworkManager(), NetworkDirection.PLAY_TO_CLIENT); + } + + /** + * Send this message to everyone connected to the server. + * + * @param message - message to send + */ + public void sendToAll(MSG message) + { + getChannel().send(PacketDistributor.ALL.noArg(), message); + } + + /** + * Send this message to everyone within the supplied dimension. + * + * @param message - the message to send + * @param dimension - the dimension to target + */ + public void sendToDimension(MSG message, RegistryKey dimension) + { + getChannel().send(PacketDistributor.DIMENSION.with(() -> dimension), message); + } + + /** + * Send this message to the server. + * + * @param message - the message to send + */ + public void sendToServer(MSG message) + { + getChannel().sendToServer(message); + } + + public void sendToAllTracking(MSG message, Entity entity) + { + getChannel().send(PacketDistributor.TRACKING_ENTITY.with(() -> entity), message); + } + + public void sendToAllTracking(MSG message, TileEntity tile) + { + sendToAllTracking(message, tile.getWorld(), tile.getPos()); + } + + public void sendToAllTracking(MSG message, World world, BlockPos pos) + { + if (world instanceof ServerWorld) + { + // If we have a ServerWorld just directly figure out the ChunkPos so as to not + // require looking up the chunk + // This provides a decent performance boost over using the packet distributor + ((ServerWorld) world).getChunkProvider().chunkManager.getTrackingPlayers(new ChunkPos(pos), false).forEach(p -> sendTo(message, p)); + } else + { + // Otherwise fallback to entities tracking the chunk if some mod did something + // odd and our world is not a ServerWorld + getChannel().send(PacketDistributor.TRACKING_CHUNK.with(() -> world.getChunk(pos.getX() >> 4, pos.getZ() >> 4)), message); + } + } + +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/network/BloodMagicPacketHandler.java b/src/main/java/wayoftime/bloodmagic/network/BloodMagicPacketHandler.java new file mode 100644 index 00000000..fd0d365c --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/network/BloodMagicPacketHandler.java @@ -0,0 +1,54 @@ +package wayoftime.bloodmagic.network; + +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.network.simple.SimpleChannel; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.util.ChatUtil; + +public class BloodMagicPacketHandler extends BasePacketHandler +{ +// public static final SimpleChannel INSTANCE = NetworkRegistry.newSimpleChannel(new ResourceLocation(BloodMagic.MODID, "main"), () -> PROTOCOL_VERSION, PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals); + public static final SimpleChannel INSTANCE = createChannel(new ResourceLocation(BloodMagic.MODID, "main")); + + @Override + public void initialize() + { + registerServerToClient(ChatUtil.PacketNoSpamChat.class, ChatUtil.PacketNoSpamChat::encode, ChatUtil.PacketNoSpamChat::decode, ChatUtil.PacketNoSpamChat::handle); + registerServerToClient(ARCTanksPacket.class, ARCTanksPacket::encode, ARCTanksPacket::decode, ARCTanksPacket::handle); + registerServerToClient(DemonAuraClientPacket.class, DemonAuraClientPacket::encode, DemonAuraClientPacket::decode, DemonAuraClientPacket::handle); + registerServerToClient(SetClientHealthPacket.class, SetClientHealthPacket::encode, SetClientHealthPacket::decode, SetClientHealthPacket::handle); + + registerClientToServer(KeyProcessorPacket.class, KeyProcessorPacket::encode, KeyProcessorPacket::decode, KeyProcessorPacket::handle); + registerClientToServer(SigilHoldingPacket.class, SigilHoldingPacket::encode, SigilHoldingPacket::decode, SigilHoldingPacket::handle); + registerClientToServer(AlchemyTableButtonPacket.class, AlchemyTableButtonPacket::encode, AlchemyTableButtonPacket::decode, AlchemyTableButtonPacket::handle); +// INSTANCE.registerMessage(id, messageType, encoder, decoder, messageConsumer); +// INSTANCE.registerMessage(ChatUtil.PacketNoSpamChat.Handler.class, ChatUtil.PacketNoSpamChat.class, 0, Side.CLIENT); +// INSTANCE.registerMessage(ItemRouterButtonPacketProcessor.class, ItemRouterButtonPacketProcessor.class, 1, Side.SERVER); +// INSTANCE.registerMessage(PlayerVelocityPacketProcessor.class, PlayerVelocityPacketProcessor.class, 2, Side.CLIENT); +// INSTANCE.registerMessage(PlayerFallDistancePacketProcessor.class, PlayerFallDistancePacketProcessor.class, 3, Side.SERVER); +// INSTANCE.registerMessage(SigilHoldingPacketProcessor.class, SigilHoldingPacketProcessor.class, 4, Side.SERVER); +// INSTANCE.registerMessage(KeyProcessor.class, KeyProcessor.class, 5, Side.SERVER); +// INSTANCE.registerMessage(DemonAuraPacketProcessor.class, DemonAuraPacketProcessor.class, 6, Side.CLIENT); +// INSTANCE.registerMessage(ItemRouterAmountPacketProcessor.class, ItemRouterAmountPacketProcessor.class, 7, Side.SERVER); + } + + protected SimpleChannel getChannel() + { + return INSTANCE; + } + +// public static void sendToAllAround(IMessage message, TileEntity te, int range) +// { +// INSTANCE.sendToAllAround(message, new NetworkRegistry.TargetPoint(te.getWorld().provider.getDimension(), te.getPos().getX(), te.getPos().getY(), te.getPos().getZ(), range)); +// } +// +// public static void sendToAllAround(IMessage message, TileEntity te) +// { +// sendToAllAround(message, te, 64); +// } +// +// public static void sendTo(IMessage message, EntityPlayerMP player) +// { +// INSTANCE.sendTo(message, player); +// } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/network/DemonAuraClientPacket.java b/src/main/java/wayoftime/bloodmagic/network/DemonAuraClientPacket.java new file mode 100644 index 00000000..a3d29b9e --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/network/DemonAuraClientPacket.java @@ -0,0 +1,64 @@ +package wayoftime.bloodmagic.network; + +import java.util.function.Supplier; + +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.network.NetworkEvent.Context; +import wayoftime.bloodmagic.util.handler.event.ClientHandler; +import wayoftime.bloodmagic.will.DemonWillHolder; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; + +public class DemonAuraClientPacket +{ + public DemonWillHolder currentWill = new DemonWillHolder(); + + public DemonAuraClientPacket() + { + + } + + public DemonAuraClientPacket(DemonWillHolder holder) + { + this.currentWill = holder; + } + + public static void encode(DemonAuraClientPacket pkt, PacketBuffer buf) + { + for (EnumDemonWillType type : EnumDemonWillType.values()) + { + if (pkt.currentWill.willMap.containsKey(type)) + { + buf.writeDouble(pkt.currentWill.willMap.get(type)); + } else + { + buf.writeDouble(0); + } + } + + } + + public static DemonAuraClientPacket decode(PacketBuffer buf) + { + DemonAuraClientPacket pkt = new DemonAuraClientPacket(); + for (EnumDemonWillType type : EnumDemonWillType.values()) + { + pkt.currentWill.willMap.put(type, buf.readDouble()); + } + + return pkt; + } + + public static void handle(DemonAuraClientPacket message, Supplier context) + { + context.get().enqueueWork(() -> updateClientHolder(message.currentWill)); + context.get().setPacketHandled(true); + } + + @OnlyIn(Dist.CLIENT) + public static void updateClientHolder(DemonWillHolder holder) + { + ClientHandler.currentAura = holder; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/network/KeyProcessorPacket.java b/src/main/java/wayoftime/bloodmagic/network/KeyProcessorPacket.java new file mode 100644 index 00000000..7f79dc72 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/network/KeyProcessorPacket.java @@ -0,0 +1,64 @@ +package wayoftime.bloodmagic.network; + +import java.util.function.Supplier; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fml.network.NetworkEvent.Context; +import wayoftime.bloodmagic.client.key.IKeybindable; +import wayoftime.bloodmagic.client.key.KeyBindings; + +public class KeyProcessorPacket +{ + public int keyId; + public boolean showInChat; + + public KeyProcessorPacket(int keyId, boolean showInChat) + { + this.keyId = keyId; + this.showInChat = showInChat; + } + + public KeyProcessorPacket(KeyBindings key, boolean showInChat) + { + this(key.ordinal(), showInChat); + } + + public static void encode(KeyProcessorPacket pkt, PacketBuffer buf) + { + buf.writeInt(pkt.keyId); + buf.writeBoolean(pkt.showInChat); + } + + public static KeyProcessorPacket decode(PacketBuffer buf) + { + KeyProcessorPacket pkt = new KeyProcessorPacket(buf.readInt(), buf.readBoolean()); + + return pkt; + } + + public static void handle(KeyProcessorPacket message, Supplier context) + { + context.get().enqueueWork(() -> sendKeyToServer(message, context.get().getSender())); + context.get().setPacketHandled(true); + } + + public static void sendKeyToServer(KeyProcessorPacket msg, PlayerEntity playerEntity) + { + if (playerEntity != null) + { + ItemStack heldStack = playerEntity.getHeldItemMainhand(); + if (heldStack.getItem() instanceof IKeybindable) + { + if (msg.keyId < 0 || msg.keyId >= KeyBindings.values().length) + { + return; + } + KeyBindings key = KeyBindings.values()[msg.keyId]; + + ((IKeybindable) heldStack.getItem()).onKeyPressed(heldStack, playerEntity, key, msg.showInChat); + } + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/network/SetClientHealthPacket.java b/src/main/java/wayoftime/bloodmagic/network/SetClientHealthPacket.java new file mode 100644 index 00000000..d89345dc --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/network/SetClientHealthPacket.java @@ -0,0 +1,48 @@ +package wayoftime.bloodmagic.network; + +import java.util.function.Supplier; + +import net.minecraft.client.Minecraft; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.network.NetworkEvent.Context; + +public class SetClientHealthPacket +{ + public float health; + + public SetClientHealthPacket() + { + + } + + public SetClientHealthPacket(float health) + { + this.health = health; + } + + public static void encode(SetClientHealthPacket pkt, PacketBuffer buf) + { + buf.writeFloat(pkt.health); + } + + public static SetClientHealthPacket decode(PacketBuffer buf) + { + SetClientHealthPacket pkt = new SetClientHealthPacket(buf.readFloat()); + + return pkt; + } + + public static void handle(SetClientHealthPacket message, Supplier context) + { + context.get().enqueueWork(() -> updateClientHealth(message.health)); + context.get().setPacketHandled(true); + } + + @OnlyIn(Dist.CLIENT) + public static void updateClientHealth(float health) + { + Minecraft.getInstance().player.setHealth(health); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/network/SigilHoldingPacket.java b/src/main/java/wayoftime/bloodmagic/network/SigilHoldingPacket.java new file mode 100644 index 00000000..015827b9 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/network/SigilHoldingPacket.java @@ -0,0 +1,59 @@ +package wayoftime.bloodmagic.network; + +import java.util.function.Supplier; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fml.network.NetworkEvent.Context; +import wayoftime.bloodmagic.common.item.sigil.ItemSigilHolding; + +public class SigilHoldingPacket +{ + private int slot; + private int mode; + + public SigilHoldingPacket() + { + } + + public SigilHoldingPacket(int slot, int mode) + { + this.slot = slot; + this.mode = mode; + } + + public static void encode(SigilHoldingPacket pkt, PacketBuffer buf) + { + buf.writeInt(pkt.slot); + buf.writeInt(pkt.mode); + } + + public static SigilHoldingPacket decode(PacketBuffer buf) + { + SigilHoldingPacket pkt = new SigilHoldingPacket(buf.readInt(), buf.readInt()); + + return pkt; + } + + public static void handle(SigilHoldingPacket message, Supplier context) + { + context.get().enqueueWork(() -> sendKeyToServer(message, context.get().getSender())); + context.get().setPacketHandled(true); + } + + public static void sendKeyToServer(SigilHoldingPacket msg, PlayerEntity playerEntity) + { + ItemStack itemStack = ItemStack.EMPTY; + + if (msg.slot > -1 && msg.slot < 9) + { + itemStack = playerEntity.inventory.getStackInSlot(msg.slot); + } + + if (!itemStack.isEmpty()) + { + ItemSigilHolding.cycleToNextSigil(itemStack, msg.mode); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/potion/BMPotionUtils.java b/src/main/java/wayoftime/bloodmagic/potion/BMPotionUtils.java new file mode 100644 index 00000000..94df642c --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/potion/BMPotionUtils.java @@ -0,0 +1,78 @@ +package wayoftime.bloodmagic.potion; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.IGrowable; +import net.minecraft.entity.LivingEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import wayoftime.bloodmagic.impl.BloodMagicAPI; +import wayoftime.bloodmagic.util.DamageSourceBloodMagic; + +public class BMPotionUtils +{ + public static Random rand = new Random(); + + public static double damageMobAndGrowSurroundingPlants(LivingEntity entity, int horizontalRadius, int verticalRadius, double damageRatio, int maxPlantsGrown) + { + World world = entity.getEntityWorld(); + if (world.isRemote) + { + return 0; + } + + if (!entity.isAlive()) + { + return 0; + } + + double incurredDamage = 0; + + List growList = new ArrayList<>(); + + for (int i = 0; i < maxPlantsGrown; i++) + { + BlockPos blockPos = entity.getPosition().add(rand.nextInt(horizontalRadius * 2 + 1) - horizontalRadius, rand.nextInt(verticalRadius * 2 + 1) - verticalRadius, rand.nextInt(horizontalRadius * 2 + 1) - horizontalRadius); + BlockState state = world.getBlockState(blockPos); + + if (!BloodMagicAPI.INSTANCE.getBlacklist().getGreenGrove().contains(state)) + { + if (state.getBlock() instanceof IGrowable) + { + growList.add(blockPos); + } + } + } + + for (BlockPos blockPos : growList) + { + Block block = world.getBlockState(blockPos).getBlock(); +// if (world.rand.nextInt(50) == 0) + { + BlockState preBlockState = world.getBlockState(blockPos); + for (int n = 0; n < 10; n++) + block.randomTick(world.getBlockState(blockPos), (ServerWorld) world, blockPos, world.rand); + + BlockState newState = world.getBlockState(blockPos); + if (!newState.equals(preBlockState)) + { + world.playEvent(2005, blockPos, 0); + incurredDamage += damageRatio; + } + } + } + + if (incurredDamage > 0) + { + entity.attackEntityFrom(DamageSourceBloodMagic.INSTANCE, (float) incurredDamage); + } + + return incurredDamage; + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/potion/BloodMagicPotions.java b/src/main/java/wayoftime/bloodmagic/potion/BloodMagicPotions.java new file mode 100644 index 00000000..eafe2fe7 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/potion/BloodMagicPotions.java @@ -0,0 +1,25 @@ +package wayoftime.bloodmagic.potion; + +import net.minecraft.potion.Effect; +import net.minecraft.potion.EffectType; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.registries.IForgeRegistry; + +public class BloodMagicPotions +{ + public static final Effect SOUL_SNARE = new PotionSoulSnare(); + public static final Effect FIRE_FUSE = new PotionFireFuse(); + public static final Effect SOUL_FRAY = new PotionBloodMagic(EffectType.HARMFUL, 0xFFFFFFFF); + public static final Effect PLANT_LEECH = new PotionBloodMagic(EffectType.HARMFUL, 0x00FF00FF); + public static final Effect SACRIFICIAL_LAMB = new PotionBloodMagic(EffectType.HARMFUL, 0xFFFFFF); + + public static void registerPotions(RegistryEvent.Register evt) + { + IForgeRegistry reg = evt.getRegistry(); + reg.register(SOUL_SNARE.setRegistryName("soulsnare")); + reg.register(FIRE_FUSE.setRegistryName("firefuse")); + reg.register(SOUL_FRAY.setRegistryName("soulfray")); + reg.register(PLANT_LEECH.setRegistryName("plantleech")); + reg.register(SACRIFICIAL_LAMB.setRegistryName("sacrificiallamb")); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/potion/PotionBloodMagic.java b/src/main/java/wayoftime/bloodmagic/potion/PotionBloodMagic.java new file mode 100644 index 00000000..057c44c9 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/potion/PotionBloodMagic.java @@ -0,0 +1,12 @@ +package wayoftime.bloodmagic.potion; + +import net.minecraft.potion.Effect; +import net.minecraft.potion.EffectType; + +public class PotionBloodMagic extends Effect +{ + public PotionBloodMagic(EffectType typeIn, int liquidColorIn) + { + super(typeIn, liquidColorIn); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/potion/PotionFireFuse.java b/src/main/java/wayoftime/bloodmagic/potion/PotionFireFuse.java new file mode 100644 index 00000000..639a6ed7 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/potion/PotionFireFuse.java @@ -0,0 +1,40 @@ +package wayoftime.bloodmagic.potion; + +import java.util.Random; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.potion.EffectType; +import net.minecraft.world.Explosion; + +public class PotionFireFuse extends PotionBloodMagic +{ + public PotionFireFuse() + { + super(EffectType.HARMFUL, 0xFF0000FF); + } + + @Override + public void performEffect(LivingEntity entity, int amplifier) + { + if (entity.world.isRemote) + { + return; + } + + Random random = entity.world.rand; + entity.getEntityWorld().addParticle(ParticleTypes.FLAME, entity.getPosX() + + random.nextDouble() * 0.3, entity.getPosY() + + random.nextDouble() * 0.3, entity.getPosZ() + random.nextDouble() * 0.3, 0, 0.06d, 0); + + int radius = amplifier + 1; + + if (entity.getActivePotionEffect(BloodMagicPotions.FIRE_FUSE).getDuration() <= 3) + { + Explosion.Mode explosion$mode = net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(entity.world, entity) + ? Explosion.Mode.DESTROY + : Explosion.Mode.NONE; + entity.getEntityWorld().createExplosion(null, entity.getPosX(), entity.getPosY(), entity.getPosZ(), radius, false, explosion$mode); + } + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/potion/PotionSoulSnare.java b/src/main/java/wayoftime/bloodmagic/potion/PotionSoulSnare.java new file mode 100644 index 00000000..34e0cc68 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/potion/PotionSoulSnare.java @@ -0,0 +1,11 @@ +package wayoftime.bloodmagic.potion; + +import net.minecraft.potion.EffectType; + +public class PotionSoulSnare extends PotionBloodMagic +{ + public PotionSoulSnare() + { + super(EffectType.NEUTRAL, 0xFFFFFF); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/recipe/BloodMagicRecipe.java b/src/main/java/wayoftime/bloodmagic/recipe/BloodMagicRecipe.java new file mode 100644 index 00000000..06555bcd --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/recipe/BloodMagicRecipe.java @@ -0,0 +1,69 @@ +package wayoftime.bloodmagic.recipe; + +import javax.annotation.Nonnull; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import wayoftime.bloodmagic.recipe.helper.IgnoredIInventory; + +public abstract class BloodMagicRecipe implements IRecipe +{ + private final ResourceLocation id; + + protected BloodMagicRecipe(ResourceLocation id) + { + this.id = id; + } + + /** + * Writes this recipe to a PacketBuffer. + * + * @param buffer The buffer to write to. + */ + public abstract void write(PacketBuffer buffer); + + @Nonnull + @Override + public ResourceLocation getId() + { + return id; + } + + @Override + public boolean matches(@Nonnull IgnoredIInventory inv, @Nonnull World world) + { + return true; + } + + @Override + public boolean isDynamic() + { + // Note: If we make this non dynamic, we can make it show in vanilla's crafting + // book and also then obey the recipe locking. + // For now none of that works/makes sense in our concept so don't lock it + return true; + } + + @Nonnull + @Override + public ItemStack getCraftingResult(@Nonnull IgnoredIInventory inv) + { + return ItemStack.EMPTY; + } + + @Override + public boolean canFit(int width, int height) + { + return true; + } + + @Nonnull + @Override + public ItemStack getRecipeOutput() + { + return ItemStack.EMPTY; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/recipe/RecipeARC.java b/src/main/java/wayoftime/bloodmagic/recipe/RecipeARC.java new file mode 100644 index 00000000..702794eb --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/recipe/RecipeARC.java @@ -0,0 +1,182 @@ +package wayoftime.bloodmagic.recipe; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import javax.annotation.Nonnull; + +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; +import org.apache.commons.lang3.tuple.Pair; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidStack; +import wayoftime.bloodmagic.common.recipe.BloodMagicRecipeType; +import wayoftime.bloodmagic.common.registries.BloodMagicRecipeSerializers; +import wayoftime.bloodmagic.recipe.helper.FluidStackIngredient; + +public class RecipeARC extends BloodMagicRecipe +{ + public static final int MAX_RANDOM_OUTPUTS = 3; + + @Nonnull + private final Ingredient input; + @Nonnull + private final Ingredient arc_tool; + private final FluidStackIngredient inputFluid; + @Nonnull + private final ItemStack output; + private final FluidStack outputFluid; + private final boolean consumeIngredient; + + private final List> addedItems; + + public RecipeARC(ResourceLocation id, Ingredient input, Ingredient arc_tool, FluidStackIngredient inputFluid, ItemStack output, FluidStack outputFluid, boolean consumeIngredient) + { + this(id, input, arc_tool, inputFluid, output, new ArrayList>(), outputFluid, consumeIngredient); + } + + public RecipeARC(ResourceLocation id, Ingredient input, Ingredient arc_tool, FluidStackIngredient inputFluid, ItemStack output, List> addedItems, FluidStack outputFluid, boolean consumeIngredient) + { + super(id); + this.input = input; + this.arc_tool = arc_tool; + this.inputFluid = inputFluid; + this.output = output; + this.addedItems = addedItems; + this.outputFluid = outputFluid; + this.consumeIngredient = consumeIngredient; + } + + public RecipeARC addRandomOutput(ItemStack stack, double chance) + { + if (addedItems.size() >= MAX_RANDOM_OUTPUTS) + { + return this; + } + + addedItems.add(Pair.of(stack, chance)); + + return this; + } + + @Nonnull + public final Ingredient getInput() + { + return input; + } + + @Nonnull + public final Ingredient getTool() + { + return arc_tool; + } + + public final FluidStackIngredient getFluidIngredient() + { + return inputFluid; + } + + public final FluidStack getFluidOutput() + { + return outputFluid; + } + + @Override + public final NonNullList getIngredients() + { + NonNullList list = NonNullList.create(); + list.add(getInput()); + list.add(getTool()); + return list; + } + + public List getAllListedOutputs() + { + List list = new ArrayList(); + + list.add(output.copy()); + for (Pair pair : addedItems) + { + list.add(pair.getLeft().copy()); + } + + return list; + } + + public List getAllOutputs(Random rand) + { + List list = new ArrayList(); + + list.add(output.copy()); + for (Pair pair : addedItems) + { + if (rand.nextDouble() < pair.getRight()) + list.add(pair.getLeft().copy()); + } + + return list; + } + + public double[] getAllOutputChances() + { + int size = addedItems.size(); + + double[] chanceArray = new double[size]; + for (int i = 0; i < size; i++) + { + chanceArray[i] = addedItems.get(i).getRight(); + } + + return chanceArray; + } + + public boolean getConsumeIngredient() + { + return consumeIngredient; + } + + @Override + public void write(PacketBuffer buffer) + { + input.write(buffer); + arc_tool.write(buffer); + buffer.writeItemStack(output); + buffer.writeInt(addedItems.size()); + for (Pair pair : addedItems) + { + buffer.writeItemStack(pair.getLeft()); + buffer.writeDouble(pair.getValue()); + } + + buffer.writeBoolean(inputFluid != null); + if (inputFluid != null) + { + inputFluid.write(buffer); + } + + buffer.writeBoolean(outputFluid != null); + if (outputFluid != null) + { + outputFluid.writeToPacket(buffer); + } + buffer.writeBoolean(consumeIngredient); + } + + @Override + public IRecipeSerializer getSerializer() + { + return BloodMagicRecipeSerializers.ARC.getRecipeSerializer(); + } + + @Override + public IRecipeType getType() + { + return BloodMagicRecipeType.ARC; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/recipe/RecipeAlchemyArray.java b/src/main/java/wayoftime/bloodmagic/recipe/RecipeAlchemyArray.java new file mode 100644 index 00000000..0c0a92a4 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/recipe/RecipeAlchemyArray.java @@ -0,0 +1,103 @@ +package wayoftime.bloodmagic.recipe; + +import javax.annotation.Nonnull; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.common.recipe.BloodMagicRecipeType; +import wayoftime.bloodmagic.common.registries.BloodMagicRecipeSerializers; + +public class RecipeAlchemyArray extends BloodMagicRecipe +{ + private final ResourceLocation id; + private final ResourceLocation texture; + @Nonnull + private final Ingredient baseInput; + @Nonnull + private final Ingredient addedInput; + @Nonnull + private final ItemStack output; + + public RecipeAlchemyArray(ResourceLocation id, ResourceLocation texture, @Nonnull Ingredient baseIngredient, @Nonnull Ingredient addedIngredient, @Nonnull ItemStack result) + { + super(id); + this.id = id; + this.texture = texture; + this.baseInput = baseIngredient; + this.addedInput = addedIngredient; + this.output = result; + } + + @Nonnull + public final ResourceLocation getId() + { + return id; + } + + @Nonnull + public final ResourceLocation getTexture() + { + return texture; + } + + @Nonnull + public final Ingredient getBaseInput() + { + return baseInput; + } + + @Nonnull + public final Ingredient getAddedInput() + { + return addedInput; + } + + @Override + public final NonNullList getIngredients() + { + NonNullList list = NonNullList.create(); + list.add(getBaseInput()); + list.add(getAddedInput()); + return list; + } + + @Nonnull + public final ItemStack getOutput() + { + return output; + } + + @Override + public void write(PacketBuffer buffer) + { + if (texture != null) + { + buffer.writeBoolean(true); + buffer.writeResourceLocation(texture); + } else + { + buffer.writeBoolean(false); + } + + baseInput.write(buffer); + addedInput.write(buffer); + buffer.writeItemStack(output); + } + + @Override + public IRecipeSerializer getSerializer() + { + return BloodMagicRecipeSerializers.ARRAY.getRecipeSerializer(); + } + + @Override + public IRecipeType getType() + { + return BloodMagicRecipeType.ARRAY; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/recipe/RecipeAlchemyTable.java b/src/main/java/wayoftime/bloodmagic/recipe/RecipeAlchemyTable.java new file mode 100644 index 00000000..96306e2f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/recipe/RecipeAlchemyTable.java @@ -0,0 +1,102 @@ +package wayoftime.bloodmagic.recipe; + +import java.util.List; + +import javax.annotation.Nonnegative; +import javax.annotation.Nonnull; + +import com.google.common.base.Preconditions; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.common.recipe.BloodMagicRecipeType; +import wayoftime.bloodmagic.common.registries.BloodMagicRecipeSerializers; + +public class RecipeAlchemyTable extends BloodMagicRecipe +{ + @Nonnull + private final List input; + @Nonnull + private final ItemStack output; + @Nonnegative + private final int syphon; + @Nonnegative + private final int ticks; + @Nonnegative + private final int minimumTier; + + public static final int MAX_INPUTS = 6; + + public RecipeAlchemyTable(ResourceLocation id, List input, @Nonnull ItemStack output, int syphon, int ticks, int minimumTier) + { + super(id); + Preconditions.checkNotNull(input, "input cannot be null."); + Preconditions.checkNotNull(output, "output cannot be null."); + Preconditions.checkArgument(syphon >= 0, "syphon cannot be negative."); + Preconditions.checkArgument(ticks >= 0, "ticks cannot be negative."); + Preconditions.checkArgument(minimumTier >= 0, "minimumTier cannot be negative."); + + this.input = input; + this.output = output; + this.syphon = syphon; + this.ticks = ticks; + this.minimumTier = minimumTier; + } + + @Nonnull + public final List getInput() + { + return input; + } + + @Nonnull + public final ItemStack getOutput() + { + return output; + } + + public final int getSyphon() + { + return syphon; + } + + public final int getTicks() + { + return ticks; + } + + public final int getMinimumTier() + { + return minimumTier; + } + + @Override + public void write(PacketBuffer buffer) + { + buffer.writeInt(input.size()); + for (int i = 0; i < input.size(); i++) + { + input.get(i).write(buffer); + } + buffer.writeItemStack(output); + buffer.writeInt(syphon); + buffer.writeInt(ticks); + buffer.writeInt(minimumTier); + } + + @Override + public IRecipeSerializer getSerializer() + { + return BloodMagicRecipeSerializers.ALCHEMYTABLE.getRecipeSerializer(); + } + + @Override + public IRecipeType getType() + { + return BloodMagicRecipeType.ALCHEMYTABLE; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/recipe/RecipeBloodAltar.java b/src/main/java/wayoftime/bloodmagic/recipe/RecipeBloodAltar.java new file mode 100644 index 00000000..1633e130 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/recipe/RecipeBloodAltar.java @@ -0,0 +1,117 @@ +package wayoftime.bloodmagic.recipe; + +import javax.annotation.Nonnegative; +import javax.annotation.Nonnull; + +import com.google.common.base.Preconditions; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.common.recipe.BloodMagicRecipeType; +import wayoftime.bloodmagic.common.registries.BloodMagicRecipeSerializers; + +public class RecipeBloodAltar extends BloodMagicRecipe +{ + @Nonnull + private final Ingredient input; + @Nonnull + private final ItemStack output; + @Nonnull + private final int minimumTier; + @Nonnegative + private final int syphon; + @Nonnegative + private final int consumeRate; + @Nonnegative + private final int drainRate; + + public RecipeBloodAltar(ResourceLocation id, @Nonnull Ingredient input, @Nonnull ItemStack output, @Nonnegative int minimumTier, @Nonnegative int syphon, @Nonnegative int consumeRate, @Nonnegative int drainRate) + { + super(id); + Preconditions.checkNotNull(input, "input cannot be null."); + Preconditions.checkNotNull(output, "output cannot be null."); + Preconditions.checkArgument(minimumTier >= 0, "minimumTier cannot be negative."); + Preconditions.checkArgument(minimumTier <= 6, "minimumTier cannot be higher than max tier"); + Preconditions.checkArgument(syphon >= 0, "syphon cannot be negative."); + Preconditions.checkArgument(consumeRate >= 0, "consumeRate cannot be negative."); + Preconditions.checkArgument(drainRate >= 0, "drain cannot be negative."); + + this.input = input; + this.output = output; + this.minimumTier = minimumTier; + this.syphon = syphon; + this.consumeRate = consumeRate; + this.drainRate = drainRate; + } + + @Nonnull + public final Ingredient getInput() + { + return input; + } + + @Override + public final NonNullList getIngredients() + { + NonNullList list = NonNullList.create(); + list.add(getInput()); + return list; + } + + @Nonnull + public final ItemStack getOutput() + { + return output; + } + + public int getMinimumTier() + { + return minimumTier; + } + + @Nonnegative + public final int getSyphon() + { + return syphon; + } + + @Nonnegative + public final int getConsumeRate() + { + return consumeRate; + } + + @Nonnegative + public final int getDrainRate() + { + return drainRate; + } + + @Override + public void write(PacketBuffer buffer) + { + input.write(buffer); + buffer.writeItemStack(output); + buffer.writeInt(minimumTier); + buffer.writeInt(syphon); + buffer.writeInt(consumeRate); + buffer.writeInt(drainRate); + } + + @Override + public IRecipeSerializer getSerializer() + { + return BloodMagicRecipeSerializers.ALTAR.getRecipeSerializer(); + } + + @Override + public IRecipeType getType() + { + return BloodMagicRecipeType.ALTAR; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/recipe/RecipeTartaricForge.java b/src/main/java/wayoftime/bloodmagic/recipe/RecipeTartaricForge.java new file mode 100644 index 00000000..6fb61f2b --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/recipe/RecipeTartaricForge.java @@ -0,0 +1,92 @@ +package wayoftime.bloodmagic.recipe; + +import java.util.List; + +import javax.annotation.Nonnegative; +import javax.annotation.Nonnull; + +import com.google.common.base.Preconditions; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.common.recipe.BloodMagicRecipeType; +import wayoftime.bloodmagic.common.registries.BloodMagicRecipeSerializers; + +public class RecipeTartaricForge extends BloodMagicRecipe +{ + @Nonnull + private final List input; + @Nonnull + private final ItemStack output; + @Nonnegative + private final double minimumSouls; + @Nonnegative + private final double soulDrain; + + public RecipeTartaricForge(ResourceLocation id, @Nonnull List input, @Nonnull ItemStack output, @Nonnegative double minimumSouls, @Nonnegative double soulDrain) + { + super(id); + Preconditions.checkNotNull(input, "input cannot be null."); + Preconditions.checkNotNull(output, "output cannot be null."); + Preconditions.checkArgument(minimumSouls >= 0, "minimumSouls cannot be negative."); + Preconditions.checkArgument(soulDrain >= 0, "soulDrain cannot be negative."); + + this.input = input; + this.output = output; + this.minimumSouls = minimumSouls; + this.soulDrain = soulDrain; + } + + @Nonnull + public final List getInput() + { + return input; + } + + @Nonnull + public final ItemStack getOutput() + { + return output; + } + + @Nonnegative + public final double getMinimumSouls() + { + return minimumSouls; + } + + @Nonnegative + public final double getSoulDrain() + { + return soulDrain; + } + + @Override + public void write(PacketBuffer buffer) + { + buffer.writeInt(input.size()); + for (int i = 0; i < input.size(); i++) + { + input.get(i).write(buffer); + } + buffer.writeItemStack(output); + buffer.writeDouble(minimumSouls); + buffer.writeDouble(soulDrain); + } + + @Override + public IRecipeSerializer getSerializer() + { + return BloodMagicRecipeSerializers.TARTARIC.getRecipeSerializer(); + } + + @Override + public IRecipeType getType() + { + return BloodMagicRecipeType.TARTARICFORGE; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/recipe/helper/FluidStackIngredient.java b/src/main/java/wayoftime/bloodmagic/recipe/helper/FluidStackIngredient.java new file mode 100644 index 00000000..16bf4a28 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/recipe/helper/FluidStackIngredient.java @@ -0,0 +1,384 @@ +package wayoftime.bloodmagic.recipe.helper; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSyntaxException; + +import net.minecraft.fluid.Fluid; +import net.minecraft.network.PacketBuffer; +import net.minecraft.tags.FluidTags; +import net.minecraft.tags.ITag; +import net.minecraft.tags.TagCollectionManager; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidStack; +import wayoftime.bloodmagic.util.Constants; + +/** + * Created by Thiakil on 12/07/2019. + */ +public abstract class FluidStackIngredient implements InputIngredient +{ + + public static FluidStackIngredient from(@Nonnull Fluid instance, int amount) + { + return from(new FluidStack(instance, amount)); + } + + public static FluidStackIngredient from(@Nonnull FluidStack instance) + { + return new Single(instance); + } + + public static FluidStackIngredient from(@Nonnull ITag fluidTag, int minAmount) + { + return new Tagged(fluidTag, minAmount); + } + + public static FluidStackIngredient read(PacketBuffer buffer) + { + // TODO: Allow supporting serialization of different types than just the ones we + // implement? + IngredientType type = buffer.readEnumValue(IngredientType.class); + if (type == IngredientType.SINGLE) + { + return Single.read(buffer); + } else if (type == IngredientType.TAGGED) + { + return Tagged.read(buffer); + } + return Multi.read(buffer); + } + + public static FluidStackIngredient deserialize(@Nullable JsonElement json) + { + if (json == null || json.isJsonNull()) + { + throw new JsonSyntaxException("Ingredient cannot be null"); + } + if (json.isJsonArray()) + { + JsonArray jsonArray = json.getAsJsonArray(); + int size = jsonArray.size(); + if (size == 0) + { + throw new JsonSyntaxException("Ingredient array cannot be empty, at least one ingredient must be defined"); + } else if (size > 1) + { + FluidStackIngredient[] ingredients = new FluidStackIngredient[size]; + for (int i = 0; i < size; i++) + { + // Read all the ingredients + ingredients[i] = deserialize(jsonArray.get(i)); + } + return createMulti(ingredients); + } + // If we only have a single element, just set our json as that so that we don't + // have to use Multi for efficiency reasons + json = jsonArray.get(0); + } + if (!json.isJsonObject()) + { + throw new JsonSyntaxException("Expected fluid to be object or array of objects"); + } + JsonObject jsonObject = json.getAsJsonObject(); + if (jsonObject.has(Constants.JSON.FLUID) && jsonObject.has(Constants.JSON.TAG)) + { + throw new JsonParseException("An ingredient entry is either a tag or an fluid, not both"); + } else if (jsonObject.has(Constants.JSON.FLUID)) + { + return from(SerializerHelper.deserializeFluid(jsonObject)); + } else if (jsonObject.has(Constants.JSON.TAG)) + { + if (!jsonObject.has(Constants.JSON.AMOUNT)) + { + throw new JsonSyntaxException("Expected to receive a amount that is greater than zero"); + } + JsonElement count = jsonObject.get(Constants.JSON.AMOUNT); + if (!JSONUtils.isNumber(count)) + { + throw new JsonSyntaxException("Expected amount to be a number greater than zero."); + } + int amount = count.getAsJsonPrimitive().getAsInt(); + if (amount < 1) + { + throw new JsonSyntaxException("Expected amount to be greater than zero."); + } + ResourceLocation resourceLocation = new ResourceLocation(JSONUtils.getString(jsonObject, Constants.JSON.TAG)); + ITag tag = TagCollectionManager.getManager().getFluidTags().get(resourceLocation); + if (tag == null) + { + throw new JsonSyntaxException("Unknown fluid tag '" + resourceLocation + "'"); + } + return from(tag, amount); + } + throw new JsonSyntaxException("Expected to receive a resource location representing either a tag or a fluid."); + } + + public static FluidStackIngredient createMulti(FluidStackIngredient... ingredients) + { + if (ingredients.length == 0) + { + // TODO: Throw error + } else if (ingredients.length == 1) + { + return ingredients[0]; + } + List cleanedIngredients = new ArrayList<>(); + for (FluidStackIngredient ingredient : ingredients) + { + if (ingredient instanceof Multi) + { + // Don't worry about if our inner ingredients are multi as well, as if this is + // the only external method for + // creating a multi ingredient, then we are certified they won't be of a higher + // depth + cleanedIngredients.addAll(Arrays.asList(((Multi) ingredient).ingredients)); + } else + { + cleanedIngredients.add(ingredient); + } + } + // There should be more than a single fluid or we would have split out earlier + return new Multi(cleanedIngredients.toArray(new FluidStackIngredient[0])); + } + + public static class Single extends FluidStackIngredient + { + + @Nonnull + private final FluidStack fluidInstance; + + public Single(@Nonnull FluidStack fluidInstance) + { + this.fluidInstance = Objects.requireNonNull(fluidInstance); + } + + @Override + public boolean test(@Nonnull FluidStack fluidStack) + { + return testType(fluidStack) && fluidStack.getAmount() >= fluidInstance.getAmount(); + } + + @Override + public boolean testType(@Nonnull FluidStack fluidStack) + { + return Objects.requireNonNull(fluidStack).isFluidEqual(fluidInstance); + } + + @Nonnull + @Override + public FluidStack getMatchingInstance(@Nonnull FluidStack fluidStack) + { + return test(fluidStack) ? fluidInstance : FluidStack.EMPTY; + } + + @Nonnull + @Override + public List getRepresentations() + { + return Collections.singletonList(fluidInstance); + } + + @Override + public void write(PacketBuffer buffer) + { + buffer.writeEnumValue(IngredientType.SINGLE); + fluidInstance.writeToPacket(buffer); + } + + @Nonnull + @Override + public JsonElement serialize() + { + JsonObject json = new JsonObject(); + json.addProperty(Constants.JSON.AMOUNT, fluidInstance.getAmount()); + json.addProperty(Constants.JSON.FLUID, fluidInstance.getFluid().getRegistryName().toString()); + if (fluidInstance.hasTag()) + { + json.addProperty(Constants.JSON.NBT, fluidInstance.getTag().toString()); + } + return json; + } + + public static Single read(PacketBuffer buffer) + { + return new Single(FluidStack.readFromPacket(buffer)); + } + } + + public static class Tagged extends FluidStackIngredient + { + + @Nonnull + private final ITag tag; + private final int amount; + + public Tagged(@Nonnull ITag tag, int amount) + { + this.tag = tag; + this.amount = amount; + } + + @Override + public boolean test(@Nonnull FluidStack fluidStack) + { + return testType(fluidStack) && fluidStack.getAmount() >= amount; + } + + @Override + public boolean testType(@Nonnull FluidStack fluidStack) + { + return Objects.requireNonNull(fluidStack).getFluid().isIn(tag); + } + + @Nonnull + @Override + public FluidStack getMatchingInstance(@Nonnull FluidStack fluidStack) + { + if (test(fluidStack)) + { + // Our fluid is in the tag so we make a new stack with the given amount + return new FluidStack(fluidStack, amount); + } + return FluidStack.EMPTY; + } + + @Nonnull + @Override + public List getRepresentations() + { + // TODO: Can this be cached some how + List representations = new ArrayList<>(); + for (Fluid fluid : TagResolverHelper.getRepresentations(tag)) + { + representations.add(new FluidStack(fluid, amount)); + } + return representations; + } + + @Override + public void write(PacketBuffer buffer) + { + buffer.writeEnumValue(IngredientType.TAGGED); + buffer.writeResourceLocation(TagCollectionManager.getManager().getFluidTags().getValidatedIdFromTag(tag)); + buffer.writeVarInt(amount); + } + + @Nonnull + @Override + public JsonElement serialize() + { + JsonObject json = new JsonObject(); + json.addProperty(Constants.JSON.AMOUNT, amount); + json.addProperty(Constants.JSON.TAG, TagCollectionManager.getManager().getFluidTags().getValidatedIdFromTag(tag).toString()); + return json; + } + + public static Tagged read(PacketBuffer buffer) + { + return new Tagged(FluidTags.makeWrapperTag(buffer.readResourceLocation().toString()), buffer.readVarInt()); + } + } + + public static class Multi extends FluidStackIngredient + { + + private final FluidStackIngredient[] ingredients; + + protected Multi(@Nonnull FluidStackIngredient... ingredients) + { + this.ingredients = ingredients; + } + + @Override + public boolean test(@Nonnull FluidStack stack) + { + return Arrays.stream(ingredients).anyMatch(ingredient -> ingredient.test(stack)); + } + + @Override + public boolean testType(@Nonnull FluidStack stack) + { + return Arrays.stream(ingredients).anyMatch(ingredient -> ingredient.testType(stack)); + } + + @Nonnull + @Override + public FluidStack getMatchingInstance(@Nonnull FluidStack stack) + { + for (FluidStackIngredient ingredient : ingredients) + { + FluidStack matchingInstance = ingredient.getMatchingInstance(stack); + if (!matchingInstance.isEmpty()) + { + return matchingInstance; + } + } + return FluidStack.EMPTY; + } + + @Nonnull + @Override + public List getRepresentations() + { + List representations = new ArrayList<>(); + for (FluidStackIngredient ingredient : ingredients) + { + representations.addAll(ingredient.getRepresentations()); + } + return representations; + } + + @Override + public void write(PacketBuffer buffer) + { + buffer.writeEnumValue(IngredientType.MULTI); + buffer.writeVarInt(ingredients.length); + for (FluidStackIngredient ingredient : ingredients) + { + ingredient.write(buffer); + } + } + + @Nonnull + @Override + public JsonElement serialize() + { + JsonArray json = new JsonArray(); + for (FluidStackIngredient ingredient : ingredients) + { + json.add(ingredient.serialize()); + } + return json; + } + + public static FluidStackIngredient read(PacketBuffer buffer) + { + FluidStackIngredient[] ingredients = new FluidStackIngredient[buffer.readVarInt()]; + for (int i = 0; i < ingredients.length; i++) + { + ingredients[i] = FluidStackIngredient.read(buffer); + } + return createMulti(ingredients); + } + } + + private enum IngredientType + { + SINGLE, + TAGGED, + MULTI + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/recipe/helper/IgnoredIInventory.java b/src/main/java/wayoftime/bloodmagic/recipe/helper/IgnoredIInventory.java new file mode 100644 index 00000000..be062c29 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/recipe/helper/IgnoredIInventory.java @@ -0,0 +1,67 @@ +package wayoftime.bloodmagic.recipe.helper; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; + +public final class IgnoredIInventory implements IInventory +{ + public static final IgnoredIInventory INSTANCE = new IgnoredIInventory(); + + private IgnoredIInventory() + { + } + + @Override + public int getSizeInventory() + { + return 0; + } + + @Override + public boolean isEmpty() + { + return true; + } + + @Override + public ItemStack getStackInSlot(int index) + { + return ItemStack.EMPTY; + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + return ItemStack.EMPTY; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + return ItemStack.EMPTY; + } + + @Override + public void setInventorySlotContents(int index, @Nonnull ItemStack stack) + { + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isUsableByPlayer(@Nonnull PlayerEntity player) + { + return false; + } + + @Override + public void clear() + { + } +} diff --git a/src/main/java/wayoftime/bloodmagic/recipe/helper/InputIngredient.java b/src/main/java/wayoftime/bloodmagic/recipe/helper/InputIngredient.java new file mode 100644 index 00000000..366e712d --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/recipe/helper/InputIngredient.java @@ -0,0 +1,52 @@ +package wayoftime.bloodmagic.recipe.helper; + +import java.util.List; +import java.util.function.Predicate; + +import javax.annotation.Nonnull; + +import com.google.gson.JsonElement; + +import net.minecraft.network.PacketBuffer; + +public interface InputIngredient extends Predicate +{ + + /** + * Evaluates this predicate on the given argument, ignoring any size data. + * + * @param type the input argument + * + * @return {@code true} if the input argument matches the predicate, otherwise + * {@code false} + */ + boolean testType(@Nonnull TYPE type); + + TYPE getMatchingInstance(TYPE type); + + /** + * Primarily for JEI, a list of valid instances of the type + * + * @return List (empty means no valid registrations found and recipe is to be + * hidden) + * + * @apiNote Do not modify any of the values returned by the representations + */ + @Nonnull + List getRepresentations(); + + /** + * Writes this ingredient to a PacketBuffer. + * + * @param buffer The buffer to write to. + */ + void write(PacketBuffer buffer); + + /** + * Serializes this ingredient to a JsonElement + * + * @return JsonElement representation of this ingredient. + */ + @Nonnull + JsonElement serialize(); +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/recipe/helper/SerializerHelper.java b/src/main/java/wayoftime/bloodmagic/recipe/helper/SerializerHelper.java new file mode 100644 index 00000000..da325df7 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/recipe/helper/SerializerHelper.java @@ -0,0 +1,129 @@ +package wayoftime.bloodmagic.recipe.helper; + +import javax.annotation.Nonnull; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import com.mojang.brigadier.exceptions.CommandSyntaxException; + +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.Fluids; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.ShapedRecipe; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.registries.ForgeRegistries; +import wayoftime.bloodmagic.util.Constants; + +/** + * Copied liberally from Mekanism. Thanks, pupnewfster! + * + */ +public class SerializerHelper +{ + private SerializerHelper() + { + } + + private static final Gson GSON = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create(); + + private static void validateKey(@Nonnull JsonObject json, @Nonnull String key) + { + if (!json.has(key)) + { + throw new JsonSyntaxException("Missing '" + key + "', expected to find an object"); + } + if (!json.get(key).isJsonObject()) + { + throw new JsonSyntaxException("Expected '" + key + "' to be an object"); + } + } + + public static ItemStack getItemStack(@Nonnull JsonObject json, @Nonnull String key) + { + validateKey(json, key); + return ShapedRecipe.deserializeItem(JSONUtils.getJsonObject(json, key)); + } + + public static JsonElement serializeItemStack(@Nonnull ItemStack stack) + { + JsonObject json = new JsonObject(); + json.addProperty(Constants.JSON.ITEM, stack.getItem().getRegistryName().toString()); + if (stack.getCount() > 1) + { + json.addProperty(Constants.JSON.COUNT, stack.getCount()); + } + if (stack.hasTag()) + { + json.addProperty(Constants.JSON.NBT, stack.getTag().toString()); + } + return json; + } + + public static FluidStack getFluidStack(@Nonnull JsonObject json, @Nonnull String key) + { + validateKey(json, key); + return deserializeFluid(JSONUtils.getJsonObject(json, key)); + } + + public static FluidStack deserializeFluid(@Nonnull JsonObject json) + { + if (!json.has(Constants.JSON.AMOUNT)) + { + throw new JsonSyntaxException("Expected to receive a amount that is greater than zero"); + } + JsonElement count = json.get(Constants.JSON.AMOUNT); + if (!JSONUtils.isNumber(count)) + { + throw new JsonSyntaxException("Expected amount to be a number greater than zero."); + } + int amount = count.getAsJsonPrimitive().getAsInt(); + if (amount < 1) + { + throw new JsonSyntaxException("Expected amount to be greater than zero."); + } + ResourceLocation resourceLocation = new ResourceLocation(JSONUtils.getString(json, Constants.JSON.FLUID)); + Fluid fluid = ForgeRegistries.FLUIDS.getValue(resourceLocation); + if (fluid == null || fluid == Fluids.EMPTY) + { + throw new JsonSyntaxException("Invalid fluid type '" + resourceLocation + "'"); + } + CompoundNBT nbt = null; + if (json.has(Constants.JSON.NBT)) + { + JsonElement jsonNBT = json.get(Constants.JSON.NBT); + try + { + if (jsonNBT.isJsonObject()) + { + nbt = JsonToNBT.getTagFromJson(GSON.toJson(jsonNBT)); + } else + { + nbt = JsonToNBT.getTagFromJson(JSONUtils.getString(jsonNBT, Constants.JSON.NBT)); + } + } catch (CommandSyntaxException e) + { + throw new JsonSyntaxException("Invalid NBT entry for fluid '" + resourceLocation + "'"); + } + } + return new FluidStack(fluid, amount, nbt); + } + + public static JsonElement serializeFluidStack(@Nonnull FluidStack stack) + { + JsonObject json = new JsonObject(); + json.addProperty(Constants.JSON.FLUID, stack.getFluid().getRegistryName().toString()); + json.addProperty(Constants.JSON.AMOUNT, stack.getAmount()); + if (stack.hasTag()) + { + json.addProperty(Constants.JSON.NBT, stack.getTag().toString()); + } + return json; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/recipe/helper/TagResolverHelper.java b/src/main/java/wayoftime/bloodmagic/recipe/helper/TagResolverHelper.java new file mode 100644 index 00000000..02a5eaac --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/recipe/helper/TagResolverHelper.java @@ -0,0 +1,32 @@ +package wayoftime.bloodmagic.recipe.helper; + +import java.util.Collections; +import java.util.List; + +import net.minecraft.tags.ITag; + +/** + * Copied from Mekanism, including the author's rant about tags. + */ +public class TagResolverHelper +{ + + public static List getRepresentations(ITag tag) + { + try + { + return tag.getAllElements(); + } catch (IllegalStateException e) + { + // Why do tags have to be such an annoyance in 1.16 + // This is needed so that we can ensure we give JEI an empty list of + // representations + // instead of crashing on the first run, as recipes get "initialized" before + // tags are + // done initializing, and we don't want to spam the log with errors. JEI and + // things + // still work fine regardless of this + return Collections.emptyList(); + } + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/ritual/AreaDescriptor.java b/src/main/java/wayoftime/bloodmagic/ritual/AreaDescriptor.java new file mode 100644 index 00000000..b37eeb80 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/AreaDescriptor.java @@ -0,0 +1,654 @@ +package wayoftime.bloodmagic.ritual; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; + +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.gen.feature.template.PlacementSettings; +import net.minecraft.world.gen.feature.template.Template; +import wayoftime.bloodmagic.util.Constants; + +public abstract class AreaDescriptor implements Iterator +{ + public List getContainedPositions(BlockPos pos) + { + return new ArrayList<>(); + } + + public AxisAlignedBB getAABB(BlockPos pos) + { + return null; + } + + public abstract void resetCache(); + + public abstract boolean isWithinArea(BlockPos pos); + + public abstract void resetIterator(); + + public void readFromNBT(CompoundNBT tag) + { + + } + + public void writeToNBT(CompoundNBT tag) + { + + } + + public abstract AreaDescriptor copy(); + + public abstract int getVolumeForOffsets(BlockPos offset1, BlockPos offset2); + + public abstract boolean isWithinRange(BlockPos offset1, BlockPos offset2, int verticalLimit, int horizontalLimit); + + public abstract int getVolume(); + + public abstract int getHeight(); + + public abstract boolean isWithinRange(int verticalLimit, int horizontalLimit); + + /** + * This method changes the area descriptor so that its range matches the two + * blocks that are selected. When implementing this method, assume that these + * positions are the blocks that are clicked by the player. + * + * @param pos1 + * @param pos2 + */ + public abstract void modifyAreaByBlockPositions(BlockPos pos1, BlockPos pos2); + + public abstract boolean intersects(AreaDescriptor descriptor); + + public abstract AreaDescriptor offset(BlockPos offset); + + public abstract AreaDescriptor rotateDescriptor(PlacementSettings settings); + + public static class Rectangle extends AreaDescriptor + { + protected BlockPos minimumOffset; + protected BlockPos maximumOffset; // Non-inclusive maximum offset. + private BlockPos currentPosition; + + private ArrayList blockPosCache; + private BlockPos cachedPosition; + + private boolean cache = true; + + /** + * This constructor takes in the minimum and maximum BlockPos. The maximum + * offset is non-inclusive, meaning if you pass in (0,0,0) and (1,1,1), calling + * getContainedPositions() will only give (0,0,0). + * + * @param minimumOffset - + * @param maximumOffset - + */ + public Rectangle(BlockPos minimumOffset, BlockPos maximumOffset) + { + setOffsets(minimumOffset, maximumOffset); + } + + public Rectangle(BlockPos minimumOffset, int sizeX, int sizeY, int sizeZ) + { + this(minimumOffset, minimumOffset.add(sizeX, sizeY, sizeZ)); + } + + public Rectangle(BlockPos minimumOffset, int size) + { + this(minimumOffset, size, size, size); + } + + public Rectangle(AreaDescriptor.Rectangle rectangle) + { + this(rectangle.minimumOffset, rectangle.maximumOffset); + } + + public AreaDescriptor.Rectangle copy() + { + return new AreaDescriptor.Rectangle(this); + } + + @Override + public List getContainedPositions(BlockPos pos) + { + if (!cache || !pos.equals(cachedPosition) || blockPosCache.isEmpty()) + { + ArrayList posList = new ArrayList<>(); + + for (int j = minimumOffset.getY(); j < maximumOffset.getY(); j++) + { + for (int i = minimumOffset.getX(); i < maximumOffset.getX(); i++) + { + for (int k = minimumOffset.getZ(); k < maximumOffset.getZ(); k++) + { + posList.add(pos.add(i, j, k)); + } + } + } + + blockPosCache = posList; + cachedPosition = pos; + } + + return Collections.unmodifiableList(blockPosCache); + } + + @Override + public AxisAlignedBB getAABB(BlockPos pos) + { + AxisAlignedBB tempAABB = new AxisAlignedBB(minimumOffset, maximumOffset); + return tempAABB.offset(pos.getX(), pos.getY(), pos.getZ()); + } + + @Override + public int getHeight() + { + return this.maximumOffset.getY() - this.minimumOffset.getY(); + } + + public BlockPos getMinimumOffset() + { + return minimumOffset; + } + + public BlockPos getMaximumOffset() + { + return maximumOffset; + } + + /** + * Sets the offsets of the AreaDescriptor in a safe way that will make + * minimumOffset the lowest corner + * + * @param offset1 - + * @param offset2 - + */ + public void setOffsets(BlockPos offset1, BlockPos offset2) + { + this.minimumOffset = new BlockPos(Math.min(offset1.getX(), offset2.getX()), Math.min(offset1.getY(), offset2.getY()), Math.min(offset1.getZ(), offset2.getZ())); + this.maximumOffset = new BlockPos(Math.max(offset1.getX(), offset2.getX()), Math.max(offset1.getY(), offset2.getY()), Math.max(offset1.getZ(), offset2.getZ())); + blockPosCache = new ArrayList<>(); + } + + @Override + public void resetCache() + { + this.blockPosCache = new ArrayList<>(); + } + + @Override + public boolean isWithinArea(BlockPos pos) + { + int x = pos.getX(); + int y = pos.getY(); + int z = pos.getZ(); + + return x >= minimumOffset.getX() && x < maximumOffset.getX() && y >= minimumOffset.getY() + && y < maximumOffset.getY() && z >= minimumOffset.getZ() && z < maximumOffset.getZ(); + } + + @Override + public boolean hasNext() + { + return currentPosition == null || !(currentPosition.getX() + 1 == maximumOffset.getX() + && currentPosition.getY() + 1 == maximumOffset.getY() + && currentPosition.getZ() + 1 == maximumOffset.getZ()); + } + + @Override + public BlockPos next() + { + if (currentPosition != null) + { + int nextX = currentPosition.getX() + 1 >= maximumOffset.getX() ? minimumOffset.getX() + : currentPosition.getX() + 1; + int nextZ = nextX != minimumOffset.getX() ? currentPosition.getZ() + : (currentPosition.getZ() + 1 >= maximumOffset.getZ() ? minimumOffset.getZ() + : currentPosition.getZ() + 1); + int nextY = (nextZ != minimumOffset.getZ() || nextX != minimumOffset.getX()) ? currentPosition.getY() + : (currentPosition.getY() + 1); + currentPosition = new BlockPos(nextX, nextY, nextZ); + } else + { + currentPosition = minimumOffset; + } + + return currentPosition; + } + + @Override + public void remove() + { + + } + + @Override + public void resetIterator() + { + currentPosition = null; + } + + @Override + public void modifyAreaByBlockPositions(BlockPos pos1, BlockPos pos2) + { + setOffsets(pos1, pos2); + maximumOffset = maximumOffset.add(1, 1, 1); + resetIterator(); + resetCache(); + } + + @Override + public void readFromNBT(CompoundNBT tag) + { + minimumOffset = new BlockPos(tag.getInt(Constants.NBT.X_COORD + "min"), tag.getInt(Constants.NBT.Y_COORD + "min"), tag.getInt(Constants.NBT.Z_COORD + "min")); + maximumOffset = new BlockPos(tag.getInt(Constants.NBT.X_COORD + "max"), tag.getInt(Constants.NBT.Y_COORD + "max"), tag.getInt(Constants.NBT.Z_COORD + "max")); + } + + @Override + public void writeToNBT(CompoundNBT tag) + { + tag.putInt(Constants.NBT.X_COORD + "min", minimumOffset.getX()); + tag.putInt(Constants.NBT.Y_COORD + "min", minimumOffset.getY()); + tag.putInt(Constants.NBT.Z_COORD + "min", minimumOffset.getZ()); + tag.putInt(Constants.NBT.X_COORD + "max", maximumOffset.getX()); + tag.putInt(Constants.NBT.Y_COORD + "max", maximumOffset.getY()); + tag.putInt(Constants.NBT.Z_COORD + "max", maximumOffset.getZ()); + } + + @Override + public int getVolumeForOffsets(BlockPos offset1, BlockPos offset2) + { + BlockPos minPos = new BlockPos(Math.min(offset1.getX(), offset2.getX()), Math.min(offset1.getY(), offset2.getY()), Math.min(offset1.getZ(), offset2.getZ())); + BlockPos maxPos = new BlockPos(Math.max(offset1.getX(), offset2.getX()), Math.max(offset1.getY(), offset2.getY()), Math.max(offset1.getZ(), offset2.getZ())); + + maxPos = maxPos.add(1, 1, 1); + + return (maxPos.getX() - minPos.getX()) * (maxPos.getY() - minPos.getY()) * (maxPos.getZ() - minPos.getZ()); + } + + @Override + public boolean isWithinRange(BlockPos offset1, BlockPos offset2, int verticalLimit, int horizontalLimit) + { + BlockPos minPos = new BlockPos(Math.min(offset1.getX(), offset2.getX()), Math.min(offset1.getY(), offset2.getY()), Math.min(offset1.getZ(), offset2.getZ())); + BlockPos maxPos = new BlockPos(Math.max(offset1.getX(), offset2.getX()), Math.max(offset1.getY(), offset2.getY()), Math.max(offset1.getZ(), offset2.getZ())); + + return minPos.getY() >= -verticalLimit && maxPos.getY() <= verticalLimit + && minPos.getX() >= -horizontalLimit && maxPos.getX() <= horizontalLimit + && minPos.getZ() >= -horizontalLimit && maxPos.getZ() <= horizontalLimit; + } + + @Override + public int getVolume() + { + return (maximumOffset.getX() - minimumOffset.getX()) * (maximumOffset.getY() - minimumOffset.getY()) + * (maximumOffset.getZ() - minimumOffset.getZ()); + } + + @Override + public boolean isWithinRange(int verticalLimit, int horizontalLimit) + { + return minimumOffset.getY() >= -verticalLimit && maximumOffset.getY() <= verticalLimit + 1 + && minimumOffset.getX() >= -horizontalLimit && maximumOffset.getX() <= horizontalLimit + 1 + && minimumOffset.getZ() >= -horizontalLimit && maximumOffset.getZ() <= horizontalLimit + 1; + } + + @Override + public boolean intersects(AreaDescriptor descriptor) + { + if (descriptor instanceof AreaDescriptor.Rectangle) + { + AreaDescriptor.Rectangle rectangle = (AreaDescriptor.Rectangle) descriptor; + + return !(minimumOffset.getX() >= rectangle.maximumOffset.getX() + || minimumOffset.getY() >= rectangle.maximumOffset.getY() + || minimumOffset.getZ() >= rectangle.maximumOffset.getZ() + || rectangle.minimumOffset.getX() >= maximumOffset.getX() + || rectangle.minimumOffset.getY() >= maximumOffset.getY() + || rectangle.minimumOffset.getZ() >= maximumOffset.getZ()); + } + + return false; + } + + @Override + public AreaDescriptor offset(BlockPos offset) + { + return new AreaDescriptor.Rectangle(this.minimumOffset.add(offset), this.maximumOffset.add(offset)); + } + + @Override + public AreaDescriptor rotateDescriptor(PlacementSettings settings) + { + BlockPos rotatePos1 = Template.transformedBlockPos(settings, minimumOffset); + BlockPos rotatePos2 = Template.transformedBlockPos(settings, maximumOffset.add(-1, -1, -1)); // It works, + // shut up! + + AreaDescriptor.Rectangle rectangle = new AreaDescriptor.Rectangle(this.minimumOffset, 1); + rectangle.modifyAreaByBlockPositions(rotatePos1, rotatePos2); + + return rectangle; + } + } + + public static class HemiSphere extends AreaDescriptor + { + private BlockPos minimumOffset; + private int radius; + + private ArrayList blockPosCache; + private BlockPos cachedPosition; + + private boolean cache = true; + + public HemiSphere(BlockPos minimumOffset, int radius) + { + setRadius(minimumOffset, radius); + } + + public HemiSphere(AreaDescriptor.HemiSphere hemiSphere) + { + this(hemiSphere.minimumOffset, hemiSphere.radius); + } + + public AreaDescriptor.HemiSphere copy() + { + return new AreaDescriptor.HemiSphere(this); + } + + public void setRadius(BlockPos minimumOffset, int radius) + { + this.minimumOffset = new BlockPos(Math.min(minimumOffset.getX(), minimumOffset.getX()), Math.min(minimumOffset.getY(), minimumOffset.getY()), Math.min(minimumOffset.getZ(), minimumOffset.getZ())); + this.radius = radius; + blockPosCache = new ArrayList<>(); + } + + @Override + public int getHeight() + { + return this.radius * 2; + } + + @Override + public List getContainedPositions(BlockPos pos) + { + if (!cache || !pos.equals(cachedPosition) || blockPosCache.isEmpty()) + { + ArrayList posList = new ArrayList<>(); + + int i = -radius; + int j = minimumOffset.getY(); + int k = -radius; + + // TODO For some reason the bottom of the hemisphere is not going up with the + // minOffset + + while (i <= radius) + { + while (j <= radius) + { + while (k <= radius) + { + if (i * i + j * j + k * k >= (radius + 0.5F) * (radius + 0.5F)) + { + k++; + continue; + } + + posList.add(pos.add(i, j, k)); + k++; + } + + k = -radius; + j++; + } + + j = minimumOffset.getY(); + i++; + } + + blockPosCache = posList; + cachedPosition = pos; + } + + return Collections.unmodifiableList(blockPosCache); + } + + /** + * Since you can't make a box using a sphere, this returns null + */ + @Override + public AxisAlignedBB getAABB(BlockPos pos) + { + return null; + } + + @Override + public void resetCache() + { + this.blockPosCache = new ArrayList<>(); + } + + @Override + public boolean isWithinArea(BlockPos pos) + { + return blockPosCache.contains(pos); + } + + @Override + public boolean hasNext() + { + return false; + } + + @Override + public BlockPos next() + { + return null; + } + + @Override + public void remove() + { + + } + + @Override + public void resetIterator() + { + + } + + @Override + public void modifyAreaByBlockPositions(BlockPos pos1, BlockPos pos2) + { + + } + + @Override + public int getVolumeForOffsets(BlockPos pos1, BlockPos pos2) + { + return 0; + } + + @Override + public boolean isWithinRange(BlockPos offset1, BlockPos offset2, int verticalLimit, int horizontalLimit) + { + return false; + } + + @Override + public int getVolume() + { + return 0; + } + + @Override + public boolean isWithinRange(int verticalLimit, int horizontalLimit) + { + return false; + } + + @Override + public boolean intersects(AreaDescriptor descriptor) + { + return false; + } + + @Override + public AreaDescriptor offset(BlockPos offset) + { + return new AreaDescriptor.HemiSphere(minimumOffset.add(offset), radius); + } + + @Override + public AreaDescriptor rotateDescriptor(PlacementSettings settings) + { + return this; + } + } + + public static class Cross extends AreaDescriptor + { + + private ArrayList blockPosCache; + private BlockPos cachedPosition; + + private BlockPos centerPos; + private int size; + + private boolean cache = true; + + public Cross(BlockPos center, int size) + { + this.centerPos = center; + this.size = size; + this.blockPosCache = new ArrayList<>(); + } + + public Cross(AreaDescriptor.Cross cross) + { + this(cross.centerPos, cross.size); + } + + public AreaDescriptor.Cross copy() + { + return new AreaDescriptor.Cross(this); + } + + @Override + public int getHeight() + { + return this.size * 2 + 1; + } + + @Override + public List getContainedPositions(BlockPos pos) + { + if (!cache || !pos.equals(cachedPosition) || blockPosCache.isEmpty()) + { + resetCache(); + + blockPosCache.add(centerPos.add(pos)); + for (int i = 1; i <= size; i++) + { + blockPosCache.add(centerPos.add(pos).add(i, 0, 0)); + blockPosCache.add(centerPos.add(pos).add(0, 0, i)); + blockPosCache.add(centerPos.add(pos).add(-i, 0, 0)); + blockPosCache.add(centerPos.add(pos).add(0, 0, -i)); + } + } + + cachedPosition = pos; + + return Collections.unmodifiableList(blockPosCache); + } + + @Override + public void resetCache() + { + blockPosCache = new ArrayList<>(); + } + + @Override + public boolean isWithinArea(BlockPos pos) + { + return blockPosCache.contains(pos); + } + + @Override + public boolean hasNext() + { + return false; + } + + @Override + public BlockPos next() + { + return null; + } + + @Override + public void remove() + { + + } + + @Override + public void resetIterator() + { + + } + + @Override + public void modifyAreaByBlockPositions(BlockPos pos1, BlockPos pos2) + { + + } + + @Override + public int getVolumeForOffsets(BlockPos pos1, BlockPos pos2) + { + return 0; + } + + @Override + public boolean isWithinRange(BlockPos offset1, BlockPos offset2, int verticalLimit, int horizontalLimit) + { + return false; + } + + @Override + public int getVolume() + { + return 0; + } + + @Override + public boolean isWithinRange(int verticalLimit, int horizontalLimit) + { + return false; + } + + @Override + public boolean intersects(AreaDescriptor descriptor) + { + return false; + } + + @Override + public AreaDescriptor offset(BlockPos offset) + { + return new AreaDescriptor.Cross(centerPos.add(offset), size); + } + + @Override + public AreaDescriptor rotateDescriptor(PlacementSettings settings) + { + return this; + } + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/ritual/CapabilityRuneType.java b/src/main/java/wayoftime/bloodmagic/ritual/CapabilityRuneType.java new file mode 100644 index 00000000..258867c4 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/CapabilityRuneType.java @@ -0,0 +1,58 @@ +package wayoftime.bloodmagic.ritual; + +import java.util.concurrent.Callable; + +import net.minecraft.nbt.ByteNBT; +import net.minecraft.nbt.INBT; +import net.minecraft.util.Direction; +import net.minecraftforge.common.capabilities.Capability; + +public final class CapabilityRuneType +{ + public static class RuneTypeStorage implements Capability.IStorage + { + @Override + public INBT writeNBT(Capability capability, IRitualStone.Tile instance, Direction side) + { + return ByteNBT.valueOf((byte) instance.getRuneType().ordinal()); + } + + @Override + public void readNBT(Capability capability, IRitualStone.Tile instance, Direction side, INBT nbt) + { + instance.setRuneType(EnumRuneType.byMetadata(((ByteNBT) nbt).getByte())); + } + } + + public static class RuneTypeWrapper implements IRitualStone.Tile + { + private EnumRuneType type = EnumRuneType.BLANK; + + @Override + public boolean isRuneType(EnumRuneType runeType) + { + return type == runeType; + } + + @Override + public EnumRuneType getRuneType() + { + return type; + } + + public void setRuneType(EnumRuneType runeType) + { + type = runeType; + } + } + + public static class Factory implements Callable + { + @Override + public IRitualStone.Tile call() + throws Exception + { + return new RuneTypeWrapper(); + } + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/ritual/EnumReaderBoundaries.java b/src/main/java/wayoftime/bloodmagic/ritual/EnumReaderBoundaries.java new file mode 100644 index 00000000..3e664671 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/EnumReaderBoundaries.java @@ -0,0 +1,22 @@ +package wayoftime.bloodmagic.ritual; + +import java.util.Locale; + +import net.minecraft.util.IStringSerializable; + +public enum EnumReaderBoundaries implements IStringSerializable +{ + SUCCESS, VOLUME_TOO_LARGE, NOT_WITHIN_BOUNDARIES; + + @Override + public String toString() + { + return name().toLowerCase(Locale.ROOT); + } + + @Override + public String getString() + { + return toString(); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/ritual/EnumRitualReaderState.java b/src/main/java/wayoftime/bloodmagic/ritual/EnumRitualReaderState.java new file mode 100644 index 00000000..8ed0308a --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/EnumRitualReaderState.java @@ -0,0 +1,8 @@ +package wayoftime.bloodmagic.ritual; + +public enum EnumRitualReaderState +{ + SET_AREA, + INFORMATION, + SET_WILL_TYPES,; +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/EnumRuneType.java b/src/main/java/wayoftime/bloodmagic/ritual/EnumRuneType.java new file mode 100644 index 00000000..959e771d --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/EnumRuneType.java @@ -0,0 +1,54 @@ +package wayoftime.bloodmagic.ritual; + +import java.util.Locale; + +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.text.TextFormatting; + +public enum EnumRuneType implements IStringSerializable +{ + BLANK(TextFormatting.GRAY), + WATER(TextFormatting.AQUA), + FIRE(TextFormatting.RED), + EARTH(TextFormatting.GREEN), + AIR(TextFormatting.WHITE), + DUSK(TextFormatting.DARK_GRAY), + DAWN(TextFormatting.GOLD); + + public final TextFormatting colorCode; + + EnumRuneType(TextFormatting colorCode) + { + this.colorCode = colorCode; + } + + @Override + public String toString() + { + return name().toLowerCase(Locale.ENGLISH); + } + + @Override + public String getString() + { + return this.toString(); + } + +// @Nonnull +// public ItemStack getStack(int count) +// { +// ItemStack ret = new ItemStack(RegistrarBloodMagicItems.INSCRIPTION_TOOL, count, ordinal()); +// CompoundNBT tag = new CompoundNBT(); +// tag.putInt(Constants.NBT.USES, 10); +// ret.setTag(tag); +// return ret; +// } + + public static EnumRuneType byMetadata(int meta) + { + if (meta < 0 || meta >= values().length) + meta = 0; + + return values()[meta]; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/ritual/IMasterRitualStone.java b/src/main/java/wayoftime/bloodmagic/ritual/IMasterRitualStone.java new file mode 100644 index 00000000..775e5642 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/IMasterRitualStone.java @@ -0,0 +1,81 @@ +package wayoftime.bloodmagic.ritual; + +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import wayoftime.bloodmagic.core.data.SoulNetwork; +import wayoftime.bloodmagic.core.data.SoulTicket; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; + +/** + * This interface is for internal implementation only. + *

+ * It is provided via the API for easy obtaining of basic data. + */ +public interface IMasterRitualStone +{ + UUID getOwner(); + + SoulNetwork getOwnerNetwork(); + + boolean activateRitual(ItemStack activationCrystal, PlayerEntity activator, Ritual ritual); + + void performRitual(World world, BlockPos pos); + + void stopRitual(Ritual.BreakType breakType); + + int getCooldown(); + + void setCooldown(int cooldown); + + boolean isActive(); + + void setActive(boolean active); + + Direction getDirection(); + + boolean areTanksEmpty(); + + int getRunningTime(); + + World getWorldObj(); + + BlockPos getBlockPos(); + + String getNextBlockRange(String range); + + void provideInformationOfRitualToPlayer(PlayerEntity player); + + void provideInformationOfRangeToPlayer(PlayerEntity player, String range); + + void provideInformationOfWillConfigToPlayer(PlayerEntity player, List typeList); + + void setActiveWillConfig(PlayerEntity player, List typeList); + + EnumReaderBoundaries setBlockRangeByBounds(PlayerEntity player, String range, BlockPos offset1, BlockPos offset2); + + List getActiveWillConfig(); + + default SoulTicket ticket(int amount) + { + return SoulTicket.block(getWorldObj(), getBlockPos(), amount); + } + + AreaDescriptor getBlockRange(String range); + + void addBlockRanges(Map blockRanges); + + void addBlockRange(String range, AreaDescriptor defaultRange); + + void setBlockRanges(Map blockRanges); + + void setBlockRange(String range, AreaDescriptor defaultRange); + + Ritual getCurrentRitual(); +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/IRitualStone.java b/src/main/java/wayoftime/bloodmagic/ritual/IRitualStone.java new file mode 100644 index 00000000..a4409fe9 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/IRitualStone.java @@ -0,0 +1,20 @@ +package wayoftime.bloodmagic.ritual; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public interface IRitualStone +{ + boolean isRuneType(World world, BlockPos pos, EnumRuneType runeType); + + void setRuneType(World world, BlockPos pos, EnumRuneType runeType); + + interface Tile + { + boolean isRuneType(EnumRuneType runeType); + + EnumRuneType getRuneType(); + + void setRuneType(EnumRuneType runeType); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/ModRituals.java b/src/main/java/wayoftime/bloodmagic/ritual/ModRituals.java new file mode 100644 index 00000000..e3421d7d --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/ModRituals.java @@ -0,0 +1,26 @@ +package wayoftime.bloodmagic.ritual; + +import net.minecraft.block.Blocks; +import wayoftime.bloodmagic.ritual.harvest.HarvestHandlerPlantable; +import wayoftime.bloodmagic.ritual.harvest.HarvestHandlerStem; +import wayoftime.bloodmagic.ritual.harvest.HarvestHandlerTall; +import wayoftime.bloodmagic.ritual.harvest.HarvestRegistry; + +public class ModRituals +{ + public static void initHarvestHandlers() + { + HarvestRegistry.registerRangeAmplifier(Blocks.DIAMOND_BLOCK.getDefaultState(), 15); + HarvestRegistry.registerRangeAmplifier(Blocks.GOLD_BLOCK.getDefaultState(), 10); + HarvestRegistry.registerRangeAmplifier(Blocks.IRON_BLOCK.getDefaultState(), 6); + + HarvestRegistry.registerHandler(new HarvestHandlerPlantable()); + HarvestRegistry.registerHandler(new HarvestHandlerTall()); + HarvestRegistry.registerHandler(new HarvestHandlerStem()); + } +// +// public static void initCuttingFluids() { +// CrushingRegistry.registerCuttingFluid(new CrushingHandlerCuttingFluid(ItemCuttingFluid.FluidType.BASIC.getStack(), 250, 0.5)); +// CrushingRegistry.registerCuttingFluid(new CrushingHandlerCuttingFluid(ItemCuttingFluid.FluidType.EXPLOSIVE.getStack(), 25, 0.05)); +// } +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/Ritual.java b/src/main/java/wayoftime/bloodmagic/ritual/Ritual.java new file mode 100644 index 00000000..648e18e6 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/Ritual.java @@ -0,0 +1,427 @@ +package wayoftime.bloodmagic.ritual; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.UUID; +import java.util.function.Consumer; + +import org.apache.commons.lang3.builder.ToStringBuilder; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.ListNBT; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import wayoftime.bloodmagic.demonaura.WorldDemonWillHandler; +import wayoftime.bloodmagic.will.DemonWillHolder; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; + +/** + * Abstract class for creating new rituals. Register your ritual by annotating + * it with {@link RitualRegister} + */ +public abstract class Ritual +{ + + protected final Map modableRangeMap = new HashMap<>(); + protected final Map volumeRangeMap = new HashMap<>(); + protected final Map horizontalRangeMap = new HashMap<>(); + protected final Map verticalRangeMap = new HashMap<>(); + private final String name; + private final int crystalLevel; + private final int activationCost; + private final RitualRenderer renderer; + private final String unlocalizedName; + + public Ritual(String name, int crystalLevel, int activationCost, RitualRenderer renderer, String unlocalizedName) + { + this.name = name; + this.crystalLevel = crystalLevel; + this.activationCost = activationCost; + this.renderer = renderer; + this.unlocalizedName = unlocalizedName; + } + + /** + * @param name - The name of the ritual + * @param crystalLevel - Required Activation Crystal tier + * @param activationCost - Base LP cost for activating the ritual + */ + public Ritual(String name, int crystalLevel, int activationCost, String unlocalizedName) + { + this(name, crystalLevel, activationCost, null, unlocalizedName); + } + + public void readFromNBT(CompoundNBT tag) + { + ListNBT tags = tag.getList("areas", 10); + if (tags.isEmpty()) + { + return; + } + + for (int i = 0; i < tags.size(); i++) + { + CompoundNBT newTag = tags.getCompound(i); + String rangeKey = newTag.getString("key"); + + CompoundNBT storedTag = newTag.getCompound("area"); + AreaDescriptor desc = this.getBlockRange(rangeKey); + if (desc != null) + { + desc.readFromNBT(storedTag); + } + } + } + + public void writeToNBT(CompoundNBT tag) + { + ListNBT tags = new ListNBT(); + + for (Entry entry : modableRangeMap.entrySet()) + { + CompoundNBT newTag = new CompoundNBT(); + newTag.putString("key", entry.getKey()); + CompoundNBT storedTag = new CompoundNBT(); + + entry.getValue().writeToNBT(storedTag); + + newTag.put("area", storedTag); + + tags.add(newTag); + } + + tag.put("areas", tags); + } + + /** + * Called when the player attempts to activate the ritual. + *

+ * {@link WayofTime.bloodmagic.tile.TileMasterRitualStone#activateRitual(ItemStack, PlayerEntity, Ritual)} + * + * @param masterRitualStone - The {@link IMasterRitualStone} that the ritual is + * bound to + * @param player - The activating player + * @param owner - Owner of the crystal activating this ritual, or + * the current owner of the ritual if being + * reactivated. + * @return - Whether activation was successful + */ + public boolean activateRitual(IMasterRitualStone masterRitualStone, PlayerEntity player, UUID owner) + { + return true; + } + + /** + * Called every {@link #getRefreshTime()} ticks while active. + *

+ * {@link WayofTime.bloodmagic.tile.TileMasterRitualStone#performRitual(World, BlockPos)} + * + * @param masterRitualStone - The {@link IMasterRitualStone} that the ritual is + * bound to + */ + public abstract void performRitual(IMasterRitualStone masterRitualStone); + + /** + * Called when the ritual is stopped for a given {@link Ritual.BreakType}. + *

+ * {@link WayofTime.bloodmagic.tile.TileMasterRitualStone#stopRitual(Ritual.BreakType)} + * + * @param masterRitualStone - The {@link IMasterRitualStone} that the ritual is + * bound to + * @param breakType - The type of break that caused the stoppage. + */ + public void stopRitual(IMasterRitualStone masterRitualStone, BreakType breakType) + { + + } + + /** + * Used to set the amount of LP drained every {@link #getRefreshTime()} ticks. + * + * @return - The amount of LP drained per refresh + */ + public abstract int getRefreshCost(); + + /** + * Used to set the refresh rate of the ritual. (How often + * {@link #performRitual(IMasterRitualStone)} is called. + * + * @return - How often to perform the effect in ticks. + */ + public int getRefreshTime() + { + return 20; + } + + public void addBlockRange(String range, AreaDescriptor defaultRange) + { + modableRangeMap.put(range, defaultRange); + } + + /** + * Used to grab the range of a ritual for a given effect. + * + * @param range - Range that needs to be pulled. + * @return - + */ + public AreaDescriptor getBlockRange(String range) + { + if (modableRangeMap.containsKey(range)) + { + return modableRangeMap.get(range); + } + + return null; + } + + public List getListOfRanges() + { + return new ArrayList<>(modableRangeMap.keySet()); + } + + public String getNextBlockRange(String range) + { + List rangeList = getListOfRanges(); + + if (rangeList.isEmpty()) + { + return ""; + } + + if (!rangeList.contains(range)) + { + return rangeList.get(0); + } + + boolean hasMatch = false; + + for (String rangeCheck : rangeList) + { + if (hasMatch) + { + return rangeCheck; + } else if (rangeCheck.equals(range)) + { + hasMatch = true; + } + } + + return rangeList.get(0); + } + + public EnumReaderBoundaries canBlockRangeBeModified(String range, AreaDescriptor descriptor, IMasterRitualStone master, BlockPos offset1, BlockPos offset2, DemonWillHolder holder) + { + List willConfig = master.getActiveWillConfig(); + int maxVolume = getMaxVolumeForRange(range, willConfig, holder); + int maxVertical = getMaxVerticalRadiusForRange(range, willConfig, holder); + int maxHorizontal = getMaxHorizontalRadiusForRange(range, willConfig, holder); + + return (maxVolume <= 0 || descriptor.getVolumeForOffsets(offset1, offset2) <= maxVolume) + ? descriptor.isWithinRange(offset1, offset2, maxVertical, maxHorizontal) ? EnumReaderBoundaries.SUCCESS + : EnumReaderBoundaries.NOT_WITHIN_BOUNDARIES + : EnumReaderBoundaries.VOLUME_TOO_LARGE; + } + + protected void setMaximumVolumeAndDistanceOfRange(String range, int volume, int horizontalRadius, int verticalRadius) + { + volumeRangeMap.put(range, volume); + horizontalRangeMap.put(range, horizontalRadius); + verticalRangeMap.put(range, verticalRadius); + } + + protected boolean checkDescriptorIsWithinRange(AreaDescriptor descriptor, int maxVolume, int maxHorizontal, int maxVertical) + { + return descriptor.getVolume() <= maxVolume && descriptor.isWithinRange(maxVertical, maxHorizontal); + } + + public int getMaxVolumeForRange(String range, List activeTypes, DemonWillHolder holder) + { + return volumeRangeMap.get(range); + } + + public int getMaxVerticalRadiusForRange(String range, List activeTypes, DemonWillHolder holder) + { + return verticalRangeMap.get(range); + } + + public int getMaxHorizontalRadiusForRange(String range, List activeTypes, DemonWillHolder holder) + { + return horizontalRangeMap.get(range); + } + + public ITextComponent getErrorForBlockRangeOnFail(PlayerEntity player, String range, IMasterRitualStone master, BlockPos offset1, BlockPos offset2) + { + AreaDescriptor descriptor = this.getBlockRange(range); + if (descriptor == null) + { + return new TranslationTextComponent("ritual.bloodmagic.blockRange.tooBig", "?"); + } + + List willConfig = master.getActiveWillConfig(); + DemonWillHolder holder = WorldDemonWillHandler.getWillHolder(master.getWorldObj(), master.getBlockPos()); + + int maxVolume = this.getMaxVolumeForRange(range, willConfig, holder); + int maxVertical = this.getMaxVerticalRadiusForRange(range, willConfig, holder); + int maxHorizontal = this.getMaxHorizontalRadiusForRange(range, willConfig, holder); + + if (maxVolume > 0 && descriptor.getVolumeForOffsets(offset1, offset2) > maxVolume) + { + return new TranslationTextComponent("ritual.bloodmagic.blockRange.tooBig", maxVolume); + } else + { + return new TranslationTextComponent("ritual.bloodmagic.blockRange.tooFar", maxVertical, maxHorizontal); + } + } + + public ITextComponent[] provideInformationOfRitualToPlayer(PlayerEntity player) + { + return new ITextComponent[] + { new TranslationTextComponent(this.getTranslationKey() + ".info") }; + } + + public ITextComponent provideInformationOfRangeToPlayer(PlayerEntity player, String range) + { + if (getListOfRanges().contains(range)) + { + return new TranslationTextComponent(this.getTranslationKey() + "." + range + ".info"); + } else + { + return new TranslationTextComponent("ritual.bloodmagic.blockRange.noRange"); + } + } + + public abstract void gatherComponents(Consumer components); + + protected final void addRune(Consumer components, int offset1, int y, int offset2, EnumRuneType rune) + { + components.accept(new RitualComponent(new BlockPos(offset1, y, offset2), rune)); + } + + protected final void addOffsetRunes(Consumer components, int offset1, int offset2, int y, EnumRuneType rune) + { + addRune(components, offset1, y, offset2, rune); + addRune(components, offset2, y, offset1, rune); + addRune(components, offset1, y, -offset2, rune); + addRune(components, -offset2, y, offset1, rune); + addRune(components, -offset1, y, offset2, rune); + addRune(components, offset2, y, -offset1, rune); + addRune(components, -offset1, y, -offset2, rune); + addRune(components, -offset2, y, -offset1, rune); + } + + protected final void addCornerRunes(Consumer components, int offset, int y, EnumRuneType rune) + { + addRune(components, offset, y, offset, rune); + addRune(components, offset, y, -offset, rune); + addRune(components, -offset, y, -offset, rune); + addRune(components, -offset, y, offset, rune); + } + + protected final void addParallelRunes(Consumer components, int offset, int y, EnumRuneType rune) + { + addRune(components, offset, y, 0, rune); + addRune(components, -offset, y, 0, rune); + addRune(components, 0, y, -offset, rune); + addRune(components, 0, y, offset, rune); + } + + public double getWillRespectingConfig(World world, BlockPos pos, EnumDemonWillType type, List willConfig) + { + return willConfig.contains(type) ? WorldDemonWillHandler.getCurrentWill(world, pos, type) : 0; + } + + public abstract Ritual getNewCopy(); + + public String getName() + { + return name; + } + + public int getCrystalLevel() + { + return crystalLevel; + } + + public int getActivationCost() + { + return activationCost; + } + + public RitualRenderer getRenderer() + { + return renderer; + } + + public String getTranslationKey() + { + return unlocalizedName; + } + + public Map getModableRangeMap() + { + return modableRangeMap; + } + + public Map getVolumeRangeMap() + { + return volumeRangeMap; + } + + public Map getHorizontalRangeMap() + { + return horizontalRangeMap; + } + + public Map getVerticalRangeMap() + { + return verticalRangeMap; + } + + @Override + public String toString() + { + return new ToStringBuilder(this).append("name", name).append("crystalLevel", crystalLevel).append("activationCost", activationCost).append("renderer", renderer).append("unlocalizedName", unlocalizedName).append("modableRangeMap", modableRangeMap).append("volumeRangeMap", volumeRangeMap).append("horizontalRangeMap", horizontalRangeMap).append("verticalRangeMap", verticalRangeMap).append("refreshTime", getRefreshTime()).append("listOfRanges", getListOfRanges()).toString(); + } + + @Override + public boolean equals(Object o) + { + if (this == o) + return true; + if (!(o instanceof Ritual)) + return false; + + Ritual ritual = (Ritual) o; + + if (crystalLevel != ritual.crystalLevel) + return false; + if (activationCost != ritual.activationCost) + return false; + if (name != null ? !name.equals(ritual.name) : ritual.name != null) + return false; + return unlocalizedName != null ? unlocalizedName.equals(ritual.unlocalizedName) + : ritual.unlocalizedName == null; + } + + @Override + public int hashCode() + { + int result = name != null ? name.hashCode() : 0; + result = 31 * result + crystalLevel; + result = 31 * result + activationCost; + result = 31 * result + (unlocalizedName != null ? unlocalizedName.hashCode() : 0); + return result; + } + + public enum BreakType + { + REDSTONE, BREAK_MRS, BREAK_STONE, ACTIVATE, DEACTIVATE, EXPLOSION, + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/ritual/RitualComponent.java b/src/main/java/wayoftime/bloodmagic/ritual/RitualComponent.java new file mode 100644 index 00000000..0f34813f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/RitualComponent.java @@ -0,0 +1,70 @@ +package wayoftime.bloodmagic.ritual; + +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; + +/** + * Used to set a {@link EnumRuneType} type to a given {@link BlockPos} for usage + * in Ritual creation. + */ +public class RitualComponent +{ + private final BlockPos offset; + private final EnumRuneType runeType; + + public RitualComponent(BlockPos offset, EnumRuneType runeType) + { + this.offset = offset; + this.runeType = runeType; + } + + public int getX(Direction direction) + { + switch (direction) + { + case EAST: + return -this.getOffset().getZ(); + case SOUTH: + return -this.getOffset().getX(); + case WEST: + return this.getOffset().getZ(); + default: + return this.getOffset().getX(); + } + } + + public int getY() + { + return this.getOffset().getY(); + } + + public int getZ(Direction direction) + { + switch (direction) + { + case EAST: + return this.getOffset().getX(); + case SOUTH: + return -this.getOffset().getZ(); + case WEST: + return -this.getOffset().getX(); + default: + return this.getOffset().getZ(); + } + } + + public BlockPos getOffset(Direction direction) + { + return new BlockPos(getX(direction), offset.getY(), getZ(direction)); + } + + public BlockPos getOffset() + { + return offset; + } + + public EnumRuneType getRuneType() + { + return runeType; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/ritual/RitualManager.java b/src/main/java/wayoftime/bloodmagic/ritual/RitualManager.java new file mode 100644 index 00000000..cfe912a4 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/RitualManager.java @@ -0,0 +1,178 @@ +package wayoftime.bloodmagic.ritual; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; + +import net.minecraft.block.BlockState; +import net.minecraft.util.DamageSource; +import net.minecraftforge.fml.ModList; +import wayoftime.bloodmagic.ritual.imperfect.ImperfectRitual; +import wayoftime.bloodmagic.util.BMLog; + +public class RitualManager +{ + public static final DamageSource RITUAL_DAMAGE = new DamageSource("ritual_damage").setDamageBypassesArmor(); + + private final Map rituals; + private final Map ritualsReverse; + private final List sortedRituals; + private final Map imperfectRituals; + private final Map imperfectRitualsReverse; +// private final Configuration config; + + public RitualManager() + { + this.rituals = Maps.newTreeMap(); + this.ritualsReverse = Maps.newHashMap(); + this.sortedRituals = Lists.newArrayList(); + this.imperfectRituals = Maps.newTreeMap(); + this.imperfectRitualsReverse = Maps.newHashMap(); +// this.config = config; + } + +// public void discover(ASMDataTable dataTable) + public void discover() + { + ModList.get().getAllScanData().forEach(scan -> { + scan.getAnnotations().forEach(a -> { + if (a.getAnnotationType().getClassName().equals(RitualRegister.class.getName())) + { + try + { + + Class clazz = Class.forName(a.getClassType().getClassName()); + RitualRegister ritualRegister = clazz.getAnnotation(RitualRegister.class); + String id = ritualRegister.value(); + if (Ritual.class.isAssignableFrom(clazz)) + { + Ritual ritual = (Ritual) clazz.newInstance(); + rituals.put(id, ritual); + ritualsReverse.put(ritual, id); + BMLog.DEBUG.info("Registered ritual {}", id); + } else + { + BMLog.DEFAULT.error("Error creating ritual instance for {}.", id); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + }); + }); + + ModList.get().getAllScanData().forEach(scan -> { + scan.getAnnotations().forEach(a -> { + if (a.getAnnotationType().getClassName().equals(RitualRegister.Imperfect.class.getName())) + { + try + { + + Class clazz = Class.forName(a.getClassType().getClassName()); + RitualRegister.Imperfect ritualRegister = clazz.getAnnotation(RitualRegister.Imperfect.class); + String id = ritualRegister.value(); + if (ImperfectRitual.class.isAssignableFrom(clazz)) + { + ImperfectRitual ritual = (ImperfectRitual) clazz.newInstance(); + imperfectRituals.put(id, ritual); + imperfectRitualsReverse.put(ritual, id); + BMLog.DEBUG.info("Registered imperfect ritual {}", id); + } else + { + BMLog.DEFAULT.error("Error creating imperfect ritual instance for {}.", id); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + }); + }); + +// syncConfig(); + + // Sort rituals + sortedRituals.addAll(rituals.values()); + // Oh dear this is probably so slow + sortedRituals.sort((o1, o2) -> { + Set components = Sets.newHashSet(); + o1.gatherComponents(components::add); + int initialSize = components.size(); + components.clear(); + o2.gatherComponents(components::add); + return Integer.compare(initialSize, components.size()); + }); + } + + public Ritual getRitual(String id) + { + Ritual ritual = rituals.get(id); + return ritual == null ? null : ritual.getNewCopy(); + } + + public String getId(Ritual ritual) + { + return ritualsReverse.get(ritual); + } + + public ImperfectRitual getImperfectRitual(BlockState state) + { + for (ImperfectRitual ritual : imperfectRituals.values()) if (ritual.getBlockRequirement().test(state)) + return ritual; + + return null; + } + + public String getId(ImperfectRitual ritual) + { + return imperfectRitualsReverse.get(ritual); + } + + public Collection getRituals() + { + return rituals.values(); + } + + public Collection getImperfectRituals() + { + return imperfectRituals.values(); + } + + public List getSortedRituals() + { + return sortedRituals; + } + +// public void syncConfig() +// { +// config.addCustomCategoryComment("rituals", "Toggles for all rituals"); +// rituals.forEach((k, v) -> config.getBoolean(k, "rituals", true, "Enable the " + k + " ritual.")); +// imperfectRituals.forEach((k, v) -> config.getBoolean(k, "rituals.imperfect", true, "Enable the " + k + " imperfect ritual.")); +// config.save(); +// } +// + public boolean enabled(String id, boolean imperfect) + { + return id != null; +// return id != null && config.getBoolean(id, "rituals" + (imperfect ? ".imperfect" : ""), true, ""); + } +// +// public Configuration getConfig() +// { +// return config; +// } + + public static class BadRitualException extends RuntimeException + { + public BadRitualException(String message) + { + super(message); + } + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/ritual/RitualRegister.java b/src/main/java/wayoftime/bloodmagic/ritual/RitualRegister.java new file mode 100644 index 00000000..56527fa6 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/RitualRegister.java @@ -0,0 +1,58 @@ +package wayoftime.bloodmagic.ritual; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.util.function.Function; + +import wayoftime.bloodmagic.ritual.imperfect.ImperfectRitual; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface RitualRegister +{ + String value(); + + Class, Ritual>> factory() default DefaultRitualFactory.class; + + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.TYPE) + @interface Imperfect + { + + String value(); + + Class, ImperfectRitual>> factory() default DefaultImperfectRitualFactory.class; + } + + class DefaultRitualFactory implements Function, Ritual> + { + @Override + public Ritual apply(Class aClass) + { + try + { + return aClass.newInstance(); + } catch (Exception e) + { + return null; + } + } + } + + class DefaultImperfectRitualFactory implements Function, ImperfectRitual> + { + @Override + public ImperfectRitual apply(Class aClass) + { + try + { + return aClass.newInstance(); + } catch (Exception e) + { + return null; + } + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/RitualRenderer.java b/src/main/java/wayoftime/bloodmagic/ritual/RitualRenderer.java new file mode 100644 index 00000000..a2172c45 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/RitualRenderer.java @@ -0,0 +1,14 @@ +package wayoftime.bloodmagic.ritual; + +import net.minecraft.client.Minecraft; +import net.minecraft.util.ResourceLocation; + +public abstract class RitualRenderer +{ + public abstract void renderAt(IMasterRitualStone masterRitualStone, double x, double y, double z); + + protected void bindTexture(ResourceLocation resourceLocation) + { + Minecraft.getInstance().getTextureManager().bindTexture(resourceLocation); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java b/src/main/java/wayoftime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java new file mode 100644 index 00000000..0bfbc47d --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java @@ -0,0 +1,190 @@ +package wayoftime.bloodmagic.ritual.harvest; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.CropsBlock; +import net.minecraft.item.BlockItem; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.loot.LootContext; +import net.minecraft.loot.LootParameters; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.fml.ModList; +import net.minecraftforge.registries.ForgeRegistries; +import wayoftime.bloodmagic.util.BMLog; + +/** + * Harvest handler for standard plantable crops such as Wheat, Potatoes, and + * Netherwart.
+ * Register a new crop for this handler with + * {@link HarvestRegistry#registerStandardCrop(Block, int)} + */ + +public class HarvestHandlerPlantable implements IHarvestHandler +{ + private static final ItemStack mockHoe = new ItemStack(Items.DIAMOND_HOE, 1); + + public HarvestHandlerPlantable() + { + HarvestRegistry.registerStandardCrop(Blocks.CARROTS, 7); + HarvestRegistry.registerStandardCrop(Blocks.WHEAT, 7); + HarvestRegistry.registerStandardCrop(Blocks.POTATOES, 7); + HarvestRegistry.registerStandardCrop(Blocks.BEETROOTS, 3); + HarvestRegistry.registerStandardCrop(Blocks.NETHER_WART, 3); + + addThirdPartyCrop("actuallyadditions", "flax_block", 7); + addThirdPartyCrop("actuallyadditions", "canola_block", 7); + addThirdPartyCrop("actuallyadditions", "rice_block", 7); + + addThirdPartyCrop("extrautils2", "redorchid", 6); + addThirdPartyCrop("extrautils2", "enderlily", 7); + + addThirdPartyCrop("roots", "moonglow", 7); + addThirdPartyCrop("roots", "terra_moss", 7); + addThirdPartyCrop("roots", "pereskia", 7); + addThirdPartyCrop("roots", "wildroot", 7); + addThirdPartyCrop("roots", "aubergine", 7); + addThirdPartyCrop("roots", "spirit_herb", 7); + + addPamCrops(); + + addMysticalCrops(); + } + + @Override + public boolean harvest(World world, BlockPos pos, BlockState state, List drops) + { +// NonNullList blockDrops = NonNullList.create(); +// state.getBlock().getDrops(blockDrops, world, pos, state, 0); + boolean foundSeed = false; + LootContext.Builder lootBuilder = new LootContext.Builder((ServerWorld) world); + Vector3d blockCenter = new Vector3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); + List blockDrops = state.getDrops(lootBuilder.withParameter(LootParameters.field_237457_g_, blockCenter).withParameter(LootParameters.TOOL, mockHoe)); + +// System.out.println("Size of list: " + blockDrops.size()); + + for (ItemStack stack : blockDrops) + { + if (stack.isEmpty()) + continue; + + // This hurts my soul. + if (stack.getItem() instanceof BlockItem && ((BlockItem) stack.getItem()).getBlock() == state.getBlock()) + { + stack.shrink(1); + foundSeed = true; + break; + } + } + +// System.out.println("Found seed: " + foundSeed); + + if (foundSeed) + { + world.setBlockState(pos, state.getBlock().getDefaultState()); + world.playEvent(2001, pos, Block.getStateId(state)); + for (ItemStack stack : blockDrops) + { + if (stack.isEmpty()) + continue; + + drops.add(stack); + } + + return true; + } + + return false; + } + + @Override + public boolean test(World world, BlockPos pos, BlockState state) + { +// state.hasProperty(null); + return HarvestRegistry.getStandardCrops().containsKey(state.getBlock()) && state.getBlock() instanceof CropsBlock && ((CropsBlock) state.getBlock()).isMaxAge(state); +// return HarvestRegistry.getStandardCrops().containsKey(state.getBlock()) && state.getBlock().getMetaFromState(state) == HarvestRegistry.getStandardCrops().get(state.getBlock()); + } + + private static void addThirdPartyCrop(String modid, String regName, int matureMeta) + { + if (!ModList.get().isLoaded(modid)) + return; + + Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(modid, regName)); + if (block != null && block != Blocks.AIR) + HarvestRegistry.registerStandardCrop(block, matureMeta); + } + + private static void addPamCrops() + { + if (!ModList.get().isLoaded("harvestcraft")) + return; + + try + { + Class pamRegistry = Class.forName("com.pam.harvestcraft.blocks.CropRegistry"); + Field names = pamRegistry.getDeclaredField("cropNames"); + Method getCrop = pamRegistry.getMethod("getCrop", String.class); + for (String name : (String[]) names.get(null)) + { + CropsBlock crop = (CropsBlock) getCrop.invoke(null, name); + HarvestRegistry.registerStandardCrop(crop, crop.getMaxAge()); + } + } catch (ClassNotFoundException e) + { + BMLog.DEFAULT.error("HarvestCraft integration cancelled; unable to find registry class"); + } catch (NoSuchMethodException | NoSuchFieldException e) + { + BMLog.DEFAULT.error("HarvestCraft integration cancelled; unable to find crop name mapper"); + } catch (IllegalAccessException | InvocationTargetException e) + { + BMLog.DEFAULT.error("HarvestCraft integration cancelled; crop name lookup broke"); + } + } + + private static void addMysticalCrops() + { + if (!ModList.get().isLoaded("mysticalagriculture")) + return; + + try + { + Class mysticalAPI = Class.forName("com.blakebr0.mysticalagriculture.api.MysticalAgricultureAPI"); + Method getRegistry = mysticalAPI.getMethod("getCropRegistry"); + Object registry = getRegistry.invoke(null); + + Class mysticalRegistry = Class.forName("com.blakebr0.mysticalagriculture.api.registry.ICropRegistry"); + Method getCrops = mysticalRegistry.getMethod("getCrops"); + @SuppressWarnings("unchecked") + List crops = (List) getCrops.invoke(registry); + + Class mysticalCrop = Class.forName("com.blakebr0.mysticalagriculture.api.crop.ICrop"); + Method getCrop = mysticalCrop.getMethod("getCrop"); + + for (Object maCrop : crops) + { + CropsBlock crop = (CropsBlock) getCrop.invoke(maCrop); + HarvestRegistry.registerStandardCrop(crop, crop.getMaxAge()); + } + } catch (ClassNotFoundException e) + { + BMLog.DEFAULT.error("MysticalAgriculture integration cancelled: unable to find a class: " + e.getMessage()); + } catch (NoSuchMethodException e) + { + BMLog.DEFAULT.error("MysticalAgriculture integration cancelled: unable to find a method: " + e.getMessage()); + } catch (IllegalAccessException | InvocationTargetException e) + { + BMLog.DEFAULT.error("MysticalAgriculture integration cancelled: failed to invoke a method: " + e.getMessage()); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/harvest/HarvestHandlerStem.java b/src/main/java/wayoftime/bloodmagic/ritual/harvest/HarvestHandlerStem.java new file mode 100644 index 00000000..e2d876b8 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/harvest/HarvestHandlerStem.java @@ -0,0 +1,72 @@ +package wayoftime.bloodmagic.ritual.harvest; + +import java.util.Collection; +import java.util.List; + +import net.minecraft.block.AttachedStemBlock; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.loot.LootContext; +import net.minecraft.loot.LootParameters; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; + +/** + * Harvest handler for crops with stems such as Pumpkins and Melons. Rotation + * based crop blocks are a good reason to use this (see pumpkins).
+ * Register a new crop for this handler with + * {@link HarvestRegistry#registerStemCrop(BlockState, BlockState)} + */ +public class HarvestHandlerStem implements IHarvestHandler +{ + private static final ItemStack mockHoe = new ItemStack(Items.DIAMOND_HOE, 1); + + public HarvestHandlerStem() + { + for (int i = 0; i < 4; i++) + { + Direction facing = Direction.byHorizontalIndex(i); + HarvestRegistry.registerStemCrop(Blocks.PUMPKIN.getDefaultState(), Blocks.ATTACHED_PUMPKIN_STEM.getDefaultState().with(AttachedStemBlock.FACING, facing)); + HarvestRegistry.registerStemCrop(Blocks.MELON.getDefaultState(), Blocks.ATTACHED_MELON_STEM.getDefaultState().with(AttachedStemBlock.FACING, facing)); + } + } + + @Override + public boolean harvest(World world, BlockPos pos, BlockState state, List drops) + { + Direction cropDir = state.get(AttachedStemBlock.FACING); + + if (cropDir != Direction.UP) + { + BlockPos cropPos = pos.offset(cropDir); + BlockState probableCrop = world.getBlockState(cropPos); + Collection registeredCrops = HarvestRegistry.getStemCrops().get(state); + + for (BlockState registeredCrop : registeredCrops) + { + if (registeredCrop == probableCrop) + { + LootContext.Builder lootBuilder = new LootContext.Builder((ServerWorld) world); + Vector3d blockCenter = new Vector3d(cropPos.getX() + 0.5, cropPos.getY() + 0.5, cropPos.getZ() + 0.5); + List blockDrops = registeredCrop.getDrops(lootBuilder.withParameter(LootParameters.field_237457_g_, blockCenter).withParameter(LootParameters.TOOL, mockHoe)); + drops.addAll(blockDrops); + world.destroyBlock(cropPos, false); + return true; + } + } + } + + return false; + } + + @Override + public boolean test(World world, BlockPos pos, BlockState state) + { + return HarvestRegistry.getStemCrops().containsKey(state); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/ritual/harvest/HarvestHandlerTall.java b/src/main/java/wayoftime/bloodmagic/ritual/harvest/HarvestHandlerTall.java new file mode 100644 index 00000000..4ca53ce8 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/harvest/HarvestHandlerTall.java @@ -0,0 +1,59 @@ +package wayoftime.bloodmagic.ritual.harvest; + +import java.util.List; + +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.CactusBlock; +import net.minecraft.block.SugarCaneBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.loot.LootContext; +import net.minecraft.loot.LootParameters; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; + +/** + * Harvest handler for crops that grow vertically such as Sugar Cane and Cactus. + *
+ * Register a new crop for this handler with + * {@link HarvestRegistry#registerTallCrop(BlockState)} + */ +public class HarvestHandlerTall implements IHarvestHandler +{ + private static final ItemStack mockHoe = new ItemStack(Items.DIAMOND_HOE, 1); + + public HarvestHandlerTall() + { + for (int i = 0; i < 15; i++) + { + HarvestRegistry.registerTallCrop(Blocks.SUGAR_CANE.getDefaultState().with(SugarCaneBlock.AGE, i)); + HarvestRegistry.registerTallCrop(Blocks.CACTUS.getDefaultState().with(CactusBlock.AGE, i)); + } + } + + @Override + public boolean harvest(World world, BlockPos pos, BlockState state, List drops) + { + BlockState up = world.getBlockState(pos.up()); + if (up.getBlock() == state.getBlock()) + { + LootContext.Builder lootBuilder = new LootContext.Builder((ServerWorld) world); + Vector3d blockCenter = new Vector3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); + List blockDrops = state.getDrops(lootBuilder.withParameter(LootParameters.field_237457_g_, blockCenter).withParameter(LootParameters.TOOL, mockHoe)); + drops.addAll(blockDrops); + world.destroyBlock(pos.up(), false); + return true; + } + + return false; + } + + @Override + public boolean test(World world, BlockPos pos, BlockState state) + { + return HarvestRegistry.getTallCrops().contains(state); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/ritual/harvest/HarvestRegistry.java b/src/main/java/wayoftime/bloodmagic/ritual/harvest/HarvestRegistry.java new file mode 100644 index 00000000..c4738256 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/harvest/HarvestRegistry.java @@ -0,0 +1,125 @@ +package wayoftime.bloodmagic.ritual.harvest; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; + +import net.minecraft.block.AttachedStemBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.StemBlock; + +public class HarvestRegistry +{ + + private static final List HARVEST_HANDLERS = Lists.newArrayList(); + private static final Map STANDARD_CROPS = Maps.newHashMap(); + private static final Set TALL_CROPS = Sets.newHashSet(); + private static final Multimap STEM_CROPS = ArrayListMultimap.create(); + private static final Map AMPLIFIERS = Maps.newHashMap(); + + /** + * Registers a handler for the Harvest Ritual to call. + * + * @param handler - The custom handler to register + */ + public static void registerHandler(IHarvestHandler handler) + { + if (!HARVEST_HANDLERS.contains(handler)) + HARVEST_HANDLERS.add(handler); + } + + /** + * Registers a standard crop (IE: Wheat, Carrots, Potatoes, Netherwart, etc) for + * the {@link WayofTime.bloodmagic.ritual.harvest.HarvestHandlerPlantable} + * handler to handle. + * + * @param crop - The crop block to handle. + * @param matureMeta - The meta value at which the crop is considered mature and + * ready to be harvested. + */ + public static void registerStandardCrop(Block crop, int matureMeta) + { + if (!STANDARD_CROPS.containsKey(crop)) + STANDARD_CROPS.put(crop, matureMeta); + } + + /** + * Registers a tall crop (Sugar Cane and Cactus) for the + * {@link WayofTime.bloodmagic.ritual.harvest.HarvestHandlerTall} handler to + * handle. + * + * @param crop - The crop block to handle. + */ + public static void registerTallCrop(BlockState crop) + { + if (!TALL_CROPS.contains(crop)) + TALL_CROPS.add(crop); + } + + /** + * Registers a stem crop (Melon and Pumpkin) for the + * {@link WayofTime.bloodmagic.ritual.harvest.HarvestHandlerStem} handler to + * handle. + *

+ * Use {@link net.minecraftforge.oredict.OreDictionary#WILDCARD_VALUE} to accept + * any meta for the crop block. + *

+ * The Stem must be instanceof {@link StemBlock} + * + * @param crop - The crop block to handle. + * @param stem - The stem of the crop + */ + public static void registerStemCrop(BlockState crop, BlockState stem) + { + if (!STEM_CROPS.containsKey(crop) && stem.getBlock() instanceof AttachedStemBlock) + STEM_CROPS.put(stem, crop); + } + + /** + * Registers a range amplifier for the Harvest Ritual. + * + * @param block - The block for the amplifier. + * @param range - The range the amplifier provides. + */ + public static void registerRangeAmplifier(BlockState block, int range) + { + if (!AMPLIFIERS.containsKey(block)) + AMPLIFIERS.put(block, range); + } + + public static List getHarvestHandlers() + { + return ImmutableList.copyOf(HARVEST_HANDLERS); + } + + public static Map getStandardCrops() + { + return ImmutableMap.copyOf(STANDARD_CROPS); + } + + public static Set getTallCrops() + { + return ImmutableSet.copyOf(TALL_CROPS); + } + + public static Multimap getStemCrops() + { + return ImmutableMultimap.copyOf(STEM_CROPS); + } + + public static Map getAmplifiers() + { + return ImmutableMap.copyOf(AMPLIFIERS); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/harvest/IHarvestHandler.java b/src/main/java/wayoftime/bloodmagic/ritual/harvest/IHarvestHandler.java new file mode 100644 index 00000000..82313dd5 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/harvest/IHarvestHandler.java @@ -0,0 +1,39 @@ +package wayoftime.bloodmagic.ritual.harvest; + +import java.util.List; + +import net.minecraft.block.BlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * Used to define a HarvestHandler for the Harvest Ritual. + */ +public interface IHarvestHandler +{ + + /** + * Called whenever the Harvest Ritual attempts to harvest a block.
+ * Use this to break the block and plant a new one.
+ * Add the items to be dropped to the drops list.
+ * + * @param world - The world + * @param pos - The position of the {@link BlockState} being checked + * @param state - The {@link BlockState} being checked + * @param drops - The items to be dropped + * @return If the block was successfully harvested. + */ + boolean harvest(World world, BlockPos pos, BlockState state, List drops); + + /** + * Tests to see if the block is valid for harvest. + * + * @param world The world + * @param pos The position in the world of the {@link BlockState} being + * checked + * @param state The {@link BlockState} being checked + * @return if this block is valid for harvest. + */ + boolean test(World world, BlockPos pos, BlockState state); +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/imperfect/IImperfectRitualStone.java b/src/main/java/wayoftime/bloodmagic/ritual/imperfect/IImperfectRitualStone.java new file mode 100644 index 00000000..856f5c60 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/imperfect/IImperfectRitualStone.java @@ -0,0 +1,20 @@ +package wayoftime.bloodmagic.ritual.imperfect; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * This interface is for internal implementation only. + *

+ * It is provided via the API for easy obtaining of basic data. + */ +public interface IImperfectRitualStone +{ + + boolean performRitual(World world, BlockPos pos, ImperfectRitual imperfectRitual, PlayerEntity player); + + World getRitualWorld(); + + BlockPos getRitualPos(); +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/imperfect/ImperfectRitual.java b/src/main/java/wayoftime/bloodmagic/ritual/imperfect/ImperfectRitual.java new file mode 100644 index 00000000..6fe28e1f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/imperfect/ImperfectRitual.java @@ -0,0 +1,108 @@ +package wayoftime.bloodmagic.ritual.imperfect; + +import java.util.function.Predicate; + +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.world.World; + +/** + * Abstract class for creating new imperfect rituals. To register, annotate your + * class with {@link WayofTime.bloodmagic.ritual.RitualRegister.Imperfect} + */ +public abstract class ImperfectRitual +{ + + private final String name; + private final Predicate blockRequirement; + private final int activationCost; + private final boolean lightShow; + private final String unlocalizedName; + + public ImperfectRitual(String name, Predicate blockRequirement, int activationCost, boolean lightShow, String unlocalizedName) + { + this.name = name; + this.blockRequirement = blockRequirement; + this.activationCost = activationCost; + this.lightShow = lightShow; + this.unlocalizedName = unlocalizedName; + } + + /** + * @param name The name of the ritual + * @param blockRequirement The block required above the ImperfectRitualStone + * @param activationCost Base LP cost for activating the ritual + */ + public ImperfectRitual(String name, Predicate blockRequirement, int activationCost, String unlocalizedName) + { + this(name, blockRequirement, activationCost, false, unlocalizedName); + } + + /** + * Called when the player activates the ritual + * {@link WayofTime.bloodmagic.tile.TileImperfectRitualStone#performRitual(World, net.minecraft.util.math.BlockPos, ImperfectRitual, PlayerEntity)} + * + * @param imperfectRitualStone - The {@link IImperfectRitualStone} that the + * ritual is bound to + * @param player - The player activating the ritual + * @return - Whether activation was successful + */ + public abstract boolean onActivate(IImperfectRitualStone imperfectRitualStone, PlayerEntity player); + + public String getName() + { + return name; + } + + public Predicate getBlockRequirement() + { + return blockRequirement; + } + + public int getActivationCost() + { + return activationCost; + } + + public boolean isLightShow() + { + return lightShow; + } + + public String getTranslationKey() + { + return unlocalizedName; + } + + @Override + public String toString() + { + return getName() + "@" + getActivationCost(); + } + + @Override + public boolean equals(Object o) + { + if (this == o) + return true; + if (!(o instanceof ImperfectRitual)) + return false; + + ImperfectRitual that = (ImperfectRitual) o; + + if (activationCost != that.activationCost) + return false; + if (name != null ? !name.equals(that.name) : that.name != null) + return false; + return unlocalizedName != null ? unlocalizedName.equals(that.unlocalizedName) : that.unlocalizedName == null; + } + + @Override + public int hashCode() + { + int result = name != null ? name.hashCode() : 0; + result = 31 * result + activationCost; + result = 31 * result + (unlocalizedName != null ? unlocalizedName.hashCode() : 0); + return result; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/ritual/types/RitualAnimalGrowth.java b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualAnimalGrowth.java new file mode 100644 index 00000000..3a6aea63 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualAnimalGrowth.java @@ -0,0 +1,258 @@ +package wayoftime.bloodmagic.ritual.types; + +import java.util.List; +import java.util.function.Consumer; + +import net.minecraft.entity.passive.AnimalEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.EffectInstance; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.items.IItemHandler; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.demonaura.WorldDemonWillHandler; +import wayoftime.bloodmagic.potion.BloodMagicPotions; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.ritual.IMasterRitualStone; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.ritual.RitualComponent; +import wayoftime.bloodmagic.ritual.RitualRegister; +import wayoftime.bloodmagic.util.Utils; + +@RitualRegister("animal_growth") +public class RitualAnimalGrowth extends Ritual +{ + public static final double rawWillDrain = 0.05; + public static final double vengefulWillDrain = 0.02; + public static final double steadfastWillDrain = 0.1; + public static final double destructiveWillDrain = 1; + + public static final String GROWTH_RANGE = "growing"; + public static final String CHEST_RANGE = "chest"; + public static int defaultRefreshTime = 20; + public int refreshTime = 20; + + public RitualAnimalGrowth() + { + super("ritualAnimalGrowth", 0, 10000, "ritual." + BloodMagic.MODID + ".animalGrowthRitual"); + addBlockRange(GROWTH_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-2, 1, -2), 5, 2, 5)); + addBlockRange(CHEST_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1)); + + setMaximumVolumeAndDistanceOfRange(GROWTH_RANGE, 0, 7, 7); + setMaximumVolumeAndDistanceOfRange(CHEST_RANGE, 1, 3, 3); + } + + @Override + public void performRitual(IMasterRitualStone masterRitualStone) + { + World world = masterRitualStone.getWorldObj(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); + + if (currentEssence < getRefreshCost()) + { + masterRitualStone.getOwnerNetwork().causeNausea(); + return; + } + + int maxGrowths = currentEssence / getRefreshCost(); + int totalGrowths = 0; + BlockPos pos = masterRitualStone.getBlockPos(); + + AreaDescriptor chestRange = masterRitualStone.getBlockRange(CHEST_RANGE); + TileEntity chest = world.getTileEntity(chestRange.getContainedPositions(pos).get(0)); + IItemHandler itemHandler = null; + if (chest != null) + { + itemHandler = Utils.getInventory(chest, null); + } + + List willConfig = masterRitualStone.getActiveWillConfig(); + + double rawWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DEFAULT, willConfig); + double steadfastWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.STEADFAST, willConfig); + double corrosiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.CORROSIVE, willConfig); + double destructiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DESTRUCTIVE, willConfig); + double vengefulWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.VENGEFUL, willConfig); + + refreshTime = getRefreshTimeForRawWill(rawWill); + + boolean consumeRawWill = rawWill >= rawWillDrain && refreshTime != defaultRefreshTime; + + double vengefulDrain = 0; + double steadfastDrain = 0; + double destructiveDrain = 0; + + boolean decreaseBreedTimer = vengefulWill >= vengefulWillDrain; + boolean breedAnimals = steadfastWill >= steadfastWillDrain && itemHandler != null; + boolean kamikaze = destructiveWill >= destructiveWillDrain; + + AreaDescriptor growingRange = masterRitualStone.getBlockRange(GROWTH_RANGE); + AxisAlignedBB axis = growingRange.getAABB(masterRitualStone.getBlockPos()); + List animalList = world.getEntitiesWithinAABB(AnimalEntity.class, axis); + + boolean performedEffect = false; + + for (AnimalEntity animal : animalList) + { + if (animal.getGrowingAge() < 0) + { + animal.addGrowth(5); + totalGrowths++; + performedEffect = true; + } else if (animal.getGrowingAge() > 0) + { + if (decreaseBreedTimer) + { + if (vengefulWill >= vengefulWillDrain) + { + animal.setGrowingAge(Math.max(0, animal.getGrowingAge() - getBreedingDecreaseForWill(vengefulWill))); + vengefulDrain += vengefulWillDrain; + vengefulWill -= vengefulWillDrain; + performedEffect = true; + } else + { + decreaseBreedTimer = false; + } + } + } else + { + if (kamikaze) + { + if (destructiveWill >= destructiveWillDrain) + { + if (!animal.isPotionActive(BloodMagicPotions.SACRIFICIAL_LAMB)) + { + animal.addPotionEffect(new EffectInstance(BloodMagicPotions.SACRIFICIAL_LAMB, 1200)); + destructiveDrain += destructiveWillDrain; + destructiveWill -= destructiveWillDrain; + performedEffect = true; + } + } else + { + kamikaze = false; + } + } + + if (breedAnimals) + { + if (steadfastWill >= steadfastWillDrain) + { + if (!animal.isInLove()) + { + for (int slot = 0; slot < itemHandler.getSlots(); slot++) + { + ItemStack foodStack = itemHandler.getStackInSlot(slot); + if (foodStack != null && animal.isBreedingItem(foodStack) && itemHandler.extractItem(slot, 1, true) != null) + { + animal.setInLove(null); + itemHandler.extractItem(slot, 1, false); + steadfastDrain += steadfastWillDrain; + steadfastWill -= steadfastWillDrain; + performedEffect = true; + break; + } + } + } + } else + { + breedAnimals = false; + } + } + } + + if (totalGrowths >= maxGrowths) + { + break; + } + } + + if (performedEffect && consumeRawWill) + { + WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DEFAULT, rawWillDrain, true); + } + + if (vengefulDrain > 0) + { + WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.VENGEFUL, vengefulDrain, true); + } + + if (steadfastDrain > 0) + { + WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.STEADFAST, steadfastDrain, true); + } + + if (destructiveDrain > 0) + { + WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DESTRUCTIVE, destructiveDrain, true); + } + + masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(totalGrowths * getRefreshCost())); + } + + @Override + public int getRefreshCost() + { + return 2; + } + + @Override + public void gatherComponents(Consumer components) + { + + addParallelRunes(components, 2, 0, EnumRuneType.DUSK); + addParallelRunes(components, 1, 0, EnumRuneType.WATER); + components.accept(new RitualComponent(new BlockPos(1, 0, 2), EnumRuneType.EARTH)); + components.accept(new RitualComponent(new BlockPos(1, 0, -2), EnumRuneType.EARTH)); + components.accept(new RitualComponent(new BlockPos(-1, 0, 2), EnumRuneType.EARTH)); + components.accept(new RitualComponent(new BlockPos(-1, 0, -2), EnumRuneType.EARTH)); + components.accept(new RitualComponent(new BlockPos(2, 0, 1), EnumRuneType.AIR)); + components.accept(new RitualComponent(new BlockPos(2, 0, -1), EnumRuneType.AIR)); + components.accept(new RitualComponent(new BlockPos(-2, 0, 1), EnumRuneType.AIR)); + components.accept(new RitualComponent(new BlockPos(-2, 0, -1), EnumRuneType.AIR)); + } + + @Override + public Ritual getNewCopy() + { + return new RitualAnimalGrowth(); + } + + @Override + public ITextComponent[] provideInformationOfRitualToPlayer(PlayerEntity player) + { + return new ITextComponent[] { new TranslationTextComponent(this.getTranslationKey() + ".info"), + new TranslationTextComponent(this.getTranslationKey() + ".default.info"), + new TranslationTextComponent(this.getTranslationKey() + ".corrosive.info"), + new TranslationTextComponent(this.getTranslationKey() + ".steadfast.info"), + new TranslationTextComponent(this.getTranslationKey() + ".destructive.info"), + new TranslationTextComponent(this.getTranslationKey() + ".vengeful.info") }; + } + + public int getBreedingDecreaseForWill(double vengefulWill) + { + return (int) (10 + vengefulWill / 5); + } + + public int getRefreshTimeForRawWill(double rawWill) + { + if (rawWill >= rawWillDrain) + { + return (int) Math.max(defaultRefreshTime - rawWill / 10, 1); + } + + return defaultRefreshTime; + } + + @Override + public int getRefreshTime() + { + return refreshTime; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/ritual/types/RitualArmourEvolve.java b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualArmourEvolve.java new file mode 100644 index 00000000..477f6704 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualArmourEvolve.java @@ -0,0 +1,110 @@ +package wayoftime.bloodmagic.ritual.types; + +import java.util.List; +import java.util.function.Consumer; + +import net.minecraft.entity.EntityType; +import net.minecraft.entity.effect.LightningBoltEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.core.living.LivingStats; +import wayoftime.bloodmagic.core.living.LivingUtil; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.ritual.IMasterRitualStone; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.ritual.RitualComponent; +import wayoftime.bloodmagic.ritual.RitualRegister; + +@RitualRegister("armour_evolve") +public class RitualArmourEvolve extends Ritual +{ + public static final String CHECK_RANGE = "fillRange"; + + public RitualArmourEvolve() + { + super("ritualArmourEvolve", 0, 50000, "ritual." + BloodMagic.MODID + ".armourEvolveRitual"); + addBlockRange(CHECK_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1, 2, 1)); + } + + @Override + public void performRitual(IMasterRitualStone masterRitualStone) + { + World world = masterRitualStone.getWorldObj(); + + if (world.isRemote) + { + return; + } + + BlockPos pos = masterRitualStone.getBlockPos(); + + AreaDescriptor checkRange = masterRitualStone.getBlockRange(CHECK_RANGE); + + List playerList = world.getEntitiesWithinAABB(PlayerEntity.class, checkRange.getAABB(pos)); + + for (PlayerEntity player : playerList) + { + if (LivingUtil.hasFullSet(player)) + { + ItemStack chestStack = player.getItemStackFromSlot(EquipmentSlotType.CHEST); + LivingStats stats = LivingStats.fromPlayer(player); + + if (stats.getMaxPoints() < 300) + { + stats.setMaxPoints(300); + LivingStats.toPlayer(player, stats); +// ((ItemLivingArmour) chestStack.getItem()).setLivingArmour(chestStack, armour, true); + + masterRitualStone.setActive(false); + + LightningBoltEntity lightningboltentity = EntityType.LIGHTNING_BOLT.create(world); +// LightningBoltEntity lightning = new LightningBoltEntity(world, pos.getX() + dispX, pos.getY(), pos.getZ() + dispZ); + lightningboltentity.setPosition(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5); +// lightningboltentity.setEffectOnly(true); + world.addEntity(lightningboltentity); + } + + } + } + } + + @Override + public int getRefreshTime() + { + return 1; + } + + @Override + public int getRefreshCost() + { + return 0; + } + + @Override + public void gatherComponents(Consumer components) + { + addCornerRunes(components, 1, 0, EnumRuneType.DUSK); + addCornerRunes(components, 2, 0, EnumRuneType.FIRE); + addOffsetRunes(components, 1, 2, 0, EnumRuneType.FIRE); + addCornerRunes(components, 1, 1, EnumRuneType.DUSK); + addParallelRunes(components, 4, 0, EnumRuneType.EARTH); + addCornerRunes(components, 1, 3, EnumRuneType.DUSK); + addParallelRunes(components, 1, 4, EnumRuneType.EARTH); + + for (int i = 0; i < 4; i++) + { + addCornerRunes(components, 3, i, EnumRuneType.EARTH); + } + } + + @Override + public Ritual getNewCopy() + { + return new RitualArmourEvolve(); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/ritual/types/RitualCrushing.java b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualCrushing.java new file mode 100644 index 00000000..92af0383 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualCrushing.java @@ -0,0 +1,360 @@ +package wayoftime.bloodmagic.ritual.types; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; + +import com.mojang.authlib.GameProfile; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.loot.LootContext; +import net.minecraft.loot.LootParameters; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.common.util.FakePlayerFactory; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.block.BlockMasterRitualStone; +import wayoftime.bloodmagic.demonaura.WorldDemonWillHandler; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.ritual.IMasterRitualStone; +import wayoftime.bloodmagic.ritual.IRitualStone; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.ritual.RitualComponent; +import wayoftime.bloodmagic.ritual.RitualRegister; +import wayoftime.bloodmagic.util.Utils; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; + +@RitualRegister("crushing") +public class RitualCrushing extends Ritual +{ + public static final String CRUSHING_RANGE = "crushingRange"; + public static final String CHEST_RANGE = "chest"; + + public static double rawWillDrain = 0.05; + public static double steadfastWillDrain = 0.2; + public static double destructiveWillDrain = 0.2; + public static double vengefulWillDrain = 0.2; + + public static Map cuttingFluidLPMap = new HashMap<>(); + public static Map cuttingFluidWillMap = new HashMap<>(); + public static int defaultRefreshTime = 40; + private FakePlayer fakePlayer; + public int refreshTime = 40; + + private static final ItemStack mockPick = new ItemStack(Items.DIAMOND_PICKAXE, 1); + static + { + mockPick.addEnchantment(Enchantments.SILK_TOUCH, 1); + } + + public RitualCrushing() + { + super("ritualCrushing", 0, 5000, "ritual." + BloodMagic.MODID + ".crushingRitual"); + addBlockRange(CRUSHING_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-1, -3, -1), 3)); + addBlockRange(CHEST_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1)); + + setMaximumVolumeAndDistanceOfRange(CRUSHING_RANGE, 50, 10, 10); + setMaximumVolumeAndDistanceOfRange(CHEST_RANGE, 1, 3, 3); + } + + @Override + public void performRitual(IMasterRitualStone masterRitualStone) + { + World world = masterRitualStone.getWorldObj(); + if (world.isRemote) + { + return; + } + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); + + if (currentEssence < getRefreshCost()) + { + masterRitualStone.getOwnerNetwork().causeNausea(); + return; + } + + BlockPos pos = masterRitualStone.getBlockPos(); + AreaDescriptor chestRange = masterRitualStone.getBlockRange(CHEST_RANGE); + TileEntity tile = world.getTileEntity(chestRange.getContainedPositions(pos).get(0)); + + if (tile != null && Utils.getNumberOfFreeSlots(tile, Direction.DOWN) < 1) + { + return; + } + + List willConfig = masterRitualStone.getActiveWillConfig(); + + double rawWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DEFAULT, willConfig); + double steadfastWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.STEADFAST, willConfig); + double corrosiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.CORROSIVE, willConfig); + double destructiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DESTRUCTIVE, willConfig); + double vengefulWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.VENGEFUL, willConfig); + + refreshTime = getRefreshTimeForRawWill(rawWill); + + boolean consumeRawWill = rawWill >= rawWillDrain && refreshTime != defaultRefreshTime; + + boolean isSilkTouch = steadfastWill >= steadfastWillDrain; + boolean useCuttingFluid = corrosiveWill > 0; + + int fortune = destructiveWill > 0 ? 3 : 0; + + AreaDescriptor crushingRange = masterRitualStone.getBlockRange(CRUSHING_RANGE); + boolean hasOperated = false; + + double rawDrain = 0; + + for (BlockPos newPos : crushingRange.getContainedPositions(pos)) + { + if (world.isAirBlock(newPos)) + { + continue; + } + + BlockState state = world.getBlockState(newPos); + Block block = state.getBlock(); + + if (block instanceof BlockMasterRitualStone || block instanceof IRitualStone + || state.getBlockHardness(world, newPos) == -1.0F || Utils.isBlockLiquid(state)) + { + continue; + } + + boolean isBlockClaimed = false; +// if (useCuttingFluid) +// { +// ItemStack checkStack = block.getItem(world, newPos, state); +// if (checkStack.isEmpty()) +// { +// continue; +// } +// +// ItemStack copyStack = checkStack.copy(); +// +// for (ICrushingHandler handler : CrushingRegistry.getCrushingHandlerList()) +// { +// int lpDrain = handler.getLpDrain(); +// double willDrain = handler.getWillDrain(); +// +// if (corrosiveWill < willDrain || currentEssence < lpDrain + getRefreshCost()) +// { +// continue; +// } +// +// ItemStack result = handler.getRecipeOutput(copyStack, world, pos); +// +// if (result.isEmpty()) +// { +// continue; +// } +// +// if (tile != null) +// { +// result = Utils.insertStackIntoTile(result, tile, Direction.DOWN); +// if (!result.isEmpty()) +// { +// Utils.spawnStackAtBlock(world, pos, Direction.UP, result); +// } +// } else +// { +// Utils.spawnStackAtBlock(world, pos, Direction.UP, result); +// } +// +// WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.CORROSIVE, willDrain, true); +// corrosiveWill -= willDrain; +// +// masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(lpDrain)); +// currentEssence -= lpDrain; +// +// isBlockClaimed = true; +// } +// +// } + + Blocks d; + if (!isBlockClaimed && isSilkTouch) + { + LootContext.Builder lootBuilder = new LootContext.Builder((ServerWorld) world); + Vector3d blockCenter = new Vector3d(newPos.getX() + 0.5, newPos.getY() + 0.5, newPos.getZ() + 0.5); + List silkDrops = state.getDrops(lootBuilder.withParameter(LootParameters.field_237457_g_, blockCenter).withParameter(LootParameters.TOOL, mockPick)); + + for (ItemStack item : silkDrops) + { + ItemStack copyStack = item.copy(); + + if (tile != null) + { + copyStack = Utils.insertStackIntoTile(copyStack, tile, Direction.DOWN); + } else + { + Utils.spawnStackAtBlock(world, pos, Direction.UP, copyStack); + continue; + } + if (!copyStack.isEmpty()) + { + Utils.spawnStackAtBlock(world, pos, Direction.UP, copyStack); + } + } + + if (steadfastWill >= steadfastWillDrain) + { + WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.STEADFAST, steadfastWillDrain, true); + steadfastWill -= steadfastWillDrain; + } else + { + continue; + } + + } else if (!isBlockClaimed) + { + if (fortune > 0 && destructiveWill < destructiveWillDrain) + { + fortune = 0; + } + + ItemStack mockFortunePick = new ItemStack(Items.DIAMOND_PICKAXE, 1); + mockFortunePick.addEnchantment(Enchantments.FORTUNE, fortune); + + LootContext.Builder lootBuilder = new LootContext.Builder((ServerWorld) world); + Vector3d blockCenter = new Vector3d(newPos.getX() + 0.5, newPos.getY() + 0.5, newPos.getZ() + 0.5); + List stackList = state.getDrops(lootBuilder.withParameter(LootParameters.field_237457_g_, blockCenter).withParameter(LootParameters.TOOL, mockFortunePick)); +// List stackList = Block.getDrops(state, world, newPos, world.getTileEntity(newPos)); + +// List stackList = block.getDrops(world, newPos, state, fortune); + + for (ItemStack item : stackList) + { + ItemStack copyStack = item.copy(); + + if (tile != null) + { + copyStack = Utils.insertStackIntoTile(copyStack, tile, Direction.DOWN); + } else + { + Utils.spawnStackAtBlock(world, pos, Direction.UP, copyStack); + continue; + } + if (!copyStack.isEmpty()) + { + Utils.spawnStackAtBlock(world, pos, Direction.UP, copyStack); + } + } + + if (fortune > 0) + { + WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DESTRUCTIVE, destructiveWillDrain, true); + destructiveWill -= destructiveWillDrain; + } + } + + world.destroyBlock(newPos, false); + masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost())); + hasOperated = true; + + if (consumeRawWill) + { + rawDrain += rawWillDrain; + rawWill -= rawWillDrain; + } + + break; + } + +// if (hasOperated && tile != null && vengefulWill >= vengefulWillDrain) +// { +// Pair pair = CompressionRegistry.compressInventory(tile, world); +// if (pair.getRight()) +// { +// ItemStack returned = pair.getLeft(); +// if (returned != null) +// { +// Utils.spawnStackAtBlock(world, pos, Direction.UP, returned); +// } +// +// WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.VENGEFUL, vengefulWillDrain, true); +// } +// } + + if (rawDrain > 0) + { + WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DEFAULT, rawDrain, true); + } + } + + public int getRefreshTimeForRawWill(double rawWill) + { + if (rawWill >= rawWillDrain) + { + return Math.max(1, (int) (40 - rawWill / 5)); + } + + return defaultRefreshTime; + } + + @Override + public int getRefreshTime() + { + return refreshTime; + } + + @Override + public int getRefreshCost() + { + return 7; + } + + @Override + public void gatherComponents(Consumer components) + { + addParallelRunes(components, 1, 0, EnumRuneType.EARTH); + addParallelRunes(components, 2, 0, EnumRuneType.FIRE); + addCornerRunes(components, 2, 0, EnumRuneType.DUSK); + addParallelRunes(components, 2, 1, EnumRuneType.AIR); + } + + @Override + public ITextComponent[] provideInformationOfRitualToPlayer(PlayerEntity player) + { + return new ITextComponent[] + { new TranslationTextComponent(this.getTranslationKey() + ".info"), + new TranslationTextComponent(this.getTranslationKey() + ".default.info"), + new TranslationTextComponent(this.getTranslationKey() + ".corrosive.info"), + new TranslationTextComponent(this.getTranslationKey() + ".steadfast.info"), + new TranslationTextComponent(this.getTranslationKey() + ".destructive.info"), + new TranslationTextComponent(this.getTranslationKey() + ".vengeful.info") }; + } + + @Override + public Ritual getNewCopy() + { + return new RitualCrushing(); + } + + public static void registerCuttingFluid(ItemStack stack, int lpDrain, double willDrain) + { + cuttingFluidLPMap.put(stack, lpDrain); + cuttingFluidWillMap.put(stack, willDrain); + } + + private FakePlayer getFakePlayer(ServerWorld world) + { + return fakePlayer == null + ? fakePlayer = FakePlayerFactory.get(world, new GameProfile(null, BloodMagic.MODID + "_ritual_crushing")) + : fakePlayer; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/types/RitualCrystalHarvest.java b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualCrystalHarvest.java new file mode 100644 index 00000000..1a8add72 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualCrystalHarvest.java @@ -0,0 +1,104 @@ +package wayoftime.bloodmagic.ritual.types; + +import java.util.function.Consumer; + +import net.minecraft.block.BlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.ritual.IMasterRitualStone; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.ritual.RitualComponent; +import wayoftime.bloodmagic.ritual.RitualRegister; +import wayoftime.bloodmagic.tile.TileDemonCrystal; + +@RitualRegister("crystal_harvest") +public class RitualCrystalHarvest extends Ritual +{ + public static final String CRYSTAL_RANGE = "crystal"; + + public RitualCrystalHarvest() + { + super("ritualCrystalHarvest", 0, 40000, "ritual." + BloodMagic.MODID + ".crystalHarvestRitual"); + addBlockRange(CRYSTAL_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-3, 2, -3), 7, 5, 7)); + + setMaximumVolumeAndDistanceOfRange(CRYSTAL_RANGE, 250, 5, 7); + } + + @Override + public void performRitual(IMasterRitualStone masterRitualStone) + { + World world = masterRitualStone.getWorldObj(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); + BlockPos pos = masterRitualStone.getBlockPos(); + + if (currentEssence < getRefreshCost()) + { + masterRitualStone.getOwnerNetwork().causeNausea(); + return; + } + + int maxEffects = 1; + int totalEffects = 0; + + AreaDescriptor crystalRange = masterRitualStone.getBlockRange(CRYSTAL_RANGE); + + crystalRange.resetIterator(); + while (crystalRange.hasNext()) + { + BlockPos nextPos = crystalRange.next().add(pos); + TileEntity tile = world.getTileEntity(nextPos); + if (tile instanceof TileDemonCrystal) + { + TileDemonCrystal demonCrystal = (TileDemonCrystal) tile; + if (demonCrystal.dropSingleCrystal()) + { + BlockState state = world.getBlockState(nextPos); + world.notifyBlockUpdate(nextPos, state, state, 3); + totalEffects++; + if (totalEffects >= maxEffects) + { + break; + } + } + } + } + + masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost() * totalEffects)); + } + + @Override + public int getRefreshTime() + { + return 25; + } + + @Override + public int getRefreshCost() + { + return 50; + } + + @Override + public void gatherComponents(Consumer components) + { + addCornerRunes(components, 1, 0, EnumRuneType.AIR); + addParallelRunes(components, 1, 1, EnumRuneType.DUSK); + addParallelRunes(components, 1, -1, EnumRuneType.FIRE); + addParallelRunes(components, 2, -1, EnumRuneType.FIRE); + addParallelRunes(components, 3, -1, EnumRuneType.FIRE); + addOffsetRunes(components, 3, 1, -1, EnumRuneType.FIRE); + addCornerRunes(components, 3, -1, EnumRuneType.EARTH); + addCornerRunes(components, 3, 0, EnumRuneType.EARTH); + addOffsetRunes(components, 3, 2, 0, EnumRuneType.DUSK); + } + + @Override + public Ritual getNewCopy() + { + return new RitualCrystalHarvest(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/types/RitualCrystalSplit.java b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualCrystalSplit.java new file mode 100644 index 00000000..9e399aae --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualCrystalSplit.java @@ -0,0 +1,215 @@ +package wayoftime.bloodmagic.ritual.types; + +import java.util.function.Consumer; + +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.ritual.IMasterRitualStone; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.ritual.RitualComponent; +import wayoftime.bloodmagic.ritual.RitualRegister; +import wayoftime.bloodmagic.tile.TileDemonCrystal; + +@RitualRegister("crystal_split") +public class RitualCrystalSplit extends Ritual +{ + public RitualCrystalSplit() + { + super("ritualCrystalSplit", 0, 20000, "ritual." + BloodMagic.MODID + ".crystalSplitRitual"); + } + + @Override + public void performRitual(IMasterRitualStone masterRitualStone) + { + World world = masterRitualStone.getWorldObj(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); + + if (currentEssence < getRefreshCost()) + { + masterRitualStone.getOwnerNetwork().causeNausea(); + return; + } + + BlockPos pos = masterRitualStone.getBlockPos(); + Direction direction = masterRitualStone.getDirection(); + BlockPos rawPos = pos.up(2); + + TileEntity tile = world.getTileEntity(rawPos); + if (!(tile instanceof TileDemonCrystal) || ((TileDemonCrystal) tile).getWillType() != EnumDemonWillType.DEFAULT) + { + return; + } + + BlockState rawState = world.getBlockState(rawPos); + + TileDemonCrystal rawTile = (TileDemonCrystal) tile; + if (rawTile.getCrystalCount() >= 5) + { + BlockPos vengefulPos = pos.offset(rotateFacing(Direction.NORTH, direction)).up(); + BlockPos corrosivePos = pos.offset(rotateFacing(Direction.EAST, direction)).up(); + BlockPos steadfastPos = pos.offset(rotateFacing(Direction.SOUTH, direction)).up(); + BlockPos destructivePos = pos.offset(rotateFacing(Direction.WEST, direction)).up(); + + int vengefulCrystals = 0; + int corrosiveCrystals = 0; + int steadfastCrystals = 0; + int destructiveCrystals = 0; + + tile = world.getTileEntity(vengefulPos); + if (tile instanceof TileDemonCrystal && ((TileDemonCrystal) tile).getWillType() == EnumDemonWillType.VENGEFUL && ((TileDemonCrystal) tile).getCrystalCount() < 7) + { + vengefulCrystals = ((TileDemonCrystal) tile).getCrystalCount(); + } else if (!(tile instanceof TileDemonCrystal) && world.isAirBlock(vengefulPos)) + { + // #donothing, no point setting the crystal to 0 again + } else + { + return; + } + + tile = world.getTileEntity(corrosivePos); + if (tile instanceof TileDemonCrystal && ((TileDemonCrystal) tile).getWillType() == EnumDemonWillType.CORROSIVE && ((TileDemonCrystal) tile).getCrystalCount() < 7) + { + corrosiveCrystals = ((TileDemonCrystal) tile).getCrystalCount(); + } else if (!(tile instanceof TileDemonCrystal) && world.isAirBlock(corrosivePos)) + { + + } else + { + return; + } + + tile = world.getTileEntity(steadfastPos); + if (tile instanceof TileDemonCrystal && ((TileDemonCrystal) tile).getWillType() == EnumDemonWillType.STEADFAST && ((TileDemonCrystal) tile).getCrystalCount() < 7) + { + steadfastCrystals = ((TileDemonCrystal) tile).getCrystalCount(); + } else if (!(tile instanceof TileDemonCrystal) && world.isAirBlock(steadfastPos)) + { + + } else + { + return; + } + + tile = world.getTileEntity(destructivePos); + if (tile instanceof TileDemonCrystal && ((TileDemonCrystal) tile).getWillType() == EnumDemonWillType.DESTRUCTIVE && ((TileDemonCrystal) tile).getCrystalCount() < 7) + { + destructiveCrystals = ((TileDemonCrystal) tile).getCrystalCount(); + } else if (!(tile instanceof TileDemonCrystal) && world.isAirBlock(destructivePos)) + { + + } else + { + return; + } + + rawTile.setCrystalCount(rawTile.getCrystalCount() - 4); + + growCrystal(world, vengefulPos, EnumDemonWillType.VENGEFUL, vengefulCrystals); + growCrystal(world, corrosivePos, EnumDemonWillType.CORROSIVE, corrosiveCrystals); + growCrystal(world, steadfastPos, EnumDemonWillType.STEADFAST, steadfastCrystals); + growCrystal(world, destructivePos, EnumDemonWillType.DESTRUCTIVE, destructiveCrystals); + rawTile.markDirty(); + world.notifyBlockUpdate(rawPos, rawState, rawState, 3); + } + } + + public Direction rotateFacing(Direction facing, Direction rotation) + { + switch (rotation) + { + case EAST: + return facing.rotateY(); + case SOUTH: + return facing.rotateY().rotateY(); + case WEST: + return facing.rotateYCCW(); + case NORTH: + default: + return facing; + } + } + + public void growCrystal(World world, BlockPos pos, EnumDemonWillType type, int currentCrystalCount) + { + if (currentCrystalCount <= 0) + { + BlockState state; + switch (type) + { + case CORROSIVE: + state = BloodMagicBlocks.CORROSIVE_CRYSTAL_BLOCK.get().getDefaultState(); + break; + case DEFAULT: + state = BloodMagicBlocks.RAW_CRYSTAL_BLOCK.get().getDefaultState(); + break; + case DESTRUCTIVE: + state = BloodMagicBlocks.DESTRUCTIVE_CRYSTAL_BLOCK.get().getDefaultState(); + break; + case STEADFAST: + state = BloodMagicBlocks.STEADFAST_CRYSTAL_BLOCK.get().getDefaultState(); + break; + case VENGEFUL: + state = BloodMagicBlocks.VENGEFUL_CRYSTAL_BLOCK.get().getDefaultState(); + break; + default: + state = BloodMagicBlocks.RAW_CRYSTAL_BLOCK.get().getDefaultState(); + } + world.setBlockState(pos, state, 3); + } else + { + TileDemonCrystal tile = (TileDemonCrystal) world.getTileEntity(pos); + tile.setCrystalCount(currentCrystalCount + 1); + tile.markDirty(); + BlockState state = world.getBlockState(pos); + world.notifyBlockUpdate(pos, state, state, 3); + } + } + + @Override + public int getRefreshTime() + { + return 20; + } + + @Override + public int getRefreshCost() + { + return 1000; + } + + @Override + public void gatherComponents(Consumer components) + { + addRune(components, 0, 0, -1, EnumRuneType.FIRE); + addRune(components, 1, 0, 0, EnumRuneType.EARTH); + addRune(components, 0, 0, 1, EnumRuneType.WATER); + addRune(components, -1, 0, 0, EnumRuneType.AIR); + + this.addOffsetRunes(components, 1, 2, -1, EnumRuneType.DUSK); + this.addCornerRunes(components, 1, 0, EnumRuneType.BLANK); + this.addParallelRunes(components, 2, 0, EnumRuneType.DUSK); + } + + @Override + public Ritual getNewCopy() + { + return new RitualCrystalSplit(); + } + + @Override + public ITextComponent[] provideInformationOfRitualToPlayer(PlayerEntity player) + { + return new ITextComponent[] { new TranslationTextComponent(this.getTranslationKey() + ".info") }; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/types/RitualEllipsoid.java b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualEllipsoid.java new file mode 100644 index 00000000..1587145d --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualEllipsoid.java @@ -0,0 +1,272 @@ +package wayoftime.bloodmagic.ritual.types; + +import java.util.function.Consumer; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.item.BlockItem; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.ritual.IMasterRitualStone; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.ritual.RitualComponent; +import wayoftime.bloodmagic.ritual.RitualRegister; + +@RitualRegister("ellipsoid") +public class RitualEllipsoid extends Ritual +{ + public static final String SPHEROID_RANGE = "spheroidRange"; + public static final String CHEST_RANGE = "chest"; + + private boolean cached = false; + private BlockPos currentPos; // Offset + + public RitualEllipsoid() + { + super("ritualEllipsoid", 0, 20000, "ritual." + BloodMagic.MODID + ".ellipseRitual"); + addBlockRange(SPHEROID_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-10, -10, -10), new BlockPos(11, 11, 11))); + addBlockRange(CHEST_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1)); + + setMaximumVolumeAndDistanceOfRange(SPHEROID_RANGE, 0, 32, 32); + setMaximumVolumeAndDistanceOfRange(CHEST_RANGE, 1, 3, 3); + } + + @Override + public void performRitual(IMasterRitualStone masterRitualStone) + { + World world = masterRitualStone.getWorldObj(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); + + BlockPos masterPos = masterRitualStone.getBlockPos(); + AreaDescriptor chestRange = masterRitualStone.getBlockRange(CHEST_RANGE); + TileEntity tileInventory = world.getTileEntity(chestRange.getContainedPositions(masterPos).get(0)); + + if (currentEssence < getRefreshCost()) + { + masterRitualStone.getOwnerNetwork().causeNausea(); + return; + } + + AreaDescriptor sphereRange = masterRitualStone.getBlockRange(SPHEROID_RANGE); + AxisAlignedBB sphereBB = sphereRange.getAABB(masterPos); + int minX = (int) (masterPos.getX() - sphereBB.minX); + int maxX = (int) (sphereBB.maxX - masterPos.getX()) - 1; + int minY = (int) (masterPos.getY() - sphereBB.minY); + int maxY = (int) (sphereBB.maxY - masterPos.getY()) - 1; + int minZ = (int) (masterPos.getZ() - sphereBB.minZ); + int maxZ = (int) (sphereBB.maxZ - masterPos.getZ()) - 1; + + if (tileInventory != null) + { +// System.out.println("Tile"); + if (tileInventory.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, Direction.DOWN).isPresent()) + { +// System.out.println("Have inv"); + IItemHandler itemHandler = tileInventory.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, Direction.DOWN).resolve().get(); + + if (itemHandler.getSlots() <= 0) + { + return; + } + + int blockSlot = -1; + for (int invSlot = 0; invSlot < itemHandler.getSlots(); invSlot++) + { + ItemStack stack = itemHandler.extractItem(invSlot, 1, true); + if (stack.isEmpty() || !(stack.getItem() instanceof BlockItem)) + continue; + + blockSlot = invSlot; + break; + } + +// System.out.println("Block slot: " + blockSlot); + + if (blockSlot == -1) + { + return; + } + + int xR = Math.max(maxX, minX); + int yR = Math.max(maxY, minY); + int zR = Math.max(maxZ, minZ); + + int j = -minX; + int i = -minY; + int k = -minZ; + + if (currentPos != null) + { + j = currentPos.getY(); + i = Math.min(xR, Math.max(-minX, currentPos.getX())); + k = Math.min(zR, Math.max(-minZ, currentPos.getZ())); + } + int checks = 0; + int maxChecks = 100; + + while (j <= maxY) + { + while (i <= maxX) + { + while (k <= maxZ) + { + checks++; + if (checks >= maxChecks) + { + this.currentPos = new BlockPos(i, j, k); +// System.out.println(this.currentPos); + return; + } + + if (checkIfEllipsoidShell(xR, yR, zR, i, j, k)) + { + BlockPos newPos = masterPos.add(i, j, k); +// + if (!world.isAirBlock(newPos)) + { + k++; + continue; + } + + BlockState placeState = Block.getBlockFromItem(itemHandler.getStackInSlot(blockSlot).getItem()).getDefaultState(); + world.setBlockState(newPos, placeState); + + itemHandler.extractItem(blockSlot, 1, false); + tileInventory.markDirty(); + // TODO: + masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost())); + k++; + this.currentPos = new BlockPos(i, j, k); +// System.out.println(this.currentPos); + return; + } + k++; + } + i++; + k = -minZ; + } + j++; + i = -minX; + this.currentPos = new BlockPos(i, j, k); + return; + } + + j = -minY; + this.currentPos = new BlockPos(i, j, k); + return; + } + } + } + + public boolean checkIfEllipsoidShell(int xR, int yR, int zR, int xOff, int yOff, int zOff) + { + // Checking shell in the x-direction + if (!checkIfEllipsoid(xR, yR, zR, xOff, yOff, zOff)) + { + return false; + } + + return !((checkIfEllipsoid(xR, yR, zR, xOff + 1, yOff, zOff) && checkIfEllipsoid(xR, yR, zR, xOff - 1, yOff, zOff)) && (checkIfEllipsoid(xR, yR, zR, xOff, yOff + 1, zOff) && checkIfEllipsoid(xR, yR, zR, xOff, yOff - 1, zOff)) && (checkIfEllipsoid(xR, yR, zR, xOff, yOff, zOff + 1) && checkIfEllipsoid(xR, yR, zR, xOff, yOff, zOff - 1))); +// if (xOff * xOff + yOff * yOff + zOff * zOff >= (xR - 0.5) * (xR - 0.5) && xOff * xOff + yOff * yOff + zOff * zOff <= (xR + 0.5) * (xR + 0.5)) +// if (checkIfEllipsoid(xR, yR, zR, xOff, yOff, zOff)) +// { +// if (xOff * xOff / ((xR - 0.5) * (xR - 0.5)) + yOff * yOff / ((yR - 0.5) * (yR - 0.5)) >= 1 - zOff * zOff / ((zR + possOffset) * (zR + possOffset))) +// { +// return true; +// } +// +// if (xOff * xOff / ((xR - 0.5) * (xR - 0.5)) + zOff * zOff / ((zR - 0.5) * (zR - 0.5)) >= 1 - yOff * yOff / ((yR + possOffset) * (yR + possOffset))) +// { +// return true; +// } +// +// if (zOff * zOff / ((zR - 0.5) * (zR - 0.5)) + yOff * yOff / ((yR - 0.5) * (yR - 0.5)) >= 1 - xOff * xOff / ((xR + possOffset) * (xR + possOffset))) +// { +// return true; +// } +// } +// return false; + } + + public boolean checkIfEllipsoid(float xR, float yR, float zR, float xOff, float yOff, float zOff) + { + float possOffset = 0.5f; + return xOff * xOff / ((xR + possOffset) * (xR + possOffset)) + yOff * yOff / ((yR + possOffset) * (yR + possOffset)) + zOff * zOff / ((zR + possOffset) * (zR + possOffset)) <= 1; + } + + @Override + public int getRefreshCost() + { + return 10;// Temporary + } + + @Override + public int getRefreshTime() + { + return 1; + } + +// @Override +// public void readFromNBT(NBTTagCompound tag) +// { +// super.readFromNBT(tag); +// tag +// } + + @Override + public void gatherComponents(Consumer components) + { + addCornerRunes(components, 1, 0, EnumRuneType.DUSK); + + addRune(components, 4, 0, 0, EnumRuneType.FIRE); + addRune(components, 5, 0, 0, EnumRuneType.FIRE); + addRune(components, 5, 0, -1, EnumRuneType.FIRE); + addRune(components, 5, 0, -2, EnumRuneType.FIRE); + addRune(components, -4, 0, 0, EnumRuneType.FIRE); + addRune(components, -5, 0, 0, EnumRuneType.FIRE); + addRune(components, -5, 0, 1, EnumRuneType.FIRE); + addRune(components, -5, 0, 2, EnumRuneType.FIRE); + + addRune(components, 0, 0, 4, EnumRuneType.AIR); + addRune(components, 0, 0, 5, EnumRuneType.AIR); + addRune(components, 1, 0, 5, EnumRuneType.AIR); + addRune(components, 2, 0, 5, EnumRuneType.AIR); + addRune(components, 0, 0, -4, EnumRuneType.AIR); + addRune(components, 0, 0, -5, EnumRuneType.AIR); + addRune(components, -1, 0, -5, EnumRuneType.AIR); + addRune(components, -2, 0, -5, EnumRuneType.AIR); + + addRune(components, 3, 0, 1, EnumRuneType.EARTH); + addRune(components, 3, 0, 2, EnumRuneType.EARTH); + addRune(components, 3, 0, 3, EnumRuneType.EARTH); + addRune(components, 2, 0, 3, EnumRuneType.EARTH); + addRune(components, -3, 0, -1, EnumRuneType.EARTH); + addRune(components, -3, 0, -2, EnumRuneType.EARTH); + addRune(components, -3, 0, -3, EnumRuneType.EARTH); + addRune(components, -2, 0, -3, EnumRuneType.EARTH); + + addRune(components, 1, 0, -3, EnumRuneType.WATER); + addRune(components, 2, 0, -3, EnumRuneType.WATER); + addRune(components, 3, 0, -3, EnumRuneType.WATER); + addRune(components, 3, 0, -2, EnumRuneType.WATER); + addRune(components, -1, 0, 3, EnumRuneType.WATER); + addRune(components, -2, 0, 3, EnumRuneType.WATER); + addRune(components, -3, 0, 3, EnumRuneType.WATER); + addRune(components, -3, 0, 2, EnumRuneType.WATER); + } + + @Override + public Ritual getNewCopy() + { + return new RitualEllipsoid(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/types/RitualFeatheredKnife.java b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualFeatheredKnife.java new file mode 100644 index 00000000..9f2a7734 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualFeatheredKnife.java @@ -0,0 +1,258 @@ +package wayoftime.bloodmagic.ritual.types; + +import java.util.List; +import java.util.function.Consumer; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.potion.EffectInstance; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.ConfigHandler; +import wayoftime.bloodmagic.altar.IBloodAltar; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.demonaura.WorldDemonWillHandler; +import wayoftime.bloodmagic.network.SetClientHealthPacket; +import wayoftime.bloodmagic.potion.BloodMagicPotions; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.ritual.IMasterRitualStone; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.ritual.RitualComponent; +import wayoftime.bloodmagic.ritual.RitualRegister; +import wayoftime.bloodmagic.util.helper.PlayerSacrificeHelper; + +@RitualRegister("feathered_knife") +public class RitualFeatheredKnife extends Ritual +{ + public static final String ALTAR_RANGE = "altar"; + public static final String DAMAGE_RANGE = "damage"; + + public static double rawWillDrain = 0.05; + public static double destructiveWillDrain = 0.05; + public static double corrosiveWillThreshold = 10; + public static double steadfastWillThreshold = 10; + public static double vengefulWillThreshold = 10; + public static int defaultRefreshTime = 20; + public int refreshTime = 20; + public BlockPos altarOffsetPos = new BlockPos(0, 0, 0); // TODO: Save! + + public RitualFeatheredKnife() + { + super("ritualFeatheredKnife", 0, 25000, "ritual." + BloodMagic.MODID + ".featheredKnifeRitual"); + addBlockRange(ALTAR_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-5, -10, -5), 11, 21, 11)); + addBlockRange(DAMAGE_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-15, -20, -15), 31, 41, 31)); + + setMaximumVolumeAndDistanceOfRange(ALTAR_RANGE, 0, 10, 15); + setMaximumVolumeAndDistanceOfRange(DAMAGE_RANGE, 0, 25, 15); + } + + @Override + public void performRitual(IMasterRitualStone masterRitualStone) + { + World world = masterRitualStone.getWorldObj(); +// if (world.isRemote) +// { +// return; +// } + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); + + if (currentEssence < getRefreshCost()) + { + masterRitualStone.getOwnerNetwork().causeNausea(); + return; + } + + BlockPos pos = masterRitualStone.getBlockPos(); + + List willConfig = masterRitualStone.getActiveWillConfig(); + + double corrosiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.CORROSIVE, willConfig); + double destructiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DESTRUCTIVE, willConfig); + double rawWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DEFAULT, willConfig); + double steadfastWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.STEADFAST, willConfig); + double vengefulWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.VENGEFUL, willConfig); + + refreshTime = getRefreshTimeForRawWill(rawWill); + + boolean consumeRawWill = rawWill >= rawWillDrain && refreshTime != defaultRefreshTime; + + int maxEffects = currentEssence / getRefreshCost(); + int totalEffects = 0; + + BlockPos altarPos = pos.add(altarOffsetPos); + + TileEntity tile = world.getTileEntity(altarPos); + + AreaDescriptor altarRange = masterRitualStone.getBlockRange(ALTAR_RANGE); + + if (!altarRange.isWithinArea(altarOffsetPos) || !(tile instanceof IBloodAltar)) + { + for (BlockPos newPos : altarRange.getContainedPositions(pos)) + { + TileEntity nextTile = world.getTileEntity(newPos); + if (nextTile instanceof IBloodAltar) + { + tile = nextTile; + altarOffsetPos = newPos.subtract(pos); + + altarRange.resetCache(); + break; + } + } + } + + boolean useIncense = corrosiveWill >= corrosiveWillThreshold; + + if (tile instanceof IBloodAltar) + { + IBloodAltar tileAltar = (IBloodAltar) tile; + + AreaDescriptor damageRange = masterRitualStone.getBlockRange(DAMAGE_RANGE); + AxisAlignedBB range = damageRange.getAABB(pos); + + double destructiveDrain = 0; + + List entities = world.getEntitiesWithinAABB(PlayerEntity.class, range); + + for (PlayerEntity player : entities) + { + float healthThreshold = steadfastWill >= steadfastWillThreshold ? 0.7f : 0.3f; + + if (vengefulWill >= vengefulWillThreshold && !player.getGameProfile().getId().equals(masterRitualStone.getOwner())) + { + healthThreshold = 0.1f; + } + + float health = player.getHealth(); + float maxHealth = player.getMaxHealth(); + + float sacrificedHealth = 1; + double lpModifier = 1; + + if ((health / player.getMaxHealth() > healthThreshold) && (!useIncense || !player.isPotionActive(BloodMagicPotions.SOUL_FRAY))) + { + if (useIncense) + { + double incenseAmount = PlayerSacrificeHelper.getPlayerIncense(player); + + sacrificedHealth = health - maxHealth * healthThreshold; + lpModifier *= PlayerSacrificeHelper.getModifier(incenseAmount); + + PlayerSacrificeHelper.setPlayerIncense(player, 0); + player.addPotionEffect(new EffectInstance(BloodMagicPotions.SOUL_FRAY, PlayerSacrificeHelper.soulFrayDuration)); + } + + if (destructiveWill >= destructiveWillDrain * sacrificedHealth) + { + lpModifier *= getLPModifierForWill(destructiveWill); + destructiveWill -= destructiveWillDrain * sacrificedHealth; + destructiveDrain += destructiveWillDrain * sacrificedHealth; + } + +// if (LivingArmour.hasFullSet(player)) +// { +// ItemStack chestStack = player.getItemStackFromSlot(EquipmentSlotType.CHEST); +// LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); +// if (armour != null) +// { +// LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(BloodMagic.MODID + ".upgrade.selfSacrifice", chestStack); +// +// if (upgrade instanceof LivingArmourUpgradeSelfSacrifice) +// { +// double modifier = ((LivingArmourUpgradeSelfSacrifice) upgrade).getSacrificeModifier(); +// +// lpModifier *= (1 + modifier); +// } +// } +// } + + player.setHealth(health - sacrificedHealth); + BloodMagic.packetHandler.sendTo(new SetClientHealthPacket(health - sacrificedHealth), (ServerPlayerEntity) player); + + tileAltar.sacrificialDaggerCall((int) (ConfigHandler.values.sacrificialDaggerConversion * lpModifier * sacrificedHealth), false); + + totalEffects++; + + if (totalEffects >= maxEffects) + { + break; + } + + } + } + + if (destructiveDrain > 0) + { + WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.STEADFAST, destructiveDrain, true); + } + } + + masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost() * totalEffects)); + if (totalEffects > 0 && consumeRawWill) + { + WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DEFAULT, rawWillDrain, true); + } + } + + @Override + public int getRefreshTime() + { + return refreshTime; + } + + @Override + public int getRefreshCost() + { + return 20; + } + + @Override + public void gatherComponents(Consumer components) + { + addParallelRunes(components, 1, 0, EnumRuneType.DUSK); + addParallelRunes(components, 2, -1, EnumRuneType.WATER); + addCornerRunes(components, 1, -1, EnumRuneType.AIR); + addOffsetRunes(components, 2, 4, -1, EnumRuneType.FIRE); + addOffsetRunes(components, 2, 4, 0, EnumRuneType.EARTH); + addOffsetRunes(components, 4, 3, 0, EnumRuneType.EARTH); + addCornerRunes(components, 3, 0, EnumRuneType.AIR); + } + + @Override + public Ritual getNewCopy() + { + return new RitualFeatheredKnife(); + } + + @Override + public ITextComponent[] provideInformationOfRitualToPlayer(PlayerEntity player) + { + return new ITextComponent[] { new TranslationTextComponent(this.getTranslationKey() + ".info"), + new TranslationTextComponent(this.getTranslationKey() + ".default.info"), + new TranslationTextComponent(this.getTranslationKey() + ".corrosive.info"), + new TranslationTextComponent(this.getTranslationKey() + ".steadfast.info"), + new TranslationTextComponent(this.getTranslationKey() + ".destructive.info"), + new TranslationTextComponent(this.getTranslationKey() + ".vengeful.info") }; + } + + public double getLPModifierForWill(double destructiveWill) + { + return 1 + destructiveWill * 0.2 / 100; + } + + public int getRefreshTimeForRawWill(double rawWill) + { + if (rawWill >= rawWillDrain) + { + return 10; + } + + return defaultRefreshTime; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/types/RitualGreenGrove.java b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualGreenGrove.java new file mode 100644 index 00000000..a8d67d12 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualGreenGrove.java @@ -0,0 +1,345 @@ +package wayoftime.bloodmagic.ritual.types; + +import java.util.List; +import java.util.Random; +import java.util.function.Consumer; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.CactusBlock; +import net.minecraft.block.FarmlandBlock; +import net.minecraft.block.IGrowable; +import net.minecraft.block.SugarCaneBlock; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.potion.EffectInstance; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.demonaura.WorldDemonWillHandler; +import wayoftime.bloodmagic.impl.BloodMagicAPI; +import wayoftime.bloodmagic.potion.BloodMagicPotions; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.ritual.IMasterRitualStone; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.ritual.RitualComponent; +import wayoftime.bloodmagic.ritual.RitualRegister; +import wayoftime.bloodmagic.util.Utils; +import wayoftime.bloodmagic.will.DemonWillHolder; + +@RitualRegister("green_grove") +public class RitualGreenGrove extends Ritual +{ + public static final String GROW_RANGE = "growing"; + public static final String LEECH_RANGE = "leech"; + public static final String HYDRATE_RANGE = "hydrate"; + + public static double corrosiveWillDrain = 0.2; + public static double rawWillDrain = 0.05; + public static double vengefulWillDrain = 0.05; + public static double steadfastWillDrain = 0.05; + public static int defaultRefreshTime = 20; + public static double defaultGrowthChance = 0.3; + public static BlockState farmlandState = Blocks.FARMLAND.getDefaultState().with(FarmlandBlock.MOISTURE, 7); + public int refreshTime = 20; + + public RitualGreenGrove() + { + super("ritualGreenGrove", 0, 5000, "ritual." + BloodMagic.MODID + ".greenGroveRitual"); + addBlockRange(GROW_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-1, 2, -1), 3, 1, 3)); + addBlockRange(LEECH_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 0, 0), 1)); + addBlockRange(HYDRATE_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 0, 0), 1)); + setMaximumVolumeAndDistanceOfRange(GROW_RANGE, 81, 4, 4); + setMaximumVolumeAndDistanceOfRange(LEECH_RANGE, 0, 15, 15); + setMaximumVolumeAndDistanceOfRange(HYDRATE_RANGE, 0, 15, 15); + } + + @Override + public void performRitual(IMasterRitualStone masterRitualStone) + { + World world = masterRitualStone.getWorldObj(); + if (!(world instanceof ServerWorld)) + { + return; + } + + ServerWorld serverWorld = (ServerWorld) world; + BlockPos pos = masterRitualStone.getBlockPos(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); + + if (currentEssence < getRefreshCost()) + { + masterRitualStone.getOwnerNetwork().causeNausea(); + return; + } + + int maxGrowths = currentEssence / getRefreshCost(); + int totalGrowths = 0; + + List willConfig = masterRitualStone.getActiveWillConfig(); + + DemonWillHolder holder = WorldDemonWillHandler.getWillHolder(world, pos); + double corrosiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.CORROSIVE, willConfig); + double rawWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DEFAULT, willConfig); + double steadfastWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.STEADFAST, willConfig); + double vengefulWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.VENGEFUL, willConfig); + + refreshTime = getRefreshTimeForRawWill(rawWill); + double growthChance = getPlantGrowthChanceForWill(vengefulWill); + + boolean consumeRawWill = rawWill >= rawWillDrain && refreshTime != defaultRefreshTime; + boolean consumeVengefulWill = vengefulWill >= vengefulWillDrain && growthChance != defaultGrowthChance; + + double rawDrain = 0; + double vengefulDrain = 0; + + AreaDescriptor growingRange = masterRitualStone.getBlockRange(GROW_RANGE); + + int maxGrowthVolume = getMaxVolumeForRange(GROW_RANGE, willConfig, holder); + if (!growingRange.isWithinRange(getMaxVerticalRadiusForRange(GROW_RANGE, willConfig, holder), getMaxHorizontalRadiusForRange(GROW_RANGE, willConfig, holder)) || (maxGrowthVolume != 0 && growingRange.getVolume() > maxGrowthVolume)) + { + return; + } + + for (BlockPos newPos : growingRange.getContainedPositions(pos)) + { + BlockState state = world.getBlockState(newPos); + + if (!BloodMagicAPI.INSTANCE.getBlacklist().getGreenGrove().contains(state)) + { + boolean flag = state.getBlock() instanceof IGrowable || state.getBlock() instanceof CactusBlock || state.getBlock() instanceof SugarCaneBlock; + if (flag) + { + if (world.rand.nextDouble() < growthChance) + { + state.getBlock().randomTick(state, serverWorld, newPos, new Random()); + BlockState newState = world.getBlockState(newPos); + if (!newState.equals(state)) + { + world.playEvent(2005, newPos, 0); + totalGrowths++; + if (consumeRawWill) + { + rawWill -= rawWillDrain; + rawDrain += rawWillDrain; + } + + if (consumeVengefulWill) + { + vengefulWill -= vengefulWillDrain; + vengefulDrain += vengefulWillDrain; + } + } + } + } + } + + if (totalGrowths >= maxGrowths || (consumeRawWill && rawWill < rawWillDrain) || (consumeVengefulWill && vengefulWill < vengefulWillDrain)) + { + break; + } + } + + if (rawDrain > 0) + { + WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DEFAULT, rawDrain, true); + } + + if (vengefulDrain > 0) + { + WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.VENGEFUL, vengefulDrain, true); + } + + AreaDescriptor hydrateRange = masterRitualStone.getBlockRange(HYDRATE_RANGE); + + double steadfastDrain = 0; + if (steadfastWill > steadfastWillDrain) + { + AxisAlignedBB aabb = hydrateRange.getAABB(pos); + steadfastDrain += steadfastWillDrain * Utils.plantSeedsInArea(world, aabb, 2, 1); + steadfastWill -= steadfastDrain; + + for (BlockPos newPos : hydrateRange.getContainedPositions(pos)) + { + if (steadfastWill < steadfastWillDrain) + { + break; + } + + BlockState state = world.getBlockState(newPos); + Block block = state.getBlock(); + + boolean hydratedBlock = false; + if (block == Blocks.DIRT || block == Blocks.GRASS) + { + world.setBlockState(newPos, farmlandState); + hydratedBlock = true; + } else if (block == Blocks.FARMLAND) + { + int meta = state.get(FarmlandBlock.MOISTURE); + if (meta < 7) + { + world.setBlockState(newPos, farmlandState); + hydratedBlock = true; + } + } + + if (hydratedBlock) + { + steadfastWill -= steadfastWillDrain; + steadfastDrain += steadfastWillDrain; + } + } + } + + if (steadfastDrain > 0) + { + WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.STEADFAST, steadfastDrain, true); + } + + double corrosiveDrain = 0; + if (corrosiveWill > corrosiveWillDrain) + { + AreaDescriptor leechRange = masterRitualStone.getBlockRange(LEECH_RANGE); + AxisAlignedBB mobArea = leechRange.getAABB(pos); + List entityList = world.getEntitiesWithinAABB(LivingEntity.class, mobArea); + for (LivingEntity entityLiving : entityList) + { + if (corrosiveWill < corrosiveWillDrain) + { + break; + } + + if (entityLiving instanceof PlayerEntity) + { + continue; + } + + if (entityLiving.isPotionActive(BloodMagicPotions.PLANT_LEECH) || !entityLiving.isPotionApplicable(new EffectInstance(BloodMagicPotions.PLANT_LEECH))) + { + continue; + } + + entityLiving.addPotionEffect(new EffectInstance(BloodMagicPotions.PLANT_LEECH, 200, 0)); + + corrosiveWill -= corrosiveWillDrain; + corrosiveDrain += corrosiveWillDrain; + } + + if (corrosiveDrain > 0) + { + WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.CORROSIVE, corrosiveDrain, true); + } + } + + masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(totalGrowths * getRefreshCost())); + } + + public double getPlantGrowthChanceForWill(double will) + { + if (will > 0) + { + return 0.3 + will / 200; + } + + return defaultGrowthChance; + } + + public int getRefreshTimeForRawWill(double rawWill) + { + if (rawWill > 0) + { + return 10; + } + + return defaultRefreshTime; + } + + @Override + public int getRefreshTime() + { + return refreshTime; + } + + @Override + public int getMaxVolumeForRange(String range, List activeTypes, DemonWillHolder holder) + { + if (GROW_RANGE.equals(range) && activeTypes.contains(EnumDemonWillType.DESTRUCTIVE)) + { + double destructiveWill = holder.getWill(EnumDemonWillType.DESTRUCTIVE); + if (destructiveWill > 0) + { + return 81 + (int) Math.pow(destructiveWill / 4, 1.5); + } + } + + return volumeRangeMap.get(range); + } + + @Override + public int getMaxVerticalRadiusForRange(String range, List activeTypes, DemonWillHolder holder) + { + if (GROW_RANGE.equals(range) && activeTypes.contains(EnumDemonWillType.DESTRUCTIVE)) + { + double destructiveWill = holder.getWill(EnumDemonWillType.DESTRUCTIVE); + if (destructiveWill > 0) + { + return (int) (4 + destructiveWill / 10d); + } + } + + return verticalRangeMap.get(range); + } + + @Override + public int getMaxHorizontalRadiusForRange(String range, List activeTypes, DemonWillHolder holder) + { + if (GROW_RANGE.equals(range) && activeTypes.contains(EnumDemonWillType.DESTRUCTIVE)) + { + double destructiveWill = holder.getWill(EnumDemonWillType.DESTRUCTIVE); + if (destructiveWill > 0) + { + return (int) (4 + destructiveWill / 10d); + } + } + + return horizontalRangeMap.get(range); + } + + @Override + public int getRefreshCost() + { + return 20; // TODO: Need to find a way to balance this + } + + @Override + public void gatherComponents(Consumer components) + { + addCornerRunes(components, 1, 0, EnumRuneType.EARTH); + addParallelRunes(components, 1, 0, EnumRuneType.WATER); + } + + @Override + public ITextComponent[] provideInformationOfRitualToPlayer(PlayerEntity player) + { + return new ITextComponent[] { new TranslationTextComponent(this.getTranslationKey() + ".info"), + new TranslationTextComponent(this.getTranslationKey() + ".default.info"), + new TranslationTextComponent(this.getTranslationKey() + ".corrosive.info"), + new TranslationTextComponent(this.getTranslationKey() + ".steadfast.info"), + new TranslationTextComponent(this.getTranslationKey() + ".destructive.info"), + new TranslationTextComponent(this.getTranslationKey() + ".vengeful.info") }; + } + + @Override + public Ritual getNewCopy() + { + return new RitualGreenGrove(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/types/RitualHarvest.java b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualHarvest.java new file mode 100644 index 00000000..1ac4433e --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualHarvest.java @@ -0,0 +1,145 @@ +package wayoftime.bloodmagic.ritual.types; + +import java.util.List; +import java.util.function.Consumer; + +import com.google.common.collect.Lists; + +import net.minecraft.block.BlockState; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemHandlerHelper; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.ritual.IMasterRitualStone; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.ritual.RitualComponent; +import wayoftime.bloodmagic.ritual.RitualRegister; +import wayoftime.bloodmagic.ritual.harvest.HarvestRegistry; +import wayoftime.bloodmagic.ritual.harvest.IHarvestHandler; + +/** + * This ritual uses registered {@link IHarvestHandler}'s to harvest blocks. + *

+ * To register a new Handler for this ritual use + * {@link HarvestRegistry#registerHandler(IHarvestHandler)} + *

+ * This ritual includes a way to change the range based on what block is above + * the MasterRitualStone. You can use + * {@link HarvestRegistry#registerRangeAmplifier(BlockState, int)} to register a + * new amplifier. + */ +@RitualRegister("harvest") +public class RitualHarvest extends Ritual +{ + public static final String HARVEST_RANGE = "harvestRange"; + + public RitualHarvest() + { + super("ritualHarvest", 0, 20000, "ritual." + BloodMagic.MODID + ".harvestRitual"); + addBlockRange(HARVEST_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-4, 1, -4), 9, 5, 9)); + setMaximumVolumeAndDistanceOfRange(HARVEST_RANGE, 0, 15, 15); + } + + @Override + public void performRitual(IMasterRitualStone masterRitualStone) + { + World world = masterRitualStone.getWorldObj(); + BlockPos pos = masterRitualStone.getBlockPos(); + + if (masterRitualStone.getOwnerNetwork().getCurrentEssence() < getRefreshCost()) + { + masterRitualStone.getOwnerNetwork().causeNausea(); + return; + } + + int harvested = 0; + + AreaDescriptor harvestArea = masterRitualStone.getBlockRange(HARVEST_RANGE); + + harvestArea.resetIterator(); + while (harvestArea.hasNext()) + { + BlockPos nextPos = harvestArea.next().add(pos); + if (harvestBlock(world, nextPos, masterRitualStone.getBlockPos())) + { + harvested++; + } + } + + masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost() * harvested)); + } + + @Override + public int getRefreshCost() + { + return 20; + } + + @Override + public int getRefreshTime() + { + return 5; + } + + @Override + public void gatherComponents(Consumer components) + { + addCornerRunes(components, 1, 0, EnumRuneType.DUSK); + addParallelRunes(components, 2, 0, EnumRuneType.EARTH); + addOffsetRunes(components, 3, 1, 0, EnumRuneType.EARTH); + addOffsetRunes(components, 3, 2, 0, EnumRuneType.WATER); + } + + @Override + public Ritual getNewCopy() + { + return new RitualHarvest(); + } + + public static boolean harvestBlock(World world, BlockPos cropPos, BlockPos controllerPos) + { + BlockState harvestState = world.getBlockState(cropPos); + TileEntity potentialInventory = world.getTileEntity(controllerPos.up()); + IItemHandler itemHandler = null; + if (potentialInventory != null && potentialInventory.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, Direction.DOWN).isPresent()) + itemHandler = potentialInventory.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, Direction.DOWN).resolve().get(); + + for (IHarvestHandler handler : HarvestRegistry.getHarvestHandlers()) + { + if (handler.test(world, cropPos, harvestState)) + { + List drops = Lists.newArrayList(); + if (handler.harvest(world, cropPos, harvestState, drops)) + { + for (ItemStack stack : drops) + { + if (stack.isEmpty()) + continue; + + // TODO I wrote this, but didn't actually think about whether it should be a + // thing. Remove the true if we want to keep it + if (itemHandler == null || true) + InventoryHelper.spawnItemStack(world, cropPos.getX(), cropPos.getY(), cropPos.getZ(), stack); + else + { + ItemStack remainder = ItemHandlerHelper.insertItemStacked(itemHandler, stack, false); + if (!remainder.isEmpty()) + InventoryHelper.spawnItemStack(world, cropPos.getX(), cropPos.getY(), cropPos.getZ(), remainder); + } + } + return true; + } + } + } + + return false; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/types/RitualLava.java b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualLava.java new file mode 100644 index 00000000..2cbfba90 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualLava.java @@ -0,0 +1,359 @@ +package wayoftime.bloodmagic.ritual.types; + +import java.util.List; +import java.util.function.Consumer; + +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.fluid.Fluids; +import net.minecraft.potion.EffectInstance; +import net.minecraft.potion.Effects; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.demonaura.WorldDemonWillHandler; +import wayoftime.bloodmagic.potion.BloodMagicPotions; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.ritual.IMasterRitualStone; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.ritual.RitualComponent; +import wayoftime.bloodmagic.ritual.RitualRegister; +import wayoftime.bloodmagic.util.DamageSourceBloodMagic; +import wayoftime.bloodmagic.util.Utils; +import wayoftime.bloodmagic.will.DemonWillHolder; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; + +@RitualRegister("lava") +public class RitualLava extends Ritual +{ + public static final String LAVA_RANGE = "lavaRange"; + public static final String FIRE_FUSE_RANGE = "fireFuse"; + public static final String FIRE_RESIST_RANGE = "fireResist"; + public static final String FIRE_DAMAGE_RANGE = "fireDamage"; + public static final String LAVA_TANK_RANGE = "lavaTank"; + + public static final double vengefulWillDrain = 1; + public static final double steadfastWillDrain = 0.5; + public static final double corrosiveWillDrain = 0.2; + public static final int corrosiveRefreshTime = 20; + public int timer = 0; + + public RitualLava() + { + super("ritualLava", 0, 10000, "ritual." + BloodMagic.MODID + ".lavaRitual"); + addBlockRange(LAVA_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1)); + addBlockRange(FIRE_FUSE_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-2, -2, -2), 5)); + addBlockRange(FIRE_RESIST_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 0, 0), 1)); + addBlockRange(FIRE_DAMAGE_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 0, 0), 1)); + addBlockRange(LAVA_TANK_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1)); + + setMaximumVolumeAndDistanceOfRange(LAVA_RANGE, 9, 3, 3); + setMaximumVolumeAndDistanceOfRange(FIRE_FUSE_RANGE, 0, 10, 10); + setMaximumVolumeAndDistanceOfRange(FIRE_RESIST_RANGE, 0, 10, 10); + setMaximumVolumeAndDistanceOfRange(FIRE_DAMAGE_RANGE, 0, 10, 10); + setMaximumVolumeAndDistanceOfRange(LAVA_TANK_RANGE, 1, 10, 10); + } + + @Override + public void performRitual(IMasterRitualStone masterRitualStone) + { + timer++; + World world = masterRitualStone.getWorldObj(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); + int lpDrain = 0; + + if (currentEssence < getRefreshCost()) + { + masterRitualStone.getOwnerNetwork().causeNausea(); + return; + } + + BlockPos pos = masterRitualStone.getBlockPos(); + List willConfig = masterRitualStone.getActiveWillConfig(); + + double rawWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DEFAULT, willConfig); + double rawDrained = 0; + + DemonWillHolder holder = WorldDemonWillHandler.getWillHolder(world, pos); + AreaDescriptor lavaRange = masterRitualStone.getBlockRange(LAVA_RANGE); + + int maxLavaVolume = getMaxVolumeForRange(LAVA_RANGE, willConfig, holder); + if (!lavaRange.isWithinRange(getMaxVerticalRadiusForRange(LAVA_RANGE, willConfig, holder), getMaxHorizontalRadiusForRange(LAVA_RANGE, willConfig, holder)) || (maxLavaVolume != 0 && lavaRange.getVolume() > maxLavaVolume)) + { + return; + } + + for (BlockPos newPos : lavaRange.getContainedPositions(pos)) + { + BlockState state = world.getBlockState(newPos); + if (world.isAirBlock(newPos) || Utils.isFlowingLiquid(world, newPos, state)) + { + int lpCost = getLPCostForRawWill(rawWill); + if (currentEssence < lpCost) + { + break; + } + world.setBlockState(newPos, Blocks.LAVA.getDefaultState()); + currentEssence -= lpCost; + lpDrain += lpCost; + if (rawWill > 0) + { + double drain = getWillCostForRawWill(rawWill); + rawWill -= drain; + rawDrained += drain; + } + } + } + + if (rawWill > 0) + { + AreaDescriptor chestRange = masterRitualStone.getBlockRange(LAVA_TANK_RANGE); + TileEntity tile = world.getTileEntity(chestRange.getContainedPositions(pos).get(0)); + double drain = getWillCostForRawWill(rawWill); + int lpCost = getLPCostForRawWill(rawWill); + + if (rawWill >= drain && currentEssence >= lpCost) + { + if (tile != null) + { + LazyOptional capability = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null); + if (capability.isPresent()) + { + IFluidHandler handler = capability.resolve().get(); + double filled = handler.fill(new FluidStack(Fluids.LAVA, 1000), FluidAction.EXECUTE); + + double ratio = filled / 1000; + + rawWill -= drain * ratio; + rawDrained += drain * ratio; + + currentEssence -= Math.ceil(lpCost * ratio); + lpDrain += Math.ceil(lpCost * ratio); + } + } + } + } + + double vengefulWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.VENGEFUL, willConfig); + double steadfastWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.STEADFAST, willConfig); + double corrosiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.CORROSIVE, willConfig); + + if (vengefulWill >= vengefulWillDrain) + { + double vengefulDrained = 0; + AreaDescriptor fuseRange = masterRitualStone.getBlockRange(FIRE_FUSE_RANGE); + + AxisAlignedBB fuseArea = fuseRange.getAABB(pos); + List entities = world.getEntitiesWithinAABB(LivingEntity.class, fuseArea); + + for (LivingEntity entity : entities) + { + if (vengefulWill < vengefulWillDrain) + { + break; + } + + if (entity instanceof PlayerEntity) + { + continue; + } + + if (!entity.isPotionActive(BloodMagicPotions.FIRE_FUSE)) + { + entity.addPotionEffect(new EffectInstance(BloodMagicPotions.FIRE_FUSE, 100, 0)); + + vengefulDrained += vengefulWillDrain; + vengefulWill -= vengefulWillDrain; + } + } + + if (vengefulDrained > 0) + { + WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.VENGEFUL, vengefulDrained, true); + } + } + + if (steadfastWill >= steadfastWillDrain) + { + double steadfastDrained = 0; + AreaDescriptor resistRange = masterRitualStone.getBlockRange(FIRE_RESIST_RANGE); + + int duration = getFireResistForWill(steadfastWill); + + AxisAlignedBB resistArea = resistRange.getAABB(pos); + List entities = world.getEntitiesWithinAABB(PlayerEntity.class, resistArea); + + for (PlayerEntity entity : entities) + { + if (steadfastWill < steadfastWillDrain) + { + break; + } + if (!entity.isPotionActive(Effects.FIRE_RESISTANCE) || (entity.getActivePotionEffect(Effects.FIRE_RESISTANCE).getDuration() < 2)) + { + entity.addPotionEffect(new EffectInstance(Effects.FIRE_RESISTANCE, 100, 0)); + + steadfastDrained += steadfastWillDrain; + steadfastWill -= steadfastWillDrain; + } + } + + if (steadfastDrained > 0) + { + WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.STEADFAST, steadfastDrained, true); + } + } + + if (timer % corrosiveRefreshTime == 0 && corrosiveWill >= corrosiveWillDrain) + { + double corrosiveDrained = 0; + AreaDescriptor resistRange = masterRitualStone.getBlockRange(FIRE_DAMAGE_RANGE); + + float damage = getCorrosiveDamageForWill(corrosiveWill); + + AxisAlignedBB damageArea = resistRange.getAABB(pos); + List entities = world.getEntitiesWithinAABB(LivingEntity.class, damageArea); + + for (LivingEntity entity : entities) + { + if (corrosiveWill < corrosiveWillDrain) + { + break; + } + + if (!entity.isAlive() && entity.hurtTime <= 0 && Utils.isImmuneToFireDamage(entity)) + { + if (entity.attackEntityFrom(DamageSourceBloodMagic.INSTANCE, damage)) + { + corrosiveDrained += corrosiveWillDrain; + corrosiveWill -= corrosiveWillDrain; + } + } + } + + if (corrosiveDrained > 0) + { + WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.CORROSIVE, corrosiveDrained, true); + } + } + + if (rawDrained > 0) + { + WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DEFAULT, rawDrained, true); + } + + masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(lpDrain)); + } + + @Override + public int getRefreshTime() + { + return 1; + } + + @Override + public int getRefreshCost() + { + return 500; + } + + @Override + public ITextComponent[] provideInformationOfRitualToPlayer(PlayerEntity player) + { + return new ITextComponent[] { new TranslationTextComponent(this.getTranslationKey() + ".info"), + new TranslationTextComponent(this.getTranslationKey() + ".default.info"), + new TranslationTextComponent(this.getTranslationKey() + ".corrosive.info"), + new TranslationTextComponent(this.getTranslationKey() + ".steadfast.info"), + new TranslationTextComponent(this.getTranslationKey() + ".destructive.info"), + new TranslationTextComponent(this.getTranslationKey() + ".vengeful.info") }; + } + + @Override + public void gatherComponents(Consumer components) + { + addParallelRunes(components, 1, 0, EnumRuneType.FIRE); + } + + @Override + public Ritual getNewCopy() + { + return new RitualLava(); + } + + @Override + public int getMaxVolumeForRange(String range, List activeTypes, DemonWillHolder holder) + { + if (LAVA_RANGE.equals(range) && activeTypes.contains(EnumDemonWillType.DESTRUCTIVE)) + { + double destructiveWill = holder.getWill(EnumDemonWillType.DESTRUCTIVE); + if (destructiveWill > 0) + { + return 9 + (int) Math.pow(destructiveWill / 10, 1.5); + } + } + + return volumeRangeMap.get(range); + } + + @Override + public int getMaxVerticalRadiusForRange(String range, List activeTypes, DemonWillHolder holder) + { + if (LAVA_RANGE.equals(range) && activeTypes.contains(EnumDemonWillType.DESTRUCTIVE)) + { + double destructiveWill = holder.getWill(EnumDemonWillType.DESTRUCTIVE); + if (destructiveWill > 0) + { + return (int) (3 + destructiveWill / 10d); + } + } + + return verticalRangeMap.get(range); + } + + @Override + public int getMaxHorizontalRadiusForRange(String range, List activeTypes, DemonWillHolder holder) + { + if (LAVA_RANGE.equals(range) && activeTypes.contains(EnumDemonWillType.DESTRUCTIVE)) + { + double destructiveWill = holder.getWill(EnumDemonWillType.DESTRUCTIVE); + if (destructiveWill > 0) + { + return (int) (3 + destructiveWill / 10d); + } + } + + return horizontalRangeMap.get(range); + } + + public int getFireResistForWill(double steadfastWill) + { + return (int) (200 + steadfastWill * 3); + } + + public float getCorrosiveDamageForWill(double corrosiveWill) + { + return (float) (1 + corrosiveWill * 0.05); + } + + public int getLPCostForRawWill(double raw) + { + return Math.max((int) (500 - raw), 0); + } + + public double getWillCostForRawWill(double raw) + { + return Math.min(1, raw / 500); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/types/RitualMagnetic.java b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualMagnetic.java new file mode 100644 index 00000000..16aab5ef --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualMagnetic.java @@ -0,0 +1,202 @@ +package wayoftime.bloodmagic.ritual.types; + +import java.util.function.Consumer; + +import com.mojang.authlib.GameProfile; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.common.Tags; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.common.util.FakePlayerFactory; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.ritual.IMasterRitualStone; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.ritual.RitualComponent; +import wayoftime.bloodmagic.ritual.RitualRegister; +import wayoftime.bloodmagic.util.Utils; + +@RitualRegister("magnetism") +public class RitualMagnetic extends Ritual +{ + public static final String PLACEMENT_RANGE = "placementRange"; + // public static final String SEARCH_RANGE = "searchRange"; + public BlockPos lastPos; // An offset + private FakePlayer fakePlayer; + + public RitualMagnetic() + { + super("ritualMagnetic", 0, 5000, "ritual." + BloodMagic.MODID + ".magneticRitual"); + addBlockRange(PLACEMENT_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-1, 1, -1), 3)); + setMaximumVolumeAndDistanceOfRange(PLACEMENT_RANGE, 50, 4, 4); + } + + @Override + public void performRitual(IMasterRitualStone masterRitualStone) + { + World world = masterRitualStone.getWorldObj(); + Vector3d MRSpos = new Vector3d(masterRitualStone.getBlockPos().getX(), masterRitualStone.getBlockPos().getY(), masterRitualStone.getBlockPos().getZ()); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); + + if (currentEssence < getRefreshCost()) + { + masterRitualStone.getOwnerNetwork().causeNausea(); + return; + } + + BlockPos pos = masterRitualStone.getBlockPos(); + + AreaDescriptor placementRange = masterRitualStone.getBlockRange(PLACEMENT_RANGE); + + BlockPos replacement = pos; + boolean replace = false; + + for (BlockPos offset : placementRange.getContainedPositions(pos)) + { + if (world.isAirBlock(offset)) + { + replacement = offset; + replace = true; + break; + } + } + + BlockState downState = world.getBlockState(pos.down()); + int radius = getRadius(downState.getBlock()); + + if (replace) + { + int j = -1; + int i = -radius; + int k = -radius; + + if (lastPos != null) + { + j = lastPos.getY(); + i = Math.min(radius, Math.max(-radius, lastPos.getX())); + k = Math.min(radius, Math.max(-radius, lastPos.getZ())); + } + + if (j + pos.getY() >= 0) + { + while (i <= radius) + { + while (k <= radius) + { + BlockPos newPos = pos.add(i, j, k); + Vector3d newPosVector = new Vector3d(newPos.getX(), newPos.getY(), newPos.getZ()); + BlockState state = world.getBlockState(newPos); +// RayTraceResult fakeRayTrace = world.rayTraceBlocks(MRSpos, newPosVector, false); +// ItemStack checkStack = state.getBlock().getPickBlock(state, fakeRayTrace, world, newPos, getFakePlayer((ServerWorld) world)); + ItemStack checkStack = new ItemStack(state.getBlock()); + if (isBlockOre(checkStack)) + { + Utils.swapLocations(world, newPos, world, replacement); + masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost())); + k++; + this.lastPos = new BlockPos(i, j, k); + return; + } else + { + k++; + } + } + i++; + k = -radius; + } + j--; + i = -radius; + this.lastPos = new BlockPos(i, j, k); + return; + } + + j = -1; + this.lastPos = new BlockPos(i, j, k); + } + + } + + public int getRadius(Block block) + { + if (block == Blocks.IRON_BLOCK) + { + return 7; + } + + if (block == Blocks.GOLD_BLOCK) + { + return 15; + } + + if (block == Blocks.DIAMOND_BLOCK) + { + return 31; + } + + return 3; + } + + @Override + public int getRefreshTime() + { + return 40; + } + + @Override + public int getRefreshCost() + { + return 50; + } + + @Override + public void gatherComponents(Consumer components) + { + addCornerRunes(components, 1, 0, EnumRuneType.EARTH); + addParallelRunes(components, 2, 1, EnumRuneType.EARTH); + addCornerRunes(components, 2, 1, EnumRuneType.AIR); + addParallelRunes(components, 2, 2, EnumRuneType.FIRE); + } + + @Override + public Ritual getNewCopy() + { + return new RitualMagnetic(); + } + + private FakePlayer getFakePlayer(ServerWorld world) + { + return fakePlayer == null + ? fakePlayer = FakePlayerFactory.get(world, new GameProfile(null, BloodMagic.MODID + "_ritual_magnetic")) + : fakePlayer; + } + + public static boolean isBlockOre(ItemStack stack) + { + if (stack.isEmpty()) + return false; + + return stack.getItem().isIn(Tags.Items.ORES); + +// for(ResourceLocation rl : stack.getItem().getTags()) +// { +// rl.getPath() +// } + +// for (int id : OreDictionary.getOreIDs(stack)) +// { +// String oreName = OreDictionary.getOreName(id); +// if (oreName.contains("ore")) +// return true; +// } + +// return false; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/types/RitualRegeneration.java b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualRegeneration.java new file mode 100644 index 00000000..d83cdb44 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualRegeneration.java @@ -0,0 +1,214 @@ +package wayoftime.bloodmagic.ritual.types; + +import java.util.Collections; +import java.util.List; +import java.util.function.Consumer; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.potion.EffectInstance; +import net.minecraft.potion.Effects; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.demonaura.WorldDemonWillHandler; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.ritual.IMasterRitualStone; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.ritual.RitualComponent; +import wayoftime.bloodmagic.ritual.RitualRegister; +import wayoftime.bloodmagic.util.DamageSourceBloodMagic; +import wayoftime.bloodmagic.util.Utils; + +@RitualRegister("regeneration") +public class RitualRegeneration extends Ritual +{ + public static final String HEAL_RANGE = "heal"; + public static final String VAMPIRE_RANGE = "vampire"; + + public static final int SACRIFICE_AMOUNT = 100; + + public static final double corrosiveWillDrain = 0.04; + + public RitualRegeneration() + { + super("ritualRegeneration", 0, 25000, "ritual." + BloodMagic.MODID + ".regenerationRitual"); + addBlockRange(HEAL_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-15, -15, -15), 31)); + addBlockRange(VAMPIRE_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-15, -15, -15), 31)); + + setMaximumVolumeAndDistanceOfRange(HEAL_RANGE, 0, 20, 20); + setMaximumVolumeAndDistanceOfRange(VAMPIRE_RANGE, 0, 20, 20); + } + + @Override + public void performRitual(IMasterRitualStone masterRitualStone) + { + World world = masterRitualStone.getWorldObj(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); + + if (currentEssence < getRefreshCost()) + { + masterRitualStone.getOwnerNetwork().causeNausea(); + return; + } + + BlockPos pos = masterRitualStone.getBlockPos(); + + int maxEffects = currentEssence / getRefreshCost(); + int totalEffects = 0; + + int totalCost = 0; + + List willConfig = masterRitualStone.getActiveWillConfig(); + + double rawWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DEFAULT, willConfig); + double steadfastWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.STEADFAST, willConfig); + double corrosiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.CORROSIVE, willConfig); + double destructiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DESTRUCTIVE, willConfig); + double vengefulWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.VENGEFUL, willConfig); + + double vengefulDrain = 0; + double steadfastDrain = 0; + double destructiveDrain = 0; + double corrosiveDrain = 0; + + boolean syphonHealth = corrosiveWill >= corrosiveWillDrain; + boolean applyAbsorption = false; + float absorptionRate = 1; + int maxAbsorption = 20; + + AreaDescriptor healArea = masterRitualStone.getBlockRange(HEAL_RANGE); + AxisAlignedBB healRange = healArea.getAABB(pos); + + AreaDescriptor damageArea = masterRitualStone.getBlockRange(VAMPIRE_RANGE); + AxisAlignedBB damageRange = damageArea.getAABB(pos); + + List entities = world.getEntitiesWithinAABB(LivingEntity.class, healRange); + List players = world.getEntitiesWithinAABB(PlayerEntity.class, healRange); + List damagedEntities = world.getEntitiesWithinAABB(LivingEntity.class, damageRange); + + if (syphonHealth) + { + for (PlayerEntity player : players) + { + if (player.getHealth() <= player.getMaxHealth() - 1) + { + float syphonedHealthAmount = getSyphonAmountForWill(corrosiveWill); + Collections.shuffle(damagedEntities); + for (LivingEntity damagedEntity : damagedEntities) + { + if (damagedEntity instanceof PlayerEntity) + { + continue; + } + + float currentHealth = damagedEntity.getHealth(); + + damagedEntity.attackEntityFrom(DamageSourceBloodMagic.INSTANCE, Math.min(player.getMaxHealth() - player.getHealth(), syphonedHealthAmount)); + + float healthDifference = currentHealth - damagedEntity.getHealth(); + if (healthDifference > 0) + { + corrosiveDrain += corrosiveWillDrain; + corrosiveWill -= corrosiveWillDrain; + player.heal(healthDifference); + } + + break; + } + } + } + } + + for (LivingEntity entity : entities) + { + float health = entity.getHealth(); + if (health <= entity.getMaxHealth() - 1) + { + if (entity.isPotionApplicable(new EffectInstance(Effects.REGENERATION))) + { + if (entity instanceof PlayerEntity) + { + totalCost += getRefreshCost(); + currentEssence -= getRefreshCost(); + } else + { + totalCost += getRefreshCost() / 10; + currentEssence -= getRefreshCost() / 10; + } + + entity.addPotionEffect(new EffectInstance(Effects.REGENERATION, 50, 0, false, false)); + + totalEffects++; + + if (totalEffects >= maxEffects) + { + break; + } + } + } + if (applyAbsorption && entity instanceof PlayerEntity) + { + if (applyAbsorption) + { + float added = Utils.addAbsorptionToMaximum(entity, absorptionRate, maxAbsorption, 1000); + } + } + } + + if (corrosiveDrain > 0) + { + WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.CORROSIVE, corrosiveDrain, true); + } + + masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(totalCost)); + } + + @Override + public int getRefreshTime() + { + return 50; + } + + @Override + public int getRefreshCost() + { + return SACRIFICE_AMOUNT; + } + + @Override + public void gatherComponents(Consumer components) + { + components.accept(new RitualComponent(new BlockPos(4, 0, 0), EnumRuneType.AIR)); + components.accept(new RitualComponent(new BlockPos(5, 0, -1), EnumRuneType.AIR)); + components.accept(new RitualComponent(new BlockPos(5, 0, 1), EnumRuneType.AIR)); + components.accept(new RitualComponent(new BlockPos(-4, 0, 0), EnumRuneType.AIR)); + components.accept(new RitualComponent(new BlockPos(-5, 0, -1), EnumRuneType.AIR)); + components.accept(new RitualComponent(new BlockPos(-5, 0, 1), EnumRuneType.AIR)); + components.accept(new RitualComponent(new BlockPos(0, 0, 4), EnumRuneType.FIRE)); + components.accept(new RitualComponent(new BlockPos(1, 0, 5), EnumRuneType.FIRE)); + components.accept(new RitualComponent(new BlockPos(-1, 0, 5), EnumRuneType.FIRE)); + components.accept(new RitualComponent(new BlockPos(0, 0, -4), EnumRuneType.FIRE)); + components.accept(new RitualComponent(new BlockPos(1, 0, -5), EnumRuneType.FIRE)); + components.accept(new RitualComponent(new BlockPos(-1, 0, -5), EnumRuneType.FIRE)); + addOffsetRunes(components, 3, 5, 0, EnumRuneType.WATER); + addCornerRunes(components, 3, 0, EnumRuneType.DUSK); + addOffsetRunes(components, 4, 5, 0, EnumRuneType.EARTH); + addOffsetRunes(components, 4, 5, -1, EnumRuneType.EARTH); + addCornerRunes(components, 5, 0, EnumRuneType.EARTH); + } + + @Override + public Ritual getNewCopy() + { + return new RitualRegeneration(); + } + + public float getSyphonAmountForWill(double corrosiveWill) + { + return 1; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/types/RitualUpgradeRemove.java b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualUpgradeRemove.java new file mode 100644 index 00000000..a0b15e0a --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualUpgradeRemove.java @@ -0,0 +1,170 @@ +package wayoftime.bloodmagic.ritual.types; + +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.function.Consumer; + +import net.minecraft.entity.EntityType; +import net.minecraft.entity.effect.LightningBoltEntity; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.core.living.ILivingContainer; +import wayoftime.bloodmagic.core.living.LivingStats; +import wayoftime.bloodmagic.core.living.LivingUpgrade; +import wayoftime.bloodmagic.core.living.LivingUtil; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.ritual.IMasterRitualStone; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.ritual.RitualComponent; +import wayoftime.bloodmagic.ritual.RitualRegister; + +@RitualRegister("upgrade_remove") +public class RitualUpgradeRemove extends Ritual +{ + public static final String CHECK_RANGE = "fillRange"; + + public RitualUpgradeRemove() + { + super("ritualUpgradeRemove", 0, 25000, "ritual." + BloodMagic.MODID + ".upgradeRemoveRitual"); + addBlockRange(CHECK_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1, 2, 1)); + } + + @Override + public void performRitual(IMasterRitualStone masterRitualStone) + { + World world = masterRitualStone.getWorldObj(); + + if (world.isRemote) + { + return; + } + + BlockPos pos = masterRitualStone.getBlockPos(); + + AreaDescriptor checkRange = masterRitualStone.getBlockRange(CHECK_RANGE); + + List playerList = world.getEntitiesWithinAABB(PlayerEntity.class, checkRange.getAABB(pos)); + + for (PlayerEntity player : playerList) + { + if (LivingUtil.hasFullSet(player)) + { + boolean removedUpgrade = false; + + ItemStack chestStack = player.getItemStackFromSlot(EquipmentSlotType.CHEST); + LivingStats stats = LivingStats.fromPlayer(player); + if (stats != null) + { + Map upgrades = stats.getUpgrades(); + + for (Entry entry : upgrades.entrySet()) + { + int exp = entry.getValue().intValue(); + LivingUpgrade upgrade = entry.getKey(); + int level = upgrade.getLevel(exp); + if (level >= 1) + { + ItemStack upgradeStack = new ItemStack(BloodMagicItems.LIVING_TOME.get()); +// int expForLevel = upgrade.getNextRequirement(upgrade.getLevel(exp) - 1); + ((ILivingContainer) BloodMagicItems.LIVING_TOME.get()).updateLivingStats(upgradeStack, new LivingStats().setMaxPoints(upgrade.getLevelCost(exp)).addExperience(upgrade.getKey(), exp)); + ItemEntity item = new ItemEntity(world, player.getPosX(), player.getPosY(), player.getPosZ(), upgradeStack); + world.addEntity(item); + removedUpgrade = true; + } + stats.resetExperience(upgrade.getKey()); + } + +// @SuppressWarnings("unchecked") +// HashMap upgradeMap = (HashMap) armour.upgradeMap.clone(); +// +// for (Entry entry : upgradeMap.entrySet()) +// { +// LivingArmourUpgrade upgrade = entry.getValue(); +// String upgradeKey = entry.getKey(); +// +// ItemStack upgradeStack = new ItemStack(RegistrarBloodMagicItems.UPGRADE_TOME); +// LivingUpgrades.setKey(upgradeStack, upgradeKey); +// LivingUpgrades.setLevel(upgradeStack, upgrade.getUpgradeLevel()); +// +// boolean successful = armour.removeUpgrade(player, upgrade); +// +// if (successful) +// { +// removedUpgrade = true; +// world.spawnEntity(new ItemEntity(world, player.posX, player.posY, player.posZ, upgradeStack)); +// for (Entry trackerEntry : armour.trackerMap.entrySet()) +// { +// StatTracker tracker = trackerEntry.getValue(); +// if (tracker != null) +// { +// if (tracker.providesUpgrade(upgradeKey)) +// { +// tracker.resetTracker(); // Resets the tracker if the upgrade corresponding to it +// // was removed. +// } +// } +// } +// } +// } + + if (removedUpgrade) + { + LivingStats.toPlayer(player, stats); + + masterRitualStone.setActive(false); + + LightningBoltEntity lightningboltentity = EntityType.LIGHTNING_BOLT.create(world); +// LightningBoltEntity lightning = new LightningBoltEntity(world, pos.getX() + dispX, pos.getY(), pos.getZ() + dispZ); + lightningboltentity.setPosition(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5); + lightningboltentity.setEffectOnly(true); + world.addEntity(lightningboltentity); + } + + } + } + } + } + + @Override + public int getRefreshTime() + { + return 1; + } + + @Override + public int getRefreshCost() + { + return 0; + } + + @Override + public void gatherComponents(Consumer components) + { + addCornerRunes(components, 1, 0, EnumRuneType.DUSK); + addCornerRunes(components, 2, 0, EnumRuneType.FIRE); + addOffsetRunes(components, 1, 2, 0, EnumRuneType.FIRE); + addCornerRunes(components, 1, 1, EnumRuneType.WATER); + addParallelRunes(components, 4, 0, EnumRuneType.EARTH); + addCornerRunes(components, 1, 3, EnumRuneType.WATER); + addParallelRunes(components, 1, 4, EnumRuneType.AIR); + + for (int i = 0; i < 4; i++) + { + addCornerRunes(components, 3, i, EnumRuneType.EARTH); + } + } + + @Override + public Ritual getNewCopy() + { + return new RitualUpgradeRemove(); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/ritual/types/RitualWater.java b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualWater.java new file mode 100644 index 00000000..aa7d230f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualWater.java @@ -0,0 +1,85 @@ +package wayoftime.bloodmagic.ritual.types; + +import java.util.function.Consumer; + +import net.minecraft.block.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.ritual.IMasterRitualStone; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.ritual.RitualComponent; +import wayoftime.bloodmagic.ritual.RitualRegister; + +@RitualRegister("water") +public class RitualWater extends Ritual +{ + public static final String WATER_RANGE = "waterRange"; + + public RitualWater() + { + super("ritualWater", 0, 500, "ritual." + BloodMagic.MODID + ".waterRitual"); + addBlockRange(WATER_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1)); + setMaximumVolumeAndDistanceOfRange(WATER_RANGE, 9, 3, 3); + } + + @Override + public void performRitual(IMasterRitualStone masterRitualStone) + { + World world = masterRitualStone.getWorldObj(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); + + if (currentEssence < getRefreshCost()) + { + masterRitualStone.getOwnerNetwork().causeNausea(); + return; + } + + int maxEffects = currentEssence / getRefreshCost(); + int totalEffects = 0; + + AreaDescriptor waterRange = masterRitualStone.getBlockRange(WATER_RANGE); + + for (BlockPos newPos : waterRange.getContainedPositions(masterRitualStone.getBlockPos())) + { + if (world.isAirBlock(newPos)) + { + world.setBlockState(newPos, Blocks.WATER.getDefaultState()); + totalEffects++; + } + + if (totalEffects >= maxEffects) + { + break; + } + } + + masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost() * totalEffects)); + } + + @Override + public int getRefreshTime() + { + return 1; + } + + @Override + public int getRefreshCost() + { + return 25; + } + + @Override + public void gatherComponents(Consumer components) + { + addCornerRunes(components, 1, 0, EnumRuneType.WATER); + } + + @Override + public Ritual getNewCopy() + { + return new RitualWater(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/ritual/types/RitualWellOfSuffering.java b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualWellOfSuffering.java new file mode 100644 index 00000000..e802b53b --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/ritual/types/RitualWellOfSuffering.java @@ -0,0 +1,157 @@ +package wayoftime.bloodmagic.ritual.types; + +import java.util.List; +import java.util.function.Consumer; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.impl.BloodMagicAPI; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.ritual.IMasterRitualStone; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.ritual.RitualComponent; +import wayoftime.bloodmagic.ritual.RitualManager; +import wayoftime.bloodmagic.ritual.RitualRegister; +import wayoftime.bloodmagic.tile.TileAltar; + +@RitualRegister("well_of_suffering") +public class RitualWellOfSuffering extends Ritual +{ + public static final String ALTAR_RANGE = "altar"; + public static final String DAMAGE_RANGE = "damage"; + + public static final int SACRIFICE_AMOUNT = 25; + + public BlockPos altarOffsetPos = new BlockPos(0, 0, 0); // TODO: Save! + + public RitualWellOfSuffering() + { + super("ritualWellOfSuffering", 0, 40000, "ritual." + BloodMagic.MODID + ".wellOfSufferingRitual"); + addBlockRange(ALTAR_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-5, -10, -5), 11, 21, 11)); + addBlockRange(DAMAGE_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-10, -10, -10), 21)); + + setMaximumVolumeAndDistanceOfRange(ALTAR_RANGE, 0, 10, 15); + setMaximumVolumeAndDistanceOfRange(DAMAGE_RANGE, 0, 15, 15); + } + + @Override + public void performRitual(IMasterRitualStone masterRitualStone) + { + World world = masterRitualStone.getWorldObj(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); + + if (currentEssence < getRefreshCost()) + { + masterRitualStone.getOwnerNetwork().causeNausea(); + return; + } + + BlockPos pos = masterRitualStone.getBlockPos(); + + int maxEffects = currentEssence / getRefreshCost(); + int totalEffects = 0; + + BlockPos altarPos = pos.add(altarOffsetPos); + + TileEntity tile = world.getTileEntity(altarPos); + + AreaDescriptor altarRange = masterRitualStone.getBlockRange(ALTAR_RANGE); + + if (!altarRange.isWithinArea(altarOffsetPos) || !(tile instanceof TileAltar)) + { + for (BlockPos newPos : altarRange.getContainedPositions(pos)) + { + TileEntity nextTile = world.getTileEntity(newPos); + if (nextTile instanceof TileAltar) + { + tile = nextTile; + altarOffsetPos = newPos.subtract(pos); + + altarRange.resetCache(); + break; + } + } + } + + if (tile instanceof TileAltar) + { + TileAltar tileAltar = (TileAltar) tile; + + AreaDescriptor damageRange = masterRitualStone.getBlockRange(DAMAGE_RANGE); + AxisAlignedBB range = damageRange.getAABB(pos); + + List entities = world.getEntitiesWithinAABB(LivingEntity.class, range); + + for (LivingEntity entity : entities) + { +// EntityEntry entityEntry = ForgeRegistries.ENTITIES.getKe; + ResourceLocation id = entity.getType().getRegistryName(); + + if (BloodMagicAPI.INSTANCE.getBlacklist().getSacrifice().contains(id)) + continue; + + int lifeEssenceRatio = BloodMagicAPI.INSTANCE.getValueManager().getSacrificial().getOrDefault(id, SACRIFICE_AMOUNT); + + if (lifeEssenceRatio <= 0) + continue; + + if (entity.isAlive() && !(entity instanceof PlayerEntity)) + { + if (entity.attackEntityFrom(RitualManager.RITUAL_DAMAGE, 1)) + { + if (entity.isChild()) + lifeEssenceRatio *= 0.5F; + + tileAltar.sacrificialDaggerCall(lifeEssenceRatio, true); + + totalEffects++; + + if (totalEffects >= maxEffects) + { + break; + } + } + } + } + } + + masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost() * totalEffects)); + } + + @Override + public int getRefreshTime() + { + return 25; + } + + @Override + public int getRefreshCost() + { + return 2; + } + + @Override + public void gatherComponents(Consumer components) + { + addCornerRunes(components, 1, 0, EnumRuneType.FIRE); + addCornerRunes(components, 2, -1, EnumRuneType.FIRE); + addParallelRunes(components, 2, -1, EnumRuneType.EARTH); + addCornerRunes(components, -3, -1, EnumRuneType.DUSK); + addOffsetRunes(components, 2, 4, -1, EnumRuneType.WATER); + addOffsetRunes(components, 1, 4, 0, EnumRuneType.WATER); + addParallelRunes(components, 4, 1, EnumRuneType.AIR); + } + + @Override + public Ritual getNewCopy() + { + return new RitualWellOfSuffering(); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/structures/Dungeon.java b/src/main/java/wayoftime/bloodmagic/structures/Dungeon.java new file mode 100644 index 00000000..f1cd36f9 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/structures/Dungeon.java @@ -0,0 +1,228 @@ +package wayoftime.bloodmagic.structures; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Random; + +import org.apache.commons.lang3.tuple.Pair; + +import net.minecraft.util.Direction; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.gen.feature.template.PlacementSettings; +import net.minecraft.world.server.ServerWorld; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.util.BMLog; + +public class Dungeon +{ + public static boolean placeStructureAtPosition(Random rand, ServerWorld world, BlockPos pos) + { + long startTime = System.nanoTime(); + + Map> availableDoorMap = new HashMap<>(); // Map of doors. The EnumFacing indicates + // what way this door faces. + List descriptorList = new ArrayList<>(); + Map> roomMap = new HashMap<>(); // Placement positions in terms +// // of actual positions + +// List>> roomList = new ArrayList<>(); + + PlacementSettings settings = new PlacementSettings(); + Mirror mir = Mirror.NONE; + + settings.setMirror(mir); + + Rotation rot = Rotation.NONE; + + settings.setRotation(rot); + settings.setIgnoreEntities(true); + settings.setChunk(null); + + settings.addProcessor(new StoneToOreProcessor(0.2f)); + +// settings.setReplacedBlock(null); + +// settings.setIgnoreStructureBlock(false); + settings.func_215223_c(true); + +// PlacementSettings placementsettings = (new PlacementSettings()).setMirror(this.mirror).setRotation(this.rotation).setIgnoreEntities(this.ignoreEntities).setChunk((ChunkPos)null); +// if (this.integrity < 1.0F) { +// placementsettings.clearProcessors().addProcessor(new IntegrityProcessor(MathHelper.clamp(this.integrity, 0.0F, 1.0F))).setRandom(func_214074_b(this.seed)); +// } +// +// BlockPos blockpos2 = blockpos.add(this.position); +// p_242689_3_.func_237144_a_(p_242689_1_, blockpos2, placementsettings, func_214074_b(this.seed)); + +// List rotationInfo = new ArrayList(); + +// int n = 1; + DungeonRoom room = getRandomRoom(rand); + roomMap.put(pos, Pair.of(room, settings.copy())); +// roomList.add(Pair.of(pos, Pair.of(room, settings.copy()))); + descriptorList.addAll(room.getAreaDescriptors(settings, pos)); + for (Direction facing : Direction.values()) + { + if (availableDoorMap.containsKey(facing)) + { + List doorList = availableDoorMap.get(facing); + doorList.addAll(room.getDoorOffsetsForFacing(settings, facing, pos)); + } else + { + List doorList = room.getDoorOffsetsForFacing(settings, facing, pos); + availableDoorMap.put(facing, doorList); + } + } + +// rotationInfo.add(settings.getRotation()); + + // Initial AreaDescriptors and door positions are initialized. Time for fun! + for (int i = 0; i < 100; i++) + { + // Get which facing of doors are available. + List facingList = new ArrayList<>(); + for (Entry> entry : availableDoorMap.entrySet()) + { + if (entry.getValue() != null && !entry.getValue().isEmpty()) + { + facingList.add(entry.getKey()); + } + } + + Collections.shuffle(facingList); // Shuffle the list so that it is random what is chosen + + Pair removedDoor1 = null; + Pair removedDoor2 = null; + BlockPos roomLocation = null; + + testDirection: for (Direction doorFacing : facingList) + { + Direction oppositeDoorFacing = doorFacing.getOpposite(); + List availableDoorList = availableDoorMap.get(doorFacing); // May need to copy here + Collections.shuffle(availableDoorList); + + Rotation randRotation = Rotation.values()[rand.nextInt(Rotation.values().length)]; +// Rotation randRotation = Rotation.CLOCKWISE_90; + settings.setRotation(randRotation); // Same for the Mirror + DungeonRoom testingRoom = getRandomRoom(rand); + + List otherDoorList = testingRoom.getDoorOffsetsForFacing(settings, oppositeDoorFacing, BlockPos.ZERO); + if (otherDoorList != null && !otherDoorList.isEmpty()) + { + // See if one of these doors works. + Collections.shuffle(otherDoorList); + BlockPos testDoor = otherDoorList.get(0); + testDoor: for (BlockPos availableDoor : availableDoorList) + { + // TODO: Test if it fits, then add the doors to the list. + roomLocation = availableDoor.subtract(testDoor).add(doorFacing.getDirectionVec()); + + List descriptors = testingRoom.getAreaDescriptors(settings, roomLocation); + for (AreaDescriptor testDesc : descriptors) + { + for (AreaDescriptor currentDesc : descriptorList) + { + if (testDesc.intersects(currentDesc)) + { + break testDoor; + } + } + } + + roomMap.put(roomLocation, Pair.of(testingRoom, settings.copy())); +// roomList.add(Pair.of(roomLocation, Pair.of(testingRoom, settings.copy()))); + descriptorList.addAll(descriptors); + removedDoor1 = Pair.of(doorFacing, availableDoor); + removedDoor2 = Pair.of(oppositeDoorFacing, testDoor.add(roomLocation)); + + room = testingRoom; +// n++; +// rotationInfo.add(randRotation); +// System.out.println("Placement: " + n); +// +// for (Direction facing : Direction.values()) +// { +// List testingDoorList = testingRoom.getDoorOffsetsForFacing(settings, facing, BlockPos.ZERO); +// System.out.println("Door Facing: " + facing + ", Door List: " + testingDoorList); +// } + + break testDirection; + } + + break; + } + +// Collections.shuffle(otherDoorList); + } + + if (removedDoor1 != null) + { + for (Direction facing : Direction.values()) + { + if (availableDoorMap.containsKey(facing)) + { + List doorList = availableDoorMap.get(facing); + doorList.addAll(room.getDoorOffsetsForFacing(settings, facing, roomLocation)); + } else + { + List doorList = room.getDoorOffsetsForFacing(settings, facing, roomLocation); + availableDoorMap.put(facing, doorList); + } + } + + Direction face = removedDoor1.getKey(); + if (availableDoorMap.containsKey(face)) + { + availableDoorMap.get(face).remove(removedDoor1.getRight()); + } + } + + if (removedDoor2 != null) + { + Direction face = removedDoor2.getKey(); + if (availableDoorMap.containsKey(face)) + { + availableDoorMap.get(face).remove(removedDoor2.getRight()); + } + } + } + + long endTime = System.nanoTime(); + + long duration = (endTime - startTime); // divide by 1000000 to get milliseconds. + BMLog.DEBUG.info("Duration: " + duration + "(ns), " + duration / 1000000 + "(ms)"); + + // Building what I've got +// n = 0; + for (Entry> entry : roomMap.entrySet()) +// for (Pair> entry : roomList) + { +// n++; + BlockPos placementPos = entry.getKey(); + DungeonRoom placedRoom = entry.getValue().getKey(); + PlacementSettings placementSettings = entry.getValue().getValue(); + + placedRoom.placeStructureAtPosition(rand, placementSettings, world, placementPos); + +// world.setBlockState(placementPos, Blocks.REDSTONE_BLOCK.getDefaultState(), 3); +// System.out.println("Supposed Rotation for " + n + ": " + rotationInfo.get(n - 1)); +// System.out.println("Placement: " + n + ", BlockPos: " + placementPos + ", Rotation: " + placementSettings.getRotation()); + } + +// System.out.println(roomMap.size()); +// System.out.println(roomList.size()); + + return false; + } + + public static DungeonRoom getRandomRoom(Random rand) + { +// System.out.println("Dungeon size: " + DungeonRoomRegistry.dungeonWeightMap.size()); + return DungeonRoomRegistry.getRandomDungeonRoom(rand); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/structures/DungeonRoom.java b/src/main/java/wayoftime/bloodmagic/structures/DungeonRoom.java new file mode 100644 index 00000000..9e2dc086 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/structures/DungeonRoom.java @@ -0,0 +1,78 @@ +package wayoftime.bloodmagic.structures; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Random; + +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.gen.feature.template.PlacementSettings; +import net.minecraft.world.gen.feature.template.Template; +import net.minecraft.world.server.ServerWorld; +import wayoftime.bloodmagic.ritual.AreaDescriptor; + +public class DungeonRoom +{ + public int dungeonWeight = 1; + public Map structureMap = new HashMap<>(); + + public Map> doorMap = new HashMap<>(); // Map of doors. The EnumFacing indicates what way + // this door faces. + public List descriptorList = new ArrayList<>(); + + public DungeonRoom(Map structureMap, Map> doorMap, List descriptorList) + { + this.structureMap = structureMap; + this.doorMap = doorMap; + this.descriptorList = descriptorList; + } + + public List getAreaDescriptors(PlacementSettings settings, BlockPos offset) + { + List newList = new ArrayList<>(); + + for (AreaDescriptor desc : descriptorList) + { + newList.add(desc.rotateDescriptor(settings).offset(offset)); + } + + return newList; + } + + public List getDoorOffsetsForFacing(PlacementSettings settings, Direction facing, BlockPos offset) + { + List offsetList = new ArrayList<>(); + +// Direction originalFacing = DungeonUtil.rotate(settings.getMirror(), settings.getRotation(), facing); + Direction originalFacing = DungeonUtil.reverseRotate(settings.getMirror(), settings.getRotation(), facing); +// Direction originalFacing = facing; + if (doorMap.containsKey(originalFacing)) + { + List doorList = doorMap.get(originalFacing); + for (BlockPos doorPos : doorList) + { + offsetList.add(Template.transformedBlockPos(settings, doorPos).add(offset)); + } + } + + return offsetList; + } + + public boolean placeStructureAtPosition(Random rand, PlacementSettings settings, ServerWorld world, BlockPos pos) + { + for (Entry entry : structureMap.entrySet()) + { + ResourceLocation location = new ResourceLocation(entry.getKey()); + DungeonStructure structure = new DungeonStructure(location); + BlockPos offsetPos = Template.transformedBlockPos(settings, entry.getValue()); + + structure.placeStructureAtPosition(rand, settings, world, pos.add(offsetPos)); + } + + return true; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/structures/DungeonRoomLoader.java b/src/main/java/wayoftime/bloodmagic/structures/DungeonRoomLoader.java new file mode 100644 index 00000000..9eabeb69 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/structures/DungeonRoomLoader.java @@ -0,0 +1,102 @@ +package wayoftime.bloodmagic.structures; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.Writer; +import java.net.URL; +import java.util.List; +import java.util.Random; + +import org.apache.commons.io.IOUtils; + +import com.google.common.base.Charsets; +import com.google.common.io.Resources; +import com.google.common.reflect.TypeToken; + +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.gson.Serializers; + +public class DungeonRoomLoader +{ + public static void saveDungeons() + { + for (DungeonRoom room : DungeonRoomRegistry.dungeonWeightMap.keySet()) + { + saveSingleDungeon(room); + } + } + + public static void saveSingleDungeon(DungeonRoom room) + { + String json = Serializers.GSON.toJson(room); + + Writer writer; + try + { + File file = new File("config/BloodMagic/schematics"); + file.mkdirs(); + + writer = new FileWriter("config/BloodMagic/schematics/" + new Random().nextInt() + ".json"); + writer.write(json); + writer.close(); + } catch (IOException e) + { + e.printStackTrace(); + } + } + + public static void loadDungeons() + { + try + { +// System.out.println("LOADING DEMON DUNGEONS"); + + URL schematicURL = DungeonRoomLoader.class.getResource(resLocToResourcePath(new ResourceLocation("bloodmagic:schematics"))); + List schematics = Serializers.GSON.fromJson(Resources.toString(schematicURL, Charsets.UTF_8), new TypeToken>() + { + }.getType()); + for (String schematicKey : schematics) + { + ResourceLocation schematic = new ResourceLocation(schematicKey); + URL dungeonURL = DungeonRoomLoader.class.getResource(resLocToResourcePath(schematic)); + DungeonRoom dungeonRoom = Serializers.GSON.fromJson(Resources.toString(dungeonURL, Charsets.UTF_8), DungeonRoom.class); + DungeonRoomRegistry.registerDungeonRoom(dungeonRoom, Math.max(1, dungeonRoom.dungeonWeight)); + } + + System.out.println("# schematics: " + schematics.size()); + + } catch (Exception e) + { + e.printStackTrace(); + } + } + + public static void test() + { + ResourceLocation id = new ResourceLocation(BloodMagic.MODID, "testGson"); + String s = id.getNamespace(); + String s1 = id.getPath(); + InputStream inputstream = null; + + try + { + inputstream = DungeonRoomLoader.class.getResourceAsStream("/assets/" + s + "/schematics/" + s1 + ".nbt"); +// this.readTemplateFromStream(s1, inputstream); + return; + } catch (Throwable var10) + { + + } finally + { + IOUtils.closeQuietly(inputstream); + } + } + + public static String resLocToResourcePath(ResourceLocation resourceLocation) + { + return "/assets/" + resourceLocation.getNamespace() + "/schematics/" + resourceLocation.getPath() + ".json"; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/structures/DungeonRoomRegistry.java b/src/main/java/wayoftime/bloodmagic/structures/DungeonRoomRegistry.java new file mode 100644 index 00000000..4a8f46f2 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/structures/DungeonRoomRegistry.java @@ -0,0 +1,33 @@ +package wayoftime.bloodmagic.structures; + +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Random; + +public class DungeonRoomRegistry +{ + public static Map dungeonWeightMap = new HashMap<>(); + private static int totalWeight = 0; + + public static void registerDungeonRoom(DungeonRoom room, int weight) + { + dungeonWeightMap.put(room, weight); + totalWeight += weight; + } + + public static DungeonRoom getRandomDungeonRoom(Random rand) + { + int wantedWeight = rand.nextInt(totalWeight); + for (Entry entry : dungeonWeightMap.entrySet()) + { + wantedWeight -= entry.getValue(); + if (wantedWeight < 0) + { + return entry.getKey(); + } + } + + return null; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/structures/DungeonStructure.java b/src/main/java/wayoftime/bloodmagic/structures/DungeonStructure.java new file mode 100644 index 00000000..4ecb12d4 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/structures/DungeonStructure.java @@ -0,0 +1,55 @@ +package wayoftime.bloodmagic.structures; + +import java.util.Random; + +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.gen.feature.template.PlacementSettings; +import net.minecraft.world.gen.feature.template.Template; +import net.minecraft.world.gen.feature.template.TemplateManager; +import net.minecraft.world.server.ServerWorld; +import wayoftime.bloodmagic.util.BMLog; + +public class DungeonStructure +{ + public ResourceLocation resource; + + public DungeonStructure(ResourceLocation resource) + { + this.resource = resource; + } + + public boolean placeStructureAtPosition(Random rand, PlacementSettings settings, ServerWorld world, BlockPos pos) + { + if (pos == null) + return false; + + MinecraftServer minecraftserver = world.getServer(); + TemplateManager templatemanager = world.getStructureTemplateManager(); + + Template template = templatemanager.getTemplate(resource); + + if (template == null) + { + System.out.println("Invalid template for location: " + resource); + BMLog.DEBUG.warn("Invalid template for location: " + resource); + return false; + } + +// settings.func_189946_a(MathHelper.clamp_float(schema.integrity, 0.0F, 1.0F)); + + BlockPos offset = Template.transformedBlockPos(settings, new BlockPos(0, 0, 0)); + BlockPos finalPos = pos.add(offset); +// template.addBlocksToWorldChunk(world, finalPos, settings); + template.func_237144_a_(world, finalPos, settings, rand); +// template.func_237152_b_(world, finalPos, settings, rand); + + return true; + } + + public DungeonStructure copy() + { + return new DungeonStructure(resource); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/structures/DungeonTester.java b/src/main/java/wayoftime/bloodmagic/structures/DungeonTester.java new file mode 100644 index 00000000..dafa1a15 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/structures/DungeonTester.java @@ -0,0 +1,95 @@ +package wayoftime.bloodmagic.structures; + +import java.util.Random; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.server.ServerWorld; + +public class DungeonTester +{ + public static void testDungeonGeneration(ServerWorld world, BlockPos pos) + { + + } + + public static void testDungeonElementWithOutput(ServerWorld world, BlockPos pos) + { + Dungeon.placeStructureAtPosition(new Random(), world, pos); +// ResourceLocation resource = new ResourceLocation(BloodMagic.MODID, "t_corridor"); +// +//// DungeonStructure structure = new DungeonStructure(resource); +//// Map structureMap = new HashMap(); +//// structureMap.put(structure, new BlockPos(0, 0, 0)); +// +// Map structureMap = new HashMap(); +// structureMap.put(resource.toString(), BlockPos.ZERO); +// +//// Map> doorMap = new HashMap>(); +//// List descriptorList = new ArrayList(); +//// descriptorList.add(new AreaDescriptor.Rectangle(new BlockPos(0, 0, 0), 11, 5, 8)); +//// +//// DungeonUtil.addRoom(doorMap, Direction.NORTH, new BlockPos(5, 0, 0)); +//// DungeonUtil.addRoom(doorMap, Direction.EAST, new BlockPos(10, 0, 5)); +//// DungeonUtil.addRoom(doorMap, Direction.WEST, new BlockPos(0, 0, 5)); +//// +//// DungeonRoom room = new DungeonRoom(structureMap, doorMap, descriptorList); +// +// DungeonRoom room = Dungeon.getRandomRoom(new Random()); +// +// PlacementSettings settings = new PlacementSettings(); +// +// Mirror mir = Mirror.NONE; +// settings.setMirror(mir); +// +// net.minecraft.util.Rotation rot = Rotation.NONE; +// settings.setRotation(rot); +// +// settings.setIgnoreEntities(true); +// settings.setChunk((ChunkPos) null); +// settings.func_215223_c(true); +//// settings.setReplacedBlock((Block) null); +//// settings.setIgnoreStructureBlock(false); +// +// int i = 0; +// +// for (Mirror mirror : Mirror.values()) +// { +// System.out.print("Mirror: " + mirror + '\n'); +// int j = 0; +// for (Rotation rotation : Rotation.values()) +// { +// System.out.print("Rotation: " + rotation + '\n'); +// settings.setRotation(rotation); +// settings.setMirror(mirror); +// +// BlockPos offsetPos = pos.add(i * 32, 0, j * 32); +// room.placeStructureAtPosition(new Random(), settings, world, offsetPos); +// +// world.setBlockState(offsetPos, Blocks.REDSTONE_BLOCK.getDefaultState(), 3); +// +//// List descriptors = room.getAreaDescriptors(settings, offsetPos); +//// for (AreaDescriptor desc : descriptors) +//// { +//// List posList = desc.getContainedPositions(new BlockPos(0, 0, 0)); +//// for (BlockPos placePos : posList) +//// { +//// world.setBlockState(placePos, Blocks.REDSTONE_BLOCK.getDefaultState()); +//// } +//// } +// +//// for (Direction facing : Direction.HORIZONTALS) +// for (int k = 0; k < 4; k++) +// { +// Direction facing = Direction.byHorizontalIndex(k); +// List doorList = room.getDoorOffsetsForFacing(settings, facing, offsetPos); +// for (BlockPos doorPos : doorList) +// { +// System.out.print("Door at " + doorPos + " facing " + facing + '\n'); +// } +// } +// j++; +// } +// i++; +// } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/structures/DungeonUtil.java b/src/main/java/wayoftime/bloodmagic/structures/DungeonUtil.java new file mode 100644 index 00000000..e302e03d --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/structures/DungeonUtil.java @@ -0,0 +1,55 @@ +package wayoftime.bloodmagic.structures; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import net.minecraft.util.Direction; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.gen.feature.template.PlacementSettings; + +public class DungeonUtil +{ + public static Direction rotate(Mirror mirror, Rotation rotation, Direction original) + { + return rotation.rotate(mirror.mirror(original)); + } + + public static Direction reverseRotate(Mirror mirror, Rotation rotation, Direction original) + { + return mirror.mirror(getOppositeRotation(rotation).rotate(original)); + } + + public static Direction getFacingForSettings(PlacementSettings settings, Direction original) + { + return rotate(settings.getMirror(), settings.getRotation(), original); + } + + public static Rotation getOppositeRotation(Rotation rotation) + { + switch (rotation) + { + case CLOCKWISE_90: + return Rotation.COUNTERCLOCKWISE_90; + case COUNTERCLOCKWISE_90: + return Rotation.CLOCKWISE_90; + default: + return rotation; + } + } + + public static void addRoom(Map> doorMap, Direction facing, BlockPos offsetPos) + { + if (doorMap.containsKey(facing)) + { + doorMap.get(facing).add(offsetPos); + } else + { + List doorList = new ArrayList<>(); + doorList.add(offsetPos); + doorMap.put(facing, doorList); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/structures/ItemDungeonTester.java b/src/main/java/wayoftime/bloodmagic/structures/ItemDungeonTester.java new file mode 100644 index 00000000..d5527888 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/structures/ItemDungeonTester.java @@ -0,0 +1,29 @@ +package wayoftime.bloodmagic.structures; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import wayoftime.bloodmagic.BloodMagic; + +public class ItemDungeonTester extends Item +{ + public ItemDungeonTester() + { + super(new Item.Properties().maxStackSize(1).group(BloodMagic.TAB)); + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) + { + if (!world.isRemote && world instanceof ServerWorld) + { + System.out.println("Test"); + DungeonTester.testDungeonElementWithOutput((ServerWorld) world, player.getPosition()); + } + return super.onItemRightClick(world, player, hand); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/structures/ModDungeons.java b/src/main/java/wayoftime/bloodmagic/structures/ModDungeons.java new file mode 100644 index 00000000..6c066b6e --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/structures/ModDungeons.java @@ -0,0 +1,28 @@ +package wayoftime.bloodmagic.structures; + +public class ModDungeons +{ + public static void init() + { +// ResourceLocation resource = new ResourceLocation(Constants.Mod.MODID, "HallChest1"); +// +// Map structureMap = new HashMap(); +// structureMap.put(resource.toString(), new BlockPos(0, 0, 0)); +// +// Map> doorMap = new HashMap>(); +// List descriptorList = new ArrayList(); +// descriptorList.add(new AreaDescriptor.Rectangle(new BlockPos(0, 0, 0), 12, 5, 9)); +// +// DungeonUtil.addRoom(doorMap, EnumFacing.EAST, new BlockPos(11, 0, 4)); +// DungeonUtil.addRoom(doorMap, EnumFacing.WEST, new BlockPos(0, 0, 4)); +// +// DungeonRoom room = new DungeonRoom(structureMap, doorMap, descriptorList); +// DungeonRoomLoader.saveSingleDungeon(room); +// +// DungeonRoomRegistry.registerDungeonRoom(room, 1); +// +// DungeonRoomLoader.saveDungeons(); + + DungeonRoomLoader.loadDungeons(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/structures/StoneToOreProcessor.java b/src/main/java/wayoftime/bloodmagic/structures/StoneToOreProcessor.java new file mode 100644 index 00000000..e4d325d6 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/structures/StoneToOreProcessor.java @@ -0,0 +1,46 @@ +package wayoftime.bloodmagic.structures; + +import java.util.Random; + +import javax.annotation.Nullable; + +import com.mojang.serialization.Codec; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.gen.feature.template.IStructureProcessorType; +import net.minecraft.world.gen.feature.template.PlacementSettings; +import net.minecraft.world.gen.feature.template.StructureProcessor; +import net.minecraft.world.gen.feature.template.Template; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; + +public class StoneToOreProcessor extends StructureProcessor +{ + public static final Codec field_237077_a_ = Codec.FLOAT.fieldOf("integrity").orElse(1.0F).xmap(StoneToOreProcessor::new, (p_237078_0_) -> { + return p_237078_0_.integrity; + }).codec(); + private final float integrity; + + public StoneToOreProcessor(float integrity) + { + this.integrity = integrity; + } + + @Nullable + public Template.BlockInfo func_230386_a_(IWorldReader p_230386_1_, BlockPos p_230386_2_, BlockPos p_230386_3_, Template.BlockInfo p_230386_4_, Template.BlockInfo p_230386_5_, PlacementSettings p_230386_6_) + { + if (p_230386_5_.state.getBlock() != BloodMagicBlocks.DUNGEON_STONE.get()) + { + return p_230386_5_; + } + Random random = p_230386_6_.getRandom(p_230386_5_.pos); + return !(this.integrity >= 1.0F) && !(random.nextFloat() <= this.integrity) + ? new Template.BlockInfo(p_230386_5_.pos, BloodMagicBlocks.DUNGEON_ORE.get().getDefaultState(), p_230386_5_.nbt) + : p_230386_5_; + } + + protected IStructureProcessorType getType() + { + return IStructureProcessorType.BLOCK_ROT; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/tile/TileAlchemicalReactionChamber.java b/src/main/java/wayoftime/bloodmagic/tile/TileAlchemicalReactionChamber.java new file mode 100644 index 00000000..2196d608 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/TileAlchemicalReactionChamber.java @@ -0,0 +1,510 @@ +package wayoftime.bloodmagic.tile; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipe; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.ITickableTileEntity; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidAttributes; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidUtil; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; +import net.minecraftforge.fluids.capability.templates.FluidTank; +import net.minecraftforge.items.ItemHandlerHelper; +import net.minecraftforge.registries.ObjectHolder; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.recipe.helper.FluidStackIngredient; +import wayoftime.bloodmagic.impl.BloodMagicAPI; +import wayoftime.bloodmagic.recipe.RecipeARC; +import wayoftime.bloodmagic.common.item.arc.IARCTool; +import wayoftime.bloodmagic.common.item.inventory.InventoryWrapper; +import wayoftime.bloodmagic.common.tags.BloodMagicTags; +import wayoftime.bloodmagic.network.ARCTanksPacket; +import wayoftime.bloodmagic.tile.container.ContainerAlchemicalReactionChamber; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.MultiSlotItemHandler; + +public class TileAlchemicalReactionChamber extends TileInventory implements ITickableTileEntity, INamedContainerProvider, ISidedInventory, IFluidHandler +{ + @ObjectHolder("bloodmagic:alchemicalreactionchamber") + public static TileEntityType TYPE; + + public static final int ARC_TOOL_SLOT = 0; + public static final int OUTPUT_SLOT = 1; + public static final int NUM_OUTPUTS = 5; + public static final int INPUT_SLOT = 6; + public static final int INPUT_BUCKET_SLOT = 7; + public static final int OUTPUT_BUCKET_SLOT = 8; + + public FluidTank inputTank = new FluidTank(FluidAttributes.BUCKET_VOLUME * 20); + public FluidTank outputTank = new FluidTank(FluidAttributes.BUCKET_VOLUME * 20); + + public double currentProgress = 0; + public static final double DEFAULT_SPEED = 0.005; + + public TileAlchemicalReactionChamber(TileEntityType type) + { + super(type, 9, "alchemicalreactionchamber"); + } + + public TileAlchemicalReactionChamber() + { + this(TYPE); + } + + @Override + public void deserialize(CompoundNBT tag) + { + super.deserialize(tag); + + currentProgress = tag.getDouble(Constants.NBT.ARC_PROGRESS); + + CompoundNBT inputTankTag = tag.getCompound("inputtank"); + inputTank.readFromNBT(inputTankTag); + + CompoundNBT outputTankTag = tag.getCompound("outputtank"); + outputTank.readFromNBT(outputTankTag); + } + + @Override + public CompoundNBT serialize(CompoundNBT tag) + { + super.serialize(tag); + + tag.putDouble(Constants.NBT.ARC_PROGRESS, currentProgress); + + CompoundNBT inputTankTag = new CompoundNBT(); + inputTank.writeToNBT(inputTankTag); + tag.put("inputtank", inputTankTag); + + CompoundNBT outputTankTag = new CompoundNBT(); + outputTank.writeToNBT(outputTankTag); + tag.put("outputtank", outputTankTag); + + return tag; + } + + @Override + public void tick() + { +// if (world.isRemote) +// { +// return; +// } + +// if (world.getGameTime() % 20 == 0) +// { +// outputTank.fill(new FluidStack(Fluids.WATER, 100), FluidAction.EXECUTE); +// } + + boolean outputChanged = false; + + ItemStack fullBucketStack = this.getStackInSlot(INPUT_BUCKET_SLOT); + ItemStack emptyBucketStack = this.getStackInSlot(OUTPUT_BUCKET_SLOT); + + ItemStack[] outputInventory = new ItemStack[] { getStackInSlot(1), getStackInSlot(2), getStackInSlot(3), + getStackInSlot(4), getStackInSlot(5) }; + + MultiSlotItemHandler outputSlotHandler = new MultiSlotItemHandler(outputInventory, 64); + + if (!world.isRemote) + { + if (!fullBucketStack.isEmpty() && inputTank.getSpace() >= 1000) + { + ItemStack testFullBucketStack = ItemHandlerHelper.copyStackWithSize(fullBucketStack, 1); + LazyOptional fluidHandlerWrapper = FluidUtil.getFluidHandler(testFullBucketStack); + if (fluidHandlerWrapper.isPresent()) + { + IFluidHandlerItem fluidHandler = fluidHandlerWrapper.resolve().get(); + FluidStack transferedStack = FluidUtil.tryFluidTransfer(inputTank, fluidHandler, 1000, false); + if (!transferedStack.isEmpty()) + { + fluidHandler.drain(transferedStack, FluidAction.EXECUTE); + List arrayList = new ArrayList<>(); + arrayList.add(fluidHandler.getContainer()); + if (outputSlotHandler.canTransferAllItemsToSlots(arrayList, true)) + { + outputChanged = true; + inputTank.fill(transferedStack, FluidAction.EXECUTE); + outputSlotHandler.canTransferAllItemsToSlots(arrayList, false); + if (fullBucketStack.getCount() > 1) + { + fullBucketStack.setCount(fullBucketStack.getCount() - 1); + } else + { + setInventorySlotContents(INPUT_BUCKET_SLOT, ItemStack.EMPTY); + } + } + } + } + } + + if (!emptyBucketStack.isEmpty() && outputTank.getFluidAmount() >= 1000) + { + ItemStack testEmptyBucketStack = ItemHandlerHelper.copyStackWithSize(emptyBucketStack, 1); + LazyOptional fluidHandlerWrapper = FluidUtil.getFluidHandler(testEmptyBucketStack); + if (fluidHandlerWrapper.isPresent()) + { + IFluidHandlerItem fluidHandler = fluidHandlerWrapper.resolve().get(); + FluidStack transferedStack = FluidUtil.tryFluidTransfer(fluidHandler, outputTank, 1000, false); + if (!transferedStack.isEmpty()) + { + fluidHandler.fill(transferedStack, FluidAction.EXECUTE); + List arrayList = new ArrayList<>(); + arrayList.add(fluidHandler.getContainer()); + if (outputSlotHandler.canTransferAllItemsToSlots(arrayList, true)) + { + outputChanged = true; + outputTank.drain(transferedStack, FluidAction.EXECUTE); + outputSlotHandler.canTransferAllItemsToSlots(arrayList, false); + if (emptyBucketStack.getCount() > 1) + { + emptyBucketStack.setCount(emptyBucketStack.getCount() - 1); + } else + { + setInventorySlotContents(OUTPUT_BUCKET_SLOT, ItemStack.EMPTY); + } + } + } + } + } + } + + ItemStack inputStack = this.getStackInSlot(INPUT_SLOT); + ItemStack toolStack = this.getStackInSlot(ARC_TOOL_SLOT); + + double craftingMultiplier = 1; + if (toolStack.getItem() instanceof IARCTool) + { + craftingMultiplier = ((IARCTool) toolStack.getItem()).getCraftingSpeedMultiplier(toolStack); + } + + RecipeARC recipe = BloodMagicAPI.INSTANCE.getRecipeRegistrar().getARC(world, inputStack, toolStack, inputTank.getFluid()); + if (canCraft(recipe, outputSlotHandler)) + { + // We have enough fluid (if applicable) and the theoretical outputs can fit. + currentProgress += craftingMultiplier * DEFAULT_SPEED; + if (currentProgress >= 1) + { + if (!world.isRemote) + { + outputChanged = true; + craftItem(recipe, outputSlotHandler); + } + + currentProgress = 0; + } + } else + { + if (toolStack.getItem().isIn(BloodMagicTags.ARC_TOOL_FURNACE)) + { + InventoryWrapper invWrapper = new InventoryWrapper(1); + invWrapper.setInventorySlotContents(0, inputStack.copy()); +// ItemStack[] outputInventory = new ItemStack[] +// { input }; + +// MultiSlotItemHandler outputSlotHandler = new MultiSlotItemHandler(outputInventory, 64); + Optional furnaceRecipe = world.getRecipeManager().getRecipe(IRecipeType.SMELTING, invWrapper, world); + if (furnaceRecipe.isPresent()) + { + ItemStack outputStack = furnaceRecipe.get().getCraftingResult(invWrapper); + if (canCraftFurnace(outputStack, outputSlotHandler)) + { + currentProgress += craftingMultiplier * DEFAULT_SPEED; + if (currentProgress >= 1) + { + if (!world.isRemote) + { + craftFurnace(outputStack, outputSlotHandler); + outputChanged = true; + } + + currentProgress = 0; + } + } + } else + { + currentProgress = 0; + } + } else + { + currentProgress = 0; + } + } + + if (outputChanged && !world.isRemote) + { + for (int i = 0; i < NUM_OUTPUTS; i++) + { + this.setInventorySlotContents(OUTPUT_SLOT + i, outputSlotHandler.getStackInSlot(i)); + } + } + +// FluidUtil.tryEmptyContainer(container, fluidDestination, maxAmount, player, doDrain) + } + + private boolean canCraft(RecipeARC recipe, MultiSlotItemHandler outputSlotHandler) + { + if (recipe == null) + return false; + + FluidStackIngredient inputFluidIngredient = recipe.getFluidIngredient(); + if (inputFluidIngredient != null && !inputFluidIngredient.test(inputTank.getFluid())) + { + return false; + } + + if (outputSlotHandler.canTransferAllItemsToSlots(recipe.getAllListedOutputs(), true)) + { + FluidStack outputStack = recipe.getFluidOutput(); + return outputStack.isEmpty() ? true + : outputTank.fill(outputStack, FluidAction.SIMULATE) >= outputStack.getAmount(); + } + + return false; + } + + private void craftItem(RecipeARC recipe, MultiSlotItemHandler outputSlotHandler) + { + if (this.canCraft(recipe, outputSlotHandler)) + { + if (recipe.getFluidIngredient() != null) + { + FluidStack inputStack = recipe.getFluidIngredient().getMatchingInstance(inputTank.getFluid()); + inputTank.drain(inputStack, FluidAction.EXECUTE); + } + + outputSlotHandler.canTransferAllItemsToSlots(recipe.getAllOutputs(world.rand), false); + outputTank.fill(recipe.getFluidOutput().copy(), FluidAction.EXECUTE); + consumeInventory(recipe.getConsumeIngredient()); + } + } + + private boolean canCraftFurnace(ItemStack outputStack, MultiSlotItemHandler outputSlotHandler) + { + List outputList = new ArrayList<>(); + outputList.add(outputStack); + return outputSlotHandler.canTransferAllItemsToSlots(outputList, true); + } + + private void craftFurnace(ItemStack outputStack, MultiSlotItemHandler outputSlotHandler) + { + List outputList = new ArrayList<>(); + outputList.add(outputStack); + outputSlotHandler.canTransferAllItemsToSlots(outputList, false); + consumeInventory(false); + } + + public void consumeInventory(boolean consumeInput) + { + ItemStack inputStack = getStackInSlot(INPUT_SLOT); + if (!inputStack.isEmpty()) + { + if (!consumeInput && inputStack.getItem().hasContainerItem(inputStack)) + { + setInventorySlotContents(INPUT_SLOT, inputStack.getItem().getContainerItem(inputStack)); + } else + { + inputStack.shrink(1); + if (inputStack.isEmpty()) + { + setInventorySlotContents(INPUT_SLOT, ItemStack.EMPTY); + } + } + } + + ItemStack toolStack = getStackInSlot(ARC_TOOL_SLOT); + if (!toolStack.isEmpty()) + { + if (toolStack.isDamageable()) + { + toolStack.setDamage(toolStack.getDamage() + 1); + if (toolStack.getDamage() >= toolStack.getMaxDamage()) + { + setInventorySlotContents(ARC_TOOL_SLOT, ItemStack.EMPTY); + } + } else if (toolStack.getItem().hasContainerItem(toolStack)) + { + setInventorySlotContents(ARC_TOOL_SLOT, toolStack.getItem().getContainerItem(inputStack)); + } else + { + toolStack.shrink(1); + if (toolStack.isEmpty()) + { + setInventorySlotContents(ARC_TOOL_SLOT, ItemStack.EMPTY); + } + } + } + } + + @Override + public Container createMenu(int p_createMenu_1_, PlayerInventory p_createMenu_2_, PlayerEntity p_createMenu_3_) + { + assert world != null; + return new ContainerAlchemicalReactionChamber(this, p_createMenu_1_, p_createMenu_2_); + } + + @Override + public ITextComponent getDisplayName() + { + return new StringTextComponent("Alchemical Reaction Chamber"); + } + + public double getProgressForGui() + { + return currentProgress; + } + + @Override + public int[] getSlotsForFace(Direction side) + { + switch (side) + { + case UP: + return new int[] { ARC_TOOL_SLOT }; + case DOWN: + return new int[] { 1, 2, 3, 4, 5 }; + default: + return new int[] { 6, 7, 8 }; + } + } + + @Override + public boolean canInsertItem(int index, ItemStack itemStack, Direction direction) + { + if (index == INPUT_BUCKET_SLOT || index == OUTPUT_BUCKET_SLOT) + { + Optional fluidStackOptional = FluidUtil.getFluidContained(itemStack); + + return fluidStackOptional.isPresent() && ((index == OUTPUT_BUCKET_SLOT && !fluidStackOptional.get().isEmpty()) || (index == INPUT_BUCKET_SLOT && fluidStackOptional.get().isEmpty())); + } + + if (index >= OUTPUT_SLOT && index < OUTPUT_SLOT + NUM_OUTPUTS) + { + return false; + } + + if (index == ARC_TOOL_SLOT) + { + return itemStack.getItem().isIn(BloodMagicTags.ARC_TOOL); + } + + return true; + } + + @Override + public boolean canExtractItem(int index, ItemStack stack, Direction direction) + { + return index >= OUTPUT_SLOT && index < OUTPUT_SLOT + NUM_OUTPUTS; + } + + @SuppressWarnings("unchecked") + @Override + public LazyOptional getCapability(@Nonnull Capability capability, @Nullable Direction facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return LazyOptional.of(() -> this).cast(); + } + + return super.getCapability(capability, facing); + } + + @Override + public int getTanks() + { + return 2; + } + + @Override + public FluidStack getFluidInTank(int tank) + { + switch (tank) + { + case 0: + return inputTank.getFluid(); + default: + return outputTank.getFluid(); + } + } + + @Override + public int getTankCapacity(int tank) + { + switch (tank) + { + case 0: + return inputTank.getCapacity(); + default: + return outputTank.getCapacity(); + } + } + + @Override + public boolean isFluidValid(int tank, FluidStack stack) + { + switch (tank) + { + case 0: + return inputTank.isFluidValid(stack); + default: + return outputTank.isFluidValid(stack); + } + } + + @Override + public int fill(FluidStack resource, FluidAction action) + { + int fillAmount = inputTank.fill(resource, action); + if (fillAmount > 0 && !world.isRemote) + { + BloodMagic.packetHandler.sendToAllTracking(new ARCTanksPacket(this), this); +// this.world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 3); + } + return fillAmount; + } + + @Override + public FluidStack drain(FluidStack resource, FluidAction action) + { + FluidStack drainedStack = outputTank.drain(resource, action); + if (!drainedStack.isEmpty() && !world.isRemote) + { + BloodMagic.packetHandler.sendToAllTracking(new ARCTanksPacket(this), this); +// this.world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 3); + } + return drainedStack; + } + + @Override + public FluidStack drain(int maxDrain, FluidAction action) + { + FluidStack drainedStack = outputTank.drain(maxDrain, action); + if (!drainedStack.isEmpty() && !world.isRemote) + { + BloodMagic.packetHandler.sendToAllTracking(new ARCTanksPacket(this), this); +// this.world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 3); + } + return drainedStack; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/tile/TileAlchemyArray.java b/src/main/java/wayoftime/bloodmagic/tile/TileAlchemyArray.java new file mode 100644 index 00000000..e18fd6b8 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/TileAlchemyArray.java @@ -0,0 +1,168 @@ +package wayoftime.bloodmagic.tile; + +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.ITickableTileEntity; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraftforge.registries.ObjectHolder; +import wayoftime.bloodmagic.common.alchemyarray.AlchemyArrayEffect; +import wayoftime.bloodmagic.core.registry.AlchemyArrayRegistry; +import wayoftime.bloodmagic.util.Constants; + +public class TileAlchemyArray extends TileInventory implements ITickableTileEntity +{ + @ObjectHolder("bloodmagic:alchemyarray") + public static TileEntityType TYPE; + + public boolean isActive = false; + public int activeCounter = 0; + public Direction rotation = Direction.byHorizontalIndex(0); + public int rotateCooldown = 0; + + private String key = ""; + public AlchemyArrayEffect arrayEffect; + private boolean doDropIngredients = true; + + public TileAlchemyArray(TileEntityType type) + { + super(type, 2, "alchemyarray"); +// this.bloodAltar = new BloodAltar(this); + } + + public TileAlchemyArray() + { + this(TYPE); + } + + public void onEntityCollidedWithBlock(BlockState state, Entity entity) + { + if (arrayEffect != null) + { + arrayEffect.onEntityCollidedWithBlock(this, getWorld(), pos, state, entity); + } + } + + @Override + public void deserialize(CompoundNBT tagCompound) + { + super.deserialize(tagCompound); + this.isActive = tagCompound.getBoolean("isActive"); + this.activeCounter = tagCompound.getInt("activeCounter"); + this.key = tagCompound.getString("stringKey"); + if (!tagCompound.contains("doDropIngredients")) // Check if the array is old + { + this.doDropIngredients = true; + } else + { + this.doDropIngredients = tagCompound.getBoolean("doDropIngredients"); + } + this.rotation = Direction.byHorizontalIndex(tagCompound.getInt(Constants.NBT.DIRECTION)); + + CompoundNBT arrayTag = tagCompound.getCompound("arrayTag"); +// arrayEffect = AlchemyArrayRegistry.getEffect(world, this.getStackInSlot(0), this.getStackInSlot(1)); + if (arrayEffect != null) + { + arrayEffect.readFromNBT(arrayTag); + } + } + + public void doDropIngredients(boolean drop) + { + this.doDropIngredients = drop; + } + + @Override + public CompoundNBT serialize(CompoundNBT tagCompound) + { + super.serialize(tagCompound); + tagCompound.putBoolean("isActive", isActive); + tagCompound.putInt("activeCounter", activeCounter); + tagCompound.putString("stringKey", "".equals(key) ? "empty" : key.toString()); + tagCompound.putBoolean("doDropIngredients", doDropIngredients); + tagCompound.putInt(Constants.NBT.DIRECTION, rotation.getHorizontalIndex()); + + CompoundNBT arrayTag = new CompoundNBT(); + if (arrayEffect != null) + { + arrayEffect.writeToNBT(arrayTag); + } + tagCompound.put("arrayTag", arrayTag); + + return tagCompound; + } + + @Override + public void tick() + { +// System.out.println("Active counter: " + this.activeCounter); + if (isActive && attemptCraft()) + { + activeCounter++; + } else + { + isActive = false; + doDropIngredients = true; + activeCounter = 0; + arrayEffect = null; + key = "empty"; + } + if (rotateCooldown > 0) + rotateCooldown--; + } + + public boolean attemptCraft() + { + if (arrayEffect != null) + { + isActive = true; + + } else + { + AlchemyArrayEffect effect = AlchemyArrayRegistry.getEffect(world, this.getStackInSlot(0), this.getStackInSlot(1)); +// System.out.println("Effect: " + effect); + if (effect == null) + { +// key = effect.i + return false; + } else + { + arrayEffect = effect; + } + } + + if (arrayEffect != null) + { + isActive = true; + if (arrayEffect.update(this, this.activeCounter)) + { + this.decrStackSize(0, 1); + this.decrStackSize(1, 1); + this.getWorld().setBlockState(getPos(), Blocks.AIR.getDefaultState()); + } + + return true; + } + return false; + } + +// @Override + public Direction getRotation() + { + return rotation; + } + + public void setRotation(Direction rotation) + { + this.rotation = rotation; + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack itemstack) + { + return slot == 0 || slot == 1; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/tile/TileAlchemyTable.java b/src/main/java/wayoftime/bloodmagic/tile/TileAlchemyTable.java new file mode 100644 index 00000000..02d9ec37 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/TileAlchemyTable.java @@ -0,0 +1,593 @@ +package wayoftime.bloodmagic.tile; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.ArrayUtils; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.ITickableTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.ItemHandlerHelper; +import net.minecraftforge.registries.ObjectHolder; +import wayoftime.bloodmagic.api.event.BloodMagicCraftedEvent; +import wayoftime.bloodmagic.common.item.BloodOrb; +import wayoftime.bloodmagic.common.item.IBindable; +import wayoftime.bloodmagic.common.item.IBloodOrb; +import wayoftime.bloodmagic.core.data.Binding; +import wayoftime.bloodmagic.core.data.SoulNetwork; +import wayoftime.bloodmagic.core.data.SoulTicket; +import wayoftime.bloodmagic.impl.BloodMagicAPI; +import wayoftime.bloodmagic.recipe.RecipeAlchemyTable; +import wayoftime.bloodmagic.tile.container.ContainerAlchemyTable; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.helper.NetworkHelper; + +public class TileAlchemyTable extends TileInventory implements ISidedInventory, ITickableTileEntity, INamedContainerProvider +{ + @ObjectHolder("bloodmagic:alchemytable") + public static TileEntityType TYPE; + + public static final int orbSlot = 6; + public static final int outputSlot = 7; + + public Direction direction = Direction.NORTH; + public boolean isSlave = false; + public int burnTime = 0; + public int ticksRequired = 1; + + public BlockPos connectedPos = BlockPos.ZERO; + public boolean[] blockedSlots = new boolean[] { false, false, false, false, false, false }; + public boolean[] allowedDirectionsSlot0 = new boolean[] { false, false, true, true, true, true }; + public boolean[] allowedDirectionsSlot1 = new boolean[] { false, false, true, true, true, true }; + public boolean[] allowedDirectionsSlot2 = new boolean[] { false, false, true, true, true, true }; + public boolean[] allowedDirectionsSlot3 = new boolean[] { false, false, true, true, true, true }; + public boolean[] allowedDirectionsSlot4 = new boolean[] { false, false, true, true, true, true }; + public boolean[] allowedDirectionsSlot5 = new boolean[] { false, false, true, true, true, true }; + public boolean[] allowedDirectionsOrb = new boolean[] { false, true, false, false, false, false }; + public boolean[] allowedDirectionsOutput = new boolean[] { true, false, false, false, false, false }; + + public int activeSlot = -1; + + public TileAlchemyTable(TileEntityType type) + { + super(type, 8, "alchemytable"); + } + + public TileAlchemyTable() + { + this(TYPE); + } + + public void setInitialTableParameters(Direction direction, boolean isSlave, BlockPos connectedPos) + { + this.isSlave = isSlave; + this.connectedPos = connectedPos; + + if (!isSlave) + { + this.direction = direction; + } + } + + public boolean isInvisible() + { + return isSlave(); + } + + public boolean isInputSlotAccessible(int slot) + { + return !(slot < 6 && slot >= 0) || !blockedSlots[slot]; + } + + public void toggleInputSlotAccessible(int slot) + { + if (slot < 6 && slot >= 0) + blockedSlots[slot] = !blockedSlots[slot]; + } + + public boolean isSlotEnabled(int slot, Direction dir) + { + switch (slot) + { + case 0: + return allowedDirectionsSlot0[dir.ordinal()]; + case 1: + return allowedDirectionsSlot1[dir.ordinal()]; + case 2: + return allowedDirectionsSlot2[dir.ordinal()]; + case 3: + return allowedDirectionsSlot3[dir.ordinal()]; + case 4: + return allowedDirectionsSlot4[dir.ordinal()]; + case 5: + return allowedDirectionsSlot5[dir.ordinal()]; + case 6: + return allowedDirectionsOrb[dir.ordinal()]; + case 7: + return allowedDirectionsOutput[dir.ordinal()]; + } + + return false; + } + + public void setSlotEnabled(boolean enabled, int slot, Direction dir) + { + switch (slot) + { + case 0: + allowedDirectionsSlot0[dir.ordinal()] = enabled; + break; + case 1: + allowedDirectionsSlot1[dir.ordinal()] = enabled; + break; + case 2: + allowedDirectionsSlot2[dir.ordinal()] = enabled; + break; + case 3: + allowedDirectionsSlot3[dir.ordinal()] = enabled; + break; + case 4: + allowedDirectionsSlot4[dir.ordinal()] = enabled; + break; + case 5: + allowedDirectionsSlot5[dir.ordinal()] = enabled; + break; + case 6: + allowedDirectionsOrb[dir.ordinal()] = enabled; + break; + case 7: + allowedDirectionsOutput[dir.ordinal()] = enabled; + break; + } + } + + @Override + public void deserialize(CompoundNBT tag) + { + super.deserialize(tag); + + isSlave = tag.getBoolean("isSlave"); + direction = Direction.byIndex(tag.getInt(Constants.NBT.DIRECTION)); + connectedPos = new BlockPos(tag.getInt(Constants.NBT.X_COORD), tag.getInt(Constants.NBT.Y_COORD), tag.getInt(Constants.NBT.Z_COORD)); + + burnTime = tag.getInt("burnTime"); + ticksRequired = tag.getInt("ticksRequired"); + + byte[] array = tag.getByteArray("blockedSlots"); + for (int i = 0; i < array.length; i++) blockedSlots[i] = array[i] != 0; + + for (int i = 0; i <= outputSlot; i++) + { + byte[] allowedSlotArray = tag.getByteArray("allowedDirections" + i); + for (int j = 0; j < Math.min(allowedSlotArray.length, Direction.values().length); j++) + { + this.setSlotEnabled(allowedSlotArray[j] == 1 ? true : false, i, Direction.values()[j]); + } +// tag.putByteArray("allowedDirections" + i, allowedSlotArray); + } + } + + @Override + public CompoundNBT serialize(CompoundNBT tag) + { + super.serialize(tag); + + tag.putBoolean("isSlave", isSlave); + tag.putInt(Constants.NBT.DIRECTION, direction.getIndex()); + tag.putInt(Constants.NBT.X_COORD, connectedPos.getX()); + tag.putInt(Constants.NBT.Y_COORD, connectedPos.getY()); + tag.putInt(Constants.NBT.Z_COORD, connectedPos.getZ()); + + tag.putInt("burnTime", burnTime); + tag.putInt("ticksRequired", ticksRequired); + + byte[] blockedSlotArray = new byte[blockedSlots.length]; + for (int i = 0; i < blockedSlots.length; i++) blockedSlotArray[i] = (byte) (blockedSlots[i] ? 1 : 0); + + tag.putByteArray("blockedSlots", blockedSlotArray); + + for (int i = 0; i <= outputSlot; i++) + { + byte[] allowedSlotArray = new byte[Direction.values().length]; + for (int j = 0; j < Direction.values().length; j++) + { + allowedSlotArray[j] = (byte) (this.isSlotEnabled(i, Direction.values()[j]) ? 1 : 0); + } + tag.putByteArray("allowedDirections" + i, allowedSlotArray); + } + + return tag; + } + + @Override + public LazyOptional getCapability(Capability capability, Direction facing) + { + if (facing != null && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + { + if (this.isSlave()) + { + TileEntity tile = getWorld().getTileEntity(connectedPos); + if (tile instanceof TileAlchemyTable && !((TileAlchemyTable) tile).isSlave) + { + return (LazyOptional) tile.getCapability(capability, facing); + } + } else + { + return super.getCapability(capability, facing); + } + } + + return super.getCapability(capability, facing); + } + + @Override + public int[] getSlotsForFace(Direction side) + { + List integerList = new ArrayList(); + for (int i = 0; i <= outputSlot; i++) + { + if (this.isSlotEnabled(i, side)) + { + integerList.add(i); + } + } + + int[] intArray = new int[integerList.size()]; + for (int i = 0; i < intArray.length; i++) + { + intArray[i] = integerList.get(i); + } + + return intArray; +// switch (side) +// { +// case DOWN: +// return new int[] { outputSlot }; +// case UP: +// return new int[] { orbSlot }; +// default: +// return new int[] { 0, 1, 2, 3, 4, 5 }; +// } + } + + @Override + public boolean canInsertItem(int index, ItemStack stack, Direction direction) + { + switch (index) + { + case outputSlot: + return false; + case orbSlot: + return !stack.isEmpty() && stack.getItem() instanceof IBloodOrb; + default: + return this.isSlotEnabled(index, direction); + } +// switch (direction) +// { +// case DOWN: +// return index != outputSlot && index != orbSlot; +// case UP: +// if (index == orbSlot && !stack.isEmpty() && stack.getItem() instanceof IBloodOrb) +// { +// return true; +// } else +// { +// return true; +// } +// default: +// if (this.isSlave) +// { +// TileEntity tile = getWorld().getTileEntity(connectedPos); +// if (tile instanceof TileAlchemyTable && !((TileAlchemyTable) tile).isSlave) +// { +// return ((TileAlchemyTable) tile).canInsertItem(index, stack, direction); +// } +// } +// return getAccessibleInputSlots(direction).contains(index); +// } + } + + @Override + public boolean canExtractItem(int index, ItemStack stack, Direction direction) + { + switch (direction) + { + default: + return this.isSlotEnabled(index, direction); + } + } + + public List getAccessibleInputSlots(Direction direction) + { + List list = new ArrayList<>(); + + for (int i = 0; i < 6; i++) + { + if (isInputSlotAccessible(i)) + { + list.add(i); + } + } + + return list; + } + + @Override + public void tick() + { + if (isSlave()) + { + return; + } + + List inputList = new ArrayList<>(); + + for (int i = 0; i < 6; i++) + { + if (!getStackInSlot(i).isEmpty()) + { + inputList.add(getStackInSlot(i)); + } + } + + int tier = getTierOfOrb(); + + // Simple recipes + RecipeAlchemyTable recipeAlchemyTable = BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAlchemyTable(world, inputList); + if (recipeAlchemyTable != null && (burnTime > 0 || (!getWorld().isRemote && tier >= recipeAlchemyTable.getMinimumTier() && getContainedLp() >= recipeAlchemyTable.getSyphon()))) + { + if (burnTime == 1) + notifyUpdate(); + + if (canCraft(recipeAlchemyTable.getOutput())) + { + ticksRequired = recipeAlchemyTable.getTicks(); + burnTime++; + if (burnTime >= ticksRequired) + { + if (!getWorld().isRemote) + { + if (recipeAlchemyTable.getSyphon() > 0) + { + if (consumeLp(recipeAlchemyTable.getSyphon()) < recipeAlchemyTable.getSyphon()) + { + // There was not enough LP to craft or there was no orb + burnTime = 0; + notifyUpdate(); + return; + } + } + + ItemStack[] inputs = new ItemStack[0]; + for (ItemStack stack : inputList) ArrayUtils.add(inputs, stack.copy()); + + BloodMagicCraftedEvent.AlchemyTable event = new BloodMagicCraftedEvent.AlchemyTable(recipeAlchemyTable.getOutput().copy(), inputs); + MinecraftForge.EVENT_BUS.post(event); + + ItemStack outputSlotStack = getStackInSlot(outputSlot); + if (outputSlotStack.isEmpty()) + setInventorySlotContents(outputSlot, event.getOutput()); + else + outputSlotStack.grow(event.getOutput().getCount()); + + consumeInventory(recipeAlchemyTable); + + burnTime = 0; + notifyUpdate(); + } + } + } + } else + { + burnTime = 0; + } + + } + + public double getProgressForGui() + { + return ((double) burnTime) / ticksRequired; + } + + private boolean canCraft(ItemStack output) + { + ItemStack currentOutputStack = getStackInSlot(outputSlot); + if (output.isEmpty()) + return false; + if (currentOutputStack.isEmpty()) + return true; + if (!ItemHandlerHelper.canItemStacksStack(output, currentOutputStack)) + return false; + int result = currentOutputStack.getCount() + output.getCount(); + return result <= getInventoryStackLimit() && result <= currentOutputStack.getMaxStackSize(); + } + + public int getTierOfOrb() + { + ItemStack orbStack = getStackInSlot(orbSlot); + if (!orbStack.isEmpty()) + { + if (orbStack.getItem() instanceof IBloodOrb) + { + BloodOrb orb = ((IBloodOrb) orbStack.getItem()).getOrb(orbStack); + return orb == null ? 0 : orb.getTier(); + } + } + + return 0; + } + + public int getContainedLp() + { + ItemStack orbStack = getStackInSlot(orbSlot); + if (!orbStack.isEmpty()) + { + if (orbStack.getItem() instanceof IBloodOrb) + { + Binding binding = ((IBindable) orbStack.getItem()).getBinding(orbStack); + if (binding == null) + { + return 0; + } + + SoulNetwork network = NetworkHelper.getSoulNetwork(binding); + + return network.getCurrentEssence(); + } + } + + return 0; + } + + public void craftItem(List inputList, RecipeAlchemyTable recipe) + { + ItemStack outputStack = recipe.getOutput(); + if (this.canCraft(outputStack)) + { + ItemStack currentOutputStack = getStackInSlot(outputSlot); + + ItemStack[] inputs = new ItemStack[0]; + for (ItemStack stack : inputList) ArrayUtils.add(inputs, stack.copy()); + + BloodMagicCraftedEvent.AlchemyTable event = new BloodMagicCraftedEvent.AlchemyTable(outputStack.copy(), inputs); + MinecraftForge.EVENT_BUS.post(event); + outputStack = event.getOutput(); + + if (currentOutputStack.isEmpty()) + { + setInventorySlotContents(outputSlot, outputStack); + } else if (ItemHandlerHelper.canItemStacksStack(outputStack, currentOutputStack)) + { + currentOutputStack.grow(outputStack.getCount()); + } + + consumeInventory(recipe); + } + } + + public int consumeLp(int requested) + { + ItemStack orbStack = getStackInSlot(orbSlot); + + if (!orbStack.isEmpty()) + { + if (orbStack.getItem() instanceof IBloodOrb) + { + if (NetworkHelper.syphonFromContainer(orbStack, SoulTicket.item(orbStack, world, pos, requested))) + { + return requested; + } + } + } + + return 0; + } + + public void consumeInventory(RecipeAlchemyTable recipe) + { + for (int i = 0; i < 6; i++) + { + ItemStack inputStack = getStackInSlot(i); + if (!inputStack.isEmpty()) + { + if (inputStack.getItem().hasContainerItem(inputStack)) + { + setInventorySlotContents(i, inputStack.getItem().getContainerItem(inputStack)); + continue; + } else if (inputStack.getMaxDamage() > 0) + { +// inputStack.setDamage(inputStack.getDamage() + 1); +// if (inputStack.getDamage() >= inputStack.getMaxDamage()) +// { +// +// } + + if (!inputStack.isDamageable()) + { + continue; + } + if (inputStack.attemptDamageItem(1, world.rand, null)) + { + setInventorySlotContents(i, ItemStack.EMPTY); + } + continue; + } + + inputStack.shrink(1); + if (inputStack.isEmpty()) + { + setInventorySlotContents(i, ItemStack.EMPTY); + } + } + } + } + + public Direction getDirection() + { + return direction; + } + + public boolean isSlave() + { + return isSlave; + } + + public int getBurnTime() + { + return burnTime; + } + + public int getTicksRequired() + { + return ticksRequired; + } + + public BlockPos getConnectedPos() + { + return connectedPos; + } + + public boolean[] getBlockedSlots() + { + return blockedSlots; + } + + public static int getOrbSlot() + { + return orbSlot; + } + + public static int getOutputSlot() + { + return outputSlot; + } + + @Override + public Container createMenu(int p_createMenu_1_, PlayerInventory p_createMenu_2_, PlayerEntity p_createMenu_3_) + { + assert world != null; + return new ContainerAlchemyTable(this, p_createMenu_1_, p_createMenu_2_); + } + + @Override + public ITextComponent getDisplayName() + { + return new StringTextComponent("Alchemy Table"); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/tile/TileAltar.java b/src/main/java/wayoftime/bloodmagic/tile/TileAltar.java new file mode 100644 index 00000000..897d72d6 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/TileAltar.java @@ -0,0 +1,253 @@ +package wayoftime.bloodmagic.tile; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.ITickableTileEntity; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.registries.ObjectHolder; +import wayoftime.bloodmagic.altar.AltarTier; +import wayoftime.bloodmagic.altar.BloodAltar; +import wayoftime.bloodmagic.altar.IBloodAltar; + +public class TileAltar extends TileInventory implements IBloodAltar, ITickableTileEntity +{ + @ObjectHolder("bloodmagic:altar") + public static TileEntityType TYPE; + private BloodAltar bloodAltar; + + private LazyOptional fluidOptional; + + public TileAltar(TileEntityType type) + { + super(type, 1, "altar"); + this.bloodAltar = new BloodAltar(this); + } + + public TileAltar() + { + this(TYPE); + } + + @Override + public void deserialize(CompoundNBT tagCompound) + { + super.deserialize(tagCompound); + + CompoundNBT altarTag = tagCompound.getCompound("bloodAltar"); + + this.bloodAltar.readFromNBT(altarTag); + } + + @Override + public CompoundNBT serialize(CompoundNBT tagCompound) + { + super.serialize(tagCompound); + + CompoundNBT altarTag = new CompoundNBT(); + this.bloodAltar.writeToNBT(altarTag); + + tagCompound.put("bloodAltar", altarTag); + return tagCompound; + } + + @Override + public void tick() + { + bloodAltar.update(); + } + + @Override + public void sacrificialDaggerCall(int amount, boolean isSacrifice) + { + bloodAltar.sacrificialDaggerCall(amount, isSacrifice); + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack itemstack) + { + return slot == 0; + } + + @Override + public int getCapacity() + { + return bloodAltar.getCapacity(); + } + + @Override + public int getCurrentBlood() + { + return bloodAltar.getCurrentBlood(); + } + + @Override + public int getTier() + { + return bloodAltar.getTier().toInt(); + } + + @Override + public int getProgress() + { + return bloodAltar.getProgress(); + } + + @Override + public float getSacrificeMultiplier() + { + return bloodAltar.getSacrificeMultiplier(); + } + + @Override + public float getSelfSacrificeMultiplier() + { + return bloodAltar.getSelfSacrificeMultiplier(); + } + + @Override + public float getOrbMultiplier() + { + return bloodAltar.getOrbMultiplier(); + } + + @Override + public float getDislocationMultiplier() + { + return bloodAltar.getDislocationMultiplier(); + } + + @Override + public float getConsumptionMultiplier() + { + return bloodAltar.getConsumptionMultiplier(); + } + + @Override + public float getConsumptionRate() + { + return bloodAltar.getConsumptionRate(); + } + + @Override + public int getLiquidRequired() + { + return bloodAltar.getLiquidRequired(); + } + + @Override + public int getBufferCapacity() + { + return bloodAltar.getBufferCapacity(); + } + + @Override + public void startCycle() + { + bloodAltar.startCycle(); + } + + @Override + public void checkTier() + { + bloodAltar.checkTier(); + } + + @Override + public void requestPauseAfterCrafting(int cooldown) + { + bloodAltar.requestPauseAfterCrafting(cooldown); + } + + @Override + public boolean isActive() + { + return bloodAltar.isActive(); + } + + @Override + public int fillMainTank(int amount) + { + return bloodAltar.fillMainTank(amount); + } + + @Override + public void setActive() + { + bloodAltar.setActive(); + } + + @Override + public int getChargingRate() + { + return bloodAltar.getChargingRate(); + } + + @Override + public int getTotalCharge() + { + return bloodAltar.getTotalCharge(); + } + + @Override + public int getChargingFrequency() + { + return bloodAltar.getChargingFrequency(); + } + + public AltarTier getCurrentTierDisplayed() + { + return bloodAltar.getCurrentTierDisplayed(); + } + + public boolean setCurrentTierDisplayed(AltarTier altarTier) + { + return bloodAltar.setCurrentTierDisplayed(altarTier); + } +// +// @Override +// public boolean hasCapability(@Nonnull Capability capability, @Nullable Direction facing) +// { +// if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) +// { +// return true; +// } +// +// return super.hasCapability(capability, facing); +// } + + @Override + protected void invalidateCaps() + { + super.invalidateCaps(); + if (fluidOptional != null) + { + fluidOptional.invalidate(); + fluidOptional = null; + } + + } + + @SuppressWarnings("unchecked") + @Override + public LazyOptional getCapability(@Nonnull Capability capability, @Nullable Direction facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + if (fluidOptional == null) + { + fluidOptional = LazyOptional.of(() -> new BloodAltar.VariableSizeFluidHandler(bloodAltar)); + } + return fluidOptional.cast(); +// return (T) bloodAltar; + } + + return super.getCapability(capability, facing); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/tile/TileDeforesterCharge.java b/src/main/java/wayoftime/bloodmagic/tile/TileDeforesterCharge.java new file mode 100644 index 00000000..110f1d6c --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/TileDeforesterCharge.java @@ -0,0 +1,231 @@ +package wayoftime.bloodmagic.tile; + +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import com.mojang.datafixers.util.Pair; + +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.LootContext; +import net.minecraft.loot.LootParameters; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.tags.BlockTags; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.registries.ObjectHolder; +import wayoftime.bloodmagic.common.block.BlockShapedExplosive; + +public class TileDeforesterCharge extends TileExplosiveCharge +{ + @ObjectHolder("bloodmagic:deforester_charge") + public static TileEntityType TYPE; + + private Map treePartsMap; + private List treePartsCache; + private boolean finishedAnalysis; +// private Iterator blockPosIterator; + +// private boolean cached = false; + + public double internalCounter = 0; + + public int currentLogs = 0; + + public int maxLogs = 128; + + public TileDeforesterCharge(TileEntityType type, int maxLogs) + { + super(type); + + this.maxLogs = maxLogs; + } + + public TileDeforesterCharge() + { + this(TYPE, 128); + } + + @Override + public void onUpdate() + { + if (world.isRemote) + { + return; + } +// System.out.println("Counter: " + internalCounter); + + Direction explosiveDirection = this.getBlockState().get(BlockShapedExplosive.ATTACHED).getOpposite(); + BlockState attachedState = world.getBlockState(pos.offset(explosiveDirection)); + if (!BlockTags.LOGS.contains(attachedState.getBlock()) && !BlockTags.LEAVES.contains(attachedState.getBlock())) + { + return; + } + + if (treePartsMap == null) + { + treePartsMap = new HashMap(); + treePartsMap.put(pos.offset(explosiveDirection), false); + treePartsCache = new LinkedList(); + treePartsCache.add(pos.offset(explosiveDirection)); + internalCounter = 0; +// treePartsMap.add(pos.offset(explosiveDirection)); + } + + boolean foundNew = false; + List newPositions = new LinkedList(); + for (BlockPos currentPos : treePartsCache) + { + if (!treePartsMap.getOrDefault(currentPos, false)) // If the BlockPos wasn't checked yet + { +// BlockPos currentPos = entry.getKey(); + for (Direction dir : Direction.values()) + { + BlockPos checkPos = currentPos.offset(dir); + if (treePartsMap.containsKey(checkPos)) + { + continue; + } + + BlockState checkState = world.getBlockState(checkPos); + + boolean isTree = false; + if (currentLogs >= maxLogs) + { + continue; + } + if (BlockTags.LOGS.contains(checkState.getBlock())) + { + currentLogs++; + isTree = true; + + } else if (BlockTags.LEAVES.contains(checkState.getBlock())) + { + isTree = true; + } + + if (isTree) + { + treePartsMap.put(checkPos, false); + newPositions.add(checkPos); + foundNew = true; + } + } + + treePartsMap.put(currentPos, true); + if (currentLogs >= maxLogs) + { + finishedAnalysis = true; + break; + } + } + } + + treePartsCache.addAll(newPositions); + +// System.out.println("Found blocks: " + treePartsMap.size()); + + if (foundNew) + { + return; + } + + internalCounter++; + if (internalCounter == 20) + { +// worldIn.playSound((PlayerEntity)null, tntentity.getPosX(), tntentity.getPosY(), tntentity.getPosZ(), SoundEvents.ENTITY_TNT_PRIMED, SoundCategory.BLOCKS, 1.0F, 1.0F); + world.playSound((PlayerEntity) null, this.getPos().getX() + 0.5, this.getPos().getY() + 0.5, this.getPos().getZ() + 0.5, SoundEvents.ITEM_FLINTANDSTEEL_USE, SoundCategory.BLOCKS, 1.0F, world.rand.nextFloat() * 0.4F + 0.8F); + ((ServerWorld) this.world).spawnParticle(ParticleTypes.FLAME, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 5, 0.02, 0.03, 0.02, 0); + } + + if (internalCounter == 30) + { + world.playSound((PlayerEntity) null, this.getPos().getX() + 0.5, this.getPos().getY() + 0.5, this.getPos().getZ() + 0.5, SoundEvents.ENTITY_TNT_PRIMED, SoundCategory.BLOCKS, 1.0F, 1.0F); + } + + if (internalCounter < 30) + { + return; + } + + if (world.rand.nextDouble() < 0.3) + { + ((ServerWorld) this.world).spawnParticle(ParticleTypes.SMOKE, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 1, 0.0D, 0.0D, 0.0D, 0); + } + + if (internalCounter == 100) + { + ItemStack toolStack = this.getHarvestingTool(); + world.playSound((PlayerEntity) null, this.getPos().getX() + 0.5, this.getPos().getY() + 0.5, this.getPos().getZ() + 0.5, SoundEvents.ENTITY_GENERIC_EXPLODE, SoundCategory.BLOCKS, 4.0F, (1.0F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.2F) * 0.7F); + + int numParticles = 10; + + ((ServerWorld) this.world).spawnParticle(ParticleTypes.EXPLOSION, pos.getX() + 0.5 + explosiveDirection.getXOffset(), pos.getY() + 0.5 + explosiveDirection.getYOffset(), pos.getZ() + 0.5 + explosiveDirection.getZOffset(), numParticles, 1.0D, 1.0D, 1.0D, 0); + + ObjectArrayList> objectarraylist = new ObjectArrayList<>(); + + for (BlockPos blockPos : treePartsCache) + { +// BlockPos blockpos = initialPos.offset(explosiveDirection, i).offset(sweepDir1, j).offset(sweepDir2, k); + + BlockState blockstate = this.world.getBlockState(blockPos); + Block block = blockstate.getBlock(); + if (!blockstate.isAir(this.world, blockPos)) + { + BlockPos blockpos1 = blockPos.toImmutable(); +// this.world.getProfiler().startSection("explosion_blocks"); + if (this.world instanceof ServerWorld) + { + TileEntity tileentity = blockstate.hasTileEntity() ? this.world.getTileEntity(blockPos) : null; + LootContext.Builder lootcontext$builder = (new LootContext.Builder((ServerWorld) this.world)).withRandom(this.world.rand).withParameter(LootParameters.field_237457_g_, Vector3d.copyCentered(blockPos)).withParameter(LootParameters.TOOL, toolStack).withNullableParameter(LootParameters.BLOCK_ENTITY, tileentity); +// if (this.mode == Explosion.Mode.DESTROY) { +// lootcontext$builder.withParameter(LootParameters.EXPLOSION_RADIUS, this.size); +// } + + blockstate.getDrops(lootcontext$builder).forEach((stack) -> { + handleExplosionDrops(objectarraylist, stack, blockpos1); + }); + + world.setBlockState(blockPos, Blocks.AIR.getDefaultState(), 3); + +// blockstate.onBlockExploded(this.world, blockpos, null); +// this.world.getProfiler().endSection(); + } + } + } + + for (Pair pair : objectarraylist) + { + Block.spawnAsEntity(this.world, pair.getSecond(), pair.getFirst()); + } + + world.setBlockState(getPos(), Blocks.AIR.getDefaultState()); + } + } + + @Override + public void deserialize(CompoundNBT tag) + { + internalCounter = tag.getDouble("internalCounter"); + } + + @Override + public CompoundNBT serialize(CompoundNBT tag) + { + tag.putDouble("internalCounter", internalCounter); + return tag; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/tile/TileDemonCrucible.java b/src/main/java/wayoftime/bloodmagic/tile/TileDemonCrucible.java new file mode 100644 index 00000000..8e1cd973 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/TileDemonCrucible.java @@ -0,0 +1,271 @@ +package wayoftime.bloodmagic.tile; + +import java.util.HashMap; +import java.util.Map.Entry; + +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.ITickableTileEntity; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraftforge.registries.ObjectHolder; +import wayoftime.bloodmagic.demonaura.WorldDemonWillHandler; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.api.compat.IDemonWillConduit; +import wayoftime.bloodmagic.api.compat.IDemonWillGem; +import wayoftime.bloodmagic.api.compat.IDiscreteDemonWill; + +public class TileDemonCrucible extends TileInventory implements ITickableTileEntity, IDemonWillConduit, ISidedInventory +{ + @ObjectHolder("bloodmagic:demoncrucible") + public static TileEntityType TYPE; + public final int maxWill = 100; + public final double gemDrainRate = 10; + public HashMap willMap = new HashMap<>(); // TODO: Change to DemonWillHolder + public int internalCounter = 0; + + public TileDemonCrucible(TileEntityType type) + { + super(type, 1, "demoncrucible"); + } + + public TileDemonCrucible() + { + this(TYPE); + } + + @Override + public void tick() + { + if (getWorld().isRemote) + { + return; + } + + internalCounter++; + + if (getWorld().isBlockPowered(getPos())) + { + // TODO: Fill the contained gem if it is there. + ItemStack stack = this.getStackInSlot(0); + if (stack.getItem() instanceof IDemonWillGem) + { + IDemonWillGem gemItem = (IDemonWillGem) stack.getItem(); + for (EnumDemonWillType type : EnumDemonWillType.values()) + { + if (willMap.containsKey(type)) + { + double current = willMap.get(type); + double fillAmount = Math.min(gemDrainRate, current); + if (fillAmount > 0) + { + fillAmount = gemItem.fillWill(type, stack, fillAmount, true); + if (willMap.get(type) - fillAmount <= 0) + { + willMap.remove(type); + } else + { + willMap.put(type, willMap.get(type) - fillAmount); + } + } + } + } + } + } else + { + ItemStack stack = this.getStackInSlot(0); + if (!stack.isEmpty()) + { + if (stack.getItem() instanceof IDemonWillGem) + { + IDemonWillGem gemItem = (IDemonWillGem) stack.getItem(); + for (EnumDemonWillType type : EnumDemonWillType.values()) + { + double currentAmount = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); + double drainAmount = Math.min(maxWill - currentAmount, gemDrainRate); + double filled = WorldDemonWillHandler.fillWillToMaximum(getWorld(), pos, type, drainAmount, maxWill, false); + + filled = gemItem.drainWill(type, stack, filled, false); + if (filled > 0) + { + filled = gemItem.drainWill(type, stack, filled, true); + WorldDemonWillHandler.fillWillToMaximum(getWorld(), pos, type, filled, maxWill, true); + } + } + } else if (stack.getItem() instanceof IDiscreteDemonWill) // TODO: Limit the speed of this process + { + IDiscreteDemonWill willItem = (IDiscreteDemonWill) stack.getItem(); + EnumDemonWillType type = willItem.getType(stack); + double currentAmount = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); + double needed = maxWill - currentAmount; + double discreteAmount = willItem.getDiscretization(stack); + if (needed >= discreteAmount) + { + double filled = willItem.drainWill(stack, discreteAmount); + if (filled > 0) + { + WorldDemonWillHandler.fillWillToMaximum(getWorld(), pos, type, filled, maxWill, true); + if (stack.getCount() <= 0) + { + this.setInventorySlotContents(0, ItemStack.EMPTY); + } + } + } + } + } + } + } + + @Override + public void deserialize(CompoundNBT tag) + { + super.deserialize(tag); + + willMap.clear(); + + for (EnumDemonWillType type : EnumDemonWillType.values()) + { + double amount = tag.getDouble("EnumWill" + type.name()); + if (amount > 0) + { + willMap.put(type, amount); + } + } + } + + @Override + public CompoundNBT serialize(CompoundNBT tag) + { + super.serialize(tag); + + for (Entry entry : willMap.entrySet()) + { + tag.putDouble("EnumWill" + entry.getKey().name(), entry.getValue()); + } + return tag; + } + + // IDemonWillConduit + + @Override + public int getWeight() + { + return 10; + } + + @Override + public double fillDemonWill(EnumDemonWillType type, double amount, boolean doFill) + { + if (amount <= 0) + { + return 0; + } + + if (!canFill(type)) + { + return 0; + } + + if (!doFill) + { + if (!willMap.containsKey(type)) + { + return Math.min(maxWill, amount); + } + + return Math.min(maxWill - willMap.get(type), amount); + } + + if (!willMap.containsKey(type)) + { + double max = Math.min(maxWill, amount); + + willMap.put(type, max); + + return max; + } + + double current = willMap.get(type); + double filled = maxWill - current; + + if (amount < filled) + { + willMap.put(type, current + amount); + filled = amount; + } else + { + willMap.put(type, (double) maxWill); + } + + return filled; + } + + @Override + public double drainDemonWill(EnumDemonWillType type, double amount, boolean doDrain) + { + if (!willMap.containsKey(type)) + { + return 0; + } + + double drained = amount; + double current = willMap.get(type); + if (current < drained) + { + drained = current; + } + + if (doDrain) + { + current -= drained; + if (current <= 0) + { + willMap.remove(type); + } else + { + willMap.put(type, current); + } + } + + return drained; + } + + @Override + public boolean canFill(EnumDemonWillType type) + { + return true; + } + + @Override + public boolean canDrain(EnumDemonWillType type) + { + return true; + } + + @Override + public double getCurrentWill(EnumDemonWillType type) + { + return willMap.containsKey(type) ? willMap.get(type) : 0; + } + + @Override + public int[] getSlotsForFace(Direction side) + { + return new int[] + { 0 }; + } + + @Override + public boolean canInsertItem(int index, ItemStack stack, Direction direction) + { + return !stack.isEmpty() && inventory.get(0).isEmpty() + && (stack.getItem() instanceof IDemonWillGem || stack.getItem() instanceof IDiscreteDemonWill); + } + + @Override + public boolean canExtractItem(int index, ItemStack stack, Direction direction) + { + return true; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/tile/TileDemonCrystal.java b/src/main/java/wayoftime/bloodmagic/tile/TileDemonCrystal.java new file mode 100644 index 00000000..b7310f7e --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/TileDemonCrystal.java @@ -0,0 +1,253 @@ +package wayoftime.bloodmagic.tile; + +import java.util.Locale; + +import net.minecraft.block.BlockState; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraftforge.registries.ObjectHolder; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.common.block.BlockDemonCrystal; +import wayoftime.bloodmagic.demonaura.WorldDemonWillHandler; +import wayoftime.bloodmagic.tile.base.TileTicking; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.will.DemonWillHolder; + +public class TileDemonCrystal extends TileTicking +{ + public static final double sameWillConversionRate = 45; + public static final double defaultWillConversionRate = 90; + public static final double timeDelayForWrongWill = 0.6; + public final int maxWill = 100; + public final double drainRate = 1; + public DemonWillHolder holder = new DemonWillHolder(); + public double progressToNextCrystal = 0; + public int internalCounter = 0; + public Direction placement = Direction.UP; // Side that this crystal is placed on. + + public EnumDemonWillType willType; + + @ObjectHolder("bloodmagic:demoncrystal") + public static TileEntityType TYPE; + + public TileDemonCrystal(TileEntityType type, EnumDemonWillType willType) + { + super(type); + this.willType = willType; + } + + public TileDemonCrystal(EnumDemonWillType willType) + { + this(TYPE, willType); + } + + public TileDemonCrystal() + { + this(TYPE, EnumDemonWillType.DEFAULT); + } + + @Override + public void onUpdate() + { + if (world.isRemote) + { + return; + } + + internalCounter++; + + if (internalCounter % 20 == 0) + { + int crystalCount = getCrystalCount(); + if (crystalCount < 7) + { +// this.setCrystalCount(crystalCount + 1); + EnumDemonWillType type = getWillType(); + + double value = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); + if (type != EnumDemonWillType.DEFAULT) + { + if (value >= 0.5) + { + double nextProgress = getCrystalGrowthPerSecond(value); + progressToNextCrystal += WorldDemonWillHandler.drainWill(getWorld(), getPos(), type, nextProgress * sameWillConversionRate, true) / sameWillConversionRate; + } else + { + value = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, EnumDemonWillType.DEFAULT); + if (value > 0.5) + { + double nextProgress = getCrystalGrowthPerSecond(value) * timeDelayForWrongWill; + progressToNextCrystal += WorldDemonWillHandler.drainWill(getWorld(), getPos(), EnumDemonWillType.DEFAULT, nextProgress * defaultWillConversionRate, true) / defaultWillConversionRate; + } + } + } else + { + if (value > 0.5) + { + + double nextProgress = getCrystalGrowthPerSecond(value); + progressToNextCrystal += WorldDemonWillHandler.drainWill(getWorld(), getPos(), type, nextProgress * sameWillConversionRate, true) / sameWillConversionRate; + } + } + + checkAndGrowCrystal(); + } + } + + } + + /** + * Encourages the crystal to grow by a large percentage by telling it to drain + * will from the aura. + * + * @param willDrain The amount of drain that is needed for the crystal + * to grow successfully for the desired amount. Can be + * more than the base amount. + * @param progressPercentage + * @return percentage actually grown. + */ + public double growCrystalWithWillAmount(double willDrain, double progressPercentage) + { + int crystalCount = getCrystalCount(); + if (crystalCount >= 7) + { + return 0; + } + + EnumDemonWillType type = this.getWillType(); + + double value = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); + double percentDrain = willDrain <= 0 ? 1 : Math.min(1, value / willDrain); + if (percentDrain <= 0) + { + return 0; + } + + // Verification that you can actually drain the will from this chunk, for future + // proofing. + WorldDemonWillHandler.drainWill(getWorld(), pos, type, percentDrain * willDrain, true); + progressToNextCrystal += percentDrain * progressPercentage; + + checkAndGrowCrystal(); + + return percentDrain * progressPercentage; + } + + public EnumDemonWillType getWillType() + { + return willType; + } + + public void checkAndGrowCrystal() + { + int crystalCount = getCrystalCount(); + if (progressToNextCrystal >= 1 && internalCounter % 100 == 0 && crystalCount < 7) + { + progressToNextCrystal--; + this.setCrystalCount(crystalCount + 1); + markDirty(); + notifyUpdate(); + } + } + + public double getMaxWillForCrystal() + { + return 50; + } + + public boolean dropSingleCrystal() + { + int crystalCount = getCrystalCount(); + if (!getWorld().isRemote && crystalCount > 1) + { + EnumDemonWillType type = getWillType(); +// EnumDemonWillType type = state.getValue(BlockDemonCrystal.TYPE); + ItemStack stack = BlockDemonCrystal.getItemStackDropped(type, 1); + if (!stack.isEmpty()) + { + setCrystalCount(crystalCount - 1); + InventoryHelper.spawnItemStack(getWorld(), pos.getX(), pos.getY(), pos.getZ(), stack); + notifyUpdate(); + return true; + } + } + + return false; + } + + public double getCrystalGrowthPerSecond(double will) + { +// return 0.1; + return 1.0 / 200 * Math.sqrt(will / 200); + } + + @Override + public void deserialize(CompoundNBT tag) + { + holder.readFromNBT(tag, "Will"); + placement = Direction.byIndex(tag.getInt("placement")); + progressToNextCrystal = tag.getDouble("progress"); + + if (!tag.contains(Constants.NBT.WILL_TYPE)) + { + this.willType = EnumDemonWillType.DEFAULT; + } else + { + this.willType = EnumDemonWillType.valueOf(tag.getString(Constants.NBT.WILL_TYPE).toUpperCase(Locale.ENGLISH)); + } + } + + @Override + public CompoundNBT serialize(CompoundNBT tag) + { + holder.writeToNBT(tag, "Will"); + tag.putInt("placement", placement.getIndex()); + tag.putDouble("progress", progressToNextCrystal); + + if (willType == EnumDemonWillType.DEFAULT) + { + if (tag.contains(Constants.NBT.WILL_TYPE)) + { + tag.remove(Constants.NBT.WILL_TYPE); + } + + } else + { + tag.putString(Constants.NBT.WILL_TYPE, willType.toString()); + } + + return tag; + } + + public int getCrystalCount() + { + BlockState state = world.getBlockState(getPos()); + return state.get(BlockDemonCrystal.AGE) + 1; + } + + public void setCrystalCount(int crystalCount) + { + BlockState state = world.getBlockState(getPos()); + world.setBlockState(getPos(), state.with(BlockDemonCrystal.AGE, crystalCount - 1)); + } + + public Direction getPlacement() + { + return placement; + } + + public void setPlacement(Direction placement) + { + this.placement = placement; + } + +// @Override +// protected void onDataPacketClientReceived() +// { +// super.onDataPacketClientReceived(); +// notifyUpdate(); +// } +} diff --git a/src/main/java/wayoftime/bloodmagic/tile/TileDemonCrystallizer.java b/src/main/java/wayoftime/bloodmagic/tile/TileDemonCrystallizer.java new file mode 100644 index 00000000..96f91f52 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/TileDemonCrystallizer.java @@ -0,0 +1,187 @@ +package wayoftime.bloodmagic.tile; + +import net.minecraft.block.Block; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.registries.ObjectHolder; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.demonaura.WorldDemonWillHandler; +import wayoftime.bloodmagic.tile.base.TileTicking; +import wayoftime.bloodmagic.will.DemonWillHolder; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.api.compat.IDemonWillConduit; + +public class TileDemonCrystallizer extends TileTicking implements IDemonWillConduit +{ + @ObjectHolder("bloodmagic:demoncrystallizer") + public static TileEntityType TYPE; + + public static final int maxWill = 100; + public static final double drainRate = 1; + public static final double willToFormCrystal = 99; + public static final double totalFormationTime = 1000; + // The whole purpose of this block is to grow a crystal initially. The + // acceleration and crystal growing is up to the crystal itself afterwards. + public DemonWillHolder holder = new DemonWillHolder(); + public double internalCounter = 0; + + public TileDemonCrystallizer(TileEntityType type) + { + super(type); + } + + public TileDemonCrystallizer() + { + this(TYPE); + } + + @Override + public void onUpdate() + { + if (world.isRemote) + { + return; + } + + BlockPos offsetPos = pos.offset(Direction.UP); + if (getWorld().isAirBlock(offsetPos)) // Room for a crystal to grow + { + EnumDemonWillType highestType = WorldDemonWillHandler.getHighestDemonWillType(getWorld(), pos); + double amount = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, highestType); + if (amount >= willToFormCrystal) + { + internalCounter += getCrystalFormationRate(amount); + if (internalCounter >= totalFormationTime) + { + if (WorldDemonWillHandler.drainWill(getWorld(), getPos(), highestType, willToFormCrystal, false) >= willToFormCrystal) + { + if (formCrystal(highestType, offsetPos)) + { + WorldDemonWillHandler.drainWill(getWorld(), getPos(), highestType, willToFormCrystal, true); + internalCounter = 0; + } + } + } + } + } + } + + public boolean formCrystal(EnumDemonWillType type, BlockPos position) + { + Block block = BloodMagicBlocks.RAW_CRYSTAL_BLOCK.get(); + switch (type) + { + case CORROSIVE: + block = BloodMagicBlocks.CORROSIVE_CRYSTAL_BLOCK.get(); + break; + case DESTRUCTIVE: + block = BloodMagicBlocks.DESTRUCTIVE_CRYSTAL_BLOCK.get(); + break; + case STEADFAST: + block = BloodMagicBlocks.STEADFAST_CRYSTAL_BLOCK.get(); + break; + case VENGEFUL: + block = BloodMagicBlocks.VENGEFUL_CRYSTAL_BLOCK.get(); + break; + default: + break; + } + getWorld().setBlockState(position, block.getDefaultState()); + TileEntity tile = getWorld().getTileEntity(position); + if (tile instanceof TileDemonCrystal) + { + ((TileDemonCrystal) tile).setPlacement(Direction.UP); + return true; + } + + return false; + } + + public double getCrystalFormationRate(double currentWill) + { + return 1; + } + + @Override + public void deserialize(CompoundNBT tag) + { + holder.readFromNBT(tag, "Will"); + internalCounter = tag.getDouble("internalCounter"); + } + + @Override + public CompoundNBT serialize(CompoundNBT tag) + { + holder.writeToNBT(tag, "Will"); + tag.putDouble("internalCounter", internalCounter); + return tag; + } + + // IDemonWillConduit + + @Override + public int getWeight() + { + return 10; + } + + @Override + public double fillDemonWill(EnumDemonWillType type, double amount, boolean doFill) + { + if (amount <= 0) + { + return 0; + } + + if (!canFill(type)) + { + return 0; + } + + if (!doFill) + { + return Math.min(maxWill - holder.getWill(type), amount); + } + + return holder.addWill(type, amount, maxWill); + } + + @Override + public double drainDemonWill(EnumDemonWillType type, double amount, boolean doDrain) + { + double drained = amount; + double current = holder.getWill(type); + if (current < drained) + { + drained = current; + } + + if (doDrain) + { + return holder.drainWill(type, amount); + } + + return drained; + } + + @Override + public boolean canFill(EnumDemonWillType type) + { + return true; + } + + @Override + public boolean canDrain(EnumDemonWillType type) + { + return true; + } + + @Override + public double getCurrentWill(EnumDemonWillType type) + { + return holder.getWill(type); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/tile/TileExplosiveCharge.java b/src/main/java/wayoftime/bloodmagic/tile/TileExplosiveCharge.java new file mode 100644 index 00000000..d334ef65 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/TileExplosiveCharge.java @@ -0,0 +1,97 @@ +package wayoftime.bloodmagic.tile; + +import com.mojang.datafixers.util.Pair; + +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.math.BlockPos; +import wayoftime.bloodmagic.anointment.AnointmentHolder; +import wayoftime.bloodmagic.tile.base.TileTicking; + +public class TileExplosiveCharge extends TileTicking +{ + public AnointmentHolder anointmentHolder = new AnointmentHolder(); + + public TileExplosiveCharge(TileEntityType type) + { + super(type); + } + + protected static void handleExplosionDrops(ObjectArrayList> dropPositionArray, ItemStack stack, BlockPos pos) + { + int i = dropPositionArray.size(); + + for (int j = 0; j < i; ++j) + { + Pair pair = dropPositionArray.get(j); + ItemStack itemstack = pair.getFirst(); + if (ItemEntity.canMergeStacks(itemstack, stack)) + { + ItemStack itemstack1 = ItemEntity.mergeStacks(itemstack, stack, 16); + dropPositionArray.set(j, Pair.of(itemstack1, pair.getSecond())); + if (stack.isEmpty()) + { + return; + } + } + } + + dropPositionArray.add(Pair.of(stack, pos)); + } + + public ItemStack getHarvestingTool() + { + ItemStack stack = new ItemStack(Items.DIAMOND_PICKAXE); + if (anointmentHolder != null) + anointmentHolder.toItemStack(stack); + return stack; + } + + @Override + public void deserialize(CompoundNBT tag) + { + if (tag.contains("holder")) + { + anointmentHolder = AnointmentHolder.fromNBT(tag.getCompound("holder")); + } + + } + + @Override + public CompoundNBT serialize(CompoundNBT tag) + { + if (anointmentHolder != null) + { + tag.put("holder", anointmentHolder.serialize()); + } + + return tag; + } + + public void setAnointmentHolder(AnointmentHolder holder) + { + this.anointmentHolder = holder; + } + + public void dropSelf() + { + ItemStack stack = new ItemStack(getBlockState().getBlock()); + if (anointmentHolder != null && !anointmentHolder.isEmpty()) + { + anointmentHolder.toItemStack(stack); + } + + InventoryHelper.spawnItemStack(world, pos.getX(), pos.getY(), pos.getZ(), stack); + } + + @Override + public void onUpdate() + { + + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/tile/TileFungalCharge.java b/src/main/java/wayoftime/bloodmagic/tile/TileFungalCharge.java new file mode 100644 index 00000000..36d61f09 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/TileFungalCharge.java @@ -0,0 +1,40 @@ +package wayoftime.bloodmagic.tile; + +import net.minecraft.block.BlockState; +import net.minecraft.tileentity.TileEntityType; +import net.minecraftforge.registries.ObjectHolder; +import wayoftime.bloodmagic.common.tags.BloodMagicTags; + +public class TileFungalCharge extends TileVeinMineCharge +{ + @ObjectHolder("bloodmagic:fungal_charge") + public static TileEntityType TYPE; + + public TileFungalCharge(TileEntityType type, int maxBlocks) + { + super(type, maxBlocks); + } + + public TileFungalCharge() + { + this(TYPE, 64 * 3); + } + + @Override + public boolean isValidBlock(BlockState originalBlockState, BlockState testState) + { + return isValidStartingBlock(testState); + } + + @Override + public boolean isValidStartingBlock(BlockState originalBlockState) + { + return BloodMagicTags.Blocks.MUSHROOM_HYPHAE.contains(originalBlockState.getBlock()) || BloodMagicTags.Blocks.MUSHROOM_STEM.contains(originalBlockState.getBlock()); + } + + @Override + public boolean checkDiagonals() + { + return true; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/tile/TileIncenseAltar.java b/src/main/java/wayoftime/bloodmagic/tile/TileIncenseAltar.java new file mode 100644 index 00000000..e68eb31c --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/TileIncenseAltar.java @@ -0,0 +1,206 @@ +package wayoftime.bloodmagic.tile; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.tileentity.ITickableTileEntity; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.registries.ObjectHolder; +import wayoftime.bloodmagic.incense.EnumTranquilityType; +import wayoftime.bloodmagic.api.compat.IIncensePath; +import wayoftime.bloodmagic.incense.IncenseAltarHandler; +import wayoftime.bloodmagic.incense.IncenseTranquilityRegistry; +import wayoftime.bloodmagic.incense.TranquilityStack; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.util.helper.PlayerSacrificeHelper; + +public class TileIncenseAltar extends TileInventory implements ITickableTileEntity +{ + public static int maxCheckRange = 5; + public AreaDescriptor incenseArea = new AreaDescriptor.Rectangle(new BlockPos(-5, -5, -5), 11); + public Map tranquilityMap = new HashMap<>(); + + public double incenseAddition = 0; // Self-sacrifice is multiplied by 1 plus this value. + public double tranquility = 0; + public int roadDistance = 0; // Number of road blocks laid down + + @ObjectHolder("bloodmagic:incensealtar") + public static TileEntityType TYPE; + + public TileIncenseAltar(TileEntityType type) + { + super(type, 1, "incensealtar"); + } + + public TileIncenseAltar() + { + this(TYPE); + } + + @Override + public void tick() + { + AxisAlignedBB aabb = incenseArea.getAABB(getPos()); + List playerList = getWorld().getEntitiesWithinAABB(PlayerEntity.class, aabb); + if (playerList.isEmpty()) + { + return; + } + + if (getWorld().getGameTime() % 100 == 0) + { + recheckConstruction(); + } + + boolean hasPerformed = false; + + for (PlayerEntity player : playerList) + { + if (PlayerSacrificeHelper.incrementIncense(player, 0, incenseAddition, incenseAddition / 100)) + { + hasPerformed = true; + } + } + + if (hasPerformed) + { + if (getWorld().rand.nextInt(4) == 0 && getWorld() instanceof ServerWorld) + { + ServerWorld server = (ServerWorld) getWorld(); + server.spawnParticle(ParticleTypes.FLAME, pos.getX() + 0.5, pos.getY() + 1.2, pos.getZ() + 0.5, 1, 0.02, 0.03, 0.02, 0); + } + } + } + + @Override + public void deserialize(CompoundNBT tag) + { + super.deserialize(tag); + tranquility = tag.getDouble("tranquility"); + incenseAddition = tag.getDouble("incenseAddition"); + } + + @Override + public CompoundNBT serialize(CompoundNBT tag) + { + super.serialize(tag); + tag.putDouble("tranquility", tranquility); + tag.putDouble("incenseAddition", incenseAddition); + return tag; + } + + public void recheckConstruction() + { + // TODO: Check the physical construction of the incense altar to determine the + // maximum length. + int maxLength = 11; // Max length of the path. The path starts two blocks away from the center + // block. + int yOffset = 0; + + Map tranquilityMap = new HashMap<>(); + + for (int currentDistance = 2; currentDistance < currentDistance + maxLength; currentDistance++) + { + boolean canFormRoad = false; + + for (int i = -maxCheckRange + yOffset; i <= maxCheckRange + yOffset; i++) + { + BlockPos verticalPos = pos.add(0, i, 0); + + canFormRoad = true; + level: for (int index = 0; index < 4; index++) + { + Direction horizontalFacing = Direction.byHorizontalIndex(index); + BlockPos facingOffsetPos = verticalPos.offset(horizontalFacing, currentDistance); + for (int j = -1; j <= 1; j++) + { + BlockPos offsetPos = facingOffsetPos.offset(horizontalFacing.rotateY(), j); + BlockState state = getWorld().getBlockState(offsetPos); + Block block = state.getBlock(); + if (!(block instanceof IIncensePath && ((IIncensePath) block).getLevelOfPath(getWorld(), offsetPos, state) >= currentDistance - 2)) + { + canFormRoad = false; + break level; + } + } + } + + if (canFormRoad) + { + yOffset = i; + break; + } + } + + if (canFormRoad) + { + for (int i = -currentDistance; i <= currentDistance; i++) + { + for (int j = -currentDistance; j <= currentDistance; j++) + { + if (Math.abs(i) != currentDistance && Math.abs(j) != currentDistance) + { + continue; // TODO: Can make this just set j to currentDistance to speed it up. + } + + for (int y = yOffset; y <= 2 + yOffset; y++) + { + BlockPos offsetPos = pos.add(i, y, j); + BlockState state = getWorld().getBlockState(offsetPos); + Block block = state.getBlock(); + TranquilityStack stack = IncenseTranquilityRegistry.getTranquilityOfBlock(getWorld(), offsetPos, block, state); + if (stack != null) + { + if (!tranquilityMap.containsKey(stack.type)) + { + tranquilityMap.put(stack.type, stack.value); + } else + { + tranquilityMap.put(stack.type, tranquilityMap.get(stack.type) + stack.value); + } + } + } + } + } + } else + { + roadDistance = currentDistance - 2; + break; + } + } + + this.tranquilityMap = tranquilityMap; + + double totalTranquility = 0; + for (Entry entry : tranquilityMap.entrySet()) + { + totalTranquility += entry.getValue(); + } + + if (totalTranquility < 0) + { + return; + } + + double appliedTranquility = 0; + for (Entry entry : tranquilityMap.entrySet()) + { + appliedTranquility += Math.sqrt(entry.getValue()); + } + + double bonus = IncenseAltarHandler.getIncenseBonusFromComponents(getWorld(), pos, appliedTranquility, roadDistance); + incenseAddition = bonus; + this.tranquility = appliedTranquility; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/tile/TileInventory.java b/src/main/java/wayoftime/bloodmagic/tile/TileInventory.java new file mode 100644 index 00000000..961fc1fd --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/TileInventory.java @@ -0,0 +1,317 @@ +package wayoftime.bloodmagic.tile; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.NonNullList; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.wrapper.InvWrapper; +import net.minecraftforge.items.wrapper.SidedInvWrapper; +import wayoftime.bloodmagic.tile.base.TileBase; + +public class TileInventory extends TileBase implements IInventory +{ + protected int[] syncedSlots = new int[0]; + protected NonNullList inventory; + LazyOptional handlerDown; + LazyOptional handlerUp; + LazyOptional handlerNorth; + LazyOptional handlerSouth; + LazyOptional handlerWest; + LazyOptional handlerEast; + private int size; + + // IInventory + private String name; + + public TileInventory(TileEntityType type, int size, String name) + { + super(type); + this.inventory = NonNullList.withSize(size, ItemStack.EMPTY); + this.size = size; + this.name = name; + initializeItemHandlers(); + } + + protected boolean isSyncedSlot(int slot) + { + for (int s : this.syncedSlots) + { + if (s == slot) + { + return true; + } + } + return false; + } + + @Override + public void deserialize(CompoundNBT tagCompound) + { + super.deserialize(tagCompound); + + this.inventory = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + + ItemStackHelper.loadAllItems(tagCompound, this.inventory); + +// ListNBT tags = tagCompound.getList("Items", 10); +// inventory = NonNullList.withSize(size, ItemStack.EMPTY); +// +// +// +// for (int i = 0; i < tags.size(); i++) +// { +// if (!isSyncedSlot(i)) +// { +// CompoundNBT data = tags.getCompoundTagAt(i); +// byte j = data.getByte("Slot"); +// +// if (j >= 0 && j < inventory.size()) +// { +// inventory.set(j, new ItemStack(data)); // No matter how much an i looks like a j, it is not one. +// // They are drastically different characters and cause +// // drastically different things to happen. Apparently I +// // didn't know this at one point. - TehNut +// } +// } +// } + } + + @Override + public CompoundNBT serialize(CompoundNBT tagCompound) + { + super.serialize(tagCompound); + + ItemStackHelper.saveAllItems(tagCompound, this.inventory); +// NBTTagList tags = new NBTTagList(); +// +// for (int i = 0; i < inventory.size(); i++) +// { +// if ((!inventory.get(i).isEmpty()) && !isSyncedSlot(i)) +// { +// CompoundNBT data = new CompoundNBT(); +// data.putByte("Slot", (byte) i); +// inventory.get(i).write(data); +// tags.appendTag(data); +// } +// } +// +// tagCompound.setTag("Items", tags); + return tagCompound; + } + + public void dropItems() + { + InventoryHelper.dropInventoryItems(getWorld(), getPos(), this); + } + + @Override + public int getSizeInventory() + { + return size; + } + + @Override + public ItemStack getStackInSlot(int index) + { + return inventory.get(index); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + if (!getStackInSlot(index).isEmpty()) + { + if (!getWorld().isRemote) + getWorld().notifyBlockUpdate(getPos(), getWorld().getBlockState(getPos()), getWorld().getBlockState(getPos()), 3); + + if (getStackInSlot(index).getCount() <= count) + { + ItemStack itemStack = inventory.get(index); + inventory.set(index, ItemStack.EMPTY); + markDirty(); + return itemStack; + } + + ItemStack itemStack = inventory.get(index).split(count); + markDirty(); + return itemStack; + } + + return ItemStack.EMPTY; + } + + @Override + public ItemStack removeStackFromSlot(int slot) + { + if (!inventory.get(slot).isEmpty()) + { + ItemStack itemStack = inventory.get(slot); + setInventorySlotContents(slot, ItemStack.EMPTY); + return itemStack; + } + return ItemStack.EMPTY; + } + + @Override + public void setInventorySlotContents(int slot, ItemStack stack) + { + inventory.set(slot, stack); + if (!stack.isEmpty() && stack.getCount() > getInventoryStackLimit()) + stack.setCount(getInventoryStackLimit()); + markDirty(); + if (!getWorld().isRemote) + getWorld().notifyBlockUpdate(getPos(), getWorld().getBlockState(getPos()), getWorld().getBlockState(getPos()), 3); + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void openInventory(PlayerEntity player) + { + + } + + @Override + public void closeInventory(PlayerEntity player) + { + + } + + @Override + public boolean isItemValidForSlot(int index, ItemStack stack) + { + return true; + } + + // IWorldNameable + +// @Override +// public int getField(int id) +// { +// return 0; +// } +// +// @Override +// public void setField(int id, int value) +// { +// +// } +// +// @Override +// public int getFieldCount() +// { +// return 0; +// } + + @Override + public void clear() + { + this.inventory = NonNullList.withSize(size, ItemStack.EMPTY); + } + + @Override + public boolean isEmpty() + { + for (ItemStack stack : inventory) if (!stack.isEmpty()) + return false; + + return true; + } + + @Override + public boolean isUsableByPlayer(PlayerEntity player) + { + return true; + } + +// @Override +// public String getName() +// { +// return TextHelper.localize("tile.bloodmagic." + name + ".name"); +// } +// +// @Override +// public boolean hasCustomName() +// { +// return true; +// } +// +// @Override +// public ITextComponent getDisplayName() +// { +// return new TextComponentString(getName()); +// } + + protected void initializeItemHandlers() + { + if (this instanceof ISidedInventory) + { + handlerDown = LazyOptional.of(() -> new SidedInvWrapper((ISidedInventory) this, Direction.DOWN)); + handlerUp = LazyOptional.of(() -> new SidedInvWrapper((ISidedInventory) this, Direction.UP)); + handlerNorth = LazyOptional.of(() -> new SidedInvWrapper((ISidedInventory) this, Direction.NORTH)); + handlerSouth = LazyOptional.of(() -> new SidedInvWrapper((ISidedInventory) this, Direction.SOUTH)); + handlerWest = LazyOptional.of(() -> new SidedInvWrapper((ISidedInventory) this, Direction.WEST)); + handlerEast = LazyOptional.of(() -> new SidedInvWrapper((ISidedInventory) this, Direction.EAST)); + } else + { + handlerDown = LazyOptional.of(() -> new InvWrapper(this)); + handlerUp = handlerDown; + handlerNorth = handlerDown; + handlerSouth = handlerDown; + handlerWest = handlerDown; + handlerEast = handlerDown; + } + } + + @SuppressWarnings("unchecked") + @Override + public LazyOptional getCapability(@Nonnull Capability capability, @Nullable Direction facing) + { + if (facing != null && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + { + switch (facing) + { + case DOWN: + return handlerDown.cast(); + case EAST: + return handlerEast.cast(); + case NORTH: + return handlerNorth.cast(); + case SOUTH: + return handlerSouth.cast(); + case UP: + return handlerUp.cast(); + case WEST: + return handlerWest.cast(); + } + } else if (facing == null && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + { + return handlerDown.cast(); + } + + return super.getCapability(capability, facing); + } + +// @Override +// public boolean hasCapability(Capability capability, Direction facing) +// { +// return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); +// } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/tile/TileMasterRitualStone.java b/src/main/java/wayoftime/bloodmagic/tile/TileMasterRitualStone.java new file mode 100644 index 00000000..5aa0f181 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/TileMasterRitualStone.java @@ -0,0 +1,582 @@ +package wayoftime.bloodmagic.tile; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.UUID; + +import javax.annotation.Nullable; + +import com.google.common.base.Strings; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.registries.ObjectHolder; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.item.ItemActivationCrystal; +import wayoftime.bloodmagic.core.data.Binding; +import wayoftime.bloodmagic.core.data.SoulNetwork; +import wayoftime.bloodmagic.demonaura.WorldDemonWillHandler; +import wayoftime.bloodmagic.event.RitualEvent; +import wayoftime.bloodmagic.common.item.IBindable; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.ritual.EnumReaderBoundaries; +import wayoftime.bloodmagic.ritual.IMasterRitualStone; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.tile.base.TileTicking; +import wayoftime.bloodmagic.util.ChatUtil; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.helper.BindableHelper; +import wayoftime.bloodmagic.util.helper.NBTHelper; +import wayoftime.bloodmagic.util.helper.NetworkHelper; +import wayoftime.bloodmagic.util.helper.PlayerHelper; +import wayoftime.bloodmagic.util.helper.RitualHelper; +import wayoftime.bloodmagic.will.DemonWillHolder; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; + +public class TileMasterRitualStone extends TileTicking implements IMasterRitualStone +{ + @ObjectHolder("bloodmagic:masterritualstone") + public static TileEntityType TYPE; + protected final Map modableRangeMap = new HashMap<>(); + private UUID owner; + private SoulNetwork cachedNetwork; + private boolean active; + private boolean redstoned; + private int activeTime; + private int cooldown; + private Ritual currentRitual; + private Direction direction = Direction.NORTH; + private boolean inverted; + private List currentActiveWillConfig = new ArrayList<>(); + + public TileMasterRitualStone(TileEntityType type) + { + super(type); + } + + public TileMasterRitualStone() + { + this(TYPE); + } + + @Override + public void onUpdate() + { + if (getWorld().isRemote) + return; + + if (isPowered() && isActive()) + { + active = false; + redstoned = true; + stopRitual(Ritual.BreakType.REDSTONE); + return; + } + + if (!isActive() && !isPowered() && isRedstoned() && getCurrentRitual() != null) + { + active = true; + ItemStack crystalStack = NBTHelper.checkNBT(ItemActivationCrystal.CrystalType.getStack(getCurrentRitual().getCrystalLevel())); + BindableHelper.applyBinding(crystalStack, new Binding(owner, PlayerHelper.getUsernameFromUUID(owner))); + activateRitual(crystalStack, null, getCurrentRitual()); + redstoned = false; + } + + if (getCurrentRitual() != null && isActive()) + { + if (activeTime % getCurrentRitual().getRefreshTime() == 0) + performRitual(getWorld(), getPos()); + + activeTime++; + } + } + + @Override + public void deserialize(CompoundNBT tag) + { + owner = tag.hasUniqueId("owner") ? tag.getUniqueId("owner") : null; + if (owner != null) + cachedNetwork = NetworkHelper.getSoulNetwork(owner); + currentRitual = BloodMagic.RITUAL_MANAGER.getRitual(tag.getString(Constants.NBT.CURRENT_RITUAL)); + if (currentRitual != null) + { + CompoundNBT ritualTag = tag.getCompound(Constants.NBT.CURRENT_RITUAL_TAG); + if (!ritualTag.isEmpty()) + { + currentRitual.readFromNBT(ritualTag); + } + addBlockRanges(currentRitual.getModableRangeMap()); + for (Entry entry : modableRangeMap.entrySet()) + { + CompoundNBT descriptorTag = ritualTag.getCompound(entry.getKey()); + entry.getValue().readFromNBT(descriptorTag); +// ritualTag.put(entry.getKey(), descriptorTag); + } + } + active = tag.getBoolean(Constants.NBT.IS_RUNNING); + activeTime = tag.getInt(Constants.NBT.RUNTIME); + direction = Direction.values()[tag.getInt(Constants.NBT.DIRECTION)]; + redstoned = tag.getBoolean(Constants.NBT.IS_REDSTONED); + + for (EnumDemonWillType type : EnumDemonWillType.values()) + { + if (tag.getBoolean("EnumWill" + type)) + { + currentActiveWillConfig.add(type); + } + } + } + + @Override + public CompoundNBT serialize(CompoundNBT tag) + { + String ritualId = BloodMagic.RITUAL_MANAGER.getId(getCurrentRitual()); + if (owner != null) + tag.putUniqueId("owner", owner); + tag.putString(Constants.NBT.CURRENT_RITUAL, Strings.isNullOrEmpty(ritualId) ? "" : ritualId); + if (currentRitual != null) + { + CompoundNBT ritualTag = new CompoundNBT(); + currentRitual.writeToNBT(ritualTag); + for (Entry entry : modableRangeMap.entrySet()) + { + CompoundNBT descriptorTag = new CompoundNBT(); + entry.getValue().writeToNBT(descriptorTag); + ritualTag.put(entry.getKey(), descriptorTag); + } + tag.put(Constants.NBT.CURRENT_RITUAL_TAG, ritualTag); + } + tag.putBoolean(Constants.NBT.IS_RUNNING, isActive()); + tag.putInt(Constants.NBT.RUNTIME, getActiveTime()); + tag.putInt(Constants.NBT.DIRECTION, direction.getIndex()); + tag.putBoolean(Constants.NBT.IS_REDSTONED, redstoned); + + for (EnumDemonWillType type : currentActiveWillConfig) + { + tag.putBoolean("EnumWill" + type, true); + } + + return tag; + } + + @Override + public boolean activateRitual(ItemStack activationCrystal, @Nullable PlayerEntity activator, Ritual ritual) + { + if (PlayerHelper.isFakePlayer(activator)) + return false; + + Binding binding = ((IBindable) activationCrystal.getItem()).getBinding(activationCrystal); + if (binding != null && ritual != null) + { + if (activationCrystal.getItem() instanceof ItemActivationCrystal) + { + int crystalLevel = ((ItemActivationCrystal) activationCrystal.getItem()).getCrystalLevel(activationCrystal); + if (RitualHelper.canCrystalActivate(ritual, crystalLevel)) + { + if (!getWorld().isRemote) + { + SoulNetwork network = NetworkHelper.getSoulNetwork(binding); + + if (!isRedstoned() && network.getCurrentEssence() < ritual.getActivationCost() + && (activator != null && !activator.isCreative())) + { + activator.sendStatusMessage(new TranslationTextComponent("chat.bloodmagic.ritual.weak"), true); + return false; + } + + if (currentRitual != null) + currentRitual.stopRitual(this, Ritual.BreakType.ACTIVATE); + + RitualEvent.RitualActivatedEvent event = new RitualEvent.RitualActivatedEvent(this, binding.getOwnerId(), ritual, activator, activationCrystal, crystalLevel); + + if (MinecraftForge.EVENT_BUS.post(event)) + { + if (activator != null) + activator.sendStatusMessage(new TranslationTextComponent("chat.bloodmagic.ritual.prevent"), true); + return false; + } + + if (ritual.activateRitual(this, activator, binding.getOwnerId())) + { + if (!isRedstoned() && (activator != null && !activator.isCreative())) + network.syphon(ticket(ritual.getActivationCost())); + + if (activator != null) + activator.sendStatusMessage(new TranslationTextComponent("chat.bloodmagic.ritual.activate"), true); + + this.active = true; + this.owner = binding.getOwnerId(); + this.cachedNetwork = network; + this.currentRitual = ritual; + + if (!checkBlockRanges(ritual.getModableRangeMap())) + addBlockRanges(ritual.getModableRangeMap()); + + notifyUpdate(); + return true; + } + } + + notifyUpdate(); + return true; + } + } + } else + { + if (activator != null) + activator.sendStatusMessage(new TranslationTextComponent("chat.bloodmagic.ritual.notValid"), true); + } + + return false; + } + + @Override + public void performRitual(World world, BlockPos pos) + { + if (!world.isRemote && getCurrentRitual() != null + && BloodMagic.RITUAL_MANAGER.enabled(BloodMagic.RITUAL_MANAGER.getId(currentRitual), false)) + { + if (RitualHelper.checkValidRitual(getWorld(), getPos(), currentRitual, getDirection())) + { + Ritual ritual = getCurrentRitual(); + RitualEvent.RitualRunEvent event = new RitualEvent.RitualRunEvent(this, getOwner(), ritual); + + if (MinecraftForge.EVENT_BUS.post(event)) + return; + + if (!checkBlockRanges(getCurrentRitual().getModableRangeMap())) + addBlockRanges(getCurrentRitual().getModableRangeMap()); + + getCurrentRitual().performRitual(this); + } else + { + stopRitual(Ritual.BreakType.BREAK_STONE); + } + } + } + + @Override + public void stopRitual(Ritual.BreakType breakType) + { + if (!getWorld().isRemote && getCurrentRitual() != null) + { + RitualEvent.RitualStopEvent event = new RitualEvent.RitualStopEvent(this, getOwner(), getCurrentRitual(), breakType); + + if (MinecraftForge.EVENT_BUS.post(event)) + return; + + getCurrentRitual().stopRitual(this, breakType); + if (breakType != Ritual.BreakType.REDSTONE) + { + this.currentRitual = null; + this.active = false; + this.activeTime = 0; + } + notifyUpdate(); + } + } + + @Override + public int getCooldown() + { + return cooldown; + } + + @Override + public void setCooldown(int cooldown) + { + this.cooldown = cooldown; + } + + @Override + public Direction getDirection() + { + return direction; + } + + public void setDirection(Direction direction) + { + this.direction = direction; + } + + @Override + public boolean areTanksEmpty() + { + return false; + } + + @Override + public int getRunningTime() + { + return activeTime; + } + + @Override + public UUID getOwner() + { + return owner; + } + + public void setOwner(UUID owner) + { + this.owner = owner; + } + + @Override + public SoulNetwork getOwnerNetwork() + { + return cachedNetwork; + } + + @Override + public World getWorld() + { + return super.getWorld(); + } + + @Override + public BlockPos getPos() + { + return super.getPos(); + } + + @Override + public World getWorldObj() + { + return getWorld(); + } + + @Override + public BlockPos getBlockPos() + { + return getPos(); + } + + @Override + public String getNextBlockRange(String range) + { + if (this.currentRitual != null) + { + return this.currentRitual.getNextBlockRange(range); + } + + return ""; + } + + @Override + public void provideInformationOfRitualToPlayer(PlayerEntity player) + { + if (this.currentRitual != null) + { + ChatUtil.sendNoSpam(player, this.currentRitual.provideInformationOfRitualToPlayer(player)); + } + } + + @Override + public void provideInformationOfRangeToPlayer(PlayerEntity player, String range) + { + if (this.currentRitual != null && this.currentRitual.getListOfRanges().contains(range)) + { + ChatUtil.sendNoSpam(player, this.currentRitual.provideInformationOfRangeToPlayer(player, range)); + } + } + + @Override + public void setActiveWillConfig(PlayerEntity player, List typeList) + { + this.currentActiveWillConfig = typeList; + } + + @Override + public EnumReaderBoundaries setBlockRangeByBounds(PlayerEntity player, String range, BlockPos offset1, BlockPos offset2) + { + AreaDescriptor descriptor = this.getBlockRange(range); + DemonWillHolder holder = WorldDemonWillHandler.getWillHolder(world, getBlockPos()); + + EnumReaderBoundaries modificationType = currentRitual.canBlockRangeBeModified(range, descriptor, this, offset1, offset2, holder); + if (modificationType == EnumReaderBoundaries.SUCCESS) + descriptor.modifyAreaByBlockPositions(offset1, offset2); + + world.notifyBlockUpdate(pos, this.getBlockState(), this.getBlockState(), 3); + + return modificationType; + } + + @Override + public List getActiveWillConfig() + { + return new ArrayList<>(currentActiveWillConfig); + } + + @Override + public void provideInformationOfWillConfigToPlayer(PlayerEntity player, List typeList) + { + // There is probably an easier way to make expanded chat messages + if (typeList.size() >= 1) + { + Object[] translations = new TranslationTextComponent[typeList.size()]; + StringBuilder constructedString = new StringBuilder("%s"); + + for (int i = 1; i < typeList.size(); i++) + { + constructedString.append(", %s"); + } + + for (int i = 0; i < typeList.size(); i++) + { + translations[i] = new TranslationTextComponent("tooltip.bloodmagic.currentBaseType." + typeList.get(i).name.toLowerCase()); + } + + ChatUtil.sendNoSpam(player, new TranslationTextComponent("ritual.bloodmagic.willConfig.set", new TranslationTextComponent(constructedString.toString(), translations))); + } else + { + ChatUtil.sendNoSpam(player, new TranslationTextComponent("ritual.bloodmagic.willConfig.void")); + } + } + + public boolean isPowered() + { + if (inverted) + return !getWorld().isBlockPowered(getPos()); + + return getWorld().isBlockPowered(getPos()); + } + + public SoulNetwork getCachedNetwork() + { + return cachedNetwork; + } + + public void setCachedNetwork(SoulNetwork cachedNetwork) + { + this.cachedNetwork = cachedNetwork; + } + + public boolean isActive() + { + return active; + } + + @Override + public void setActive(boolean active) + { + this.active = active; + } + + public boolean isRedstoned() + { + return redstoned; + } + + public void setRedstoned(boolean redstoned) + { + this.redstoned = redstoned; + } + + public int getActiveTime() + { + return activeTime; + } + + public void setActiveTime(int activeTime) + { + this.activeTime = activeTime; + } + + public Ritual getCurrentRitual() + { + return currentRitual; + } + + public void setCurrentRitual(Ritual currentRitual) + { + this.currentRitual = currentRitual; + } + + public boolean isInverted() + { + return inverted; + } + + public void setInverted(boolean inverted) + { + this.inverted = inverted; + } + + public List getCurrentActiveWillConfig() + { + return currentActiveWillConfig; + } + + public void setCurrentActiveWillConfig(List currentActiveWillConfig) + { + this.currentActiveWillConfig = currentActiveWillConfig; + } + + /** + * Used to grab the range of a ritual for a given effect. + * + * @param range - Range that needs to be pulled. + * @return - + */ + public AreaDescriptor getBlockRange(String range) + { + if (modableRangeMap.containsKey(range)) + { + return modableRangeMap.get(range); + } + + return null; + } + + @Override + public void addBlockRange(String range, AreaDescriptor defaultRange) + { + modableRangeMap.putIfAbsent(range, defaultRange.copy()); + } + + @Override + public void addBlockRanges(Map blockRanges) + { + for (Map.Entry entry : blockRanges.entrySet()) + { + modableRangeMap.putIfAbsent(entry.getKey(), entry.getValue().copy()); + } + } + + @Override + public void setBlockRange(String range, AreaDescriptor defaultRange) + { + modableRangeMap.put(range, defaultRange.copy()); + } + + @Override + public void setBlockRanges(Map blockRanges) + { + for (Map.Entry entry : blockRanges.entrySet()) + { + modableRangeMap.put(entry.getKey(), entry.getValue().copy()); + } + } + + public boolean checkBlockRanges(Map blockRanges) + { + for (Map.Entry entry : blockRanges.entrySet()) + { + if (modableRangeMap.get(entry.getKey()) == null) + return false; + } + return true; + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/tile/TileMimic.java b/src/main/java/wayoftime/bloodmagic/tile/TileMimic.java new file mode 100644 index 00000000..6652fc9b --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/TileMimic.java @@ -0,0 +1,357 @@ +package wayoftime.bloodmagic.tile; + +import java.util.List; +import java.util.Objects; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.item.BlockItem; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.play.server.SUpdateTileEntityPacket; +import net.minecraft.potion.EffectInstance; +import net.minecraft.potion.PotionUtils; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.client.model.ModelDataManager; +import net.minecraftforge.client.model.data.IModelData; +import net.minecraftforge.client.model.data.ModelDataMap; +import net.minecraftforge.client.model.data.ModelProperty; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.registries.ObjectHolder; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.util.ChatUtil; +import wayoftime.bloodmagic.util.Utils; + +public class TileMimic extends TileInventory +{ + @ObjectHolder("bloodmagic:mimic") + public static TileEntityType TYPE; + + public static final ModelProperty MIMIC = new ModelProperty<>(); + + private BlockState mimic; + + public boolean dropItemsOnBreak = true; + public CompoundNBT tileTag = new CompoundNBT(); + public TileEntity mimicedTile = null; + + public int playerCheckRadius = 5; + public int potionSpawnRadius = 5; + public int potionSpawnInterval = 40; + + private int internalCounter = 0; + + public TileMimic(TileEntityType type) + { + super(type, 2, "mimic"); + } + + public TileMimic() + { + this(TYPE); + } + + public boolean onBlockActivated(World world, BlockPos pos, BlockState state, PlayerEntity player, Hand hand, ItemStack heldItem, Direction side) + { + if (!heldItem.isEmpty() && player.isCreative()) + { + List list = PotionUtils.getEffectsFromStack(heldItem); + if (!list.isEmpty()) + { + if (!world.isRemote) + { + setInventorySlotContents(1, heldItem.copy()); + world.notifyBlockUpdate(pos, state, state, 3); + ChatUtil.sendNoSpam(player, new TranslationTextComponent("chat.bloodmagic.mimic.potionSet")); + } + return true; + } +// } else if (heldItem.getItem() == RegistrarBloodMagicItems.POTION_FLASK) +// { +// // The potion flask is empty, therefore we have to reset the stored potion. +// if (!world.isRemote) +// { +// setInventorySlotContents(1, ItemStack.EMPTY); +// world.notifyBlockUpdate(pos, state, state, 3); +// ChatUtil.sendNoSpam(player, new TranslationTextComponent("chat.bloodmagic.mimic.potionRemove")); +// } +// return true; +// } + } + + if (performSpecialAbility(player, side)) + { + return true; + } + + if (player.isSneaking()) + return false; + + if (!player.getHeldItem(hand).isEmpty() && player.getHeldItem(hand).getItem() == new ItemStack(BloodMagicBlocks.MIMIC.get()).getItem()) + return false; + + if (!getStackInSlot(0).isEmpty() && !player.getHeldItem(hand).isEmpty()) + return false; + + if (!dropItemsOnBreak && !player.isCreative()) + return false; + + Utils.insertItemToTile(this, player, 0); + ItemStack stack = getStackInSlot(0); + if (mimic == null || mimic == Blocks.AIR.getDefaultState()) + { + if (!stack.isEmpty() && stack.getItem() instanceof BlockItem && !world.isRemote) + { + Block block = ((BlockItem) stack.getItem()).getBlock(); + this.setMimic(block.getDefaultState()); +// mimic = block.getDefaultState(); +// markDirty(); + } + } + this.refreshTileEntity(); + + if (player.isCreative()) + { + dropItemsOnBreak = getStackInSlot(0).isEmpty(); + } + +// world.notifyBlockUpdate(pos, state, state, 3); + return true; + } + + public boolean performSpecialAbility(PlayerEntity player, Direction sideHit) + { + if (!player.isCreative()) + { + return false; + } + + if (player.getActiveItemStack().isEmpty() && !getStackInSlot(1).isEmpty()) + { + switch (sideHit) + { + case EAST: // When the block is clicked on the EAST or WEST side, potionSpawnRadius is + // edited. + case WEST: + if (player.isSneaking()) + { + potionSpawnRadius = Math.max(potionSpawnRadius - 1, 0); + ChatUtil.sendNoSpam(player, new TranslationTextComponent("chat.bloodmagic.mimic.potionSpawnRadius.down", potionSpawnRadius)); + } else + { + potionSpawnRadius++; + ChatUtil.sendNoSpam(player, new TranslationTextComponent("chat.bloodmagic.mimic.potionSpawnRadius.up", potionSpawnRadius)); + } + break; + case NORTH: // When the block is clicked on the NORTH or SOUTH side, detectRadius is edited. + case SOUTH: + if (player.isSneaking()) + { + playerCheckRadius = Math.max(playerCheckRadius - 1, 0); + ChatUtil.sendNoSpam(player, new TranslationTextComponent("chat.bloodmagic.mimic.detectRadius.down", playerCheckRadius)); + } else + { + playerCheckRadius++; + ChatUtil.sendNoSpam(player, new TranslationTextComponent("chat.bloodmagic.mimic.detectRadius.up", playerCheckRadius)); + } + break; + case UP: // When the block is clicked on the UP or DOWN side, potionSpawnInterval is + // edited. + case DOWN: + if (player.isSneaking()) + { + potionSpawnInterval = Math.max(potionSpawnInterval - 1, 1); + ChatUtil.sendNoSpam(player, new TranslationTextComponent("chat.bloodmagic.mimic.potionInterval.down", potionSpawnInterval)); + } else + { + potionSpawnInterval++; + ChatUtil.sendNoSpam(player, new TranslationTextComponent("chat.bloodmagic.mimic.potionInterval.up", potionSpawnInterval)); + } + break; + default: + break; + + } + + return true; + } + + return false; + } + + public void refreshTileEntity() + { + if (mimicedTile != null) + { + dropMimicedTileInventory(); + } + mimicedTile = getTileFromStackWithTag(getWorld(), pos, getStackInSlot(0), tileTag, mimic); + } + + public void dropMimicedTileInventory() + { + if (!getWorld().isRemote && mimicedTile instanceof IInventory) + { + InventoryHelper.dropInventoryItems(getWorld(), getPos(), (IInventory) mimicedTile); + } + } + + @Nullable + public static TileEntity getTileFromStackWithTag(World world, BlockPos pos, ItemStack stack, @Nullable CompoundNBT tag, BlockState replacementState) + { + if (!stack.isEmpty() && stack.getItem() instanceof BlockItem) + { + Block block = ((BlockItem) stack.getItem()).getBlock(); + BlockState state = replacementState; + if (block.hasTileEntity(state)) + { + TileEntity tile = block.createTileEntity(state, world); + + if (tile == null) + return null; + + if (tag != null) + { + CompoundNBT copyTag = tag.copy(); + copyTag.putInt("x", pos.getX()); + copyTag.putInt("y", pos.getY()); + copyTag.putInt("z", pos.getZ()); + tile.deserializeNBT(copyTag); + } + + tile.setWorldAndPos(world, pos); + + return tile; + } + } + + return null; + } + + public void setMimic(BlockState mimic) + { + this.mimic = mimic; + markDirty(); + world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), Constants.BlockFlags.BLOCK_UPDATE + Constants.BlockFlags.NOTIFY_NEIGHBORS); + } + + public BlockState getMimic() + { + return mimic; + } + + // The getUpdateTag()/handleUpdateTag() pair is called whenever the client + // receives a new chunk + // it hasn't seen before. i.e. the chunk is loaded + + @Override + public CompoundNBT getUpdateTag() + { + CompoundNBT tag = super.getUpdateTag(); + writeMimic(tag); + return tag; + } + + // The getUpdatePacket()/onDataPacket() pair is used when a block update happens + // on the client + // (a blockstate change or an explicit notificiation of a block update from the + // server). It's + // easiest to implement them based on getUpdateTag()/handleUpdateTag() + + @Nullable + @Override + public SUpdateTileEntityPacket getUpdatePacket() + { + return new SUpdateTileEntityPacket(pos, 1, getUpdateTag()); + } + + @Override + public void onDataPacket(NetworkManager net, SUpdateTileEntityPacket pkt) + { + BlockState oldMimic = mimic; + CompoundNBT tag = pkt.getNbtCompound(); + deserialize(tag); + if (!Objects.equals(oldMimic, mimic)) + { + ModelDataManager.requestModelDataRefresh(this); + world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), Constants.BlockFlags.BLOCK_UPDATE + Constants.BlockFlags.NOTIFY_NEIGHBORS); + } + } + + @Nonnull + @Override + public IModelData getModelData() + { + return new ModelDataMap.Builder().withInitial(MIMIC, mimic).build(); + } + + @Override + public void deserialize(CompoundNBT tag) + { + super.deserialize(tag); + + dropItemsOnBreak = tag.getBoolean("dropItemsOnBreak"); + tileTag = tag.getCompound("tileTag"); +// stateOfReplacedBlock = StateUtil.parseState(tag.getString("stateOfReplacedBlock")); + readMimic(tag); + mimicedTile = getTileFromStackWithTag(getWorld(), pos, getStackInSlot(0), tileTag, mimic); + playerCheckRadius = tag.getInt("playerCheckRadius"); + potionSpawnRadius = tag.getInt("potionSpawnRadius"); + potionSpawnInterval = Math.max(1, tag.getInt("potionSpawnInterval")); + } + + private void readMimic(CompoundNBT tag) + { + if (tag.contains("mimic")) + { + mimic = NBTUtil.readBlockState(tag.getCompound("mimic")); + } + } + + @Override + public CompoundNBT serialize(CompoundNBT tag) + { + tag.putBoolean("dropItemsOnBreak", dropItemsOnBreak); + tag.put("tileTag", tileTag); + tag.putInt("playerCheckRadius", playerCheckRadius); + tag.putInt("potionSpawnRadius", potionSpawnRadius); + tag.putInt("potionSpawnInterval", potionSpawnInterval); +// tag.putString("stateOfReplacedBlock", stateOfReplacedBlock.toString()); + writeMimic(tag); + return super.serialize(tag); + } + + private void writeMimic(CompoundNBT tag) + { + if (mimic != null) + { + tag.put("mimic", NBTUtil.writeBlockState(mimic)); + } + } + + @Override + public void dropItems() + { + if (dropItemsOnBreak) + { + InventoryHelper.dropInventoryItems(getWorld(), getPos(), this); + } + + dropMimicedTileInventory(); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/tile/TileShapedExplosive.java b/src/main/java/wayoftime/bloodmagic/tile/TileShapedExplosive.java new file mode 100644 index 00000000..5fe75fcd --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/TileShapedExplosive.java @@ -0,0 +1,176 @@ +package wayoftime.bloodmagic.tile; + +import com.mojang.datafixers.util.Pair; + +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.LootContext; +import net.minecraft.loot.LootParameters; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.registries.ObjectHolder; +import wayoftime.bloodmagic.common.block.BlockShapedExplosive; + +public class TileShapedExplosive extends TileExplosiveCharge +{ + @ObjectHolder("bloodmagic:shaped_explosive") + public static TileEntityType TYPE; + + public double internalCounter = 0; + public int explosionRadius; + public int explosionDepth; + + public TileShapedExplosive(TileEntityType type, int explosionRadius, int explosionDepth) + { + super(type); + this.explosionRadius = explosionRadius; + this.explosionDepth = explosionDepth; + } + + public TileShapedExplosive() + { + this(TYPE, 2, 5); + } + + @Override + public void onUpdate() + { + if (world.isRemote) + { + return; + } +// System.out.println("Counter: " + internalCounter); + + internalCounter++; + if (internalCounter == 20) + { +// worldIn.playSound((PlayerEntity)null, tntentity.getPosX(), tntentity.getPosY(), tntentity.getPosZ(), SoundEvents.ENTITY_TNT_PRIMED, SoundCategory.BLOCKS, 1.0F, 1.0F); + world.playSound((PlayerEntity) null, this.getPos().getX() + 0.5, this.getPos().getY() + 0.5, this.getPos().getZ() + 0.5, SoundEvents.ITEM_FLINTANDSTEEL_USE, SoundCategory.BLOCKS, 1.0F, world.rand.nextFloat() * 0.4F + 0.8F); + ((ServerWorld) this.world).spawnParticle(ParticleTypes.FLAME, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 5, 0.02, 0.03, 0.02, 0); + } + + if (internalCounter == 30) + { + world.playSound((PlayerEntity) null, this.getPos().getX() + 0.5, this.getPos().getY() + 0.5, this.getPos().getZ() + 0.5, SoundEvents.ENTITY_TNT_PRIMED, SoundCategory.BLOCKS, 1.0F, 1.0F); + } + + if (internalCounter < 30) + { + return; + } + + if (world.rand.nextDouble() < 0.3) + { + ((ServerWorld) this.world).spawnParticle(ParticleTypes.SMOKE, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 1, 0.0D, 0.0D, 0.0D, 0); + } + + if (internalCounter == 100) + { + world.playSound((PlayerEntity) null, this.getPos().getX() + 0.5, this.getPos().getY() + 0.5, this.getPos().getZ() + 0.5, SoundEvents.ENTITY_GENERIC_EXPLODE, SoundCategory.BLOCKS, 4.0F, (1.0F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.2F) * 0.7F); + + Direction explosiveDirection = this.getBlockState().get(BlockShapedExplosive.ATTACHED).getOpposite(); + Direction sweepDir1 = Direction.UP; + Direction sweepDir2 = Direction.UP; + + int numParticles = explosionDepth * (explosionRadius + 1); + + ((ServerWorld) this.world).spawnParticle(ParticleTypes.EXPLOSION, pos.getX() + 0.5 + explosiveDirection.getXOffset() * explosionDepth / 2d, pos.getY() + 0.5 + explosiveDirection.getYOffset() * explosionDepth / 2d, pos.getZ() + 0.5 + explosiveDirection.getZOffset() * explosionDepth / 2d, numParticles, 1.0D, 1.0D, 1.0D, 0); + + switch (explosiveDirection) + { + case UP: + case DOWN: + sweepDir1 = Direction.NORTH; + sweepDir2 = Direction.EAST; + break; + case EAST: + case WEST: + sweepDir1 = Direction.NORTH; + sweepDir2 = Direction.UP; + break; + case NORTH: + case SOUTH: + sweepDir1 = Direction.EAST; + sweepDir2 = Direction.UP; + break; + } + + ItemStack toolStack = this.getHarvestingTool(); + + ObjectArrayList> objectarraylist = new ObjectArrayList<>(); + + BlockPos initialPos = getPos(); + for (int i = 1; i <= explosionDepth; i++) + { + for (int j = -explosionRadius; j <= explosionRadius; j++) + { + for (int k = -explosionRadius; k <= explosionRadius; k++) + { + BlockPos blockpos = initialPos.offset(explosiveDirection, i).offset(sweepDir1, j).offset(sweepDir2, k); + + BlockState blockstate = this.world.getBlockState(blockpos); + Block block = blockstate.getBlock(); + if (!blockstate.isAir(this.world, blockpos) && blockstate.getBlockHardness(world, blockpos) != -1.0F) + { + BlockPos blockpos1 = blockpos.toImmutable(); +// this.world.getProfiler().startSection("explosion_blocks"); + if (this.world instanceof ServerWorld) + { + TileEntity tileentity = blockstate.hasTileEntity() ? this.world.getTileEntity(blockpos) + : null; + LootContext.Builder lootcontext$builder = (new LootContext.Builder((ServerWorld) this.world)).withRandom(this.world.rand).withParameter(LootParameters.field_237457_g_, Vector3d.copyCentered(blockpos)).withParameter(LootParameters.TOOL, toolStack).withNullableParameter(LootParameters.BLOCK_ENTITY, tileentity); +// if (this.mode == Explosion.Mode.DESTROY) { +// lootcontext$builder.withParameter(LootParameters.EXPLOSION_RADIUS, this.size); +// } + + blockstate.getDrops(lootcontext$builder).forEach((stack) -> { + handleExplosionDrops(objectarraylist, stack, blockpos1); + }); + + world.setBlockState(blockpos, Blocks.AIR.getDefaultState(), 3); + +// blockstate.onBlockExploded(this.world, blockpos, null); +// this.world.getProfiler().endSection(); + } + } + } + } + } + + for (Pair pair : objectarraylist) + { + Block.spawnAsEntity(this.world, pair.getSecond(), pair.getFirst()); + } + + world.setBlockState(getPos(), Blocks.AIR.getDefaultState()); + } + } + + @Override + public void deserialize(CompoundNBT tag) + { + super.deserialize(tag); + internalCounter = tag.getDouble("internalCounter"); + } + + @Override + public CompoundNBT serialize(CompoundNBT tag) + { + super.serialize(tag); + tag.putDouble("internalCounter", internalCounter); + + return tag; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/tile/TileSoulForge.java b/src/main/java/wayoftime/bloodmagic/tile/TileSoulForge.java new file mode 100644 index 00000000..76c8aee2 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/TileSoulForge.java @@ -0,0 +1,448 @@ +package wayoftime.bloodmagic.tile; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.ITickableTileEntity; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.IIntArray; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.items.ItemHandlerHelper; +import net.minecraftforge.registries.ObjectHolder; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.api.compat.IDemonWill; +import wayoftime.bloodmagic.api.compat.IDemonWillConduit; +import wayoftime.bloodmagic.api.compat.IDemonWillGem; +import wayoftime.bloodmagic.api.event.BloodMagicCraftedEvent; +import wayoftime.bloodmagic.demonaura.WorldDemonWillHandler; +import wayoftime.bloodmagic.impl.BloodMagicAPI; +import wayoftime.bloodmagic.recipe.RecipeTartaricForge; +import wayoftime.bloodmagic.tile.container.ContainerSoulForge; +import wayoftime.bloodmagic.util.Constants; + +public class TileSoulForge extends TileInventory implements ITickableTileEntity, INamedContainerProvider, IDemonWillConduit +{ + @ObjectHolder("bloodmagic:soulforge") + public static TileEntityType TYPE; + + public static final int ticksRequired = 100; + public static final double worldWillTransferRate = 1; + + public static final int soulSlot = 4; + public static final int outputSlot = 5; + + // Input slots are from 0 to 3. + + public int burnTime = 0; + + public TileSoulForge(TileEntityType type) + { + super(type, 6, "soulforge"); + } + + public TileSoulForge() + { + this(TYPE); + } + + @Override + public void deserialize(CompoundNBT tag) + { + super.deserialize(tag); + + burnTime = tag.getInt(Constants.NBT.SOUL_FORGE_BURN); + } + + @Override + public CompoundNBT serialize(CompoundNBT tag) + { + super.serialize(tag); + + tag.putInt(Constants.NBT.SOUL_FORGE_BURN, burnTime); + return tag; + } + + public final IIntArray TileData = new IIntArray() + { + @Override + public int get(int index) + { + switch (index) + { + case 0: + return burnTime; + case 1: + return ticksRequired; + case 2: + return 0; + default: + throw new IllegalArgumentException("Invalid index: " + index); + } + } + + @Override + public void set(int index, int value) + { + throw new IllegalStateException("Cannot set values through IIntArray"); + } + + @Override + public int size() + { + return 3; + } + }; + + @Override + public void tick() + { + if (!hasSoulGemOrSoul()) + { + burnTime = 0; + return; + } + + if (!getWorld().isRemote) + { + for (EnumDemonWillType type : EnumDemonWillType.values()) + { + double willInWorld = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); + double filled = Math.min(willInWorld, worldWillTransferRate); + + if (filled > 0) + { + filled = this.fillDemonWill(type, filled, false); + filled = WorldDemonWillHandler.drainWill(getWorld(), pos, type, filled, false); + + if (filled > 0) + { + this.fillDemonWill(type, filled, true); + WorldDemonWillHandler.drainWill(getWorld(), pos, type, filled, true); + } + } + } + } + + double soulsInGem = getWill(EnumDemonWillType.DEFAULT); + + List inputList = new ArrayList<>(); + + for (int i = 0; i < 4; i++) if (!getStackInSlot(i).isEmpty()) + inputList.add(getStackInSlot(i)); + + RecipeTartaricForge recipe = BloodMagicAPI.INSTANCE.getRecipeRegistrar().getTartaricForge(world, inputList); + if (recipe != null && (soulsInGem >= recipe.getMinimumSouls() || burnTime > 0)) + { + if (canCraft(recipe)) + { + burnTime++; + + if (burnTime == ticksRequired) + { + if (!getWorld().isRemote) + { + double requiredSouls = recipe.getSoulDrain(); + if (requiredSouls > 0) + { + if (!getWorld().isRemote && soulsInGem >= recipe.getMinimumSouls()) + { + consumeSouls(EnumDemonWillType.DEFAULT, requiredSouls); + } + } + + if (!getWorld().isRemote && soulsInGem >= recipe.getMinimumSouls()) + craftItem(recipe); + } + + burnTime = 0; + } else if (burnTime > ticksRequired + 10) + { + burnTime = 0; + } + } else + { + burnTime = 0; + } + } else + { + burnTime = 0; + } + } + + private boolean canCraft(RecipeTartaricForge recipe) + { + if (recipe == null) + return false; + + ItemStack currentOutputStack = getStackInSlot(outputSlot); + if (recipe.getOutput().isEmpty()) + return false; + if (currentOutputStack.isEmpty()) + return true; + if (!currentOutputStack.isItemEqual(recipe.getOutput())) + return false; + int result = currentOutputStack.getCount() + recipe.getOutput().getCount(); + return result <= getInventoryStackLimit() && result <= currentOutputStack.getMaxStackSize(); + + } + + public void craftItem(RecipeTartaricForge recipe) + { + if (this.canCraft(recipe)) + { + ItemStack currentOutputStack = getStackInSlot(outputSlot); + + List inputList = new ArrayList<>(); + for (int i = 0; i < 4; i++) if (!getStackInSlot(i).isEmpty()) + inputList.add(getStackInSlot(i).copy()); + + BloodMagicCraftedEvent.SoulForge event = new BloodMagicCraftedEvent.SoulForge(recipe.getOutput().copy(), inputList.toArray(new ItemStack[0])); + MinecraftForge.EVENT_BUS.post(event); + + if (currentOutputStack.isEmpty()) + { + setInventorySlotContents(outputSlot, event.getOutput()); + } else if (ItemHandlerHelper.canItemStacksStack(currentOutputStack, event.getOutput())) + { + currentOutputStack.grow(event.getOutput().getCount()); + } + + moveRemainingWillInConsumedInv(); + + consumeInventory(); + } + } + + @Override + public Container createMenu(int p_createMenu_1_, PlayerInventory p_createMenu_2_, PlayerEntity p_createMenu_3_) + { + assert world != null; + return new ContainerSoulForge(this, TileData, p_createMenu_1_, p_createMenu_2_); + } + + @Override + public ITextComponent getDisplayName() + { + return new StringTextComponent("Hellfire Forge"); + } + + public boolean hasSoulGemOrSoul() + { + for (int i = 0; i <= 4; i++) + { + ItemStack soulStack = getStackInSlot(i); + + if (!soulStack.isEmpty()) + { + if (soulStack.getItem() instanceof IDemonWill || soulStack.getItem() instanceof IDemonWillGem) + { + return true; + } + } + } + + return false; + } + + public double getProgressForGui() + { + return ((double) burnTime) / ticksRequired; + } + + public double getWill(EnumDemonWillType type) + { + double will = 0; + for (int i = 0; i <= 4; i++) + { + ItemStack soulStack = getStackInSlot(i); + + if (soulStack != null) + { + if (soulStack.getItem() instanceof IDemonWill && ((IDemonWill) soulStack.getItem()).getType(soulStack) == type) + { + IDemonWill soul = (IDemonWill) soulStack.getItem(); + will += soul.getWill(type, soulStack); + } + + if (soulStack.getItem() instanceof IDemonWillGem) + { + IDemonWillGem soul = (IDemonWillGem) soulStack.getItem(); + will += soul.getWill(type, soulStack); + } + } + } + + return will; + } + + public void moveRemainingWillInConsumedInv() + { + ItemStack outputStack = getStackInSlot(outputSlot); + if (outputStack != null) + { + if (outputStack.getItem() instanceof IDemonWillGem) + { + IDemonWillGem filledGem = (IDemonWillGem) outputStack.getItem(); + for (int i = 0; i < 4; i++) + { + ItemStack soulStack = getStackInSlot(i); + if (soulStack != null && soulStack.getItem() instanceof IDemonWillGem) + { + IDemonWillGem syphonedGem = (IDemonWillGem) soulStack.getItem(); + for (EnumDemonWillType type : EnumDemonWillType.values()) + { + // Skipped a few possibly redundant checks. Also could blow up in my face rooVV + double willInGem = syphonedGem.getWill(type, soulStack); + if (willInGem > 0) + { + filledGem.fillWill(type, outputStack, willInGem, true); + } + } + } + + } + } + } + } + + public double consumeSouls(EnumDemonWillType type, double requested) + { + double consumed = 0; + + for (int i = 0; i <= 4; i++) + { + ItemStack soulStack = getStackInSlot(i); + if (soulStack != null) + { + if (soulStack.getItem() instanceof IDemonWill && ((IDemonWill) soulStack.getItem()).getType(soulStack) == type) + { + IDemonWill soul = (IDemonWill) soulStack.getItem(); + double souls = soul.drainWill(type, soulStack, requested - consumed); + if (soul.getWill(type, soulStack) <= 0) + { + setInventorySlotContents(i, ItemStack.EMPTY); + } + consumed += souls; +// return souls; + } + + if (soulStack.getItem() instanceof IDemonWillGem) + { + IDemonWillGem soul = (IDemonWillGem) soulStack.getItem(); + double souls = soul.drainWill(type, soulStack, requested - consumed, true); + consumed += souls; + } + } + + if (consumed >= requested) + { + return consumed; + } + } + + return consumed; + } + + public void consumeInventory() + { + for (int i = 0; i < 4; i++) + { + ItemStack inputStack = getStackInSlot(i); + if (!inputStack.isEmpty()) + { + if (inputStack.getItem().hasContainerItem(inputStack)) + { + setInventorySlotContents(i, inputStack.getItem().getContainerItem(inputStack)); + continue; + } + + inputStack.shrink(1); + if (inputStack.isEmpty()) + { + setInventorySlotContents(i, ItemStack.EMPTY); + } + } + } + } + + @Override + public int getWeight() + { + return 50; + } + + @Override + public double fillDemonWill(EnumDemonWillType type, double amount, boolean doFill) + { + if (amount <= 0) + { + return 0; + } + + if (!canFill(type)) + { + return 0; + } + + ItemStack stack = this.getStackInSlot(soulSlot); + if (stack.isEmpty() || !(stack.getItem() instanceof IDemonWillGem)) + { + return 0; + } + + IDemonWillGem willGem = (IDemonWillGem) stack.getItem(); + return willGem.fillWill(type, stack, amount, doFill); + } + + @Override + public double drainDemonWill(EnumDemonWillType type, double amount, boolean doDrain) + { + ItemStack stack = this.getStackInSlot(soulSlot); + if (stack.isEmpty() || !(stack.getItem() instanceof IDemonWillGem)) + { + return 0; + } + + IDemonWillGem willGem = (IDemonWillGem) stack.getItem(); + + double drained = amount; + double current = willGem.getWill(type, stack); + if (current < drained) + { + drained = current; + } + + if (doDrain) + { + drained = willGem.drainWill(type, stack, drained, true); + } + + return drained; + } + + @Override + public boolean canFill(EnumDemonWillType type) + { + return true; + } + + @Override + public boolean canDrain(EnumDemonWillType type) + { + return true; + } + + @Override + public double getCurrentWill(EnumDemonWillType type) + { + return 0; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/tile/TileVeinMineCharge.java b/src/main/java/wayoftime/bloodmagic/tile/TileVeinMineCharge.java new file mode 100644 index 00000000..60222fb0 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/TileVeinMineCharge.java @@ -0,0 +1,285 @@ +package wayoftime.bloodmagic.tile; + +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import com.mojang.datafixers.util.Pair; + +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.LootContext; +import net.minecraft.loot.LootParameters; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Vector3i; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.registries.ObjectHolder; +import wayoftime.bloodmagic.common.block.BlockShapedExplosive; + +public class TileVeinMineCharge extends TileExplosiveCharge +{ + @ObjectHolder("bloodmagic:veinmine_charge") + public static TileEntityType TYPE; + + private Map veinPartsMap; + private List veinPartsCache; + private boolean finishedAnalysis; + + private Vector3i[] diagonals = new Vector3i[] { new Vector3i(0, 1, 1), new Vector3i(0, 1, -1), + new Vector3i(0, -1, 1), new Vector3i(0, -1, -1), new Vector3i(1, 0, 1), new Vector3i(-1, 0, 1), + new Vector3i(1, 0, -1), new Vector3i(-1, 0, -1), new Vector3i(1, 1, 0), new Vector3i(-1, 1, 0), + new Vector3i(1, -1, 0), new Vector3i(-1, -1, 0) }; + + public double internalCounter = 0; + + public int currentBlocks = 0; + + public int maxBlocks = 128; + + public TileVeinMineCharge(TileEntityType type, int maxBlocks) + { + super(type); + + this.maxBlocks = maxBlocks; + } + + public TileVeinMineCharge() + { + this(TYPE, 64 * 3); + } + + @Override + public void onUpdate() + { + if (world.isRemote) + { + return; + } +// System.out.println("Counter: " + internalCounter); + + Direction explosiveDirection = this.getBlockState().get(BlockShapedExplosive.ATTACHED).getOpposite(); + BlockState attachedState = world.getBlockState(pos.offset(explosiveDirection)); + Block attachedBlock = attachedState.getBlock(); + if (!isValidStartingBlock(attachedState)) + { + return; + } +// if (!BlockTags.LOGS.contains(attachedState.getBlock()) && !BlockTags.LEAVES.contains(attachedState.getBlock())) +// { +// return; +// } + + if (veinPartsMap == null) + { + veinPartsMap = new HashMap(); + veinPartsMap.put(pos.offset(explosiveDirection), false); + veinPartsCache = new LinkedList(); + veinPartsCache.add(pos.offset(explosiveDirection)); + internalCounter = 0; +// veinPartsMap.add(pos.offset(explosiveDirection)); + } + + boolean foundNew = false; + List newPositions = new LinkedList(); + for (BlockPos currentPos : veinPartsCache) + { + if (!veinPartsMap.getOrDefault(currentPos, false)) // If the BlockPos wasn't checked yet + { +// BlockPos currentPos = entry.getKey(); + for (Direction dir : Direction.values()) + { + BlockPos checkPos = currentPos.offset(dir); + if (veinPartsMap.containsKey(checkPos)) + { + continue; + } + + BlockState checkState = world.getBlockState(checkPos); + + boolean isTree = false; + if (currentBlocks >= maxBlocks) + { + continue; + } + if (isValidBlock(attachedState, checkState)) + { + currentBlocks++; + isTree = true; + + } + + if (isTree) + { + veinPartsMap.put(checkPos, false); + newPositions.add(checkPos); + foundNew = true; + } + } + + if (this.checkDiagonals()) + { + for (Vector3i vec : this.diagonals) + { + BlockPos checkPos = currentPos.add(vec); + if (veinPartsMap.containsKey(checkPos)) + { + continue; + } + + BlockState checkState = world.getBlockState(checkPos); + + boolean isTree = false; + if (currentBlocks >= maxBlocks) + { + continue; + } + if (isValidBlock(attachedState, checkState)) + { + currentBlocks++; + isTree = true; + + } + + if (isTree) + { + veinPartsMap.put(checkPos, false); + newPositions.add(checkPos); + foundNew = true; + } + } + } + + veinPartsMap.put(currentPos, true); + if (currentBlocks >= maxBlocks) + { + finishedAnalysis = true; + break; + } + } + } + + veinPartsCache.addAll(newPositions); + +// System.out.println("Found blocks: " + veinPartsMap.size()); + + if (foundNew) + { + return; + } + + internalCounter++; + if (internalCounter == 20) + { +// worldIn.playSound((PlayerEntity)null, tntentity.getPosX(), tntentity.getPosY(), tntentity.getPosZ(), SoundEvents.ENTITY_TNT_PRIMED, SoundCategory.BLOCKS, 1.0F, 1.0F); + world.playSound((PlayerEntity) null, this.getPos().getX() + 0.5, this.getPos().getY() + 0.5, this.getPos().getZ() + 0.5, SoundEvents.ITEM_FLINTANDSTEEL_USE, SoundCategory.BLOCKS, 1.0F, world.rand.nextFloat() * 0.4F + 0.8F); + ((ServerWorld) this.world).spawnParticle(ParticleTypes.FLAME, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 5, 0.02, 0.03, 0.02, 0); + } + + if (internalCounter == 30) + { + world.playSound((PlayerEntity) null, this.getPos().getX() + 0.5, this.getPos().getY() + 0.5, this.getPos().getZ() + 0.5, SoundEvents.ENTITY_TNT_PRIMED, SoundCategory.BLOCKS, 1.0F, 1.0F); + } + + if (internalCounter < 30) + { + return; + } + + if (world.rand.nextDouble() < 0.3) + { + ((ServerWorld) this.world).spawnParticle(ParticleTypes.SMOKE, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 1, 0.0D, 0.0D, 0.0D, 0); + } + + if (internalCounter == 100) + { + ItemStack toolStack = this.getHarvestingTool(); + world.playSound((PlayerEntity) null, this.getPos().getX() + 0.5, this.getPos().getY() + 0.5, this.getPos().getZ() + 0.5, SoundEvents.ENTITY_GENERIC_EXPLODE, SoundCategory.BLOCKS, 4.0F, (1.0F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.2F) * 0.7F); + + int numParticles = 10; + + ((ServerWorld) this.world).spawnParticle(ParticleTypes.EXPLOSION, pos.getX() + 0.5 + explosiveDirection.getXOffset(), pos.getY() + 0.5 + explosiveDirection.getYOffset(), pos.getZ() + 0.5 + explosiveDirection.getZOffset(), numParticles, 1.0D, 1.0D, 1.0D, 0); + + ObjectArrayList> objectarraylist = new ObjectArrayList<>(); + + for (BlockPos blockPos : veinPartsCache) + { +// BlockPos blockpos = initialPos.offset(explosiveDirection, i).offset(sweepDir1, j).offset(sweepDir2, k); + + BlockState blockstate = this.world.getBlockState(blockPos); + Block block = blockstate.getBlock(); + if (!blockstate.isAir(this.world, blockPos)) + { + BlockPos blockpos1 = blockPos.toImmutable(); +// this.world.getProfiler().startSection("explosion_blocks"); + if (this.world instanceof ServerWorld) + { + TileEntity tileentity = blockstate.hasTileEntity() ? this.world.getTileEntity(blockPos) : null; + LootContext.Builder lootcontext$builder = (new LootContext.Builder((ServerWorld) this.world)).withRandom(this.world.rand).withParameter(LootParameters.field_237457_g_, Vector3d.copyCentered(blockPos)).withParameter(LootParameters.TOOL, toolStack).withNullableParameter(LootParameters.BLOCK_ENTITY, tileentity); +// if (this.mode == Explosion.Mode.DESTROY) { +// lootcontext$builder.withParameter(LootParameters.EXPLOSION_RADIUS, this.size); +// } + + blockstate.getDrops(lootcontext$builder).forEach((stack) -> { + handleExplosionDrops(objectarraylist, stack, blockpos1); + }); + + world.setBlockState(blockPos, Blocks.AIR.getDefaultState(), 3); + +// blockstate.onBlockExploded(this.world, blockpos, null); +// this.world.getProfiler().endSection(); + } + } + } + + for (Pair pair : objectarraylist) + { + Block.spawnAsEntity(this.world, pair.getSecond(), pair.getFirst()); + } + + world.setBlockState(getPos(), Blocks.AIR.getDefaultState()); + } + } + + @Override + public void deserialize(CompoundNBT tag) + { + internalCounter = tag.getDouble("internalCounter"); + maxBlocks = tag.getInt("maxBlocks"); + } + + @Override + public CompoundNBT serialize(CompoundNBT tag) + { + tag.putDouble("internalCounter", internalCounter); + tag.putInt("maxBlocks", maxBlocks); + return tag; + } + + public boolean isValidBlock(BlockState originalBlockState, BlockState testState) + { + return originalBlockState.getBlock() == testState.getBlock(); + } + + public boolean isValidStartingBlock(BlockState originalBlockState) + { + return true; + } + + public boolean checkDiagonals() + { + return true; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/tile/base/TileBase.java b/src/main/java/wayoftime/bloodmagic/tile/base/TileBase.java new file mode 100644 index 00000000..6e7171db --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/base/TileBase.java @@ -0,0 +1,138 @@ +package wayoftime.bloodmagic.tile.base; + +import net.minecraft.block.BlockState; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.play.server.SUpdateTileEntityPacket; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityType; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +/** + * Base tile class. + *

+ * Handles data syncing and core data writing/reading. + */ +public abstract class TileBase extends TileEntity +{ + public TileBase(TileEntityType type) + { + super(type); + } + + /** + * read method + */ + @Override + public final void read(BlockState state, CompoundNBT compound) + { + super.read(state, compound); + deserializeBase(compound); + deserialize(compound); + } + + @Override + public final CompoundNBT write(CompoundNBT compound) + { + super.write(compound); + serializeBase(compound); + return serialize(compound); + } + + /** + * Called by {@link #func_230337_a_(BlockState, CompoundNBT)} + *

+ * Internal data (such as coordinates) are handled for you. Just read the data + * you need. + * + * @param tagCompound - The tag compound to read from + */ + public void deserialize(CompoundNBT tagCompound) + { + + } + + /** + * Package private method for reading base data from the tag compound. + * + * @param tagCompound - The tag compound to read from + * @see TileTicking + */ + void deserializeBase(CompoundNBT tagCompound) + { + + } + + /** + * Called by {@link #writeToNBT(CompoundNBT)} + *

+ * Internal data (such as coordinates) are handled for you. Just read the data + * you need. + * + * @param tagCompound - The tag compound to write to. + * @return the modified tag compound + */ + public CompoundNBT serialize(CompoundNBT tagCompound) + { + return tagCompound; + } + + /** + * Package private method for writing base data to the tag compound. + * + * @param tagCompound - The tag compound to write to. + * @return the modified tag compound + * @see TileTicking + */ + CompoundNBT serializeBase(CompoundNBT tagCompound) + { + return tagCompound; + } + + public void notifyUpdate() + { + BlockState state = getWorld().getBlockState(getPos()); + getWorld().notifyBlockUpdate(getPos(), state, state, 3); + } + +// // Data syncing +// +// @Override +// public boolean shouldRefresh(World world, BlockPos pos, BlockState oldState, BlockState newState) +// { +// return oldState.getBlock() != newState.getBlock(); +// } + + @Override + public SUpdateTileEntityPacket getUpdatePacket() + { + return new SUpdateTileEntityPacket(getPos(), -999, getUpdateTag()); + } + +// @Override +// public void handleUpdateTag(BlockState state, CompoundNBT tag) +// { +// read(state, tag); +// } + + @Override + @OnlyIn(Dist.CLIENT) + public void onDataPacket(NetworkManager net, SUpdateTileEntityPacket pkt) + { + super.onDataPacket(net, pkt); + handleUpdateTag(getBlockState(), pkt.getNbtCompound()); + } + + @Override + public CompoundNBT getUpdateTag() + { + return write(new CompoundNBT()); + } + + @Override + public void handleUpdateTag(BlockState state, CompoundNBT tag) + { + read(state, tag); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/tile/base/TileTicking.java b/src/main/java/wayoftime/bloodmagic/tile/base/TileTicking.java new file mode 100644 index 00000000..ffc70ebc --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/base/TileTicking.java @@ -0,0 +1,71 @@ +package wayoftime.bloodmagic.tile.base; + +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.ITickableTileEntity; +import net.minecraft.tileentity.TileEntityType; + +/** + * Base class for tiles that tick. Allows disabling the ticking + * programmatically. + */ +// TODO - Move implementations that depend on existed ticks to new methods from here. +public abstract class TileTicking extends TileBase implements ITickableTileEntity +{ + private int ticksExisted; + private boolean shouldTick = true; + + public TileTicking(TileEntityType type) + { + super(type); + } + + @Override + public final void tick() + { + if (shouldTick()) + { + ticksExisted++; + onUpdate(); + } + } + + @Override + void deserializeBase(CompoundNBT tagCompound) + { + this.ticksExisted = tagCompound.getInt("ticksExisted"); + this.shouldTick = tagCompound.getBoolean("shouldTick"); + } + + @Override + CompoundNBT serializeBase(CompoundNBT tagCompound) + { + tagCompound.putInt("ticksExisted", getTicksExisted()); + tagCompound.putBoolean("shouldTick", shouldTick()); + return tagCompound; + } + + /** + * Called every tick that {@link #shouldTick()} is true. + */ + public abstract void onUpdate(); + + public int getTicksExisted() + { + return ticksExisted; + } + + public void resetLifetime() + { + ticksExisted = 0; + } + + public boolean shouldTick() + { + return shouldTick; + } + + public void setShouldTick(boolean shouldTick) + { + this.shouldTick = shouldTick; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/tile/container/ContainerAlchemicalReactionChamber.java b/src/main/java/wayoftime/bloodmagic/tile/container/ContainerAlchemicalReactionChamber.java new file mode 100644 index 00000000..75dd0583 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/container/ContainerAlchemicalReactionChamber.java @@ -0,0 +1,198 @@ +package wayoftime.bloodmagic.tile.container; + +import java.util.Optional; + +import javax.annotation.Nullable; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidUtil; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.tags.BloodMagicTags; +import wayoftime.bloodmagic.tile.TileAlchemicalReactionChamber; + +public class ContainerAlchemicalReactionChamber extends Container +{ + public final TileAlchemicalReactionChamber tileARC; + +// public ContainerSoulForge(InventoryPlayer inventoryPlayer, IInventory tileARC) +// { +// this.tileARC = tileARC; +// +// } + + public ContainerAlchemicalReactionChamber(int windowId, PlayerInventory playerInventory, PacketBuffer extraData) + { + this((TileAlchemicalReactionChamber) playerInventory.player.world.getTileEntity(extraData.readBlockPos()), windowId, playerInventory); + } + + public ContainerAlchemicalReactionChamber(@Nullable TileAlchemicalReactionChamber tile, int windowId, PlayerInventory playerInventory) + { + super(BloodMagicBlocks.ARC_CONTAINER.get(), windowId); + this.tileARC = tile; + this.setup(playerInventory, tile); + } + + public void setup(PlayerInventory inventory, IInventory tileARC) + { + this.addSlot(new SlotARCTool(tileARC, TileAlchemicalReactionChamber.ARC_TOOL_SLOT, 35, 51)); + for (int i = 0; i < TileAlchemicalReactionChamber.NUM_OUTPUTS; i++) + { + this.addSlot(new SlotOutput(tileARC, TileAlchemicalReactionChamber.OUTPUT_SLOT + i, 116, 15 + i * 18)); + } + this.addSlot(new Slot(tileARC, TileAlchemicalReactionChamber.INPUT_SLOT, 71, 15)); + this.addSlot(new SlotBucket(tileARC, TileAlchemicalReactionChamber.INPUT_BUCKET_SLOT, 8, 15, true)); + this.addSlot(new SlotBucket(tileARC, TileAlchemicalReactionChamber.OUTPUT_BUCKET_SLOT, 152, 87, false)); + +// this.addSlot(new SlotSoul(tileARC, TileSoulForge.soulSlot, 152, 51)); + + for (int i = 0; i < 3; i++) + { + for (int j = 0; j < 9; j++) + { + addSlot(new Slot(inventory, j + i * 9 + 9, 8 + j * 18, 123 + i * 18)); + } + } + + for (int i = 0; i < 9; i++) + { + addSlot(new Slot(inventory, i, 8 + i * 18, 181)); + } + } + + @Override + public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + if ((index >= 1 && index < 1 + 5) || (index == 7 || index == 8))// Attempting to transfer from output slots + // or bucket slots + { + if (!this.mergeItemStack(itemstack1, 9, 9 + 36, true)) + { + return ItemStack.EMPTY; + } + + slot.onSlotChange(itemstack1, itemstack); + } else if (index > 9) // Attempting to transfer from main inventory + { + if (itemstack1.getItem().isIn(BloodMagicTags.ARC_TOOL)) // Try the tool slot first + { + if (!this.mergeItemStack(itemstack1, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (isBucket(itemstack1, true)) // If it's a full bucket, transfer to tank filler slot. + { + if (!this.mergeItemStack(itemstack1, 7, 8, false)) + { + return ItemStack.EMPTY; + } + } else if (isBucket(itemstack1, false)) // If it's an empty bucket, transfer to tank emptier slot. + { + if (!this.mergeItemStack(itemstack1, 8, 9, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(itemstack1, 6, 7, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(itemstack1, 9, 45, false)) // Attempting to transfer from input slots + { + return ItemStack.EMPTY; + } + + if (itemstack1.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (itemstack1.getCount() == itemstack.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(playerIn, itemstack1); + } + + return itemstack; + } + + @Override + public boolean canInteractWith(PlayerEntity playerIn) + { + return this.tileARC.isUsableByPlayer(playerIn); + } + + private class SlotARCTool extends Slot + { + public SlotARCTool(IInventory inventory, int slotIndex, int x, int y) + { + super(inventory, slotIndex, x, y); + } + + @Override + public boolean isItemValid(ItemStack itemStack) + { + return itemStack.getItem().isIn(BloodMagicTags.ARC_TOOL); + } + } + + private class SlotBucket extends Slot + { + private final boolean needsFullBucket; + + public SlotBucket(IInventory inventory, int slotIndex, int x, int y, boolean needsFullBucket) + { + super(inventory, slotIndex, x, y); + this.needsFullBucket = needsFullBucket; + } + + @Override + public boolean isItemValid(ItemStack itemStack) + { + Optional fluidStackOptional = FluidUtil.getFluidContained(itemStack); + + return fluidStackOptional.isPresent() && ((needsFullBucket && !fluidStackOptional.get().isEmpty()) + || (!needsFullBucket && fluidStackOptional.get().isEmpty())); + } + } + + private static boolean isBucket(ItemStack stack, boolean requiredFull) + { + Optional fluidStackOptional = FluidUtil.getFluidContained(stack); + + return fluidStackOptional.isPresent() && ((requiredFull && !fluidStackOptional.get().isEmpty()) + || (!requiredFull && fluidStackOptional.get().isEmpty())); + } + + private class SlotOutput extends Slot + { + public SlotOutput(IInventory inventory, int slotIndex, int x, int y) + { + super(inventory, slotIndex, x, y); + } + + @Override + public boolean isItemValid(ItemStack stack) + { + return false; + } + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/tile/container/ContainerAlchemyTable.java b/src/main/java/wayoftime/bloodmagic/tile/container/ContainerAlchemyTable.java new file mode 100644 index 00000000..ab509370 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/container/ContainerAlchemyTable.java @@ -0,0 +1,176 @@ +package wayoftime.bloodmagic.tile.container; + +import javax.annotation.Nullable; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.container.ClickType; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.item.IBloodOrb; +import wayoftime.bloodmagic.tile.TileAlchemyTable; + +public class ContainerAlchemyTable extends Container +{ + public final TileAlchemyTable tileTable; + +// public ContainerSoulForge(InventoryPlayer inventoryPlayer, IInventory tileForge) +// { +// this.tileForge = tileForge; +// +// } + + public ContainerAlchemyTable(int windowId, PlayerInventory playerInventory, PacketBuffer extraData) + { + this((TileAlchemyTable) playerInventory.player.world.getTileEntity(extraData.readBlockPos()), windowId, playerInventory); + } + + public ContainerAlchemyTable(@Nullable TileAlchemyTable tile, int windowId, PlayerInventory playerInventory) + { + super(BloodMagicBlocks.ALCHEMY_TABLE_CONTAINER.get(), windowId); + this.tileTable = tile; + this.setup(playerInventory, tile); + } + + public void setup(PlayerInventory inventory, IInventory tileForge) + { + this.addSlot(new Slot(tileTable, 0, 62, 15)); + this.addSlot(new Slot(tileTable, 1, 80, 51)); + this.addSlot(new Slot(tileTable, 2, 62, 87)); + this.addSlot(new Slot(tileTable, 3, 26, 87)); + this.addSlot(new Slot(tileTable, 4, 8, 51)); + this.addSlot(new Slot(tileTable, 5, 26, 15)); + this.addSlot(new SlotOrb(tileTable, TileAlchemyTable.orbSlot, 143, 24)); + this.addSlot(new SlotOutput(tileTable, TileAlchemyTable.outputSlot, 44, 51)); + + for (int i = 0; i < 3; i++) + { + for (int j = 0; j < 9; j++) + { + addSlot(new Slot(inventory, j + i * 9 + 9, 8 + j * 18, 123 + i * 18)); + } + } + + for (int i = 0; i < 9; i++) + { + addSlot(new Slot(inventory, i, 8 + i * 18, 181)); + } + } + + @Override + public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, PlayerEntity player) + { + PlayerInventory inventoryPlayer = player.inventory; + + if (slotId <= TileAlchemyTable.outputSlot && slotId >= 0) + { + Slot slot = this.getSlot(slotId); + if (!slot.getHasStack() && inventoryPlayer.getItemStack().isEmpty()) + { +// ((TileAlchemyTable) tileTable).toggleInputSlotAccessible(slotId); + if (tileTable.activeSlot == slotId) + { + tileTable.activeSlot = -1; + } else + { + tileTable.activeSlot = slotId; + } + } + } + + return super.slotClick(slotId, dragType, clickTypeIn, player); + } + + @Override + public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + if (index == 7) + { + if (!this.mergeItemStack(itemstack1, 8, 8 + 36, true)) + { + return ItemStack.EMPTY; + } + + slot.onSlotChange(itemstack1, itemstack); + } else if (index > 7) + { + if (itemstack1.getItem() instanceof IBloodOrb) + { + if (!this.mergeItemStack(itemstack1, 6, 7, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(itemstack1, 0, 6, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(itemstack1, 8, 8 + 36, false)) + { + return ItemStack.EMPTY; + } + + if (itemstack1.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (itemstack1.getCount() == itemstack.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(playerIn, itemstack1); + } + + return itemstack; + } + + @Override + public boolean canInteractWith(PlayerEntity playerIn) + { + return this.tileTable.isUsableByPlayer(playerIn); + } + + private class SlotOrb extends Slot + { + public SlotOrb(IInventory inventory, int slotIndex, int x, int y) + { + super(inventory, slotIndex, x, y); + } + + @Override + public boolean isItemValid(ItemStack itemStack) + { + return itemStack.getItem() instanceof IBloodOrb; + } + } + + private class SlotOutput extends Slot + { + public SlotOutput(IInventory inventory, int slotIndex, int x, int y) + { + super(inventory, slotIndex, x, y); + } + + @Override + public boolean isItemValid(ItemStack stack) + { + return false; + } + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/tile/container/ContainerSoulForge.java b/src/main/java/wayoftime/bloodmagic/tile/container/ContainerSoulForge.java new file mode 100644 index 00000000..9dd10330 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/container/ContainerSoulForge.java @@ -0,0 +1,154 @@ +package wayoftime.bloodmagic.tile.container; + +import javax.annotation.Nullable; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.IIntArray; +import net.minecraft.util.IntArray; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.tile.TileSoulForge; +import wayoftime.bloodmagic.api.compat.IDemonWill; +import wayoftime.bloodmagic.api.compat.IDemonWillGem; + +public class ContainerSoulForge extends Container +{ + public final IInventory tileForge; + public final IIntArray data; + +// public ContainerSoulForge(InventoryPlayer inventoryPlayer, IInventory tileForge) +// { +// this.tileForge = tileForge; +// +// } + + public ContainerSoulForge(int windowId, PlayerInventory playerInventory, PacketBuffer extraData) + { + this((TileSoulForge) playerInventory.player.world.getTileEntity(extraData.readBlockPos()), new IntArray(5), windowId, playerInventory); + } + + public ContainerSoulForge(@Nullable TileSoulForge tile, IIntArray data, int windowId, PlayerInventory playerInventory) + { + super(BloodMagicBlocks.SOUL_FORGE_CONTAINER.get(), windowId); + this.tileForge = tile; + this.setup(playerInventory, tile); + this.data = data; + } + + public void setup(PlayerInventory inventory, IInventory tileForge) + { + this.addSlot(new Slot(tileForge, 0, 8, 15)); + this.addSlot(new Slot(tileForge, 1, 80, 15)); + this.addSlot(new Slot(tileForge, 2, 8, 87)); + this.addSlot(new Slot(tileForge, 3, 80, 87)); + this.addSlot(new SlotSoul(tileForge, TileSoulForge.soulSlot, 152, 51)); + this.addSlot(new SlotOutput(tileForge, TileSoulForge.outputSlot, 44, 51)); + + for (int i = 0; i < 3; i++) + { + for (int j = 0; j < 9; j++) + { + addSlot(new Slot(inventory, j + i * 9 + 9, 8 + j * 18, 123 + i * 18)); + } + } + + for (int i = 0; i < 9; i++) + { + addSlot(new Slot(inventory, i, 8 + i * 18, 181)); + } + } + + @Override + public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + if (index == 5) + { + if (!this.mergeItemStack(itemstack1, 6, 6 + 36, true)) + { + return ItemStack.EMPTY; + } + + slot.onSlotChange(itemstack1, itemstack); + } else if (index > 5) + { + if (itemstack1.getItem() instanceof IDemonWill || itemstack1.getItem() instanceof IDemonWillGem) + { + if (!this.mergeItemStack(itemstack1, 4, 5, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(itemstack1, 0, 4, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(itemstack1, 6, 42, false)) + { + return ItemStack.EMPTY; + } + + if (itemstack1.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (itemstack1.getCount() == itemstack.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(playerIn, itemstack1); + } + + return itemstack; + } + + @Override + public boolean canInteractWith(PlayerEntity playerIn) + { + return this.tileForge.isUsableByPlayer(playerIn); + } + + private class SlotSoul extends Slot + { + public SlotSoul(IInventory inventory, int slotIndex, int x, int y) + { + super(inventory, slotIndex, x, y); + } + + @Override + public boolean isItemValid(ItemStack itemStack) + { + return itemStack.getItem() instanceof IDemonWillGem || itemStack.getItem() instanceof IDemonWill; + } + } + + private class SlotOutput extends Slot + { + public SlotOutput(IInventory inventory, int slotIndex, int x, int y) + { + super(inventory, slotIndex, x, y); + } + + @Override + public boolean isItemValid(ItemStack stack) + { + return false; + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/util/BMLog.java b/src/main/java/wayoftime/bloodmagic/util/BMLog.java new file mode 100644 index 00000000..c3b164a5 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/BMLog.java @@ -0,0 +1,79 @@ +package wayoftime.bloodmagic.util; + +import org.apache.commons.lang3.text.WordUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import wayoftime.bloodmagic.BloodMagic; + +public enum BMLog +{ + + DEFAULT(BloodMagic.MODID) + { + @Override + boolean enabled() + { + return true; + } + }, + DEBUG() + { + @Override + boolean enabled() + { + return false; +// return ConfigHandler.general.enableDebugLogging; + } + }, + API() + { + @Override + boolean enabled() + { + return false; +// return ConfigHandler.general.enableAPILogging; + } + }, + API_VERBOSE() + { + @Override + boolean enabled() + { + return false; +// return ConfigHandler.general.enableVerboseAPILogging; + } + },; + + private final Logger logger; + + BMLog(String logName) + { + logger = LogManager.getLogger(logName); + } + + BMLog() + { + logger = LogManager.getLogger(BloodMagic.MODID + "|" + WordUtils.capitalizeFully(name().replace("_", " "))); + } + + abstract boolean enabled(); + + public void info(String input, Object... args) + { + if (enabled()) + logger.info(input, args); + } + + public void error(String input, Object... args) + { + if (enabled()) + logger.error(input, args); + } + + public void warn(String input, Object... args) + { + if (enabled()) + logger.warn(input, args); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/util/BooleanResult.java b/src/main/java/wayoftime/bloodmagic/util/BooleanResult.java new file mode 100644 index 00000000..1bba4aa6 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/BooleanResult.java @@ -0,0 +1,28 @@ +package wayoftime.bloodmagic.util; + +public class BooleanResult +{ + private final boolean result; + private final T value; + + private BooleanResult(boolean result, T value) + { + this.result = result; + this.value = value; + } + + public boolean isSuccess() + { + return result; + } + + public T getValue() + { + return value; + } + + public static BooleanResult newResult(boolean success, T value) + { + return new BooleanResult<>(success, value); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/util/ChatUtil.java b/src/main/java/wayoftime/bloodmagic/util/ChatUtil.java new file mode 100644 index 00000000..1bc22f5b --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/ChatUtil.java @@ -0,0 +1,270 @@ +package wayoftime.bloodmagic.util; + +import java.text.DecimalFormat; +import java.util.function.Supplier; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.NewChatGui; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.Util; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraftforge.fml.network.NetworkEvent.Context; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.util.helper.TextHelper; + +public class ChatUtil +{ + private static final int DELETION_ID = 2525277; + private static int lastAdded; + public static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("###,###.##"); + + private static void sendNoSpamMessages(ITextComponent[] messages) + { + NewChatGui chat = Minecraft.getInstance().ingameGUI.getChatGUI(); +// Minecraft.getMinecraft().ingameGUI.getChatGUI(); +// for (int i = DELETION_ID + messages.length - 1; i <= lastAdded; i++) +// { +// chat. +//// chat.deleteChatLine(i); +// } + for (int i = 0; i < messages.length; i++) + { + chat.printChatMessage(messages[i]); +// chat.printChatMessageWithOptionalDeletion(messages[i], DELETION_ID + i); + } + lastAdded = DELETION_ID + messages.length - 1; + } + + /** + * Returns a standard {@link TextComponentString} for the given {@link String} . + * + * @param s The string to wrap. + * @return An {@link ITextComponent} containing the string. + */ + public static ITextComponent wrap(String s) + { + return new StringTextComponent(s); + } + + /** + * @see #wrap(String) + */ + public static ITextComponent[] wrap(String... s) + { + ITextComponent[] ret = new ITextComponent[s.length]; + for (int i = 0; i < ret.length; i++) + { + ret[i] = wrap(s[i]); + } + return ret; + } + + /** + * Returns a translatable chat component for the given string and format args. + * + * @param s The string to format + * @param args The args to apply to the format + */ + public static ITextComponent wrapFormatted(String s, Object... args) + { + return new TranslationTextComponent(s, args); + } + + /** + * Simply sends the passed lines to the player in a chat message. + * + * @param player The player to send the chat to + * @param lines The lines to send + */ + public static void sendChat(PlayerEntity player, String... lines) + { + sendChat(player, wrap(lines)); + } + + /** + * Localizes the lines before sending them. + * + * @see #sendChat(EntityPlayer, String...) + */ + public static void sendChatUnloc(PlayerEntity player, String... unlocLines) + { + sendChat(player, TextHelper.localizeAll(unlocLines)); + } + + /** + * Sends all passed chat components to the player. + * + * @param player The player to send the chat lines to. + * @param lines The {@link ITextComponent chat components} to send.yes + */ + public static void sendChat(PlayerEntity player, ITextComponent... lines) + { + for (ITextComponent c : lines) + { +// BloodMagic.packetHandler.send + player.sendMessage(c, Util.DUMMY_UUID); +// player.sendMessage(c); + } + } + + /** + * Localizes the strings before sending them. + * + * @see #sendNoSpamClient(String...) + */ + public static void sendNoSpamClientUnloc(String... unlocLines) + { + sendNoSpamClient(TextHelper.localizeAll(unlocLines)); + } + + /** + * Same as {@link #sendNoSpamClient(ITextComponent...)}, but wraps the Strings + * automatically. + * + * @param lines The chat lines to send + * @see #wrap(String) + */ + public static void sendNoSpamClient(String... lines) + { + sendNoSpamClient(wrap(lines)); + } + + /** + * Skips the packet sending, unsafe to call on servers. + * + * @see #sendNoSpam(ServerPlayerEntity, ITextComponent...) + */ + public static void sendNoSpamClient(ITextComponent... lines) + { + sendNoSpamMessages(lines); + } + + /** + * Localizes the strings before sending them. + * + * @see #sendNoSpam(EntityPlayer, String...) + */ + public static void sendNoSpamUnloc(PlayerEntity player, String... unlocLines) + { + sendNoSpam(player, TextHelper.localizeAll(unlocLines)); + } + + /** + * @see #wrap(String) + * @see #sendNoSpam(EntityPlayer, ITextComponent...) + */ + public static void sendNoSpam(PlayerEntity player, String... lines) + { + sendNoSpam(player, wrap(lines)); + } + + /** + * First checks if the player is instanceof {@link ServerPlayerEntity} before + * casting. + * + * @see #sendNoSpam(ServerPlayerEntity, ITextComponent...) + */ + public static void sendNoSpam(PlayerEntity player, ITextComponent... lines) + { + if (player instanceof ServerPlayerEntity) + { + sendNoSpam((ServerPlayerEntity) player, lines); + } + } + + /** + * Localizes the strings before sending them. + * + * @see #sendNoSpam(ServerPlayerEntity, String...) + */ + public static void sendNoSpamUnloc(ServerPlayerEntity player, String... unlocLines) + { + sendNoSpam(player, TextHelper.localizeAll(unlocLines)); + } + + /** + * @see #wrap(String) + * @see #sendNoSpam(ServerPlayerEntity, ITextComponent...) + */ + public static void sendNoSpam(ServerPlayerEntity player, String... lines) + { + sendNoSpam(player, wrap(lines)); + } + + /** + * Sends a chat message to the client, deleting past messages also sent via this + * method. + *

+ * Credit to RWTema for the idea + * + * @param player The player to send the chat message to + * @param lines The chat lines to send. + */ + public static void sendNoSpam(ServerPlayerEntity player, ITextComponent... lines) + { + if (lines.length > 0) + BloodMagic.packetHandler.sendTo(new PacketNoSpamChat(lines), player); + } + + /** + * @author tterrag1098 + *

+ * Ripped from EnderCore (and slightly altered) + */ + public static class PacketNoSpamChat + { + private ITextComponent[] chatLines; + + public PacketNoSpamChat() + { + chatLines = new ITextComponent[0]; + } + + private PacketNoSpamChat(ITextComponent... lines) + { + // this is guaranteed to be >1 length by accessing methods + this.chatLines = lines; + } + + public static void encode(PacketNoSpamChat pkt, PacketBuffer buf) + { + buf.writeInt(pkt.chatLines.length); + for (ITextComponent c : pkt.chatLines) + { +// ByteBufUtils.writeUTF8String(buf, ITextComponent.Serializer.componentToJson(c)); + buf.writeString(ITextComponent.Serializer.toJson(c)); + } + } + + public static PacketNoSpamChat decode(PacketBuffer buf) + { + PacketNoSpamChat pkt = new PacketNoSpamChat(new ITextComponent[buf.readInt()]); + for (int i = 0; i < pkt.chatLines.length; i++) + { +// pkt.chatLines[i] = ITextComponent.Serializer.jsonToComponent(ByteBufUtils.readUTF8String(buf)); + pkt.chatLines[i] = ITextComponent.Serializer.getComponentFromJsonLenient(buf.readString()); + } + return pkt; + } + + public static void handle(PacketNoSpamChat message, Supplier context) + { + context.get().enqueueWork(() -> sendNoSpamMessages(message.chatLines)); + context.get().setPacketHandled(true); + } + +// public static class Handler implements IMessageHandler +// { +// @Override +// public IMessage onMessage(final PacketNoSpamChat message, MessageContext ctx) +// { +// Minecraft.getMinecraft().addScheduledTask(() -> sendNoSpamMessages(message.chatLines)); +// return null; +// } +// } + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/util/Constants.java b/src/main/java/wayoftime/bloodmagic/util/Constants.java new file mode 100644 index 00000000..a264b5dc --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/Constants.java @@ -0,0 +1,186 @@ +package wayoftime.bloodmagic.util; + +import wayoftime.bloodmagic.BloodMagic; + +public class Constants +{ + public static final String SPEED_RUNE = "speed_rune"; + + public static class NBT + { + public static final String OWNER_UUID = "ownerUUID"; + public static final String OWNER_NAME = "ownerNAME"; + public static final String USES = "uses"; + public static final String ACTIVATED = "activated"; + public static final String UNUSABLE = "unusable"; + public static final String SACRIFICE = "sacrifice"; + public static final String DIMENSION_ID = "dimensionId"; + public static final String X_COORD = "xCoord"; + public static final String Y_COORD = "yCoord"; + public static final String Z_COORD = "zCoord"; + public static final String PORTAL_LOCATION = "portalLocation"; + public static final String ORB_TIER = "orbTier"; + public static final String CURRENT_ESSENCE = "currentEssence"; + public static final String CURRENT_RITUAL = "currentRitual"; + public static final String CURRENT_RITUAL_TAG = "currentRitualTag"; + public static final String IS_RUNNING = "isRunning"; + public static final String IS_REDSTONED = "isStoned"; + public static final String RUNTIME = "runtime"; + public static final String DIRECTION = "direction"; + public static final String REAGENT_TANKS = "reagentTanks"; + public static final String CURRENT_INCENSE = "BM:CurrentIncense"; + public static final String MAX_INCENSE = "BM:MaxIncenseFromLastAltar"; + public static final String HAS_MAX_INCENSE = "BM:CurrentIsMaxIncense"; + public static final String CURRENT_PURITY = "BM:CurrentPurity"; + public static final String EMPTY = "Empty"; + public static final String OUTPUT_AMOUNT = "outputAmount"; + public static final String INPUT_AMOUNT = "inputAmount"; + public static final String STORED_LP = "storedLP"; + public static final String RITUAL_READER = "ritualReaderState"; + public static final String ITEMS = "Items"; + public static final String SLOT = "Slot"; + + public static final String ALTAR = "bloodAltar"; + public static final String ALTAR_TIER = "upgradeLevel"; + public static final String ALTAR_ACTIVE = "isActive"; + public static final String ALTAR_LIQUID_REQ = "liquidRequired"; + public static final String ALTAR_FILLABLE = "fillable"; + public static final String ALTAR_UPGRADED = "isUpgraded"; + public static final String ALTAR_CONSUMPTION_RATE = "consumptionRate"; + public static final String ALTAR_DRAIN_RATE = "drainRate"; + public static final String ALTAR_CONSUMPTION_MULTIPLIER = "consumptionMultiplier"; + public static final String ALTAR_EFFICIENCY_MULTIPLIER = "efficiencyMultiplier"; + public static final String ALTAR_SELF_SACRIFICE_MULTIPLIER = "selfSacrificeMultiplier"; + public static final String ALTAR_SACRIFICE_MULTIPLIER = "sacrificeMultiplier"; + public static final String ALTAR_CAPACITY_MULTIPLIER = "capacityMultiplier"; + public static final String ALTAR_ORB_CAPACITY_MULTIPLIER = "orbCapacityMultiplier"; + public static final String ALTAR_DISLOCATION_MULTIPLIER = "dislocationMultiplier"; + public static final String ALTAR_CAPACITY = "capacity"; + public static final String ALTAR_BUFFER_CAPACITY = "bufferCapacity"; + public static final String ALTAR_PROGRESS = "progress"; + public static final String ALTAR_IS_RESULT_BLOCK = "isResultBlock"; + public static final String ALTAR_LOCKDOWN_DURATION = "lockdownDuration"; + public static final String ALTAR_ACCELERATION_UPGRADES = "accelerationUpgrades"; + public static final String ALTAR_DEMON_BLOOD_DURATION = "demonBloodDuration"; + public static final String ALTAR_COOLDOWN_AFTER_CRAFTING = "cooldownAfterCrafting"; + public static final String ALTAR_TOTAL_CHARGE = "totalCharge"; + public static final String ALTAR_MAX_CHARGE = "maxCharge"; + public static final String ALTAR_CHARGE_RATE = "chargeRate"; + public static final String ALTAR_CHARGE_FREQUENCY = "chargeFrequency"; + public static final String ALTAR_CURRENT_TIER_DISPLAYED = "currentTierDisplayed"; + + public static final String ALTARMAKER_CURRENT_TIER = "currentTier"; + + public static final String PROJECTILE_TICKS_IN_AIR = "projectileTicksInAir"; + public static final String PROJECTILE_MAX_TICKS_IN_AIR = "projectileMaxTicksInAir"; + + public static final String TICKS_REMAINING = "ticksRemaining"; + public static final String CONTAINED_BLOCK_NAME = "containedBlockName"; + public static final String CONTAINED_BLOCK_META = "containedBlockMeta"; + public static final String CONTAINED_TILE_ENTITY = "containedTileEntity"; + + public static final String PREVIOUS_INPUT = "previousInput"; + + public static final String LIVING_ARMOUR = "livingArmour"; + + public static final String CHARGE_TIME = "chargeTime"; + public static final String HELD_DOWN = "heldDown"; + + public static final String UPGRADE_POISON_TIMER = "poisonTimer"; + public static final String UPGRADE_FIRE_TIMER = "fireTimer"; + + public static final String SOULS = "souls"; + public static final String SOUL_SWORD_DAMAGE = "soulSwordDamage"; + public static final String SOUL_SWORD_ACTIVE_DRAIN = "soulSwordActiveDrain"; + public static final String SOUL_SWORD_DROP = "soulSwordDrop"; + public static final String SOUL_SWORD_STATIC_DROP = "soulSwordStaticDrop"; + public static final String SOUL_SWORD_HEALTH = "soulSwordHealth"; + public static final String SOUL_SWORD_ATTACK_SPEED = "soulSwordAttackSpeed"; + public static final String SOUL_SWORD_SPEED = "soulSwordSpeed"; + public static final String SOUL_SWORD_DIG_SPEED = "soulSwordDigSpeed"; + public static final String WILL_TYPE = "demonWillType"; + + public static final String SOUL_FORGE_BURN = "burnTime"; + public static final String SOUL_FORGE_CONSUMED = "consumedSouls"; + + public static final String ARC_PROGRESS = "progress"; + + public static final String ROUTING_MASTER = "master"; + public static final String ROUTING_CONNECTION = "connections"; + public static final String ROUTING_PRIORITY = "prioritiesPeople"; + public static final String ROUTING_MASTER_GENERAL = "generalList"; + public static final String ROUTING_MASTER_INPUT = "inputList"; + public static final String ROUTING_MASTER_OUTPUT = "outputList"; + + public static final String GHOST_STACK_SIZE = "stackSize"; + + public static final String ITEM_INVENTORY = "itemInventory"; + + public static final String BLOCKPOS_CONNECTION = "connections"; + + public static final String CURRENT_SIGIL = "currentSigil"; + public static final String MOST_SIG = "mostSig"; + public static final String LEAST_SIG = "leastSig"; + public static final String COLOR = "color"; + + public static final String POTION_AUGMENT_LENGHT = "length:"; + public static final String POTION_AUGMENT_STRENGTH = "strength:"; + public static final String POTION_IMPURITY = "impurity"; + + public static final String TANK = "tank"; + + public static final String BREATH = "breath"; + + public static final String ANOINTMENTS = "anointment_holder"; + } + + public static class JSON + { + public static final String INPUT = "input"; + public static final String TOOL = "tool"; + public static final String BASEINPUT = "baseinput"; + public static final String ADDEDINPUT = "addedinput"; + public static final String ADDEDOUTPUT = "addedoutput"; + public static final String OUTPUT = "output"; + public static final String ITEM = "item"; + public static final String COUNT = "count"; + public static final String NBT = "nbt"; + public static final String TAG = "tag"; + public static final String TYPE = "type"; + public static final String TEXTURE = "texture"; + public static final String CONDITIONS = "conditions"; + public static final String CHANCE = "chance"; + public static final String FLUID = "fluid"; + public static final String AMOUNT = "amount"; + public static final String INPUT_FLUID = "inputfluid"; + public static final String OUTPUT_FLUID = "outputfluid"; + + public static final String SYPHON = "syphon"; + public static final String TICKS = "ticks"; + + public static final String ALTAR_TIER = Constants.NBT.ALTAR_TIER; + public static final String ALTAR_SYPHON = "altarSyphon"; + public static final String ALTAR_CONSUMPTION_RATE = Constants.NBT.ALTAR_CONSUMPTION_RATE; + public static final String ALTAR_DRAIN_RATE = Constants.NBT.ALTAR_DRAIN_RATE; + + public static final String TARTARIC_DRAIN = "drain"; + public static final String TARTARIC_MINIMUM = "minimumDrain"; + } + + public static class Compat + { + public static final String JEI_CATEGORY_ALTAR = "altar"; + public static final String JEI_CATEGORY_BINDING = "binding"; + public static final String JEI_CATEGORY_ALCHEMYARRAY = "alchemyarray"; + public static final String JEI_CATEGORY_SOULFORGE = "soulforge"; + public static final String JEI_CATEGORY_ALCHEMYTABLE = "alchemytable"; + public static final String JEI_CATEGORY_ARMOURDOWNGRADE = "armourdowngrade"; + public static final String JEI_CATEGORY_ARC = "arc"; + + public static final String WAILA_CONFIG_ALTAR = BloodMagic.MODID + ".bloodaltar"; + public static final String WAILA_CONFIG_TELEPOSER = BloodMagic.MODID + ".teleposer"; + public static final String WAILA_CONFIG_RITUAL = BloodMagic.MODID + ".ritualController"; + public static final String WAILA_CONFIG_ARRAY = BloodMagic.MODID + ".array"; + public static final String WAILA_CONFIG_BLOOD_TANK = BloodMagic.MODID + ".bloodTank"; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/util/DamageSourceBloodMagic.java b/src/main/java/wayoftime/bloodmagic/util/DamageSourceBloodMagic.java new file mode 100644 index 00000000..19ff1231 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/DamageSourceBloodMagic.java @@ -0,0 +1,25 @@ +package wayoftime.bloodmagic.util; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.util.DamageSource; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; + +public class DamageSourceBloodMagic extends DamageSource +{ + public static final DamageSourceBloodMagic INSTANCE = new DamageSourceBloodMagic(); + + public DamageSourceBloodMagic() + { + super("bloodMagic"); + + setDamageBypassesArmor(); + setDamageIsAbsolute(); + } + + @Override + public ITextComponent getDeathMessage(LivingEntity livingBase) + { + return new TranslationTextComponent("chat.bloodmagic.damageSource", livingBase.getName()); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/util/MultiSlotItemHandler.java b/src/main/java/wayoftime/bloodmagic/util/MultiSlotItemHandler.java new file mode 100644 index 00000000..5125c26f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/MultiSlotItemHandler.java @@ -0,0 +1,295 @@ +package wayoftime.bloodmagic.util; + +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemHandlerHelper; + +public class MultiSlotItemHandler implements IItemHandler +{ + private ItemStack[] items; + + private final int invLimit; + + public MultiSlotItemHandler(int size, int invLimit) + { + items = new ItemStack[size]; + for (int i = 0; i < size; i++) + { + items[i] = ItemStack.EMPTY; + } + + this.invLimit = invLimit; + } + + public MultiSlotItemHandler(ItemStack[] items, int invLimit) + { + this.items = items; + this.invLimit = invLimit; + } + + @Override + public int getSlots() + { + return items.length; + } + + @Override + public ItemStack getStackInSlot(int slot) + { + return items[slot]; + } + + public boolean isItemValid(int slot, ItemStack stack) + { + return true; + } + + public void setInventorySlotContents(int slot, ItemStack stack) + { + items[slot] = stack; + } + + @Override + @Nonnull + public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) + { + if (stack.isEmpty()) + return ItemStack.EMPTY; + + ItemStack stackInSlot = getStackInSlot(slot); + + int m; + if (!stackInSlot.isEmpty()) + { + if (stackInSlot.getCount() >= Math.min(stackInSlot.getMaxStackSize(), getSlotLimit(slot))) + return stack; + + if (!ItemHandlerHelper.canItemStacksStack(stack, stackInSlot)) + return stack; + + if (!isItemValid(slot, stack)) + return stack; + + m = Math.min(stack.getMaxStackSize(), getSlotLimit(slot)) - stackInSlot.getCount(); + + if (stack.getCount() <= m) + { + if (!simulate) + { + ItemStack copy = stack.copy(); + copy.grow(stackInSlot.getCount()); + setInventorySlotContents(slot, copy); + } + + return ItemStack.EMPTY; + } else + { + // copy the stack to not modify the original one + stack = stack.copy(); + if (!simulate) + { + ItemStack copy = stack.split(m); + copy.grow(stackInSlot.getCount()); + setInventorySlotContents(slot, copy); + return stack; + } else + { + stack.shrink(m); + return stack; + } + } + } else + { + if (!isItemValid(slot, stack)) + return stack; + + m = Math.min(stack.getMaxStackSize(), getSlotLimit(slot)); + if (m < stack.getCount()) + { + // copy the stack to not modify the original one + stack = stack.copy(); + if (!simulate) + { + setInventorySlotContents(slot, stack.split(m)); + return stack; + } else + { + stack.shrink(m); + return stack; + } + } else + { + if (!simulate) + { + setInventorySlotContents(slot, stack); + } + return ItemStack.EMPTY; + } + } + } + + public boolean canTransferAllItemsToSlots(List stackList, boolean simulate) + { + ItemStack[] copyList = new ItemStack[items.length]; + for (int i = 0; i < copyList.length; i++) + { + copyList[i] = items[i].copy(); + } + + boolean hasStashedAll = true; + + for (ItemStack stack : stackList) + { + if (stack.isEmpty()) + { + continue; + } + + slots: for (int slot = 0; slot < copyList.length; slot++) + { + ItemStack stackInSlot = copyList[slot]; + + int m; + if (!stackInSlot.isEmpty()) + { + if (stackInSlot.getCount() >= Math.min(stackInSlot.getMaxStackSize(), getSlotLimit(slot))) + continue; + + if (!ItemHandlerHelper.canItemStacksStack(stack, stackInSlot)) + continue; + + if (!isItemValid(slot, stack)) + continue; + + m = Math.min(stack.getMaxStackSize(), getSlotLimit(slot)) - stackInSlot.getCount(); + + if (stack.getCount() <= m) + { + ItemStack copy = stack.copy(); + if (!simulate) + { + copy.grow(stackInSlot.getCount()); + copyList[slot] = copy; + } + stack = ItemStack.EMPTY; + + break slots; + } else + { + // copy the stack to not modify the original one + stack = stack.copy(); + if (!simulate) + { + ItemStack copy = stack.split(m); + copy.grow(stackInSlot.getCount()); + copyList[slot] = copy; + } else + { + stack.shrink(m); + } + } + } else + { + if (!isItemValid(slot, stack)) + continue; + + m = Math.min(stack.getMaxStackSize(), getSlotLimit(slot)); + if (m < stack.getCount()) + { + // copy the stack to not modify the original one + stack = stack.copy(); + if (!simulate) + { + copyList[slot] = stack.split(m); + } else + { + stack.shrink(m); + } + } else + { + if (!simulate) + { + copyList[slot] = stack; + } + + stack = ItemStack.EMPTY; + } + } + } + + if (!stack.isEmpty()) + { + hasStashedAll = false; + break; + } + } + + if (!simulate) + { + items = copyList; + } + + return hasStashedAll; + } + + @Override + @Nonnull + public ItemStack extractItem(int slot, int amount, boolean simulate) + { + if (amount == 0) + return ItemStack.EMPTY; + + ItemStack stackInSlot = getStackInSlot(slot); + + if (stackInSlot.isEmpty()) + return ItemStack.EMPTY; + + if (simulate) + { + if (stackInSlot.getCount() < amount) + { + return stackInSlot.copy(); + } else + { + ItemStack copy = stackInSlot.copy(); + copy.setCount(amount); + return copy; + } + } else + { + int m = Math.min(stackInSlot.getCount(), amount); + + ItemStack decrStackSize = decrStackSize(slot, m); + return decrStackSize; + } + } + + public ItemStack decrStackSize(int slot, int amount) + { + if (!getStackInSlot(slot).isEmpty()) + { + if (getStackInSlot(slot).getCount() <= amount) + { + ItemStack itemStack = getStackInSlot(slot); + setInventorySlotContents(slot, ItemStack.EMPTY); + return itemStack; + } + + ItemStack itemStack = getStackInSlot(slot).split(amount); + return itemStack; + } + + return ItemStack.EMPTY; + } + + @Override + public int getSlotLimit(int slot) + { + return invLimit; + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/util/Utils.java b/src/main/java/wayoftime/bloodmagic/util/Utils.java new file mode 100644 index 00000000..cfcf2328 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/Utils.java @@ -0,0 +1,763 @@ +package wayoftime.bloodmagic.util; + +import java.util.List; +import java.util.Locale; +import java.util.UUID; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.FlowingFluidBlock; +import net.minecraft.block.NetherPortalBlock; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.potion.EffectInstance; +import net.minecraft.potion.Effects; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.IFluidBlock; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemHandlerHelper; +import net.minecraftforge.items.wrapper.InvWrapper; +import net.minecraftforge.items.wrapper.PlayerMainInvWrapper; +import net.minecraftforge.items.wrapper.SidedInvWrapper; +import wayoftime.bloodmagic.api.compat.IDemonWillViewer; +import wayoftime.bloodmagic.tile.TileInventory; +import wayoftime.bloodmagic.util.helper.NBTHelper; + +public class Utils +{ + /** + * @param tile - The {@link TileInventory} to input the item to + * @param player - The player to take the item from. + * @return {@code true} if the ItemStack is inserted, {@code false} otherwise + * @see #insertItemToTile(TileInventory, PlayerEntity, int) + */ + public static boolean insertItemToTile(TileInventory tile, PlayerEntity player) + { + return insertItemToTile(tile, player, 0); + } + + /** + * Used for inserting an ItemStack with a stacksize of 1 to a tile's inventory + * at slot 0 + *

+ * EG: Block Altar + * + * @param tile - The {@link TileInventory} to input the item to + * @param player - The player to take the item from. + * @param slot - The slot to attempt to insert to + * @return {@code true} if the ItemStack is inserted, {@code false} otherwise + */ + public static boolean insertItemToTile(TileInventory tile, PlayerEntity player, int slot) + { + ItemStack slotStack = tile.getStackInSlot(slot); + if (slotStack.isEmpty() && !player.getHeldItemMainhand().isEmpty()) + { + ItemStack input = player.getHeldItemMainhand().copy(); + input.setCount(1); + player.getHeldItemMainhand().shrink(1); + tile.setInventorySlotContents(slot, input); + return true; + } else if (!slotStack.isEmpty() && player.getHeldItemMainhand().isEmpty()) + { + ItemHandlerHelper.giveItemToPlayer(player, slotStack); + tile.clear(); + return false; + } + + return false; + } + + public static String toFancyCasing(String input) + { + return String.valueOf(input.charAt(0)).toUpperCase(Locale.ENGLISH) + input.substring(1); + } + + public static boolean isImmuneToFireDamage(LivingEntity entity) + { + return entity.isImmuneToFire() || entity.isPotionActive(Effects.FIRE_RESISTANCE); + } + + public static boolean isBlockLiquid(BlockState state) + { + return (state instanceof IFluidBlock || state.getMaterial().isLiquid()); + } + + public static boolean isFlowingLiquid(World world, BlockPos pos, BlockState state) + { + Block block = state.getBlock(); + return ((block instanceof IFluidBlock && Math.abs(((IFluidBlock) block).getFilledPercentage(world, pos)) == 1) || (block instanceof FlowingFluidBlock && !((FlowingFluidBlock) block).getFluidState(state).isSource())); + } + + public static boolean spawnStackAtBlock(World world, BlockPos pos, @Nullable Direction pushDirection, ItemStack stack) + { + BlockPos spawnPos = new BlockPos(pos); + + double velX = 0; + double velY = 0; + double velZ = 0; + double velocity = 0.15D; + if (pushDirection != null) + { + spawnPos = spawnPos.offset(pushDirection); + + switch (pushDirection) + { + case DOWN: + { + velY = -velocity; + break; + } + case UP: + { + velY = velocity; + break; + } + case NORTH: + { + velZ = -velocity; + break; + } + case SOUTH: + { + velZ = velocity; + break; + } + case WEST: + { + velX = -velocity; + break; + } + case EAST: + { + velX = velocity; + break; + } + } + } + + double posX = spawnPos.getX() + 0.5; + double posY = spawnPos.getY() + 0.5; + double posZ = spawnPos.getZ() + 0.5; + + ItemEntity entityItem = new ItemEntity(world, posX, posY, posZ, stack); + entityItem.setMotion(velX, velY, velZ); + + entityItem.setItem(stack); + return world.addEntity(entityItem); + } + + public static boolean swapLocations(World initialWorld, BlockPos initialPos, World finalWorld, BlockPos finalPos) + { + return swapLocations(initialWorld, initialPos, finalWorld, finalPos, true); + } + + public static boolean swapLocations(World initialWorld, BlockPos initialPos, World finalWorld, BlockPos finalPos, boolean playSound) + { + TileEntity initialTile = initialWorld.getTileEntity(initialPos); + TileEntity finalTile = finalWorld.getTileEntity(finalPos); + CompoundNBT initialTag = new CompoundNBT(); + CompoundNBT finalTag = new CompoundNBT(); + if (initialTile != null) + initialTile.write(initialTag); + if (finalTile != null) + finalTile.write(finalTag); + + BlockState initialState = initialWorld.getBlockState(initialPos); + BlockState finalState = finalWorld.getBlockState(finalPos); + + if ((initialState.getBlock().equals(Blocks.AIR) && finalState.getBlock().equals(Blocks.AIR)) || initialState.getBlock() instanceof NetherPortalBlock || finalState.getBlock() instanceof NetherPortalBlock) + return false; + + if (playSound) + { + initialWorld.playSound(null, initialPos.getX(), initialPos.getY(), initialPos.getZ(), SoundEvents.ENTITY_ENDERMAN_TELEPORT, SoundCategory.AMBIENT, 1.0F, 1.0F); + finalWorld.playSound(null, finalPos.getX(), finalPos.getY(), finalPos.getZ(), SoundEvents.ENTITY_ENDERMAN_TELEPORT, SoundCategory.AMBIENT, 1.0F, 1.0F); + } + + // Finally, we get to do something! (CLEARING TILES) + if (finalState.getBlock().hasTileEntity(finalState)) + finalWorld.removeTileEntity(finalPos); + if (initialState.getBlock().hasTileEntity(initialState)) + initialWorld.removeTileEntity(initialPos); + + // TILES CLEARED + BlockState initialBlockState = initialWorld.getBlockState(initialPos); + BlockState finalBlockState = finalWorld.getBlockState(finalPos); + finalWorld.setBlockState(finalPos, initialBlockState, 3); + + if (initialTile != null) + { +// TileEntity newTileInitial = TileEntity.create(finalWorld, initialTag); + TileEntity newTileInitial = TileEntity.readTileEntity(finalBlockState, initialTag); + + finalWorld.setTileEntity(finalPos, newTileInitial); +// newTileInitial.setPos(finalPos); + newTileInitial.setWorldAndPos(finalWorld, finalPos); + } + + initialWorld.setBlockState(initialPos, finalBlockState, 3); + + if (finalTile != null) + { +// TileEntity newTileFinal = TileEntity.create(initialWorld, finalTag); + TileEntity newTileFinal = TileEntity.readTileEntity(initialBlockState, finalTag); + + initialWorld.setTileEntity(initialPos, newTileFinal); +// newTileFinal.setPos(initialPos); + newTileFinal.setWorldAndPos(initialWorld, initialPos); + } + + initialWorld.notifyNeighborsOfStateChange(initialPos, finalState.getBlock()); + finalWorld.notifyNeighborsOfStateChange(finalPos, initialState.getBlock()); + + return true; + } + + public static ItemStack insertStackIntoTile(ItemStack stack, TileEntity tile, Direction dir) + { + LazyOptional capability = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, dir); + if (capability.isPresent()) + { + IItemHandler handler = capability.resolve().get(); + + return insertStackIntoTile(stack, handler); + } else if (tile instanceof IInventory) + { + return insertStackIntoInventory(stack, (IInventory) tile, dir); + } + + return stack; + } + + public static ItemStack insertStackIntoTile(ItemStack stack, IItemHandler handler) + { + int numberOfSlots = handler.getSlots(); + + ItemStack copyStack = stack.copy(); + + for (int slot = 0; slot < numberOfSlots; slot++) + { + copyStack = handler.insertItem(slot, copyStack, false); + if (copyStack.isEmpty()) + { + return ItemStack.EMPTY; + } + } + + return copyStack; + } + + public static int getNumberOfFreeSlots(TileEntity tile, Direction dir) + { + int slots = 0; + + LazyOptional capability = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, dir); + if (capability.isPresent()) + { + IItemHandler handler = capability.resolve().get(); + + for (int i = 0; i < handler.getSlots(); i++) + { + if (handler.getStackInSlot(i).isEmpty()) + { + slots++; + } + } + } else if (tile instanceof IInventory) + { + for (int i = 0; i < ((IInventory) tile).getSizeInventory(); i++) + { + if (((IInventory) tile).getStackInSlot(i).isEmpty()) + { + slots++; + } + } + } + + return slots; + } + + public static ItemStack insertStackIntoInventory(ItemStack stack, IInventory inventory, Direction dir) + { + if (stack.isEmpty()) + { + return ItemStack.EMPTY; + } + + boolean[] canBeInserted = new boolean[inventory.getSizeInventory()]; + + if (inventory instanceof ISidedInventory) + { + int[] array = ((ISidedInventory) inventory).getSlotsForFace(dir); + for (int in : array) + { + canBeInserted[in] = inventory.isItemValidForSlot(in, stack) && ((ISidedInventory) inventory).canInsertItem(in, stack, dir); + } + } else + { + for (int i = 0; i < canBeInserted.length; i++) + { + canBeInserted[i] = inventory.isItemValidForSlot(i, stack); + } + } + + for (int i = 0; i < inventory.getSizeInventory(); i++) + { + if (!canBeInserted[i]) + { + continue; + } + + ItemStack[] combinedStacks = combineStacks(stack, inventory.getStackInSlot(i)); + stack = combinedStacks[0]; + inventory.setInventorySlotContents(i, combinedStacks[1]); + + if (stack.isEmpty()) + { + return ItemStack.EMPTY; + } + } + + return stack; + } + + public static boolean canInsertStackFullyIntoInventory(ItemStack stack, IInventory inventory, Direction dir, boolean fillToLimit, int limit) + { + if (stack.isEmpty()) + { + return true; + } + + int itemsLeft = stack.getCount(); + + boolean[] canBeInserted = new boolean[inventory.getSizeInventory()]; + + if (inventory instanceof ISidedInventory) + { + int[] array = ((ISidedInventory) inventory).getSlotsForFace(dir); + for (int in : array) + { + canBeInserted[in] = inventory.isItemValidForSlot(in, stack) && ((ISidedInventory) inventory).canInsertItem(in, stack, dir); + } + } else + { + for (int i = 0; i < canBeInserted.length; i++) + { + canBeInserted[i] = inventory.isItemValidForSlot(i, stack); + } + } + + int numberMatching = 0; + + if (fillToLimit) + { + for (int i = 0; i < inventory.getSizeInventory(); i++) + { + if (!canBeInserted[i]) + { + continue; + } + + ItemStack invStack = inventory.getStackInSlot(i); + + if (!invStack.isEmpty() && ItemHandlerHelper.canItemStacksStack(stack, invStack)) + { + numberMatching += invStack.getCount(); + } + } + } + + if (fillToLimit && limit < stack.getCount() + numberMatching) + { + return false; + } + + for (int i = 0; i < inventory.getSizeInventory(); i++) + { + if (!canBeInserted[i]) + { + continue; + } + + ItemStack invStack = inventory.getStackInSlot(i); + boolean canCombine = ItemHandlerHelper.canItemStacksStack(stack, invStack); + if (canCombine) + { + if (invStack.isEmpty()) + { + itemsLeft = 0; + } else + { + itemsLeft -= (invStack.getMaxStackSize() - invStack.getCount()); + } + } + + if (itemsLeft <= 0) + { + return true; + } + } + + return false; + } + + /** + * @param stack1 Stack that is placed into a slot + * @param stack2 Slot content that stack1 is placed into + * @return Stacks after stacking + */ + public static ItemStack[] combineStacks(ItemStack stack1, ItemStack stack2) + { + ItemStack[] returned = new ItemStack[2]; + + if (ItemHandlerHelper.canItemStacksStack(stack1, stack2)) + { + int transferedAmount = stack2.isEmpty() ? stack1.getCount() + : Math.min(stack2.getMaxStackSize() - stack2.getCount(), stack1.getCount()); + if (transferedAmount > 0) + { + ItemStack copyStack = stack1.split(transferedAmount); + if (stack2.isEmpty()) + { + stack2 = copyStack; + } else + { + stack2.grow(transferedAmount); + } + } + } + + returned[0] = stack1; + returned[1] = stack2; + + return returned; + } + + public static boolean canPlayerSeeDemonWill(PlayerEntity player) + { + IItemHandler inventory = new PlayerMainInvWrapper(player.inventory); + + for (int i = 0; i < inventory.getSlots(); i++) + { + ItemStack stack = inventory.getStackInSlot(i); + if (stack.isEmpty()) + { + continue; + } + + if (stack.getItem() instanceof IDemonWillViewer && ((IDemonWillViewer) stack.getItem()).canSeeDemonWillAura(player.getEntityWorld(), stack, player)) + { + return true; + } + } + + return false; + } + + public static double getDemonWillResolution(PlayerEntity player) + { + IItemHandler inventory = new PlayerMainInvWrapper(player.inventory); + + for (int i = 0; i < inventory.getSlots(); i++) + { + ItemStack stack = inventory.getStackInSlot(i); + if (stack.isEmpty()) + { + continue; + } + + if (stack.getItem() instanceof IDemonWillViewer && ((IDemonWillViewer) stack.getItem()).canSeeDemonWillAura(player.getEntityWorld(), stack, player)) + { + return ((IDemonWillViewer) stack.getItem()).getDemonWillAuraResolution(player.getEntityWorld(), stack, player); + } + } + + return 100; + } + + public static int plantSeedsInArea(World world, AxisAlignedBB aabb, int horizontalRadius, int verticalRadius) + { + int placedBlocks = 0; + List itemEntities = world.getEntitiesWithinAABB(ItemEntity.class, aabb); + + for (ItemEntity itemEntity : itemEntities) + { + placedBlocks += plantEntityItem(itemEntity, horizontalRadius, verticalRadius); + } + + return placedBlocks; + } + + public static int plantItemStack(World world, BlockPos centralPos, ItemStack stack, int horizontalRadius, int verticalRadius) + { + if (stack.isEmpty()) + { + return 0; + } + + Item item = stack.getItem(); + if (!(item instanceof IPlantable)) + { + return 0; + } + + int planted = 0; + + for (int hR = 0; hR <= horizontalRadius; hR++) + { + for (int vR = 0; vR <= verticalRadius; vR++) + { + for (int i = -hR; i <= hR; i++) + { + for (int k = -hR; k <= hR; k++) + { + for (int j = -vR; j <= vR; j += 2 * vR + (vR > 0 ? 0 : 1)) + { + if (!(Math.abs(i) == hR || Math.abs(k) == hR)) + { + continue; + } + + BlockPos newPos = centralPos.add(i, j, k); + if (world.isAirBlock(newPos)) + { + BlockPos offsetPos = newPos.offset(Direction.DOWN); + BlockState state = world.getBlockState(offsetPos); + if (state.getBlock().canSustainPlant(state, world, offsetPos, Direction.UP, (IPlantable) item)) + { + BlockState plantState = ((IPlantable) item).getPlant(world, newPos); + world.setBlockState(newPos, plantState, 3); +// Block. + world.playEvent(2001, newPos, Block.getStateId(plantState)); + stack.shrink(1); + planted++; + if (stack.isEmpty() || stack.getCount() <= 0) + { + return planted; + } + } + } + } + } + } + } + } + + return planted; + } + + public static int plantEntityItem(ItemEntity itemEntity, int horizontalRadius, int verticalRadius) + { + if (itemEntity == null || !itemEntity.isAlive()) + { + return 0; + } + + World world = itemEntity.getEntityWorld(); + BlockPos pos = itemEntity.getPosition(); + ItemStack stack = itemEntity.getItem(); + + int planted = plantItemStack(world, pos, stack, horizontalRadius, verticalRadius); + + if (stack.isEmpty()) + { + itemEntity.remove(); + } + + return planted; + } + + @Nullable + public static IItemHandler getInventory(TileEntity tile, @Nullable Direction facing) + { + if (facing == null) + facing = Direction.DOWN; + + IItemHandler itemHandler = null; + + if (tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, facing).isPresent()) + itemHandler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, facing).resolve().get(); + else if (tile instanceof ISidedInventory) + itemHandler = ((ISidedInventory) tile).getSlotsForFace(facing).length != 0 + ? new SidedInvWrapper((ISidedInventory) tile, facing) + : null; + else if (tile instanceof IInventory) + itemHandler = new InvWrapper((IInventory) tile); + + return itemHandler; + } + + public static float addAbsorptionToMaximum(LivingEntity entity, float added, int maximum, int duration) + { + float currentAmount = entity.getAbsorptionAmount(); + added = Math.min(maximum - currentAmount, added); + + if (added <= 0) + { + return 0; + } + + if (duration > 0) + { + int potionLevel = (int) ((currentAmount + added) / 4); + entity.addPotionEffect(new EffectInstance(Effects.ABSORPTION, duration, potionLevel, true, false)); + } + + entity.setAbsorptionAmount(currentAmount + added); + + return added; + } + +// public static float getModifiedDamage(LivingEntity attackedEntity, DamageSource source, float amount) +// { +// if (!attackedEntity.isInvulnerableTo(source)) +// { +// if (amount <= 0) +// return 0; +// +// amount = applyArmor(attackedEntity, Iterables.toArray(attackedEntity.getEquipmentAndArmor(), ItemStack.class), source, amount); +// if (amount <= 0) +// return 0; +// amount = applyPotionDamageCalculations(attackedEntity, source, amount); +// +// return amount; +// } +// +// return 0; +// } +// +// public static float applyArmor(LivingEntity entity, ItemStack[] inventory, DamageSource source, double damage) +// { +// damage *= 25; +// ArrayList dmgVals = new ArrayList<>(); +// for (int x = 0; x < inventory.length; x++) +// { +// ItemStack stack = inventory[x]; +// if (stack.isEmpty()) +// { +// continue; +// } +// ArmorProperties prop = null; +// if (stack.getItem() instanceof ISpecialArmor) +// { +// ISpecialArmor armor = (ISpecialArmor) stack.getItem(); +// prop = armor.getProperties(entity, stack, source, damage / 25D, x).copy(); +// } else if (stack.getItem() instanceof ArmorItem && !source.isUnblockable()) +// { +// ArmorItem armor = (ArmorItem) stack.getItem(); +// prop = new ArmorProperties(0, armor.damageReduceAmount / 25D, Integer.MAX_VALUE); +// } +// if (prop != null) +// { +// prop.Slot = x; +// dmgVals.add(prop); +// } +// } +// if (dmgVals.size() > 0) +// { +// ArmorProperties[] props = dmgVals.toArray(new ArmorProperties[dmgVals.size()]); +// int level = props[0].Priority; +// double ratio = 0; +// for (ArmorProperties prop : props) +// { +// if (level != prop.Priority) +// { +// damage -= (damage * ratio); +// ratio = 0; +// level = prop.Priority; +// } +// ratio += prop.AbsorbRatio; +// +// } +// damage -= (damage * ratio); +// } +// +// return (float) (damage / 25.0F); +// } +// +// public static float applyPotionDamageCalculations(LivingEntity attackedEntity, DamageSource source, float damage) +// { +// Effect resistance = Effects.RESISTANCE; +// +// if (source.isDamageAbsolute()) +// { +// return damage; +// } else +// { +// if (attackedEntity.isPotionActive(resistance) && source != DamageSource.OUT_OF_WORLD) +// { +// int i = (attackedEntity.getActivePotionEffect(resistance).getAmplifier() + 1) * 5; +// int j = 25 - i; +// float f = damage * (float) j; +// damage = f / 25.0F; +// } +// +// if (damage <= 0.0F) +// { +// return 0.0F; +// } else +// { +// int k = EnchantmentHelper.getEnchantmentModifierDamage(attackedEntity.getArmorInventoryList(), source); +// +// if (k > 20) +// { +// k = 20; +// } +// +// if (k > 0 && k <= 20) +// { +// int l = 25 - k; +// float f1 = damage * (float) l; +// damage = f1 / 25.0F; +// } +// +// return damage; +// } +// } +// } + + public static boolean hasUUID(ItemStack stack) + { + return stack.hasTag() && stack.getTag().contains(Constants.NBT.MOST_SIG) && stack.getTag().contains(Constants.NBT.LEAST_SIG); + } + + public static UUID getUUID(ItemStack stack) + { + if (!hasUUID(stack)) + { + return null; + } + + return new UUID(stack.getTag().getLong(Constants.NBT.MOST_SIG), stack.getTag().getLong(Constants.NBT.LEAST_SIG)); + } + + public static void setUUID(ItemStack stack) + { + stack = NBTHelper.checkNBT(stack); + + if (!stack.getTag().contains(Constants.NBT.MOST_SIG) && !stack.getTag().contains(Constants.NBT.LEAST_SIG)) + { + UUID itemUUID = UUID.randomUUID(); + stack.getTag().putLong(Constants.NBT.MOST_SIG, itemUUID.getMostSignificantBits()); + stack.getTag().putLong(Constants.NBT.LEAST_SIG, itemUUID.getLeastSignificantBits()); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/util/handler/event/ClientHandler.java b/src/main/java/wayoftime/bloodmagic/util/handler/event/ClientHandler.java new file mode 100644 index 00000000..c2235560 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/handler/event/ClientHandler.java @@ -0,0 +1,563 @@ +package wayoftime.bloodmagic.util.handler.event; + +import java.util.HashMap; +import java.util.List; + +import com.google.common.collect.Lists; +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.entity.player.ClientPlayerEntity; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.renderer.ActiveRenderInfo; +import net.minecraft.client.renderer.Atlases; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.inventory.container.PlayerContainer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.text.IFormattableTextComponent; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.RenderWorldLastEvent; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidTank; +import net.minecraftforge.fml.common.Mod; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.client.render.BloodMagicRenderer; +import wayoftime.bloodmagic.client.render.BloodMagicRenderer.Model3D; +import wayoftime.bloodmagic.client.render.RenderResizableCuboid; +import wayoftime.bloodmagic.client.utils.BMRenderTypes; +import wayoftime.bloodmagic.common.item.ItemRitualDiviner; +import wayoftime.bloodmagic.common.item.ItemRitualReader; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.ritual.EnumRitualReaderState; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.ritual.RitualComponent; +import wayoftime.bloodmagic.tile.TileMasterRitualStone; +import wayoftime.bloodmagic.will.DemonWillHolder; + +@Mod.EventBusSubscriber(modid = BloodMagic.MODID, value = Dist.CLIENT) +//@OnlyIn(Dist.CLIENT) +public class ClientHandler +{ + public static final boolean SUPPRESS_ASSET_ERRORS = true; + public static ResourceLocation ritualStoneBlank = BloodMagic.rl("block/ritualstone");; + public static ResourceLocation ritualStoneWater = BloodMagic.rl("block/waterritualstone");; + public static ResourceLocation ritualStoneFire = BloodMagic.rl("block/fireritualstone");; + public static ResourceLocation ritualStoneEarth = BloodMagic.rl("block/earthritualstone");; + public static ResourceLocation ritualStoneAir = BloodMagic.rl("block/airritualstone");; + public static ResourceLocation ritualStoneDawn = BloodMagic.rl("block/dawnritualstone");; + public static ResourceLocation ritualStoneDusk = BloodMagic.rl("block/duskritualstone");; + public static ResourceLocation boarder = new ResourceLocation("block/chiseled_sandstone"); + public static TextureAtlasSprite blankBloodRune; + public static TextureAtlasSprite stoneBrick; + public static TextureAtlasSprite glowstone; +// public static TextureAtlasSprite bloodStoneBrick; + public static TextureAtlasSprite beacon; +// public static TextureAtlasSprite crystalCluster; + public static Minecraft minecraft = Minecraft.getInstance(); + private static TileMasterRitualStone mrsHoloTile; + private static TileMasterRitualStone mrsRangeTile; + private static Ritual mrsHoloRitual; + private static Direction mrsHoloDirection; + private static boolean mrsHoloDisplay; + private static boolean mrsRangeDisplay; + + public static DemonWillHolder currentAura; + + static HashMap resourceMap = new HashMap(); + + public static Minecraft mc() + { + return Minecraft.getInstance(); + } + + public static void bindTexture(String path) + { + mc().getTextureManager().bindTexture(getResource(path)); + } + + public static void bindAtlas() + { + mc().getTextureManager().bindTexture(PlayerContainer.LOCATION_BLOCKS_TEXTURE); + } + + public static ResourceLocation getResource(String path) + { + ResourceLocation rl = resourceMap.containsKey(path) ? resourceMap.get(path) : new ResourceLocation(path); + if (!resourceMap.containsKey(path)) + resourceMap.put(path, rl); + return rl; + } + + public static TextureAtlasSprite getSprite(ResourceLocation rl) + { + return mc().getModelManager().getAtlasTexture(PlayerContainer.LOCATION_BLOCKS_TEXTURE).getSprite(rl); + } + + @SubscribeEvent + public static void onTextureStitch(TextureStitchEvent.Pre event) + { + final String BLOCKS = "block/"; + +// ritualStoneBlank = Minecraft.getInstance().getAtlasSpriteGetter(AtlasTexture.LOCATION_BLOCKS_TEXTURE).apply(BloodMagic.rl(block//" + "blankrune")); +//// ritualStoneBlank = forName(event.getMap(), "ritualstone", BLOCKS); +// ritualStoneWater = forName(event.getMap(), "waterritualstone", BLOCKS); +// ritualStoneFire = forName(event.getMap(), "fireritualstone", BLOCKS); +// ritualStoneEarth = forName(event.getMap(), "earthritualstone", BLOCKS); +// ritualStoneAir = forName(event.getMap(), "airritualstone", BLOCKS); +// ritualStoneDawn = forName(event.getMap(), "lightritualstone", BLOCKS); +// ritualStoneDusk = forName(event.getMap(), "duskritualstone", BLOCKS); + + blankBloodRune = forName(event.getMap(), "blankrune", BLOCKS); + stoneBrick = event.getMap().getSprite(new ResourceLocation("minecraft:block/stonebrick")); + glowstone = event.getMap().getSprite(new ResourceLocation("minecraft:block/glowstone")); +// bloodStoneBrick = forName(event.getMap(), "BloodStoneBrick", BLOCKS); + beacon = event.getMap().getSprite(new ResourceLocation("minecraft:block/beacon")); +// crystalCluster = forName(event.getMap(), "ShardCluster", BLOCKS); + } + + @SubscribeEvent + public static void render(RenderWorldLastEvent event) + { + ClientPlayerEntity player = minecraft.player; + World world = player.getEntityWorld(); + + if (mrsHoloTile != null) + { + if (world.getTileEntity(mrsHoloTile.getPos()) instanceof TileMasterRitualStone) + { + if (mrsHoloDisplay) + { + IRenderTypeBuffer.Impl buffers = Minecraft.getInstance().getRenderTypeBuffers().getBufferSource(); + MatrixStack stack = event.getMatrixStack(); + renderRitualStones(stack, buffers, mrsHoloTile, event.getPartialTicks()); + RenderSystem.disableDepthTest(); + buffers.finish(); + } else + ClientHandler.setRitualHoloToNull(); + } else + { + ClientHandler.setRitualHoloToNull(); + } + } + + if (mrsRangeTile != null) + { + if (world.getTileEntity(mrsRangeTile.getPos()) instanceof TileMasterRitualStone) + { + if (mrsRangeDisplay) + { + IRenderTypeBuffer.Impl buffers = Minecraft.getInstance().getRenderTypeBuffers().getBufferSource(); + MatrixStack stack = event.getMatrixStack(); + renderRangeHologram(stack, buffers, mrsRangeTile, event.getPartialTicks()); + RenderSystem.disableDepthTest(); + buffers.finish(); + } else + ClientHandler.setRitualRangeHoloToNull(); + } else + { + ClientHandler.setRitualRangeHoloToNull(); + } + } + + if (minecraft.objectMouseOver == null || minecraft.objectMouseOver.getType() != RayTraceResult.Type.BLOCK) + return; + + TileEntity tileEntity = world.getTileEntity(((BlockRayTraceResult) minecraft.objectMouseOver).getPos()); + + if (tileEntity instanceof TileMasterRitualStone && !player.getHeldItemMainhand().isEmpty() && player.getHeldItemMainhand().getItem() instanceof ItemRitualDiviner) + { + IRenderTypeBuffer.Impl buffers = Minecraft.getInstance().getRenderTypeBuffers().getBufferSource(); + MatrixStack stack = event.getMatrixStack(); + renderRitualStones(stack, buffers, player, event.getPartialTicks()); + RenderSystem.disableDepthTest(); + buffers.finish(); + } + } + + private static TextureAtlasSprite forName(AtlasTexture textureMap, String name, String dir) + { + return textureMap.getSprite(new ResourceLocation(BloodMagic.MODID + dir + "/" + name)); + } + + private static void renderRitualStones(MatrixStack stack, IRenderTypeBuffer renderer, ClientPlayerEntity player, float partialTicks) + { + ActiveRenderInfo activerenderinfo = Minecraft.getInstance().gameRenderer.getActiveRenderInfo(); + Vector3d eyePos = activerenderinfo.getProjectedView(); + IVertexBuilder buffer = renderer.getBuffer(Atlases.getTranslucentCullBlockType()); + World world = player.getEntityWorld(); + ItemRitualDiviner ritualDiviner = (ItemRitualDiviner) player.inventory.getCurrentItem().getItem(); + Direction direction = ritualDiviner.getDirection(player.inventory.getCurrentItem()); + Ritual ritual = BloodMagic.RITUAL_MANAGER.getRitual(ritualDiviner.getCurrentRitual(player.inventory.getCurrentItem())); + + if (ritual == null) + return; + + BlockPos vec3, vX; + vec3 = ((BlockRayTraceResult) minecraft.objectMouseOver).getPos(); + + List components = Lists.newArrayList(); + ritual.gatherComponents(components::add); + for (RitualComponent ritualComponent : components) + { + stack.push(); + vX = vec3.add(ritualComponent.getOffset(direction)); + double minX = vX.getX() - eyePos.x; + double minY = vX.getY() - eyePos.y; + double minZ = vX.getZ() - eyePos.z; + + stack.translate(minX, minY, minZ); + + if (!world.getBlockState(vX).isOpaqueCube(world, vX)) + { + ResourceLocation rl = null; + + switch (ritualComponent.getRuneType()) + { + case BLANK: + rl = ritualStoneBlank; + break; + case WATER: + rl = ritualStoneWater; + break; + case FIRE: + rl = ritualStoneFire; + break; + case EARTH: + rl = ritualStoneEarth; + break; + case AIR: + rl = ritualStoneAir; + break; + case DAWN: + rl = ritualStoneDawn; + break; + case DUSK: + rl = ritualStoneDusk; + break; + } + + Model3D model = getBlockModel(rl); + + RenderResizableCuboid.INSTANCE.renderCube(model, stack, buffer, 0xDDFFFFFF, 0x00F000F0, OverlayTexture.NO_OVERLAY); + } + stack.pop(); + } + } + + public static void renderRitualStones(MatrixStack stack, IRenderTypeBuffer renderer, TileMasterRitualStone masterRitualStone, float partialTicks) + { + ActiveRenderInfo activerenderinfo = Minecraft.getInstance().gameRenderer.getActiveRenderInfo(); + Vector3d eyePos = activerenderinfo.getProjectedView(); + IVertexBuilder buffer = renderer.getBuffer(Atlases.getTranslucentCullBlockType()); + ClientPlayerEntity player = minecraft.player; + World world = player.getEntityWorld(); + Direction direction = mrsHoloDirection; + Ritual ritual = mrsHoloRitual; + + if (ritual == null) + { + return; + } + + BlockPos vec3, vX; + vec3 = masterRitualStone.getPos(); + + List components = Lists.newArrayList(); + ritual.gatherComponents(components::add); + for (RitualComponent ritualComponent : components) + { + stack.push(); + vX = vec3.add(ritualComponent.getOffset(direction)); + + double minX = vX.getX() - eyePos.x; + double minY = vX.getY() - eyePos.y; + double minZ = vX.getZ() - eyePos.z; + + stack.translate(minX, minY, minZ); + + if (!world.getBlockState(vX).isOpaqueCube(world, vX)) + { + ResourceLocation rl = null; + + switch (ritualComponent.getRuneType()) + { + case BLANK: + rl = ritualStoneBlank; + break; + case WATER: + rl = ritualStoneWater; + break; + case FIRE: + rl = ritualStoneFire; + break; + case EARTH: + rl = ritualStoneEarth; + break; + case AIR: + rl = ritualStoneAir; + break; + case DAWN: + rl = ritualStoneDawn; + break; + case DUSK: + rl = ritualStoneDusk; + break; + } + + Model3D model = getBlockModel(rl); + + RenderResizableCuboid.INSTANCE.renderCube(model, stack, buffer, 0xDDFFFFFF, 0x00F000F0, OverlayTexture.NO_OVERLAY); + } + + stack.pop(); + } + } + + public static void renderRangeHologram(MatrixStack stack, IRenderTypeBuffer renderer, TileMasterRitualStone masterRitualStone, float partialTicks) + { + ActiveRenderInfo activerenderinfo = Minecraft.getInstance().gameRenderer.getActiveRenderInfo(); + Vector3d eyePos = activerenderinfo.getProjectedView(); + IVertexBuilder buffer = renderer.getBuffer(Atlases.getTranslucentCullBlockType()); + ClientPlayerEntity player = minecraft.player; + World world = player.getEntityWorld(); + + if (!player.getHeldItemMainhand().isEmpty() && player.getHeldItemMainhand().getItem() instanceof ItemRitualReader) + { + ItemStack itemStack = player.getHeldItemMainhand(); + EnumRitualReaderState state = ((ItemRitualReader) itemStack.getItem()).getState(itemStack); + if (state == EnumRitualReaderState.SET_AREA) + { + String range = ((ItemRitualReader) itemStack.getItem()).getCurrentBlockRange(itemStack); + AreaDescriptor descriptor = masterRitualStone.getBlockRange(range); + if (descriptor == null) + { + return; + } + + stack.push(); + BlockPos vec3; + vec3 = masterRitualStone.getPos(); + AxisAlignedBB aabb = descriptor.getAABB(vec3); + double sizeOffset = -1d / 16d; + if (aabb.contains(eyePos)) + { + sizeOffset *= -1; + } + + double minX = aabb.minX - eyePos.x + sizeOffset; + double minY = aabb.minY - eyePos.y + sizeOffset; + double minZ = aabb.minZ - eyePos.z + sizeOffset; + + stack.translate(minX, minY, minZ); + + ResourceLocation rl = boarder; + Model3D model = getBlockModelWithSize(rl, aabb.getXSize() - 2 * sizeOffset, aabb.getYSize() - 2 * sizeOffset, aabb.getZSize() - 2 * sizeOffset); + RenderResizableCuboid.INSTANCE.renderCube(model, stack, buffer, 0x99FF4444, 0x00F000F0, OverlayTexture.NO_OVERLAY); + stack.pop(); + } + } + } + + private static Model3D getBlockModel(ResourceLocation rl) + { + Model3D model = new BloodMagicRenderer.Model3D(); + model.setTexture(Minecraft.getInstance().getAtlasSpriteGetter(AtlasTexture.LOCATION_BLOCKS_TEXTURE).apply(rl)); + model.minX = 0; + model.minY = 0; + model.minZ = 0; + model.maxX = 1; + model.maxY = 1; + model.maxZ = 1; + + return model; + } + + private static Model3D getBlockModelWithSize(ResourceLocation rl, double maxX, double maxY, double maxZ) + { + Model3D model = new BloodMagicRenderer.Model3D(); + model.setTexture(Minecraft.getInstance().getAtlasSpriteGetter(AtlasTexture.LOCATION_BLOCKS_TEXTURE).apply(rl)); + model.minX = 0; + model.minY = 0; + model.minZ = 0; + model.maxX = maxX; + model.maxY = maxY; + model.maxZ = maxZ; + + return model; + } + + public static void setRitualHolo(TileMasterRitualStone masterRitualStone, Ritual ritual, Direction direction, boolean displayed) + { + mrsHoloDisplay = displayed; + mrsHoloTile = masterRitualStone; + mrsHoloRitual = ritual; + mrsHoloDirection = direction; + } + + public static void setRitualHoloToNull() + { + mrsHoloDisplay = false; + mrsHoloTile = null; + mrsHoloRitual = null; + mrsHoloDirection = Direction.NORTH; + } + + public static void setRitualRangeHolo(TileMasterRitualStone masterRitualStone, boolean displayed) + { + mrsRangeDisplay = displayed; + mrsRangeTile = masterRitualStone; + } + + public static void setRitualRangeHoloToNull() + { + mrsRangeDisplay = false; + mrsRangeTile = null; + } + + public static void handleGuiTank(MatrixStack transform, IFluidTank tank, int x, int y, int w, int h, int oX, int oY, int oW, int oH, int mX, int mY, String originalTexture, List tooltip) + { + handleGuiTank(transform, tank.getFluid(), tank.getCapacity(), x, y, w, h, oX, oY, oW, oH, mX, mY, originalTexture, tooltip); + } + + public static void handleGuiTank(MatrixStack transform, FluidStack fluid, int capacity, int x, int y, int w, int h, int oX, int oY, int oW, int oH, int mX, int mY, String originalTexture, List tooltip) + { + if (tooltip == null) + { + transform.push(); + IRenderTypeBuffer.Impl buffer = IRenderTypeBuffer.getImpl(Tessellator.getInstance().getBuffer()); + if (fluid != null && fluid.getFluid() != null) + { + int fluidHeight = (int) (h * (fluid.getAmount() / (float) capacity)); + drawRepeatedFluidSpriteGui(buffer, transform, fluid, x, y + h - fluidHeight, w, fluidHeight); + RenderSystem.color3f(1, 1, 1); + } + int xOff = (w - oW) / 2; + int yOff = (h - oH) / 2; + RenderType renderType = BMRenderTypes.getGui(new ResourceLocation(originalTexture)); + drawTexturedRect(buffer.getBuffer(renderType), transform, x + xOff, y + yOff, oW, oH, 256f, oX, oX + oW, oY, oY + oH); + buffer.finish(renderType); + transform.pop(); + } else + { + if (mX >= x && mX < x + w && mY >= y && mY < y + h) + addFluidTooltip(fluid, tooltip, capacity); + } + } + + public static void drawRepeatedFluidSpriteGui(IRenderTypeBuffer buffer, MatrixStack transform, FluidStack fluid, float x, float y, float w, float h) + { + RenderType renderType = BMRenderTypes.getGui(PlayerContainer.LOCATION_BLOCKS_TEXTURE); + IVertexBuilder builder = buffer.getBuffer(renderType); + drawRepeatedFluidSprite(builder, transform, fluid, x, y, w, h); + } + + public static void drawRepeatedFluidSprite(IVertexBuilder builder, MatrixStack transform, FluidStack fluid, float x, float y, float w, float h) + { + TextureAtlasSprite sprite = getSprite(fluid.getFluid().getAttributes().getStillTexture(fluid)); + int col = fluid.getFluid().getAttributes().getColor(fluid); + int iW = sprite.getWidth(); + int iH = sprite.getHeight(); + if (iW > 0 && iH > 0) + drawRepeatedSprite(builder, transform, x, y, w, h, iW, iH, sprite.getMinU(), sprite.getMaxU(), sprite.getMinV(), sprite.getMaxV(), (col >> 16 & 255) / 255.0f, (col >> 8 & 255) / 255.0f, (col & 255) / 255.0f, 1); + } + + public static void drawRepeatedSprite(IVertexBuilder builder, MatrixStack transform, float x, float y, float w, float h, int iconWidth, int iconHeight, float uMin, float uMax, float vMin, float vMax, float r, float g, float b, float alpha) + { + int iterMaxW = (int) (w / iconWidth); + int iterMaxH = (int) (h / iconHeight); + float leftoverW = w % iconWidth; + float leftoverH = h % iconHeight; + float leftoverWf = leftoverW / (float) iconWidth; + float leftoverHf = leftoverH / (float) iconHeight; + float iconUDif = uMax - uMin; + float iconVDif = vMax - vMin; + for (int ww = 0; ww < iterMaxW; ww++) + { + for (int hh = 0; hh < iterMaxH; hh++) + drawTexturedRect(builder, transform, x + ww * iconWidth, y + hh * iconHeight, iconWidth, iconHeight, r, g, b, alpha, uMin, uMax, vMin, vMax); + drawTexturedRect(builder, transform, x + ww * iconWidth, y + iterMaxH * iconHeight, iconWidth, leftoverH, r, g, b, alpha, uMin, uMax, vMin, (vMin + iconVDif * leftoverHf)); + } + if (leftoverW > 0) + { + for (int hh = 0; hh < iterMaxH; hh++) + drawTexturedRect(builder, transform, x + iterMaxW * iconWidth, y + hh * iconHeight, leftoverW, iconHeight, r, g, b, alpha, uMin, (uMin + iconUDif * leftoverWf), vMin, vMax); + drawTexturedRect(builder, transform, x + iterMaxW * iconWidth, y + iterMaxH * iconHeight, leftoverW, leftoverH, r, g, b, alpha, uMin, (uMin + iconUDif * leftoverWf), vMin, (vMin + iconVDif * leftoverHf)); + } + } + + public static void drawTexturedRect(IVertexBuilder builder, MatrixStack transform, float x, float y, float w, float h, float r, float g, float b, float alpha, float u0, float u1, float v0, float v1) + { + Matrix4f mat = transform.getLast().getMatrix(); + builder.pos(mat, x, y + h, 0).color(r, g, b, alpha).tex(u0, v1).overlay(OverlayTexture.NO_OVERLAY).lightmap(0xf000f0).normal(1, 1, 1).endVertex(); + builder.pos(mat, x + w, y + h, 0).color(r, g, b, alpha).tex(u1, v1).overlay(OverlayTexture.NO_OVERLAY).lightmap(15728880).normal(1, 1, 1).endVertex(); + builder.pos(mat, x + w, y, 0).color(r, g, b, alpha).tex(u1, v0).overlay(OverlayTexture.NO_OVERLAY).lightmap(15728880).normal(1, 1, 1).endVertex(); + builder.pos(mat, x, y, 0).color(r, g, b, alpha).tex(u0, v0).overlay(OverlayTexture.NO_OVERLAY).lightmap(15728880).normal(1, 1, 1).endVertex(); + } + + public static void drawTexturedRect(IVertexBuilder builder, MatrixStack transform, int x, int y, int w, int h, float picSize, int u0, int u1, int v0, int v1) + { + drawTexturedRect(builder, transform, x, y, w, h, 1, 1, 1, 1, u0 / picSize, u1 / picSize, v0 / picSize, v1 / picSize); + } + + public static void addFluidTooltip(FluidStack fluid, List tooltip, int tankCapacity) + { + if (!fluid.isEmpty()) + tooltip.add(applyFormat(fluid.getDisplayName(), fluid.getFluid().getAttributes().getRarity(fluid).color)); + else + tooltip.add(new TranslationTextComponent("gui.bloodmagic.empty")); +// if (fluid.getFluid() instanceof IEFluid) +// ((IEFluid) fluid.getFluid()).addTooltipInfo(fluid, null, tooltip); + + if (mc().gameSettings.advancedItemTooltips && !fluid.isEmpty()) + { + if (!Screen.hasShiftDown()) + tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.holdShiftForInfo")); + else + { + // TODO translation keys + tooltip.add(applyFormat(new StringTextComponent("Fluid Registry: " + fluid.getFluid().getRegistryName()), TextFormatting.DARK_GRAY)); + tooltip.add(applyFormat(new StringTextComponent("Density: " + fluid.getFluid().getAttributes().getDensity(fluid)), TextFormatting.DARK_GRAY)); + tooltip.add(applyFormat(new StringTextComponent("Temperature: " + fluid.getFluid().getAttributes().getTemperature(fluid)), TextFormatting.DARK_GRAY)); + tooltip.add(applyFormat(new StringTextComponent("Viscosity: " + fluid.getFluid().getAttributes().getViscosity(fluid)), TextFormatting.DARK_GRAY)); + tooltip.add(applyFormat(new StringTextComponent("NBT Data: " + fluid.getTag()), TextFormatting.DARK_GRAY)); + } + } + + if (tankCapacity > 0) + tooltip.add(applyFormat(new StringTextComponent(fluid.getAmount() + "/" + tankCapacity + "mB"), TextFormatting.GRAY)); + else + tooltip.add(applyFormat(new StringTextComponent(fluid.getAmount() + "mB"), TextFormatting.GRAY)); + } + + public static IFormattableTextComponent applyFormat(ITextComponent component, TextFormatting... color) + { + Style style = component.getStyle(); + for (TextFormatting format : color) style = style.applyFormatting(format); + return component.deepCopy().setStyle(style); + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/util/handler/event/GenericHandler.java b/src/main/java/wayoftime/bloodmagic/util/handler/event/GenericHandler.java new file mode 100644 index 00000000..7ccf30fe --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/handler/event/GenericHandler.java @@ -0,0 +1,717 @@ +package wayoftime.bloodmagic.util.handler.event; + +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.UUID; + +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.entity.projectile.ArrowEntity; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.BowItem; +import net.minecraft.item.CrossbowItem; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.EffectInstance; +import net.minecraft.potion.Effects; +import net.minecraft.util.DamageSource; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.Tags; +import net.minecraftforge.common.ToolType; +import net.minecraftforge.event.entity.EntityJoinWorldEvent; +import net.minecraftforge.event.entity.living.LivingDamageEvent; +import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent; +import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.event.entity.living.LivingEvent.LivingJumpEvent; +import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; +import net.minecraftforge.event.entity.living.LivingHealEvent; +import net.minecraftforge.event.entity.living.LivingHurtEvent; +import net.minecraftforge.event.entity.living.LootingLevelEvent; +import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.event.entity.player.PlayerXpEvent; +import net.minecraftforge.event.world.BlockEvent; +import net.minecraftforge.event.world.BlockEvent.BlockToolInteractEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.anointment.AnointmentHolder; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.item.BloodOrb; +import wayoftime.bloodmagic.common.item.IBindable; +import wayoftime.bloodmagic.common.item.IBloodOrb; +import wayoftime.bloodmagic.common.item.ItemExperienceBook; +import wayoftime.bloodmagic.core.AnointmentRegistrar; +import wayoftime.bloodmagic.core.LivingArmorRegistrar; +import wayoftime.bloodmagic.core.data.Binding; +import wayoftime.bloodmagic.core.data.SoulNetwork; +import wayoftime.bloodmagic.core.living.LivingStats; +import wayoftime.bloodmagic.core.living.LivingUtil; +import wayoftime.bloodmagic.demonaura.WorldDemonWillHandler; +import wayoftime.bloodmagic.event.ItemBindEvent; +import wayoftime.bloodmagic.event.SacrificeKnifeUsedEvent; +import wayoftime.bloodmagic.network.DemonAuraClientPacket; +import wayoftime.bloodmagic.potion.BMPotionUtils; +import wayoftime.bloodmagic.potion.BloodMagicPotions; +import wayoftime.bloodmagic.util.helper.BindableHelper; +import wayoftime.bloodmagic.util.helper.NetworkHelper; +import wayoftime.bloodmagic.util.helper.PlayerHelper; +import wayoftime.bloodmagic.will.DemonWillHolder; + +@Mod.EventBusSubscriber(modid = BloodMagic.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class GenericHandler +{ + // Handles binding of IBindable's as well as setting a player's highest orb tier + @SubscribeEvent + public void onInteract(PlayerInteractEvent.RightClickItem event) + { + if (event.getWorld().isRemote) + return; + + PlayerEntity player = event.getPlayer(); + + if (PlayerHelper.isFakePlayer(player)) + return; + + ItemStack held = event.getItemStack(); + if (!held.isEmpty() && held.getItem() instanceof IBindable) + { // Make sure it's bindable + IBindable bindable = (IBindable) held.getItem(); + Binding binding = bindable.getBinding(held); + if (binding == null) + { // If the binding is null, let's create one + if (bindable.onBind(player, held)) + { + ItemBindEvent toPost = new ItemBindEvent(player, held); + if (MinecraftForge.EVENT_BUS.post(toPost)) // Allow cancellation of binding + return; + + BindableHelper.applyBinding(held, player); // Bind item to the player + } + // If the binding exists, we'll check if the player's name has changed since + // they last used it and update that if so. + } else if (binding.getOwnerId().equals(player.getGameProfile().getId()) && !binding.getOwnerName().equals(player.getGameProfile().getName())) + { + binding.setOwnerName(player.getGameProfile().getName()); + BindableHelper.applyBinding(held, binding); + } + } + + if (!held.isEmpty() && held.getItem() instanceof IBloodOrb) + { + IBloodOrb bloodOrb = (IBloodOrb) held.getItem(); + SoulNetwork network = NetworkHelper.getSoulNetwork(player); + + BloodOrb orb = bloodOrb.getOrb(held); + if (orb == null) + return; + + if (orb.getTier() > network.getOrbTier()) + network.setOrbTier(orb.getTier()); + } + } + + @SubscribeEvent + public void onPlayerLeftClickAir(PlayerInteractEvent.LeftClickEmpty event) + { +// if (event.getItemStack().getItem() instanceof ItemSentientScythe) +// { +// ((ItemSentientScythe) event.getItemStack().getItem()).onLeftClickAir(event.getItemStack(), event.getEntityLiving()); +// } + } + + @SubscribeEvent + // Called when an entity is set to be hurt. Called before vanilla armour + // calculations. + public void onLivingHurt(LivingHurtEvent event) + { + Entity sourceEntity = event.getSource().getTrueSource(); + LivingEntity living = event.getEntityLiving(); + + if (sourceEntity instanceof PlayerEntity) + { + PlayerEntity sourcePlayer = (PlayerEntity) sourceEntity; + if (LivingUtil.hasFullSet(sourcePlayer)) + { + ItemStack mainWeapon = sourcePlayer.getActiveItemStack(); + double additionalDamage = LivingUtil.getAdditionalDamage(sourcePlayer, mainWeapon, living, event.getAmount()); + event.setAmount((float) (event.getAmount() + additionalDamage)); + } + + ItemStack heldStack = sourcePlayer.getHeldItemMainhand(); + AnointmentHolder holder = AnointmentHolder.fromItemStack(heldStack); + + if (holder != null) + { + double additionalDamage = holder.getAdditionalDamage(sourcePlayer, heldStack, event.getAmount(), living); + + event.setAmount((float) (event.getAmount() + additionalDamage)); + } + } + + if (living instanceof PlayerEntity) + { + PlayerEntity player = (PlayerEntity) living; + if (LivingUtil.hasFullSet(player)) + { + event.setAmount((float) LivingUtil.getDamageReceivedForArmour(player, event.getSource(), event.getAmount())); + } + } + } + + @SubscribeEvent + // Called after armour calculations (including LivingHurtEvent) are parsed. + // Damage that the player should receive after armour/absorption hearts. + public void onLivingDamage(LivingDamageEvent event) + { + Entity sourceEntity = event.getSource().getTrueSource(); + LivingEntity living = event.getEntityLiving(); + + if (sourceEntity instanceof PlayerEntity) + { + PlayerEntity sourcePlayer = (PlayerEntity) sourceEntity; + if (LivingUtil.hasFullSet(sourcePlayer)) + { + if (sourcePlayer.isSprinting()) + { + LivingUtil.applyNewExperience(sourcePlayer, LivingArmorRegistrar.UPGRADE_SPRINT_ATTACK.get(), event.getAmount()); + } + } + + ItemStack heldStack = sourcePlayer.getHeldItemMainhand(); + AnointmentHolder holder = AnointmentHolder.fromItemStack(heldStack); +// AnointmentHolder holder = AnointmentHolder.fromPlayer(sourcePlayer, Hand.MAIN_HAND); + +// System.out.println("Checking consumption. Holder is: " + holder); + if (holder != null && holder.consumeAnointmentDurabilityOnHit(heldStack, EquipmentSlotType.MAINHAND)) + { + holder.toItemStack(heldStack); + } + } + + if (living instanceof PlayerEntity) + { + PlayerEntity player = (PlayerEntity) living; + if (LivingUtil.hasFullSet(player)) + { + if (event.getSource().isProjectile()) + { +// LivingStats stats = LivingStats.fromPlayer(player); +// stats.addExperience(LivingArmorRegistrar.TEST_UPGRADE.get().getKey(), 10); + LivingUtil.applyNewExperience(player, LivingArmorRegistrar.UPGRADE_ARROW_PROTECT.get(), event.getAmount()); + } else + { + LivingUtil.applyNewExperience(player, LivingArmorRegistrar.UPGRADE_PHYSICAL_PROTECT.get(), event.getAmount()); + } + + if (event.getSource() == DamageSource.FALL) + { + LivingUtil.applyNewExperience(player, LivingArmorRegistrar.UPGRADE_FALL_PROTECT.get(), event.getAmount()); + } + } + } + } + + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void onExperiencePickupHighest(PlayerXpEvent.PickupXp event) + { + LivingEntity living = event.getEntityLiving(); + if (living instanceof PlayerEntity) + { + PlayerEntity player = (PlayerEntity) living; + if (LivingUtil.hasFullSet(player)) + { + LivingStats stats = LivingStats.fromPlayer(player, true); + double expModifier = 1 + LivingArmorRegistrar.UPGRADE_EXPERIENCE.get().getBonusValue("exp", stats.getLevel(LivingArmorRegistrar.UPGRADE_EXPERIENCE.get().getKey())).doubleValue(); +// System.out.println("Experience modifier: " + expModifier); + + int xp = event.getOrb().xpValue; + + event.getOrb().xpValue = ((int) Math.floor(xp * expModifier) + (player.world.rand.nextDouble() < (xp * expModifier) % 1 + ? 1 + : 0)); + + LivingUtil.applyNewExperience(player, LivingArmorRegistrar.UPGRADE_EXPERIENCE.get(), event.getOrb().getXpValue()); + } + } + } + + @SubscribeEvent + public void onHoe(BlockToolInteractEvent event) + { + if (event.getToolType() == ToolType.HOE && Tags.Blocks.NETHERRACK.contains(event.getState().getBlock())) + { + event.setFinalState(BloodMagicBlocks.NETHER_SOIL.get().getDefaultState()); + } + } + + // Experience Tome + @SubscribeEvent(priority = EventPriority.LOWEST) + public void onExperiencePickup(PlayerXpEvent.PickupXp event) + { + PlayerEntity player = event.getPlayer(); + Entry entry = EnchantmentHelper.getRandomItemWithEnchantment(Enchantments.MENDING, player); + + if (entry != null) + { + ItemStack itemStack = entry.getValue(); + if (!itemStack.isEmpty() && itemStack.isDamaged()) + { + int i = Math.min(xpToDurability(event.getOrb().xpValue), itemStack.getDamage()); + event.getOrb().xpValue -= durabilityToXp(i); + itemStack.setDamage(itemStack.getDamage() - i); + } + } + + if (!player.getEntityWorld().isRemote) + { + for (ItemStack stack : player.inventory.mainInventory) + { + if (stack.getItem() instanceof ItemExperienceBook) + { + ItemExperienceBook.addExperience(stack, event.getOrb().xpValue); + event.getOrb().xpValue = 0; + break; + } + } + } + } + + private static int xpToDurability(int xp) + { + return xp * 2; + } + + private static int durabilityToXp(int durability) + { + return durability / 2; + } + + public static void sendPlayerDemonWillAura(PlayerEntity player) + { + if (player instanceof ServerPlayerEntity) + { + BlockPos pos = player.getPosition(); + DemonWillHolder holder = WorldDemonWillHandler.getWillHolder(WorldDemonWillHandler.getDimensionResourceLocation(player.world), pos.getX() >> 4, pos.getZ() >> 4); + if (holder != null) + { + BloodMagic.packetHandler.sendTo(new DemonAuraClientPacket(holder), (ServerPlayerEntity) player); + } else + { + BloodMagic.packetHandler.sendTo(new DemonAuraClientPacket(new DemonWillHolder()), (ServerPlayerEntity) player); + } + } + } + + // Handles sending the client the Demon Will Aura updates + @SubscribeEvent + public void onLivingUpdate(LivingUpdateEvent event) + { + if (!event.getEntityLiving().getEntityWorld().isRemote) + { + LivingEntity entity = event.getEntityLiving(); + if (entity.isPotionActive(BloodMagicPotions.PLANT_LEECH)) + { + int amplifier = entity.getActivePotionEffect(BloodMagicPotions.PLANT_LEECH).getAmplifier(); + int timeRemaining = entity.getActivePotionEffect(BloodMagicPotions.PLANT_LEECH).getDuration(); + if (timeRemaining % 10 == 0) + { + BMPotionUtils.damageMobAndGrowSurroundingPlants(entity, 2 + amplifier, 1, 0.5 * 3 / (amplifier + 3), 25 * (1 + amplifier)); + } + } + } + } + + @SubscribeEvent + public void onHeal(LivingHealEvent event) + { + LivingEntity living = event.getEntityLiving(); + if (living instanceof PlayerEntity) + { + PlayerEntity player = (PlayerEntity) living; + if (LivingUtil.hasFullSet(player)) + { + LivingUtil.applyNewExperience(player, LivingArmorRegistrar.UPGRADE_HEALTH.get(), event.getAmount()); + } + } + } + + @SubscribeEvent + public void onSelfSacrifice(SacrificeKnifeUsedEvent event) + { + if (LivingUtil.hasFullSet(event.player)) + { + LivingStats stats = LivingStats.fromPlayer(event.player, true); + double bonus = LivingArmorRegistrar.UPGRADE_SELF_SACRIFICE.get().getBonusValue("self_mod", stats.getLevel(LivingArmorRegistrar.UPGRADE_SELF_SACRIFICE.get().getKey())).doubleValue(); + event.lpAdded = (int) Math.round(event.lpAdded * (1 + bonus)); + LivingUtil.applyNewExperience(event.player, LivingArmorRegistrar.UPGRADE_SELF_SACRIFICE.get(), event.healthDrained); + } + } + + public static Map posXMap = new HashMap<>(); + public static Map posZMap = new HashMap<>(); + public static Map foodMap = new HashMap<>(); + + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void onEntityUpdate(LivingEvent.LivingUpdateEvent event) + { + if (event.getEntity().world.isRemote) + { + if (event.getEntityLiving() instanceof PlayerEntity) + { + PlayerEntity player = (PlayerEntity) event.getEntityLiving(); + if (LivingUtil.hasFullSet(player)) + { + LivingStats stats = LivingStats.fromPlayer(player, true); + if (!player.isOnGround() && player.getMotion().getY() < 0) + { + + int jumpLevel = stats.getLevel(LivingArmorRegistrar.UPGRADE_JUMP.get().getKey()); + double fallDistanceMultiplier = LivingArmorRegistrar.UPGRADE_JUMP.get().getBonusValue("fall", jumpLevel).doubleValue(); + player.fallDistance = (float) Math.max(0, player.fallDistance + fallDistanceMultiplier * player.getMotion().getY()); +// System.out.println("Player's motion: " + player.getMotion().getY() + ", Player's fall reduction multiplier: " + fallDistanceMultiplier + ", Player's final fall distance: " + player.fallDistance); + } + return; + } + } + } + if (event.getEntityLiving() instanceof PlayerEntity) + { + PlayerEntity player = (PlayerEntity) event.getEntityLiving(); + float percentIncrease = 0; + +// System.out.println("Player's motion: " + player.getMotion().getY() + ", Player's final fall distance: " + player.fallDistance); + + if (LivingUtil.hasFullSet(player)) + { + LivingStats stats = LivingStats.fromPlayer(player, true); + ItemStack chestStack = player.getItemStackFromSlot(EquipmentSlotType.CHEST); +// percentIncrease += LivingArmorRegistrar.UPGRADE_SPEED.get().getBonusValue("speed_modifier", stats.getLevel(LivingArmorRegistrar.UPGRADE_SPEED.get().getKey())).doubleValue(); + if (player.isSprinting()) + { + int speedTime = LivingArmorRegistrar.UPGRADE_SPEED.get().getBonusValue("speed_time", stats.getLevel(LivingArmorRegistrar.UPGRADE_SPEED.get().getKey())).intValue(); + if (speedTime > 0) + { + int speedLevel = LivingArmorRegistrar.UPGRADE_SPEED.get().getBonusValue("speed_level", stats.getLevel(LivingArmorRegistrar.UPGRADE_SPEED.get().getKey())).intValue(); + player.addPotionEffect(new EffectInstance(Effects.SPEED, speedTime, speedLevel, true, false)); + } + } + + double distance = 0; + + if (posXMap.containsKey(player.getUniqueID())) + { + distance = Math.sqrt((player.getPosX() - posXMap.get(player.getUniqueID())) * (player.getPosX() - posXMap.get(player.getUniqueID())) + (player.getPosZ() - posZMap.get(player.getUniqueID())) * (player.getPosZ() - posZMap.get(player.getUniqueID()))); + } + + int currentFood = player.getFoodStats().getFoodLevel(); + + if (foodMap.getOrDefault(player.getUniqueID(), 19) < currentFood) + { + LivingUtil.applyNewExperience(player, LivingArmorRegistrar.UPGRADE_KNOCKBACK_RESIST.get(), currentFood - foodMap.getOrDefault(player.getUniqueID(), 19)); + } + + foodMap.put(player.getUniqueID(), currentFood); + +// System.out.println("Distance travelled: " + distance); + if (player.isOnGround() && distance > 0 && distance < 50) + { + distance *= (1 + percentIncrease); + LivingUtil.applyNewExperience(player, LivingArmorRegistrar.UPGRADE_SPEED.get(), distance); + } + + if (!player.isOnGround() && player.getMotion().getY() < 0) + { + + int jumpLevel = stats.getLevel(LivingArmorRegistrar.UPGRADE_JUMP.get().getKey()); + double fallDistanceMultiplier = LivingArmorRegistrar.UPGRADE_JUMP.get().getBonusValue("fall", jumpLevel).doubleValue(); + player.fallDistance = (float) Math.max(0, player.fallDistance + fallDistanceMultiplier * player.getMotion().getY()); +// System.out.println("Player's motion: " + player.getMotion().getY() + ", Player's fall reduction multiplier: " + fallDistanceMultiplier + ", Player's final fall distance: " + player.fallDistance); + } + + if (player.getFireTimer() > 0) + { + LivingUtil.applyNewExperience(player, LivingArmorRegistrar.UPGRADE_FIRE_RESIST.get(), 1); + int fireLevel = stats.getLevel(LivingArmorRegistrar.UPGRADE_FIRE_RESIST.get().getKey()); + if (fireLevel > 0) + { + boolean hasChanged = false; + int fireCooldown = chestStack.getTag().getInt("fire_cooldown"); + if (fireCooldown > 0) + { + fireCooldown--; + hasChanged = true; + } + + if (player.getFireTimer() > 0 && fireCooldown <= 0) + { + fireCooldown = LivingArmorRegistrar.UPGRADE_FIRE_RESIST.get().getBonusValue("cooldown_time", fireLevel).intValue(); + player.addPotionEffect(new EffectInstance(Effects.FIRE_RESISTANCE, LivingArmorRegistrar.UPGRADE_FIRE_RESIST.get().getBonusValue("resist_duration", fireLevel).intValue(), 0, true, false)); + hasChanged = true; + } + + if (hasChanged) + { + chestStack.getTag().putInt("fire_cooldown", fireCooldown); + } + } + } + + int poisonLevel = stats.getLevel(LivingArmorRegistrar.UPGRADE_POISON_RESIST.get().getKey()); + if (player.isPotionActive(Effects.POISON)) + { + LivingUtil.applyNewExperience(player, LivingArmorRegistrar.UPGRADE_POISON_RESIST.get(), 1); + } + if (poisonLevel > 0) + { + boolean hasChanged = false; + int poisonCooldown = chestStack.getTag().getInt("poison_cooldown"); + if (poisonCooldown > 0) + { + poisonCooldown--; + hasChanged = true; + } + + if (player.isPotionActive(Effects.POISON) && poisonCooldown <= 0 && LivingArmorRegistrar.UPGRADE_POISON_RESIST.get().getBonusValue("max_cure", poisonLevel).intValue() >= player.getActivePotionEffect(Effects.POISON).getAmplifier()) + { + poisonCooldown = LivingArmorRegistrar.UPGRADE_POISON_RESIST.get().getBonusValue("cooldown", poisonLevel).intValue(); + player.removePotionEffect(Effects.POISON); + hasChanged = true; + } + + if (hasChanged) + { + chestStack.getTag().putInt("poison_cooldown", poisonCooldown); + } + } + } + +// if (percentIncrease > 0 && (player.isOnGround()) && (Math.abs(player.moveForward) > 0 || Math.abs(player.moveStrafing) > 0)) +// { +// player.travel(new Vector3d(player.moveStrafing * percentIncrease, 0, player.moveForward * percentIncrease)); +// } + + posXMap.put(player.getUniqueID(), player.getPosX()); + posZMap.put(player.getUniqueID(), player.getPosZ()); + } + } + + @SubscribeEvent + public void onMiningSpeedCheck(PlayerEvent.BreakSpeed event) + { + PlayerEntity player = event.getPlayer(); + float percentIncrease = 0; + + if (LivingUtil.hasFullSet(player)) + { + LivingStats stats = LivingStats.fromPlayer(player, true); + percentIncrease += LivingArmorRegistrar.UPGRADE_DIGGING.get().getBonusValue("speed_modifier", stats.getLevel(LivingArmorRegistrar.UPGRADE_DIGGING.get().getKey())).doubleValue(); + } + + event.setNewSpeed((1 + percentIncrease) * event.getNewSpeed()); + } + + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void onBreakBlock(BlockEvent.BreakEvent event) + { + PlayerEntity player = event.getPlayer(); + if (player != null) + { + if (LivingUtil.hasFullSet(player)) + { + LivingUtil.applyNewExperience(player, LivingArmorRegistrar.UPGRADE_DIGGING.get(), 1); + LivingStats stats = LivingStats.fromPlayer(player); + int mineTime = LivingArmorRegistrar.UPGRADE_DIGGING.get().getBonusValue("speed_time", stats.getLevel(LivingArmorRegistrar.UPGRADE_DIGGING.get().getKey())).intValue(); + if (mineTime > 0) + { + player.addPotionEffect(new EffectInstance(Effects.HASTE, mineTime, LivingArmorRegistrar.UPGRADE_DIGGING.get().getBonusValue("speed_level", stats.getLevel(LivingArmorRegistrar.UPGRADE_DIGGING.get().getKey())).intValue(), true, false)); + } + } + + ItemStack heldStack = player.getHeldItemMainhand(); + AnointmentHolder holder = AnointmentHolder.fromItemStack(heldStack); + + if (holder != null) + { + if (holder.getAnointmentLevel(AnointmentRegistrar.ANOINTMENT_SILK_TOUCH.get()) >= 1) + { + int bonusLevel = EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, player.getHeldItemMainhand()); + int exp = event.getState().getExpDrop(event.getWorld(), event.getPos(), bonusLevel, holder.getAnointmentLevel(AnointmentRegistrar.ANOINTMENT_SILK_TOUCH.get())); + event.setExpToDrop(exp); + } + + int hiddenLevel = holder.getAnointmentLevel(AnointmentRegistrar.ANOINTMENT_HIDDEN_KNOWLEDGE.get()); + if (hiddenLevel > 0) + { + double expBonus = AnointmentRegistrar.ANOINTMENT_HIDDEN_KNOWLEDGE.get().getBonusValue("exp", hiddenLevel).doubleValue(); + int expAdded = (int) expBonus + (expBonus % 1 > event.getWorld().getRandom().nextDouble() ? 1 : 0); + event.setExpToDrop(event.getExpToDrop() + expAdded); + } + + if (holder.consumeAnointmentDurabilityOnHarvest(heldStack, EquipmentSlotType.MAINHAND)) + holder.toItemStack(heldStack); + } + } + } + + @SubscribeEvent + public void onJump(LivingJumpEvent event) + { + if (event.getEntityLiving() instanceof PlayerEntity) + { + PlayerEntity player = (PlayerEntity) event.getEntityLiving(); + + if (LivingUtil.hasFullSet(player)) + { + LivingUtil.applyNewExperience(player, LivingArmorRegistrar.UPGRADE_JUMP.get(), 1); + if (!player.isSneaking()) + { + LivingStats stats = LivingStats.fromPlayer(player); + double jumpModifier = LivingArmorRegistrar.UPGRADE_JUMP.get().getBonusValue("jump", stats.getLevel(LivingArmorRegistrar.UPGRADE_JUMP.get().getKey())).doubleValue(); + player.setMotion(player.getMotion().add(0, jumpModifier, 0)); + } + } + } + } + + private static final Map rollMap = new HashMap(); + + @SubscribeEvent + public void onEntityUseTick(LivingEntityUseItemEvent.Tick event) + { + ItemStack stack = event.getItem(); + if (stack.getItem() instanceof BowItem || stack.getItem() instanceof CrossbowItem) + { + AnointmentHolder holder = AnointmentHolder.fromItemStack(stack); + if (holder == null) + { + return; + } + int quickDrawLevel = holder.getAnointmentLevel(AnointmentRegistrar.ANOINTMENT_QUICK_DRAW.get()); + if (quickDrawLevel > 0) + { + double amount = rollMap.getOrDefault(stack, 0D) + AnointmentRegistrar.ANOINTMENT_QUICK_DRAW.get().getBonusValue("speed", quickDrawLevel).doubleValue(); + if (amount >= 1) + { + int drawReduction = (int) amount; + event.setDuration(event.getDuration() - drawReduction); + } else + { + rollMap.put(stack, amount); + } + } + } + } + + @SubscribeEvent + public void onEntityFinishUse(LivingEntityUseItemEvent.Stop event) + { + ItemStack stack = event.getItem(); + if (stack.getItem() instanceof CrossbowItem) + { + int i = stack.getUseDuration() - event.getDuration(); + float f = getCharge(i, stack); + if (f < 0) + { + return; + } + } + AnointmentHolder holder = AnointmentHolder.fromItemStack(stack); + if (holder != null) + { + if (holder.consumeAnointmentDurabilityOnUseFinish(stack, EquipmentSlotType.MAINHAND)) + { + + holder.toItemStack(stack); + } + } + } + + @SubscribeEvent + public void onEntityJoinEvent(EntityJoinWorldEvent event) + { + Entity entity = event.getEntity(); + if (entity instanceof ArrowEntity) + { + if (entity.ticksExisted <= 0) + { +// System.out.println("An arrow joined the world! Looking for the shooter..."); + ArrowEntity arrowEntity = (ArrowEntity) entity; + Entity shooter = arrowEntity.func_234616_v_(); + if (shooter instanceof PlayerEntity) + { + PlayerEntity playerShooter = (PlayerEntity) shooter; + for (Hand hand : Hand.values()) + { + ItemStack heldStack = playerShooter.getHeldItem(hand); + AnointmentHolder holder = AnointmentHolder.fromItemStack(heldStack); + if (holder == null) + { + continue; + } + + int powerLevel = holder.getAnointmentLevel(AnointmentRegistrar.ANOINTMENT_BOW_POWER.get()); + if (powerLevel > 0) + { + arrowEntity.setDamage(arrowEntity.getDamage() * AnointmentRegistrar.ANOINTMENT_BOW_POWER.get().getBonusValue("damage", powerLevel).doubleValue()); + +// System.out.println("Arrow damage is now: " + arrowEntity.getDamage()); + } + + break; + } + } + } + } + } + + @SubscribeEvent + public void onCheckLooting(LootingLevelEvent event) + { + DamageSource source = event.getDamageSource(); + if (source == null) + { + return; + } + Entity entity = source.getTrueSource(); + if (entity instanceof PlayerEntity) + { + ItemStack heldStack = ((PlayerEntity) entity).getHeldItemMainhand(); + AnointmentHolder holder = AnointmentHolder.fromItemStack(heldStack); + if (holder == null) + { + return; + } + + int plunderLevel = holder.getAnointmentLevel(AnointmentRegistrar.ANOINTMENT_LOOTING.get()); + if (plunderLevel > 0) + { + event.setLootingLevel(event.getLootingLevel() + plunderLevel); + } + } + } + + private static float getCharge(int useTime, ItemStack stack) + { + float f = (float) useTime / (float) getChargeTime(stack); + if (f > 1.0F) + { + f = 1.0F; + } + + return f; + } + + public static int getChargeTime(ItemStack stack) + { + int i = EnchantmentHelper.getEnchantmentLevel(Enchantments.QUICK_CHARGE, stack); + return i == 0 ? 25 : 25 - 5 * i; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/util/handler/event/WillHandler.java b/src/main/java/wayoftime/bloodmagic/util/handler/event/WillHandler.java new file mode 100644 index 00000000..1474aa41 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/handler/event/WillHandler.java @@ -0,0 +1,235 @@ +package wayoftime.bloodmagic.util.handler.event; + +import java.util.HashMap; +import java.util.List; +import java.util.concurrent.ConcurrentLinkedQueue; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.MobEntity; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.potion.EffectInstance; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.Difficulty; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; +import net.minecraft.world.chunk.ChunkStatus; +import net.minecraft.world.chunk.IChunk; +import net.minecraftforge.event.TickEvent; +import net.minecraftforge.event.entity.living.LivingDropsEvent; +import net.minecraftforge.event.entity.player.EntityItemPickupEvent; +import net.minecraftforge.event.world.ChunkDataEvent; +import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.demonaura.PosXY; +import wayoftime.bloodmagic.demonaura.WillChunk; +import wayoftime.bloodmagic.demonaura.WorldDemonWillHandler; +import wayoftime.bloodmagic.potion.BloodMagicPotions; +import wayoftime.bloodmagic.will.DemonWillHolder; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.api.compat.IDemonWill; +import wayoftime.bloodmagic.api.compat.IDemonWillWeapon; +import wayoftime.bloodmagic.will.PlayerDemonWillHandler; + +@Mod.EventBusSubscriber(modid = BloodMagic.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class WillHandler +{ + private static final HashMap SERVER_TICKS = new HashMap<>(); + + // Adds Will to player + @SubscribeEvent + public void onItemPickup(EntityItemPickupEvent event) + { + ItemStack stack = event.getItem().getItem(); + if (stack.getItem() instanceof IDemonWill) + { + PlayerEntity player = event.getPlayer(); + EnumDemonWillType pickupType = ((IDemonWill) stack.getItem()).getType(stack); + ItemStack remainder = PlayerDemonWillHandler.addDemonWill(player, stack); + + if (remainder == null || ((IDemonWill) stack.getItem()).getWill(pickupType, stack) < 0.0001 + || PlayerDemonWillHandler.isDemonWillFull(pickupType, player)) + { + stack.setCount(0); + event.setResult(Event.Result.ALLOW); + } + } + } + +// @SubscribeEvent +// public static void onEntityAttacked(LivingDeathEvent event) +// { +// if (event.getSource() instanceof EntityDamageSourceIndirect) +// { +// Entity sourceEntity = event.getSource().getImmediateSource(); +// +// if (sourceEntity instanceof EntitySentientArrow) +// { +// ((EntitySentientArrow) sourceEntity).reimbursePlayer(event.getEntityLiving(), event.getEntityLiving().getMaxHealth()); +// } +// } +// } + + // Add/Drop Demon Will for Player + @SubscribeEvent + public void onLivingDrops(LivingDropsEvent event) + { + LivingEntity attackedEntity = event.getEntityLiving(); + DamageSource source = event.getSource(); + Entity entity = source.getTrueSource(); + + if (attackedEntity.isPotionActive(BloodMagicPotions.SOUL_SNARE) && (attackedEntity instanceof MobEntity + || attackedEntity.getEntityWorld().getDifficulty() == Difficulty.PEACEFUL)) + { + EffectInstance eff = attackedEntity.getActivePotionEffect(BloodMagicPotions.SOUL_SNARE); + int lvl = eff.getAmplifier(); + + double amountOfSouls = attackedEntity.getEntityWorld().rand.nextDouble() * (lvl + 1) * (lvl + 1) * 4 + 1; + ItemStack soulStack = ((IDemonWill) BloodMagicItems.MONSTER_SOUL_RAW.get()).createWill(amountOfSouls); + event.getDrops().add(new ItemEntity(attackedEntity.getEntityWorld(), attackedEntity.getPosX(), attackedEntity.getPosY(), attackedEntity.getPosZ(), soulStack)); + } + + if (entity != null && entity instanceof PlayerEntity) + { + PlayerEntity player = (PlayerEntity) entity; + ItemStack heldStack = player.getHeldItemMainhand(); + if (heldStack.getItem() instanceof IDemonWillWeapon && !player.getEntityWorld().isRemote) + { + IDemonWillWeapon demonWillWeapon = (IDemonWillWeapon) heldStack.getItem(); + List droppedSouls = demonWillWeapon.getRandomDemonWillDrop(attackedEntity, player, heldStack, event.getLootingLevel()); + if (!droppedSouls.isEmpty()) + { + ItemStack remainder; + for (ItemStack willStack : droppedSouls) + { + remainder = PlayerDemonWillHandler.addDemonWill(player, willStack); + + if (!remainder.isEmpty()) + { + EnumDemonWillType pickupType = ((IDemonWill) remainder.getItem()).getType(remainder); + if (((IDemonWill) remainder.getItem()).getWill(pickupType, remainder) >= 0.0001) + { + event.getDrops().add(new ItemEntity(attackedEntity.getEntityWorld(), attackedEntity.getPosX(), attackedEntity.getPosY(), attackedEntity.getPosZ(), remainder)); + } + } + } + player.container.detectAndSendChanges(); + } + } + } + } + + @SubscribeEvent + public void onServerWorldTick(TickEvent.WorldTickEvent event) + { + if (event.world.isRemote) + return; + + ResourceLocation rl = WorldDemonWillHandler.getDimensionResourceLocation(event.world); +// int dim = event.world.provider.getDimension(); + if (event.phase == TickEvent.Phase.END) + { + if (!SERVER_TICKS.containsKey(rl)) + SERVER_TICKS.put(rl, 0); + + int ticks = (SERVER_TICKS.get(rl)); + + if (ticks % 20 == 0) + { +// CopyOnWriteArrayList dirtyChunks = WorldDemonWillHandler.dirtyChunks.get(rl); + ConcurrentLinkedQueue dirtyChunks = WorldDemonWillHandler.dirtyChunks.get(rl); + if ((dirtyChunks != null) && (dirtyChunks.size() > 0)) + { + for (PosXY pos : dirtyChunks) + { + IChunk chunk = event.world.getChunk(pos.x, pos.y, ChunkStatus.FULL, false); + if (chunk != null) + { + chunk.setModified(true); + } + } + + dirtyChunks.clear(); + } + } + + SERVER_TICKS.put(rl, ticks + 1); + } + + } + + public static boolean isBlockLoaded(IBlockReader world, BlockPos pos) + { + if (world == null || !World.isValid(pos)) + { + return false; + } else if (world instanceof IWorldReader) + { + // Note: We don't bother checking if it is a world and then isBlockPresent + // because + // all that does is also validate the y value is in bounds, and we already check + // to make + // sure the position is valid both in the y and xz directions + return ((IWorldReader) world).isBlockLoaded(pos); + } + return true; + } + + @SubscribeEvent + public void chunkSave(ChunkDataEvent.Save event) + { + if (!(event.getWorld() instanceof World)) + { + return; + } + ResourceLocation rl = WorldDemonWillHandler.getDimensionResourceLocation((World) event.getWorld()); +// int dim = event.getWorld().provider.getDimension(); + + ChunkPos loc = event.getChunk().getPos(); + + CompoundNBT nbt = new CompoundNBT(); + event.getData().put("BloodMagic", nbt); + + WillChunk ac = WorldDemonWillHandler.getWillChunk(rl, loc.x, loc.z); + if (ac != null) + { + nbt.putShort("base", ac.getBase()); + ac.getCurrentWill().writeToNBT(nbt, "current"); +// if (event.getChunk() instanceof Chunk && !((Chunk) event.getChunk()).setLoaded(loaded);) + if (!event.getWorld().getChunkProvider().isChunkLoaded(event.getChunk().getPos())) + WorldDemonWillHandler.removeWillChunk(rl, loc.x, loc.z); + } + } + + @SubscribeEvent + public void chunkLoad(ChunkDataEvent.Load event) + { + if (!(event.getWorld() instanceof World)) + { + return; + } + ResourceLocation rl = WorldDemonWillHandler.getDimensionResourceLocation((World) event.getWorld()); +// int dim = event.getWorld().provider.getDimension(); + if (event.getData().getCompound("BloodMagic").contains("base")) + { + CompoundNBT nbt = event.getData().getCompound("BloodMagic"); + short base = nbt.getShort("base"); + DemonWillHolder current = new DemonWillHolder(); + current.readFromNBT(nbt, "current"); + WorldDemonWillHandler.addWillChunk(rl, event.getChunk(), base, current); + } else + { + WorldDemonWillHandler.generateWill(event.getChunk(), (World) event.getWorld()); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/util/helper/BindableHelper.java b/src/main/java/wayoftime/bloodmagic/util/helper/BindableHelper.java new file mode 100644 index 00000000..061e6c6a --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/helper/BindableHelper.java @@ -0,0 +1,54 @@ +package wayoftime.bloodmagic.util.helper; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import wayoftime.bloodmagic.core.data.Binding; +import wayoftime.bloodmagic.event.ItemBindEvent; +import wayoftime.bloodmagic.util.Constants; + +public class BindableHelper +{ + + public static void applyBinding(ItemStack stack, PlayerEntity player) + { + Binding binding = new Binding(player.getGameProfile().getId(), player.getGameProfile().getName()); + applyBinding(stack, binding); + } + + public static void applyBinding(ItemStack stack, Binding binding) + { + if (!stack.hasTag()) + stack.setTag(new CompoundNBT()); + + stack.getTag().put("binding", binding.serializeNBT()); + } + + /** + * Sets the Owner Name of the item without checking if it is already bound. Also + * bypasses {@link ItemBindEvent}. + * + * @param stack - The ItemStack to bind + * @param ownerName - The username to bind the ItemStack to + */ + public static void setItemOwnerName(ItemStack stack, String ownerName) + { + stack = NBTHelper.checkNBT(stack); + + stack.getTag().putString(Constants.NBT.OWNER_NAME, ownerName); + } + + /** + * Sets the Owner UUID of the item without checking if it is already bound. Also + * bypasses {@link ItemBindEvent}. + * + * @param stack - The ItemStack to bind + * @param ownerUUID - The UUID to bind the ItemStack to + */ + public static void setItemOwnerUUID(ItemStack stack, String ownerUUID) + { + stack = NBTHelper.checkNBT(stack); + + stack.getTag().putString(Constants.NBT.OWNER_UUID, ownerUUID); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/util/helper/IncenseHelper.java b/src/main/java/wayoftime/bloodmagic/util/helper/IncenseHelper.java new file mode 100644 index 00000000..4e071189 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/helper/IncenseHelper.java @@ -0,0 +1,55 @@ +package wayoftime.bloodmagic.util.helper; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import wayoftime.bloodmagic.util.Constants; + +public class IncenseHelper +{ + + public static double getCurrentIncense(PlayerEntity player) + { + CompoundNBT data = player.getPersistentData(); + if (data.contains(Constants.NBT.CURRENT_INCENSE)) + { + return data.getDouble(Constants.NBT.CURRENT_INCENSE); + } + + return 0; + } + + public static void setCurrentIncense(PlayerEntity player, double amount) + { + CompoundNBT data = player.getPersistentData(); + data.putDouble(Constants.NBT.CURRENT_INCENSE, amount); + } + + public static void setMaxIncense(PlayerEntity player, double amount) + { + CompoundNBT data = player.getPersistentData(); + data.putDouble(Constants.NBT.MAX_INCENSE, amount); + } + + public static double getMaxIncense(PlayerEntity player) + { + CompoundNBT data = player.getPersistentData(); + if (data.contains(Constants.NBT.MAX_INCENSE)) + { + return data.getDouble(Constants.NBT.MAX_INCENSE); + } + return 0; + } + + public static void setHasMaxIncense(ItemStack stack, PlayerEntity player, boolean isMax) + { + stack = NBTHelper.checkNBT(stack); + stack.getTag().putBoolean(Constants.NBT.HAS_MAX_INCENSE, isMax); + } + + public static boolean getHasMaxIncense(ItemStack stack) + { + stack = NBTHelper.checkNBT(stack); + return stack.getTag().getBoolean(Constants.NBT.HAS_MAX_INCENSE); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/util/helper/NBTHelper.java b/src/main/java/wayoftime/bloodmagic/util/helper/NBTHelper.java new file mode 100644 index 00000000..f7fdaa52 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/helper/NBTHelper.java @@ -0,0 +1,15 @@ +package wayoftime.bloodmagic.util.helper; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; + +public class NBTHelper +{ + public static ItemStack checkNBT(ItemStack stack) + { + if (stack.getTag() == null) + stack.setTag(new CompoundNBT()); + + return stack; + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/util/helper/NetworkHelper.java b/src/main/java/wayoftime/bloodmagic/util/helper/NetworkHelper.java new file mode 100644 index 00000000..0dc98add --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/helper/NetworkHelper.java @@ -0,0 +1,183 @@ +package wayoftime.bloodmagic.util.helper; + +import java.util.UUID; + +import javax.annotation.Nullable; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.world.storage.DimensionSavedDataManager; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.server.ServerLifecycleHooks; +import wayoftime.bloodmagic.core.data.BMWorldSavedData; +import wayoftime.bloodmagic.core.data.Binding; +import wayoftime.bloodmagic.core.data.SoulNetwork; +import wayoftime.bloodmagic.core.data.SoulTicket; +import wayoftime.bloodmagic.core.registry.OrbRegistry; +import wayoftime.bloodmagic.event.SoulNetworkEvent; +import wayoftime.bloodmagic.common.item.IBindable; +import wayoftime.bloodmagic.common.item.BloodOrb; +import wayoftime.bloodmagic.common.item.IBloodOrb; + +public class NetworkHelper +{ + @Nullable + private static BMWorldSavedData dataHandler; + + /** + * Gets the SoulNetwork for the player. + * + * @param uuid - The UUID of the SoulNetwork owner - this is UUID.toString(). + * @return - The SoulNetwork for the given name. + */ + public static SoulNetwork getSoulNetwork(String uuid) + { + if (dataHandler == null) + { + if (ServerLifecycleHooks.getCurrentServer() == null) + return null; + + DimensionSavedDataManager savedData = ServerLifecycleHooks.getCurrentServer().func_241755_D_().getSavedData(); + dataHandler = savedData.getOrCreate(() -> new BMWorldSavedData(), BMWorldSavedData.ID); + } + + return dataHandler.getNetwork(UUID.fromString(uuid)); + } + + /** + * @param uuid - The Player's Mojang UUID + * @see NetworkHelper#getSoulNetwork(String) + */ + public static SoulNetwork getSoulNetwork(UUID uuid) + { + return getSoulNetwork(uuid.toString()); + } + + /** + * @param player - The Player + * @see NetworkHelper#getSoulNetwork(String) + */ + public static SoulNetwork getSoulNetwork(PlayerEntity player) + { + return getSoulNetwork(PlayerHelper.getUUIDFromPlayer(player)); + } + + public static SoulNetwork getSoulNetwork(Binding binding) + { + return getSoulNetwork(binding.getOwnerId()); + } + + /** + * Gets the current orb tier of the SoulNetwork. + * + * @param soulNetwork - SoulNetwork to get the tier of. + * @return - The Orb tier of the given SoulNetwork + */ + public static int getCurrentMaxOrb(SoulNetwork soulNetwork) + { + return soulNetwork.getOrbTier(); + } + + public static int getMaximumForTier(int tier) + { + int ret = 0; + + if (tier > OrbRegistry.getTierMap().size() || tier < 0) + return ret; + + for (ItemStack orbStack : OrbRegistry.getOrbsForTier(tier)) + { + BloodOrb orb = ((IBloodOrb) orbStack.getItem()).getOrb(orbStack); + if (orb.getCapacity() > ret) + ret = orb.getCapacity(); + } + + return ret; + } + + // Syphon + + /** + * Syphons from the player and damages them if there was not enough stored LP. + *

+ * Handles null-checking the player for you. + * + * @param soulNetwork - SoulNetwork to syphon from + * @param user - User of the item. + * @param toSyphon - Amount of LP to syphon + * @return - Whether the action should be performed. + * @deprecated Use {@link #getSoulNetwork(PlayerEntity)} and + * {@link SoulNetwork#syphonAndDamage$(PlayerEntity, SoulTicket)} + */ + @Deprecated + public static boolean syphonAndDamage(SoulNetwork soulNetwork, PlayerEntity user, int toSyphon) + { + +// if (soulNetwork.getNewOwner() == null) +// { +// soulNetwork.syphon(toSyphon); +// return true; +// } + + return soulNetwork.syphonAndDamage(user, toSyphon); + } + + /** + * Syphons a player from within a container. + * + * @param stack - ItemStack in the Container. + * @param ticket - SoulTicket to syphon + * @return - If the syphon was successful. + */ + public static boolean syphonFromContainer(ItemStack stack, SoulTicket ticket) + { + if (!(stack.getItem() instanceof IBindable)) + return false; + + Binding binding = ((IBindable) stack.getItem()).getBinding(stack); + if (binding == null) + return false; + + SoulNetwork network = getSoulNetwork(binding); + SoulNetworkEvent.Syphon.Item event = new SoulNetworkEvent.Syphon.Item(network, ticket, stack); + + return !MinecraftForge.EVENT_BUS.post(event) && network.syphon(event.getTicket(), true) >= ticket.getAmount(); + } + + /** + * Checks if the ItemStack has a user to be syphoned from. + * + * @param stack - ItemStack to check + * @param toSyphon - Amount of LP to syphon + * @return - If syphoning is possible + */ + public static boolean canSyphonFromContainer(ItemStack stack, int toSyphon) + { + if (!(stack.getItem() instanceof IBindable)) + return false; + + Binding binding = ((IBindable) stack.getItem()).getBinding(stack); + if (binding == null) + return false; + + SoulNetwork network = getSoulNetwork(binding); + if (network == null) + return false; + + return network.getCurrentEssence() >= toSyphon; + } + + // Set + + /** + * Sets the orb tier of the SoulNetwork to the given orb. Will not set if the + * given tier is lower than the current tier. + * + * @param soulNetwork - SoulNetwork to set the orb tier of + * @param maxOrb - Tier of orb to set to + */ + public static void setMaxOrb(SoulNetwork soulNetwork, int maxOrb) + { + soulNetwork.setOrbTier(Math.max(maxOrb, soulNetwork.getOrbTier())); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/util/helper/NumeralHelper.java b/src/main/java/wayoftime/bloodmagic/util/helper/NumeralHelper.java new file mode 100644 index 00000000..f2c5d320 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/helper/NumeralHelper.java @@ -0,0 +1,35 @@ +package wayoftime.bloodmagic.util.helper; + +import java.util.TreeMap; + +public class NumeralHelper +{ + + private static final TreeMap romanNumerals = new TreeMap(); + + static + { + romanNumerals.put(1000, "M"); + romanNumerals.put(900, "CM"); + romanNumerals.put(500, "D"); + romanNumerals.put(400, "CD"); + romanNumerals.put(100, "C"); + romanNumerals.put(90, "XC"); + romanNumerals.put(50, "L"); + romanNumerals.put(40, "XL"); + romanNumerals.put(10, "X"); + romanNumerals.put(9, "IX"); + romanNumerals.put(5, "V"); + romanNumerals.put(4, "IV"); + romanNumerals.put(1, "I"); + } + + public static String toRoman(int arabic) + { + int convert = romanNumerals.floorKey(arabic); + if (arabic == convert) + return romanNumerals.get(convert); + + return romanNumerals.get(convert) + toRoman(arabic - convert); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/util/helper/PlayerHelper.java b/src/main/java/wayoftime/bloodmagic/util/helper/PlayerHelper.java new file mode 100644 index 00000000..7150adc2 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/helper/PlayerHelper.java @@ -0,0 +1,61 @@ +package wayoftime.bloodmagic.util.helper; + +import java.util.ArrayList; +import java.util.UUID; + +import com.google.common.collect.Lists; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraftforge.common.UsernameCache; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.fml.server.ServerLifecycleHooks; + +public class PlayerHelper +{ + /** + * A list of all known fake players that do not extend FakePlayer. + *

+ * Will be added to as needed. + */ + private static final ArrayList knownFakePlayers = Lists.newArrayList(); + + public static PlayerEntity getPlayerFromId(UUID uuid) + { + // TODO: Need to find a reliable way to get whether the side is Client or Server + + if (ServerLifecycleHooks.getCurrentServer() == null) + { + return null; + } + + return ServerLifecycleHooks.getCurrentServer().getPlayerList().getPlayerByUUID(uuid); + +// return FMLCommonHandler.instance().getMinecraftServerInstance().getPlayerList().getPlayerByUUID(uuid); + } + + public static PlayerEntity getPlayerFromUUID(UUID uuid) + { + return getPlayerFromId(uuid); + } + + public static UUID getUUIDFromPlayer(PlayerEntity player) + { + return player.getGameProfile().getId(); + } + + public static String getUsernameFromUUID(UUID uuid) + { + return UsernameCache.getLastKnownUsername(uuid); + } + + /** + * Checks whether or not the given player is an "actual" player + * + * @param player - The player in question + * @return If the player is fake or not + */ + public static boolean isFakePlayer(PlayerEntity player) + { + return player instanceof FakePlayer || (player != null && knownFakePlayers.contains(player.getClass().getCanonicalName())); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/util/helper/PlayerSacrificeHelper.java b/src/main/java/wayoftime/bloodmagic/util/helper/PlayerSacrificeHelper.java new file mode 100644 index 00000000..0f247bbc --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/helper/PlayerSacrificeHelper.java @@ -0,0 +1,159 @@ +package wayoftime.bloodmagic.util.helper; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.potion.Potion; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import wayoftime.bloodmagic.ConfigHandler; +import wayoftime.bloodmagic.altar.IBloodAltar; +import wayoftime.bloodmagic.event.SacrificeKnifeUsedEvent; + +public class PlayerSacrificeHelper +{ + public static float scalingOfSacrifice = 1f; + public static int soulFrayDuration = 400; + public static Potion soulFrayId; + + public static double getPlayerIncense(PlayerEntity player) + { +// return 0; + return IncenseHelper.getCurrentIncense(player); + } + + public static void setPlayerIncense(PlayerEntity player, double amount) + { + IncenseHelper.setCurrentIncense(player, amount); + } + + public static boolean incrementIncense(PlayerEntity player, double min, double incenseAddition, double increment) + { +// return true; + double amount = getPlayerIncense(player); + if (amount < min || amount >= incenseAddition) + { + return false; + } + + amount = amount + Math.min(increment, incenseAddition - amount); + setPlayerIncense(player, amount); + + if (amount == incenseAddition) + { + IncenseHelper.setMaxIncense(player, incenseAddition); + } + // System.out.println("Amount of incense: " + amount + ", Increment: " + + // increment); + + return true; + } + + /** + * Sacrifices a player's health while the player is under the influence of + * incense + * + * @param player - The player sacrificing + * @return Whether or not the health sacrificing succeeded + */ + public static boolean sacrificePlayerHealth(PlayerEntity player) + { +// if (player.isPotionActive(soulFrayId)) +// { +// return false; +// } + + double amount = getPlayerIncense(player); + + if (amount >= 0) + { + float health = player.getHealth(); + float maxHealth = player.getMaxHealth(); + + if (health > maxHealth / 10.0) + { + float sacrificedHealth = health - maxHealth / 10.0f; + int lpAdded = (int) (sacrificedHealth * ConfigHandler.values.sacrificialDaggerConversion * getModifier(amount)); + + IBloodAltar altar = getAltar(player.getEntityWorld(), player.getPosition()); + if (altar != null) + { + SacrificeKnifeUsedEvent evt = new SacrificeKnifeUsedEvent(player, true, true, (int) sacrificedHealth, lpAdded); + if (MinecraftForge.EVENT_BUS.post(evt)) + return false; + + altar.sacrificialDaggerCall(evt.lpAdded, false); + altar.startCycle(); + + player.setHealth(maxHealth / 10.0f); + setPlayerIncense(player, 0); +// player.addPotionEffect(new PotionEffect(RegistrarBloodMagic.SOUL_FRAY, soulFrayDuration)); + + return true; + } + } + } + + return false; + } + + public static double getModifier(double amount) + { + return 1 + amount * scalingOfSacrifice; + } + + /** + * Finds the nearest {@link IBloodAltar} and attempts to fill it + * + * @param world - The world + * @param sacrificingEntity - The entity having the sacrifice done on (can be + * {@link PlayerEntity} for self-sacrifice) + * @param amount - The amount of which the altar should be filled + * @param isSacrifice - Whether this is a Sacrifice or a Self-Sacrifice + * @return Whether the altar is found and (attempted) filled + */ + public static boolean findAndFillAltar(World world, LivingEntity sacrificingEntity, int amount, boolean isSacrifice) + { + IBloodAltar altarEntity = getAltar(world, sacrificingEntity.getPosition()); + + if (altarEntity == null) + return false; + + altarEntity.sacrificialDaggerCall(amount, isSacrifice); + altarEntity.startCycle(); + + return true; + } + + /** + * Gets the nearest {@link IBloodAltar} + * + * @param world - The world + * @param blockPos - The position of where the check should be in (in a 2 block + * radius from this) + * @return The nearest altar, if no altar is found, then this will return null + */ + public static IBloodAltar getAltar(World world, BlockPos blockPos) + { + TileEntity tileEntity; + + for (int x = -2; x <= 2; x++) + { + for (int y = -2; y <= 1; y++) + { + for (int z = -2; z <= 2; z++) + { + tileEntity = world.getTileEntity(blockPos.add(x, y, z)); + + if (tileEntity instanceof IBloodAltar) + { + return (IBloodAltar) tileEntity; + } + } + } + } + + return null; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/util/helper/RitualHelper.java b/src/main/java/wayoftime/bloodmagic/util/helper/RitualHelper.java new file mode 100644 index 00000000..3862d73a --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/helper/RitualHelper.java @@ -0,0 +1,253 @@ +package wayoftime.bloodmagic.util.helper; + +import java.util.List; + +import org.apache.commons.lang3.tuple.Pair; + +import com.google.common.collect.Lists; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.CapabilityInject; +import net.minecraftforge.common.util.LazyOptional; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.block.BlockRitualStone; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.ritual.IRitualStone; +import wayoftime.bloodmagic.ritual.IRitualStone.Tile; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.ritual.RitualComponent; +import wayoftime.bloodmagic.tile.TileMasterRitualStone; + +public class RitualHelper +{ + @CapabilityInject(IRitualStone.Tile.class) + static Capability RUNE_CAPABILITY = null; + + public static boolean canCrystalActivate(Ritual ritual, int crystalLevel) + { + return ritual.getCrystalLevel() <= crystalLevel + && BloodMagic.RITUAL_MANAGER.enabled(BloodMagic.RITUAL_MANAGER.getId(ritual), false); + } + + /** + * Checks the RitualRegistry to see if the configuration of the ritual stones in + * the world is valid for the given Direction. + * + * @param world - The world + * @param pos - Location of the MasterRitualStone + * @return The ID of the valid ritual + */ + public static String getValidRitual(World world, BlockPos pos) + { + for (Ritual ritual : BloodMagic.RITUAL_MANAGER.getRituals()) + { + for (int i = 0; i < 4; i++) + { + Direction direction = Direction.byHorizontalIndex(i); + + if (checkValidRitual(world, pos, ritual, direction)) + return BloodMagic.RITUAL_MANAGER.getId(ritual); + } + } + + return ""; + } + + public static Direction getDirectionOfRitual(World world, BlockPos pos, Ritual ritual) + { + for (int i = 0; i < 4; i++) + { + Direction direction = Direction.byHorizontalIndex(i); + if (checkValidRitual(world, pos, ritual, direction)) + return direction; + } + + return null; + } + + public static boolean checkValidRitual(World world, BlockPos pos, Ritual ritual, Direction direction) + { + if (ritual == null) + { + return false; + } + + List components = Lists.newArrayList(); + ritual.gatherComponents(components::add); + + for (RitualComponent component : components) + { + BlockPos newPos = pos.add(component.getOffset(direction)); + if (!isRuneType(world, newPos, component.getRuneType())) + return false; + } + + return true; + } + + public static boolean isRuneType(World world, BlockPos pos, EnumRuneType type) + { + if (world == null) + return false; + Block block = world.getBlockState(pos).getBlock(); + TileEntity tile = world.getTileEntity(pos); + + if (block instanceof IRitualStone) + return ((IRitualStone) block).isRuneType(world, pos, type); + else if (tile instanceof IRitualStone.Tile) + return ((IRitualStone.Tile) tile).isRuneType(type); + else if (tile != null && tile.getCapability(RUNE_CAPABILITY, null).isPresent()) + return tile.getCapability(RUNE_CAPABILITY, null).resolve().get().isRuneType(type); + + return false; + } + + public static boolean isRune(World world, BlockPos pos) + { + if (world == null) + return false; + Block block = world.getBlockState(pos).getBlock(); + TileEntity tile = world.getTileEntity(pos); + + if (block instanceof IRitualStone) + return true; + else if (tile instanceof IRitualStone.Tile) + return true; + else + return tile != null && tile.getCapability(RUNE_CAPABILITY, null).isPresent(); + + } + + public static void setRuneType(World world, BlockPos pos, EnumRuneType type) + { + if (world == null) + return; + BlockState state = world.getBlockState(pos); + TileEntity tile = world.getTileEntity(pos); + + if (state.getBlock() instanceof IRitualStone) + ((IRitualStone) state.getBlock()).setRuneType(world, pos, type); + else if (tile instanceof IRitualStone.Tile) + ((IRitualStone.Tile) tile).setRuneType(type); + else + { + LazyOptional cap = tile.getCapability(RUNE_CAPABILITY, null); + if (cap.isPresent()) + { + cap.resolve().get().setRuneType(type); + world.notifyBlockUpdate(pos, state, state, 3); + } + + } + } + + public static boolean createRitual(World world, BlockPos pos, Direction direction, Ritual ritual, boolean safe) + { + + List components = Lists.newArrayList(); + ritual.gatherComponents(components::add); + + if (abortConstruction(world, pos, direction, safe, components)) + return false; + + BlockState mrs = BloodMagicBlocks.MASTER_RITUAL_STONE.get().getDefaultState(); + world.setBlockState(pos, mrs); + + setRitualStones(direction, world, pos, components); + return true; + } + + public static boolean abortConstruction(World world, BlockPos pos, Direction direction, boolean safe, List components) + { + // TODO: can be optimized to check only for the first and last component if + // every ritual has those at the highest and lowest y-level respectivly. + for (RitualComponent component : components) + { + BlockPos offset = component.getOffset(direction); + BlockPos newPos = pos.add(offset); + if (world.isOutsideBuildHeight(newPos) || (safe && !world.isAirBlock(newPos))) + return true; + } + return false; + } + + public static boolean repairRitualFromRuins(TileMasterRitualStone tile, boolean safe) + { + Ritual ritual = tile.getCurrentRitual(); + Direction direction; + Pair pair; + if (ritual == null) + { + pair = getRitualFromRuins(tile); + ritual = pair.getKey(); + direction = pair.getValue(); + } else + direction = tile.getDirection(); + + World world = tile.getWorld(); + BlockPos pos = tile.getPos(); + + List components = Lists.newArrayList(); + ritual.gatherComponents(components::add); + + if (abortConstruction(world, pos, direction, safe, components)) + return false; + + setRitualStones(direction, world, pos, components); + return true; + } + + public static void setRitualStones(Direction direction, World world, BlockPos pos, List gatheredComponents) + { + for (RitualComponent component : gatheredComponents) + { + BlockPos offset = component.getOffset(direction); + BlockPos newPos = pos.add(offset); + ((BlockRitualStone) BloodMagicBlocks.BLANK_RITUAL_STONE.get()).setRuneType(world, newPos, component.getRuneType()); + } + } + + public static Pair getRitualFromRuins(TileMasterRitualStone tile) + { + BlockPos pos = tile.getPos(); + World world = tile.getWorld(); + Ritual possibleRitual = tile.getCurrentRitual(); + Direction possibleDirection = tile.getDirection(); + int highestCount = 0; + + if (possibleRitual == null || possibleDirection == null) + for (Ritual ritual : BloodMagic.RITUAL_MANAGER.getRituals()) + { + for (int i = 0; i < 4; i++) + { + Direction direction = Direction.byHorizontalIndex(i); + List components = Lists.newArrayList(); + ritual.gatherComponents(components::add); + int currentCount = 0; + + for (RitualComponent component : components) + { + BlockPos newPos = pos.add(component.getOffset(direction)); + if (isRuneType(world, newPos, component.getRuneType())) + currentCount += 1; + } + if (currentCount > highestCount) + { + highestCount = currentCount; + possibleRitual = ritual; + possibleDirection = direction; + } + + } + + } + return Pair.of(possibleRitual, possibleDirection); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/util/helper/TextHelper.java b/src/main/java/wayoftime/bloodmagic/util/helper/TextHelper.java new file mode 100644 index 00000000..34d1da08 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/helper/TextHelper.java @@ -0,0 +1,77 @@ +package wayoftime.bloodmagic.util.helper; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.text.WordUtils; + +import net.minecraft.client.resources.I18n; + +public class TextHelper +{ + public static String getFormattedText(String string) + { + return string.replaceAll("&", "\u00A7"); + } + + public static String localize(String input, Object... format) + { + return I18n.format(input, format); + } + + public static String localizeEffect(String input, Object... format) + { + return getFormattedText(localize(input, format)); + } + + public static String[] localizeAll(String[] input) + { + String[] ret = new String[input.length]; + for (int i = 0; i < input.length; i++) + ret[i] = localize(input[i]); + + return ret; + } + + public static String[] localizeAllEffect(String[] input) + { + String[] ret = new String[input.length]; + for (int i = 0; i < input.length; i++) + ret[i] = localizeEffect(input[i]); + + return ret; + } + + public static ArrayList localizeAll(List input) + { + ArrayList ret = new ArrayList<>(input.size()); + for (int i = 0; i < input.size(); i++) + ret.add(i, localize(input.get(i))); + + return ret; + } + + public static ArrayList localizeAllEffect(List input) + { + ArrayList ret = new ArrayList<>(input.size()); + for (int i = 0; i < input.size(); i++) + ret.add(i, localizeEffect(input.get(i))); + + return ret; + } + + public static String[] cutLongString(String string, int characters) + { + return WordUtils.wrap(string, characters, "/cut", false).split("/cut"); + } + + public static String[] cutLongString(String string) + { + return cutLongString(string, 30); + } + + public static boolean canTranslate(String key) + { + return I18n.hasKey(key); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/util/providers/IBaseProvider.java b/src/main/java/wayoftime/bloodmagic/util/providers/IBaseProvider.java new file mode 100644 index 00000000..af0a7f94 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/providers/IBaseProvider.java @@ -0,0 +1,23 @@ +package wayoftime.bloodmagic.util.providers; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import wayoftime.bloodmagic.util.text.IHasTextComponent; +import wayoftime.bloodmagic.util.text.IHasTranslationKey; + +public interface IBaseProvider extends IHasTextComponent, IHasTranslationKey +{ + ResourceLocation getRegistryName(); + + default String getName() + { + return getRegistryName().getPath(); + } + + @Override + default ITextComponent getTextComponent() + { + return new TranslationTextComponent(getTranslationKey()); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/util/providers/IEntityTypeProvider.java b/src/main/java/wayoftime/bloodmagic/util/providers/IEntityTypeProvider.java new file mode 100644 index 00000000..07785354 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/providers/IEntityTypeProvider.java @@ -0,0 +1,32 @@ +package wayoftime.bloodmagic.util.providers; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.EntityType; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; + +public interface IEntityTypeProvider extends IBaseProvider +{ + + @Nonnull + EntityType getEntityType(); + + @Override + default ResourceLocation getRegistryName() + { + return getEntityType().getRegistryName(); + } + + @Override + default ITextComponent getTextComponent() + { + return getEntityType().getName(); + } + + @Override + default String getTranslationKey() + { + return getEntityType().getTranslationKey(); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/util/text/IHasTextComponent.java b/src/main/java/wayoftime/bloodmagic/util/text/IHasTextComponent.java new file mode 100644 index 00000000..9f77ad56 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/text/IHasTextComponent.java @@ -0,0 +1,8 @@ +package wayoftime.bloodmagic.util.text; + +import net.minecraft.util.text.ITextComponent; + +public interface IHasTextComponent +{ + ITextComponent getTextComponent(); +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/util/text/IHasTranslationKey.java b/src/main/java/wayoftime/bloodmagic/util/text/IHasTranslationKey.java new file mode 100644 index 00000000..b23d79b6 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/text/IHasTranslationKey.java @@ -0,0 +1,6 @@ +package wayoftime.bloodmagic.util.text; + +public interface IHasTranslationKey +{ + String getTranslationKey(); +} diff --git a/src/main/java/wayoftime/bloodmagic/will/DemonWillHolder.java b/src/main/java/wayoftime/bloodmagic/will/DemonWillHolder.java new file mode 100644 index 00000000..aa122e23 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/will/DemonWillHolder.java @@ -0,0 +1,100 @@ +package wayoftime.bloodmagic.will; + +import java.util.HashMap; +import java.util.Map.Entry; + +import net.minecraft.nbt.CompoundNBT; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; + +public class DemonWillHolder +{ + public HashMap willMap = new HashMap<>(); + + public double addWill(EnumDemonWillType type, double amount, double max) + { + double current = 0; + if (willMap.containsKey(type)) + { + current = willMap.get(type); + } + + double added = Math.min(max - current, amount); + addWill(type, amount); + + return added; + } + + public void addWill(EnumDemonWillType type, double amount) + { + if (willMap.containsKey(type)) + { + willMap.put(type, amount + willMap.get(type)); + } else + { + willMap.put(type, amount); + } + } + + public double drainWill(EnumDemonWillType type, double amount) + { + if (willMap.containsKey(type)) + { + double current = willMap.get(type); + double reduced = Math.min(current, amount); + + if (reduced >= current) + { + willMap.remove(type); + } else + { + willMap.put(type, current - reduced); + } + + return reduced; + } + + return 0; + } + + public double getWill(EnumDemonWillType type) + { + if (willMap.containsKey(type)) + { + return willMap.get(type); + } + + return 0; + } + + public void readFromNBT(CompoundNBT tag, String key) + { + CompoundNBT willTag = tag.getCompound(key); + + willMap.clear(); + + for (EnumDemonWillType type : EnumDemonWillType.values()) + { + double amount = willTag.getDouble("EnumWill" + type.name()); + if (amount > 0) + { + willMap.put(type, amount); + } + } + } + + public void writeToNBT(CompoundNBT tag, String key) + { + CompoundNBT willTag = new CompoundNBT(); + for (Entry entry : willMap.entrySet()) + { + willTag.putDouble("EnumWill" + entry.getKey().name(), entry.getValue()); + } + + tag.put(key, willTag); + } + + public void clearWill() + { + willMap.clear(); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/will/PlayerDemonWillHandler.java b/src/main/java/wayoftime/bloodmagic/will/PlayerDemonWillHandler.java new file mode 100644 index 00000000..3a9de35a --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/will/PlayerDemonWillHandler.java @@ -0,0 +1,203 @@ +package wayoftime.bloodmagic.will; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import wayoftime.bloodmagic.api.compat.EnumDemonWillType; +import wayoftime.bloodmagic.api.compat.IDemonWill; +import wayoftime.bloodmagic.api.compat.IDemonWillGem; +import wayoftime.bloodmagic.util.helper.NetworkHelper; + +/** + * This class provides several helper methods in order to handle soul + * consumption and use for a player. This refers to the Soul System, meaning + * Monster Souls and Soul Gems, etc. The Soul Network's helper methods are found + * in {@link NetworkHelper} + */ +public class PlayerDemonWillHandler +{ + /** + * Gets the total amount of Will a player contains in their inventory + * + * @param type - The type of Will to check for + * @param player - The player to check the will of + * @return - The amount of will the player contains + */ + public static double getTotalDemonWill(EnumDemonWillType type, PlayerEntity player) + { + NonNullList inventory = player.inventory.mainInventory; + double souls = 0; + + for (ItemStack stack : inventory) + { + if (stack.getItem() instanceof IDemonWill && ((IDemonWill) stack.getItem()).getType(stack) == type) + { + souls += ((IDemonWill) stack.getItem()).getWill(type, stack); + } else if (stack.getItem() instanceof IDemonWillGem) + { + souls += ((IDemonWillGem) stack.getItem()).getWill(type, stack); + } + } + + return souls; + } + + public static EnumDemonWillType getLargestWillType(PlayerEntity player) + { + EnumDemonWillType type = EnumDemonWillType.DEFAULT; + double max = getTotalDemonWill(type, player); + + for (EnumDemonWillType testType : EnumDemonWillType.values()) + { + double value = getTotalDemonWill(testType, player); + if (value > max) + { + type = testType; + } + } + + return type; + } + + /** + * Checks if the player's Tartaric gems are completely full. + * + * @param type - The type of Will to check for + * @param player - The player to check the Will of + * @return - True if all Will containers are full, false if not. + */ + public static boolean isDemonWillFull(EnumDemonWillType type, PlayerEntity player) + { + NonNullList inventory = player.inventory.mainInventory; + + boolean hasGem = false; + for (ItemStack stack : inventory) + { + if (stack.getItem() instanceof IDemonWillGem) + { + hasGem = true; + if (((IDemonWillGem) stack.getItem()).getWill(type, stack) < ((IDemonWillGem) stack.getItem()).getMaxWill(type, stack)) + return false; + } + } + + return hasGem; + } + + /** + * Consumes Will from the inventory of a given player + * + * @param player - The player to consume the will of + * @param amount - The amount of will to consume + * @return - The amount of will consumed. + */ + public static double consumeDemonWill(EnumDemonWillType type, PlayerEntity player, double amount) + { + double consumed = 0; + + NonNullList inventory = player.inventory.mainInventory; + + for (int i = 0; i < inventory.size(); i++) + { + if (consumed >= amount) + return consumed; + + ItemStack stack = inventory.get(i); + if (stack.getItem() instanceof IDemonWill && ((IDemonWill) stack.getItem()).getType(stack) == type) + { + consumed += ((IDemonWill) stack.getItem()).drainWill(type, stack, amount - consumed); + if (((IDemonWill) stack.getItem()).getWill(type, stack) <= 0) + inventory.set(i, ItemStack.EMPTY); + } else if (stack.getItem() instanceof IDemonWillGem) + { + consumed += ((IDemonWillGem) stack.getItem()).drainWill(type, stack, amount - consumed, true); + } + } + + return consumed; + } + + /** + * Adds an IDemonWill contained in an ItemStack to one of the Soul Gems in the + * player's inventory. + * + * @param player - The player to add will to + * @param willStack - ItemStack that contains an IDemonWill to be added + * @return - The modified willStack + */ + public static ItemStack addDemonWill(PlayerEntity player, ItemStack willStack) + { + if (willStack.isEmpty()) + return ItemStack.EMPTY; + + NonNullList inventory = player.inventory.mainInventory; + + for (ItemStack stack : inventory) + { + if (stack.getItem() instanceof IDemonWillGem) + { + ItemStack newStack = ((IDemonWillGem) stack.getItem()).fillDemonWillGem(stack, willStack); + if (newStack.isEmpty()) + return ItemStack.EMPTY; + } + } + + return willStack; + } + + /** + * Adds an IDiscreteDemonWill contained in an ItemStack to one of the Soul Gems + * in the player's inventory. + * + * @param type - The type of Will to add + * @param player - The player to check the Will of + * @param amount - The amount of will to add + * @return - The amount of will added + */ + public static double addDemonWill(EnumDemonWillType type, PlayerEntity player, double amount) + { + NonNullList inventory = player.inventory.mainInventory; + double remaining = amount; + + for (ItemStack stack : inventory) + { + if (stack.getItem() instanceof IDemonWillGem) + { + remaining -= ((IDemonWillGem) stack.getItem()).fillWill(type, stack, remaining, true); + if (remaining <= 0) + break; + } + } + + return amount - remaining; + } + + /** + * Adds an IDiscreteDemonWill contained in an ItemStack to one of the Soul Gems + * in the player's inventory while ignoring a specified stack. + * + * @param type - The type of Will to add + * @param player - The player to check the Will of + * @param amount - The amount of will to add + * @param ignored - A stack to ignore + * @return - The amount of will added + */ + public static double addDemonWill(EnumDemonWillType type, PlayerEntity player, double amount, ItemStack ignored) + { + NonNullList inventory = player.inventory.mainInventory; + double remaining = amount; + + for (ItemStack stack : inventory) + { + if (!stack.equals(ignored) && stack.getItem() instanceof IDemonWillGem) + { + remaining -= ((IDemonWillGem) stack.getItem()).fillWill(type, stack, remaining, true); + + if (remaining <= 0) + break; + } + } + + return amount - remaining; + } +} \ No newline at end of file diff --git a/src/main/resources/Guide-API-Version.info b/src/main/resources/Guide-API-Version.info deleted file mode 100644 index 27323dad..00000000 --- a/src/main/resources/Guide-API-Version.info +++ /dev/null @@ -1 +0,0 @@ -@VERSION@ \ No newline at end of file diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml new file mode 100644 index 00000000..182a4fe5 --- /dev/null +++ b/src/main/resources/META-INF/mods.toml @@ -0,0 +1,55 @@ +# This is an example mods.toml file. It contains the data relating to the loading mods. +# There are several mandatory fields (#mandatory), and many more that are optional (#optional). +# The overall format is standard TOML format, v0.5.0. +# Note that there are a couple of TOML lists in this file. +# Find more information on toml format here: https://github.com/toml-lang/toml +# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml +modLoader="javafml" #mandatory +# A version range to match for said mod loader - for regular FML @Mod it will be the forge version +loaderVersion="[34,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +# The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties. +# Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here. +license="All rights reserved" +# A URL to refer people to when problems occur with this mod +issueTrackerURL="http://my.issue.tracker/" #optional +# A list of mods - how many allowed here is determined by the individual mod loader +[[mods]] #mandatory +# The modid of the mod +modId="bloodmagic" #mandatory +# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it +version="${file.jarVersion}" #mandatory + # A display name for the mod +displayName="Blood Magic" #mandatory +# A file name (in the root of the mod JAR) containing a logo for display +logoFile="examplemod.png" #optional +# A text field displayed in the mod UI +credits="Thanks for this example mod goes to Java" #optional +# A text field displayed in the mod UI +authors="WayofTime" #optional +# The description text for the mod (multi line!) (#mandatory) +description=''' +This is a long form description of the mod. You can write whatever you want here + +Have some lorem ipsum. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed mollis lacinia magna. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed sagittis luctus odio eu tempus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque volutpat ligula eget lacus auctor sagittis. In hac habitasse platea dictumst. Nunc gravida elit vitae sem vehicula efficitur. Donec mattis ipsum et arcu lobortis, eleifend sagittis sem rutrum. Cras pharetra quam eget posuere fermentum. Sed id tincidunt justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. +''' +# A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional. +[[dependencies.bloodmagic]] #optional + # the modid of the dependency + modId="forge" #mandatory + # Does this dependency have to exist - if not, ordering below must be specified + mandatory=true #mandatory + # The version range of the dependency + versionRange="[34,)" #mandatory + # An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory + ordering="NONE" + # Side this dependency is applied on - BOTH, CLIENT or SERVER + side="BOTH" +# Here's another dependency +[[dependencies.bloodmagic]] + modId="minecraft" + mandatory=true + versionRange="[1.16.3,)" + ordering="NONE" + side="BOTH" diff --git a/src/main/resources/assets/alchemicalwizardry/altar.png b/src/main/resources/assets/alchemicalwizardry/altar.png deleted file mode 100644 index 6b6ac12e..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/altar.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/blockstates/base_rune.json b/src/main/resources/assets/alchemicalwizardry/blockstates/base_rune.json deleted file mode 100644 index 75063334..00000000 --- a/src/main/resources/assets/alchemicalwizardry/blockstates/base_rune.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { - "all": "alchemicalwizardry:blocks/BlankRune" - }, - "model": "cube_all", - "uvlock": true - }, - "variants": { - "rune": { - 0: { - "textures": { - "all": "alchemicalwizardry:blocks/AltarCapacityRune" - } - }, - 1: { - "textures": { - "all": "alchemicalwizardry:blocks/AltarCapacityRune" - } - }, - 2: { - "textures": { - "all": "alchemicalwizardry:blocks/DislocationRune" - } - }, - 3: { - "textures": { - "all": "alchemicalwizardry:blocks/OrbCapacityRune" - } - }, - 4: { - "textures": { - "all": "alchemicalwizardry:blocks/BetterCapacityRune" - } - }, - 5: { - "textures": { - "all": "alchemicalwizardry:blocks/AccelerationRune" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/alchemicalwizardry/blockstates/soul_armour_forge.json b/src/main/resources/assets/alchemicalwizardry/blockstates/soul_armour_forge.json deleted file mode 100644 index e2dcb2d7..00000000 --- a/src/main/resources/assets/alchemicalwizardry/blockstates/soul_armour_forge.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "alchemicalwizardry:soul_armour_forge" } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/alchemicalwizardry/books/architect.xml b/src/main/resources/assets/alchemicalwizardry/books/architect.xml deleted file mode 100644 index d8bfebc9..00000000 --- a/src/main/resources/assets/alchemicalwizardry/books/architect.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - - The Architect - -My name is Tiberius. I was a kid when the demons came for my village during The Wars. They ransacked the houses and turned the shacks into splinters, wielding fire and water to blast the land asunder. I woke up to some travelling merchants that were passing by, equipping the warriors who were futily trying to drive off the demons that still clawed the village. - -I was brought to a village nearby, where a magician named Magus helped tend to my wounds. The magic that he used was something that I had never seen before – it wasn’t Thaumaturgy, nor Alchemy, and it was definitely not Botany. He winked at me once he saw that my eyes were open, holding his finger to his lips. - - - - - Fast-forward several years, and I have learned almost everything from Master Magus, being his third student ever to master his arts. Against his wishes, I have recorded my research and put several wards and spells on this book. So welcome, apprentice. I am known as The Architect, and I am a Blood Mage. - -It took several years of pestering before I managed to convince Magus to teach me. He kept on telling me that, “Magic that uses the life essence of living beings requires patience and preparation in order to master it. One false move, go a little past your natural endurance, and you may find yourself taking a nice vacation in Tartarus.†The thing was, I wanted to go there – I had some unfinished business with the demons. - - - - - The process that Magus originally constructed required powerful artifacts that he constructed himself, but were rather lacking where teaching was concerned. After studying a bit of alchemy and the process of “Equivalent Exchange,†I managed to construct myself an altar that would transmute items inside of its basin into new powerful forms. The only issue was that it needed a worthy catalyst, and so with a prick of the finger I set the Blood Altar alight! - - - - - The Blood Altar - -To start any form of transmutation involving blood, you would need to construct a blood altar and a sacrificial knife, as well as have a solitary diamond in your possession. After placing the blood altar down, Magus advised me to be careful as I filled it slowly with my blood, and said that I would need to be really close to the altar (about a metre) for the knife to work. With about 2 buckets of blood in the altar, which Master Magus reminds me is about 10 hearts worth, I placed the diamond inside of the altar by activating it with the diamond in hand. - -The blood dissipated in a cloud of red swirls as I waited for the atoms of the diamond to shift and reform. There were a few - - - - - moments where the particles turned gray, which meant that the altar was empty and I had to hurry to fill it. After the diamond burst in a shower of red particles, what finally sat in the altar was a Weak Blood Orb. - - - - - - Blood Altar - - bloodAltar - three - - - - - Sacrificial Knife - - sacrificialKnife - three - - - - - The Soul Network - -One thing that I initially didn’t understand was the overarching connection between the blood orb and myself. When I initially met Magus, I could see many sparkling strands branching off of him, flowing throughout his house and linking with intricate stones and runic drawings. I asked Magus about the strands, but he had no clue what I was talking about. It took three years of thorough research to finally find the answer, and when I brought my notes to him he was really impressed with what I have found. - -When you send power into the orb, the energy is transmitted from the strand connecting the orb and into the very soul of the person the orb is bound to. Similarly, and Magus - - - - - - managed to show this effect with several of his rituals, when you use something that drains energy it will drain the energy directly from the soul. The thing is that if you use an item whose owner has no energy left, the item will instead grab the requisite energy from the user of the item. Directly. From his or her life force. As such, the unit of measurement is called “Life Points,†or LP. I experimented with this, and one heart equals 200 LP. - -I have christened this system to be the “Soul Network,†and is used in all branches of Blood Magic indirectly. - - - - - - Sigils - -Magus is a master at rituals. His power in the intricate layering of stones and inks is unmatched. The problem is that these rituals are rather… static in nature. Sure, being able to summon a meteor is all fine and dandy, but won’t exactly protect you when you are on fire. To this end, I decided to link my soul network to powerful items that I have created. To start, I decided to transmute a piece of smooth stone in the Blood Altar with just 1kLP to create a blank slate. - -The first thing I did was to arrange the blank slate with some reflective glass and my weak blood orb. Pouring my power into the configuration created a Divination Sigil, which I could link to my network and see - - - - - - how much power that my soul network holds. What is more, holding the sigil to the Blood Altar flooded my mind with information, giving me the knowledge about its current tier, capacity, and even how much it was holding. - - Happy with the sigil, I brought a fresh unbound one to Master Magus for him to use. When I took the divination sigil back in my hands and tried to use it to view his network, for some reason I could not gleam any information from him. I don’t really see why this is, considering that I used this same method for other people and I saw that they had no power at all, but to gleam actually … nothing from Magus is strange. - - - - - Divination Sigil - - divinationSigil - three - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/assets/alchemicalwizardry/gui/SigilOfHolding.png b/src/main/resources/assets/alchemicalwizardry/gui/SigilOfHolding.png deleted file mode 100644 index 47887332..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/gui/SigilOfHolding.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/gui/WritingTable.png b/src/main/resources/assets/alchemicalwizardry/gui/WritingTable.png deleted file mode 100644 index 18623f3e..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/gui/WritingTable.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/gui/container.png b/src/main/resources/assets/alchemicalwizardry/gui/container.png deleted file mode 100644 index 140dd8e0..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/gui/container.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/gui/nei/alchemy.png b/src/main/resources/assets/alchemicalwizardry/gui/nei/alchemy.png deleted file mode 100644 index 70819322..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/gui/nei/alchemy.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/gui/nei/altar.png b/src/main/resources/assets/alchemicalwizardry/gui/nei/altar.png deleted file mode 100644 index b1de616a..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/gui/nei/altar.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/gui/nei/bindingRitual.png b/src/main/resources/assets/alchemicalwizardry/gui/nei/bindingRitual.png deleted file mode 100644 index 75ba828f..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/gui/nei/bindingRitual.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/lang/de_DE.lang b/src/main/resources/assets/alchemicalwizardry/lang/de_DE.lang deleted file mode 100644 index 52220010..00000000 --- a/src/main/resources/assets/alchemicalwizardry/lang/de_DE.lang +++ /dev/null @@ -1,181 +0,0 @@ -#Block Localization -tile.bloodAltar.name=Blutaltar -tile.bloodRune.blank.name=Blutrune -tile.bloodRune.fill.name=Rune der Erweiterten Kapazität -tile.bloodRune.empty.name=Rune der Dislokation -tile.bloodRune.test.name=Rune des Gestirns -tile.speedRune.name=Geschwindigkeitsrune -tile.efficiencyRune.name=Effizienzrune -tile.runeOfSacrifice.name=Rune der Opferung -tile.runeOfSelfSacrifice.name=Rune der Selbstopferung -tile.ritualStone.name=Ritualstein -tile.blockMasterStone.name=Meister-Ritualstein -tile.bloodSocket.name=Gefüllte Fassung -tile.imperfectRitualStone.name=Unvollkommener Ritualstein -tile.armourForge.name=Seelrüstungsschmiede -tile.emptySocket.name=Leere Fassung -tile.bloodStoneBrick.name=Blutsteinziegel -tile.largeBloodStoneBrick.name=Große Blutsteinziegel -tile.blockWritingTable.name=Alchemisches Chemieset -tile.blockHomHeart.name=Zaubertisch -tile.bloodPedestal.name=Arkaner Sockel -tile.bloodPlinth.name=Arkane Plinthe -tile.bloodTeleposer.name=Teleposer -tile.blockConduit.name=Zauberleitung -tile.blockSpellParadigm.projectile.name=Partikelgenerator -tile.blockSpellParadigm.self.name=Selbstverbesserer -tile.blockSpellParadigm.melee.name=Nahrkampfaggregator -tile.blockSpellEnhancement.power1.name=Instabile Zaubersteigerung -tile.blockSpellEnhancement.power2.name=Standard-Zaubersteigerung -tile.blockSpellEnhancement.power3.name=Verstärkte Zaubersteigerung -tile.blockSpellEnhancement.power4.name=Erfüllte Zaubersteigerung -tile.blockSpellEnhancement.power5.name=Dämonische Zaubersteigerung -tile.blockSpellEnhancement.cost1.name=Instabiler Zauberdämpfer -tile.blockSpellEnhancement.cost2.name=Standard-Zauberdämpfer -tile.blockSpellEnhancement.cost3.name=Verstärkter Zauberdämpfer -tile.blockSpellEnhancement.cost4.name=Erfüllter Zauberdämpfer -tile.blockSpellEnhancement.cost5.name=Dämonischer Zauberdämpfer -tile.blockSpellEnhancement.potency1.name=Instabiler Zauberverbesserer -tile.blockSpellEnhancement.potency2.name=Standard-Zauberverbesserer -tile.blockSpellEnhancement.potency3.name=Verstärkter Zauberverbesserer -tile.blockSpellEnhancement.potency4.name=Erfüllter Zauberverbesserer -tile.blockSpellEnhancement.potency5.name=Dämonischer Zauberverbesserer -tile.blockSpellModifier.default.name=Standard-Zaubermodifikator -tile.blockSpellModifier.offensive.name=Offensiv-Zaubermodifikator -tile.blockSpellModifier.defensive.name=Defensiv-Zaubermodifikator -tile.blockSpellModifier.environmental.name=Umwelt-Zaubermodifikator -tile.blockSpellEffect.fire.name=Tiegel des Feuers -tile.blockSpellEffect.ice.name=Eismacher -tile.blockSpellEffect.wind.name=Windgenerator -tile.blockSpellEffect.earth.name=Erdformer - -#Item Localization -item.weakBloodOrb.name=Schwacher Blutorb -item.apprenticeBloodOrb.name=Lehrlingsblutorb -item.magicianBloodOrb.name=Blutorb des Magiers -item.masterBloodOrb.name=Blutorb des Meisters -item.archmageBloodOrb.name=Blutorb des Erzmagiers -item.energyBlast.name=Energie-Blaster -item.energySword.name=Gebundene Klinge -item.lavaCrystal.name=Lavakristall -item.waterSigil.name=Wassersiegel -item.lavaSigil.name=Lavasiegel -item.voidSigil.name=Leerensiegel -item.blankSlate.name=Leere Tafel -item.reinforcedSlate.name=Verstärkte Tafel -item.sacrificialDagger.name=Opfermesser -item.daggerOfSacrifice.name=Dolch der Opferung -item.airSigil.name=Luftsiegel -item.sigilOfTheFastMiner.name=Siegel des Schnellen Bergbaus -item.sigilOfElementalAffinity.name=Siegel der Elementaraffinität -item.sigilOfHaste.name=Siegel der Hast -item.sigilOfHolding.name=Siegel des Haltens -item.divinationSigil.name=Wahrheitssiegel -item.waterScribeTool.name=Elementar-Gravurwerkzeug: Wasser -item.fireScribeTool.name=Elementar-Gravurwerkzeug: Feuer -item.earthScribeTool.name=Elementar-Gravurwerkzeug: Erde -item.airScribeTool.name=Elementar-Gravurwerkzeug: Luft -item.duskScribeTool.name=Elementar-Gravurwerkzeug: Dämmerung -item.activationCrystalWeak.name=Schwacher Aktivierungskristall -item.activationCrystalAwakened.name=Erweckter Aktivierungskristall -item.boundPickaxe.name=Gebundene Spitzhacke -item.boundAxe.name=Gebundene Axt -item.boundShovel.name=Gebundene Schaufel -item.boundHelmet.name=Gebundener Helm -item.boundPlate.name=Gebundene Platte -item.boundLeggings.name=Gebundener Beinschutz -item.boundBoots.name=Gebundene Stiefel -item.weakBloodShard.name=Schwache Blutscherbe -item.growthSigil.name=Siegel des Grünen Hains -item.blankSpell.name=Ungebundener Kristall -item.alchemyFlask.name=Trankfläschchen -item.standardBindingAgent.name=Standard-Bindemittel -item.mundanePowerCatalyst.name=Gewöhnlicher Energiekatalysator -item.averagePowerCatalyst.name=Durschschnittlicher Energiekatalysator -item.greaterPowerCatalyst.name=Besserer Energiekatalysator -item.mundaneLengtheningCatalyst.name=Gewöhnlicher Verlängerungskatalysator -item.averageLengtheningCatalyst.name=Durschschnittlicher Verlängerungskatalysator -item.greaterLengtheningCatalyst.name=Besserer Verlängerungskatalysator -item.incendium.name=Incendium -item.magicales.name=Magicales -item.sanctus.name=Sanctus -item.aether.name=Aether -item.simpleCatalyst.name=Einfacher Katalysator -item.crepitous.name=Crepitous -item.crystallos.name=Crystallos -item.terrae.name=Terrae -item.aquasalus.name=Aquasalus -item.tennebrae.name=Tenebrae -item.demonBloodShard.name=Dämonenblutscherbe -item.sigilOfWind.name=Siegel des Wirbelwindes -item.telepositionFocus.name=Telepositionsfokus -item.enhancedTelepositionFocus.name=Verbesserter Telepositionsfokus -item.reinforcedTelepositionFocus.name=Verstärkter Telepositionsfokus -item.demonicTelepositionFocus.name=Dämonischer Telepositionsfokus -item.imbuedSlate.name=Erfüllte Tafel -item.demonicSlate.name=Dämonische Tafel -item.sigilOfTheBridge.name=Siegel der Phantombrücke -item.armourInhibitor.name=Rüstungshemmer -item.cheatyItem.name=Orb des Testens -item.weakFillingAgent.name=Schwaches Füllmittel -item.standardFillingAgent.name=Standard-Füllmittel -item.enhancedFillingAgent.name=Verbessertes Füllmittel -item.weakBindingAgent.name=Schwaches Bindemittel -item.ritualDiviner.name=Ritualrute -item.sigilOfMagnetism.name=Siegel des Magnetismus -item.itemDiabloKey.name=Schlüssel der Bindung -item.energyBazooka.name=Energie-Bazooka -item.bloodLightSigil.name=Siegel der Blutlampe -item.itemComplexSpellCrystal.name=Komplexer Zauberkristall -item.itemSigilOfSupression.name=Siegel der Unterdrückung -item.itemSigilOfEnderSeverance.name=Siegel des Endertrennens -item.bucketLive.name=Lebenseimer -item.bloodMagicBaseItem.quartzRod.name=Quarzstab -item.bloodMagicBaseItem.EmptyCore.name=Leerer Kern -item.bloodMagicBaseItem.MagicalesCable.name=Magicales-Kabel -item.bloodMagicBaseItem.WoodBrace.name=Hölzerne Klammer -item.bloodMagicBaseItem.StoneBrace.name=Steinklammer -item.bloodMagicBaseItem.ProjectileCore.name=Projektilkern -item.bloodMagicBaseItem.SelfCore.name=Selbstkern -item.bloodMagicBaseItem.MeleeCore.name=Nahkampfkern -item.bloodMagicBaseItem.ParadigmBackPlate.name=Paradigmaplatte -item.bloodMagicBaseItem.OutputCable.name=Ausgangszauberkabel -item.bloodMagicBaseItem.InputCable.name=Eingangszauberkabel -item.bloodMagicBaseItem.FlameCore.name=Feuriger Kern -item.bloodMagicBaseItem.IcyCore.name=Eisiger Kern -item.bloodMagicBaseItem.GustCore.name=Windiger Kern -item.bloodMagicBaseItem.EarthenCore.name=Irdener Kern -item.bloodMagicBaseItem.CrackedRunicPlate.name=Brüchige Runenplatte -item.bloodMagicBaseItem.RunicPlate.name=Runenplatte -item.bloodMagicBaseItem.ScribedRunicPlate.name=Erfüllte Runenplatte -item.bloodMagicBaseItem.DefaultCore.name=Unbestimmter Kern -item.bloodMagicBaseItem.OffensiveCore.name=Offensivkern -item.bloodMagicBaseItem.DefensiveCore.name=Defensivkern -item.bloodMagicBaseItem.EnvironmentalCore.name=Umweltkern -item.bloodMagicBaseItem.PowerCore.name=Energiekern -item.bloodMagicBaseItem.CostCore.name=Reduktionskern -item.bloodMagicBaseItem.PotencyCore.name=Machtkern -item.bloodMagicBaseItem.ObsidianBrace.name=Obsidianklammer -item.bloodMagicAlchemyItem.Offensa.name=Offensa -item.bloodMagicAlchemyItem.Praesidium.name=Praesidium -item.bloodMagicAlchemyItem.OrbisTerrae.name=Orbis Terrae -item.bloodMagicAlchemyItem.StrengthenedCatalyst.name=Gestärkter Katalysator -item.bloodMagicAlchemyItem.ConcentratedCatalyst.name=Konzentierter Katalysator -item.bloodMagicAlchemyItem.FracturedBone.name=Gebrochener Knochen -item.bloodMagicAlchemyItem.Virtus.name=Virtus -item.bloodMagicAlchemyItem.Reductus.name=Reductus -item.bloodMagicAlchemyItem.Potentia.name=Potentia -item.sanguineHelmet.name=Bluthelm -item.itemSeerSigil.name=Siegel der Sicht -item.itemFluidSigil.name= - - -#Creative Tab -itemGroup.tabBloodMagic=Blood Magic - -#Extra Strings -bm.string.consume=Verbrauch -bm.string.drain=Entzug -bm.string.tier=Stufe -bm.string.crafting.orb.shaped=Geformte Orb-Fertigung -bm.string.crafting.orb.shapeless=Formfreie Orb-Fertigung diff --git a/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang b/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang deleted file mode 100644 index d8485d0e..00000000 --- a/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang +++ /dev/null @@ -1,482 +0,0 @@ -#Block Localization -tile.altar.name=Blood Altar -tile.blood_rune.blank.name=Blood Rune -tile.blood_rune.fill.name=Rune of Augmented Capacity -tile.blood_rune.empty.name=Rune of Dislocation -tile.blood_rune.orb.name=Rune of the Orb -tile.blood_rune.betterCapacity.name=Rune of Superior Capacity -tile.blood_rune.acceleration.name=Rune of Acceleration -tile.speed_rune.name=Speed Rune -tile.efficiency_rune.name=Efficiency Rune -tile.sacrifice_rune.name=Rune of Sacrifice -tile.self_sacrifice_rune.name=Rune of Self-Sacrifice -tile.ritual_stone.name=Ritual Stone -tile.master_ritual_stone.name=Master Ritual Stone -tile.filled_socket.name=Filled Socket -tile.imperfect_ritual_stone.name=Imperfect Ritual Stone -tile.soul_armour_forge.name=Soul Armour Forge -tile.empty_socket.name=Empty Socket -tile.bloodstone_brick.name=Bloodstone Brick -tile.large_bloodstone_brick.name=Large Bloodstone Brick -tile.chemistry_set.name=Alchemical Chemistry Set -tile.spell_table.name=Spell Table -tile.pedestal.name=Arcane Pedestal -tile.plinth.name=Arcane Plinth -tile.teleposer.name=Teleposer -tile.spell_conduit.name=Spell Conduit -tile.spell_paradigm.projectile.name=Particle Generator -tile.spell_paradigm.self.name=Self Augmentator -tile.spell_paradigm.melee.name=Melee Aggregator -tile.spell_paradigm.tool.name=Tool Forger -tile.spell_enhancement.power1.name=Unstable Spell Empowerer -tile.spell_enhancement.power2.name=Standard Spell Empowerer -tile.spell_enhancement.power3.name=Reinforced Spell Empowerer -tile.spell_enhancement.power4.name=Imbued Spell Empowerer -tile.spell_enhancement.power5.name=Demonic Spell Empowerer -tile.spell_enhancement.cost1.name=Unstable Spell Dampener -tile.spell_enhancement.cost2.name=Standard Spell Dampener -tile.spell_enhancement.cost3.name=Reinforced Spell Dampener -tile.spell_enhancement.cost4.name=Imbued Spell Dampener -tile.spell_enhancement.cost5.name=Demonic Spell Dampener -tile.spell_enhancement.potency1.name=Unstable Spell Augmentor -tile.spell_enhancement.potency2.name=Standard Spell Augmentor -tile.spell_enhancement.potency3.name=Reinforced Spell Augmentor -tile.spell_enhancement.potency4.name=Imbued Spell Augmentor -tile.spell_enhancement.potency5.name=Demonic Spell Augmentor -tile.spell_modifier.default.name=Default Spell Modifier -tile.spell_modifier.offensive.name=Offensive Spell Modifier -tile.spell_modifier.defensive.name=Defensive Spell Modifier -tile.spell_modifier.environmental.name=Environmental Spell Modifier -tile.spell_effect.fire.name=Crucible of Fire -tile.spell_effect.ice.name=Ice Maker -tile.spell_effect.wind.name=Wind Generator -tile.spell_effect.earth.name=Earth Former -tile.alchemical_calcinator.name=Alchemical Calcinator -tile.crystal_belljar.name=Crystal Belljar -tile.reagent_conduit.name=Alchemy Relay -tile.life_essence.name=Life Essence -tile.crystal_block.fullCrystal.name=Crystal Cluster -tile.crystal_block.crystalBrick.name=Crystal Cluster Brick -tile.demon_portal.name=Demon Portal -tile.demon_chest.name=Demon's Chest -tile.enchantment_glyph.enchantability.name=Glyph of the Adept Enchanter -tile.enchantment_glyph.enchantmentLevel.name=Glyph of Arcane Potential -tile.stability_glyph.stability1.name=Glyph of Rigid Stability -tile.schematic_saver.name=Schematic Saver -tile.mimic_block.name=Mimic Block -tile.spectral_container.name=Spectral Container -tile.blood_light.name=Blood Light -tile.spectral_block.name=Spectral Block -tile.incense_crucible.name=Incense Crucible - -#Item Localization -item.weak_blood_orb.name=Weak Blood Orb -item.apprentice_blood_orb.name=Apprentice Blood Orb -item.magician_blood_orb.name=Magician's Blood Orb -item.master_blood_orb.name=Master Blood Orb -item.archmage_blood_orb.name=Archmage's Blood Orb -item.energy_blast.name=Energy Blaster -item.energy_sword.name=Bound Blade -item.lava_crystal.name=Lava Crystal -item.water_sigil.name=Water Sigil -item.lava_sigil.name=Lava Sigil -item.void_sigil.name=Void Sigil -item.blank_slate.name=Blank Slate -item.reinforced_slate.name=Reinforced Slate -item.sacrificial_dagger.name=Sacrificial Knife -item.dagger_of_sacrifice.name=Dagger of Sacrifice -item.air_sigil.name=Air Sigil -item.sigil_of_the_fast_miner.name=Sigil of the Fast Miner -item.sigil_of_elemental_affinity.name=Sigil of Elemental Affinity -item.sigil_of_haste.name=Sigil of Haste -item.sigil_of_holding.name=Sigil of Holding -item.divination_sigil.name=Divination Sigil -item.water_scribe_tool.name=Elemental Inscription Tool: Water -item.fire_scribe_tool.name=Elemental Inscription Tool: Fire -item.earth_scribe_tool.name=Elemental Inscription Tool: Earth -item.air_scribe_tool.name=Elemental Inscription Tool: Air -item.dusk_scribe_tool.name=Elemental Inscription Tool: Dusk -item.activation_crystal_weak.name=Weak Activation Crystal -item.activation_crystal_awakened.name=Awakened Activation Crystal -item.activation_crystal_creative.name=Creative Activation Crystal -item.bound_pickaxe.name=Bound Pickaxe -item.bound_axe.name=Bound Axe -item.bound_shovel.name=Bound Shovel -item.bound_helmet.name=Bound Helmet -item.bound_chestplate.name=Bound Chestplate -item.bound_leggings.name=Bound Leggings -item.bound_boots.name=Bound Boots -item.weak_blood_shard.name=Weak Blood Shard -item.growth_sigil.name=Sigil of the Green Grove -item.blank_spell.name=Unbound Crystal -item.alchemy_flask.name=Potion Flask -item.standard_binding_agent.name=Standard Binding Agent -item.mundane_power_catalyst.name=Mundane Power Catalyst -item.average_power_catalyst.name=Average Power Catalyst -item.greater_power_catalyst.name=Greater Power Catalyst -item.mundane_lengthening_catalyst.name=Mundane Lengthening Catalyst -item.average_lengthening_catalyst.name=Average Lengthening Catalyst -item.greater_lengthening_catalyst.name=Greater Lengthening Catalyst -item.incendium.name=Incendium -item.magicales.name=Magicales -item.sanctus.name=Sanctus -item.aether.name=Aether -item.simple_catalyst.name=Simple Catalyst -item.crepitous.name=Crepitous -item.crystallos.name=Crystallos -item.terrae.name=Terrae -item.aquasalus.name=Aquasalus -item.tennebrae.name=Tenebrae -item.demon_blood_shard.name=Demon Blood Shard -item.sigil_of_wind.name=Sigil of the Whirlwind -item.teleposition_focus.name=Teleposition Focus -item.enhanced_teleposition_focus.name=Enhanced Teleposition Focus -item.reinforced_teleposition_focus.name=Reinforced Teleposition Focus -item.demonic_teleposition_focus.name=Demonic Teleposition Focus -item.imbued_slate.name=Imbued Slate -item.demonic_slate.name=Demonic Slate -item.sigil_of_the_bridge.name=Sigil of the Phantom Bridge -item.armour_inhibitor.name=Armour Inhibitor -item.creative_orb.name=Orb of Testing -item.weak_filling_agent.name=Weak Filling Agent -item.standard_filling_agent.name=Standard Filling Agent -item.enhanced_filling_agent.name=Enhanced Filling Agent -item.weak_binding_agent.name=Weak Binding Agent -item.ritual_diviner.name=Ritual Diviner -item.ritual_dismantler.name=Ritual Dismantler -item.sigil_of_magnetism.name=Sigil of Magnetism -item.key_of_binding.name=Key of Binding -item.energy_bazooka.name=Energy Bazooka -item.blood_light_sigil.name=Sigil of the Blood Lamp -item.complex_spell_crystal.name=Complex Spell Crystal -item.sigil_of_supression.name=Sigil of Supression -item.sigil_of_ender_severance.name=Sigil of Ender Severance -item.bucket_life.name=Bucket of Life -item.base_items.quartz_rod.name=Quartz Rod -item.base_items.empty_core.name=Empty Core -item.base_items.magicales_cable.name=Magicales Cable -item.base_items.wood_brace.name=Wooden Brace -item.base_items.stone_brace.name=Stone Brace -item.base_items.projectile_core.name=Projectile Core -item.base_items.self_core.name=Self Core -item.base_items.melee_core.name=Melee Core -item.base_items.tool_core.name=Tool Core -item.base_items.paradigm_back_plate.name=Paradigm Plate -item.base_items.output_cable.name=Output Spell Cable -item.base_items.input_cable.name=Input Spell Cable -item.base_items.flame_core.name=Fire Core -item.base_items.icy_core.name=Icy Core -item.base_items.gust_core.name=Gusty Core -item.base_items.earthen_core.name=Earthen Core -item.base_items.cracked_runic_plate.name=Cracked Runic Plate -item.base_items.runic_plate.name=Runic Plate -item.base_items.scribed_runic_plate.name=Imbued Runic Plate -item.base_items.default_core.name=Unattuned Core -item.base_items.offensive_core.name=Offensive Core -item.base_items.defensive_core.name=Defensive Core -item.base_items.environmental_core.name=Environmental Core -item.base_items.power_core.name=Power Core -item.base_items.cost_core.name=Reduction Core -item.base_items.potency_core.name=Potency Core -item.base_items.obsidian_brace.name=Obsidian Brace -item.base_items.ethereal_slate.name=Ethereal Slate -item.base_items.life_shard.name=Life Shard -item.base_items.soul_shard.name=Soul Shard -item.base_items.life_brace.name=Living Brace -item.base_items.soul_runic_plate.name=Soul Runic Plate -item.base_items.ender_shard.name=Ender Shard -item.base_alchemy_items.offensa.name=Offensa -item.base_alchemy_items.praesidium.name=Praesidium -item.base_alchemy_items.orbis_terrae.name=Orbis Terrae -item.base_alchemy_items.strengthened_catalyst.name=Strengthened Catalyst -item.base_alchemy_items.concentrated_catalyst.name=Concentrated Catalyst -item.base_alchemy_items.fractured_bone.name=Fractured Bone -item.base_alchemy_items.virtus.name=Virtus -item.base_alchemy_items.reductus.name=Reductus -item.base_alchemy_items.potentia.name=Potentia -item.sanguine_helmet.name=Sanguine Helmet -item.seer_sigil.name=Sigil of Sight -item.fluid_sigil.name=Sigil of Fluidity -item.multi_tool.name=Dynamic Mace -item.combinational_catalyst.name=Combinational Catalyst -item.sanguine_robe.name=Sanguine Robes -item.sanguine_pants.name=Sanguine Leggings -item.sanguine_boots.name=Sanguine Boots -item.alchemical_router.name=Alchemic Router -item.alchemical_segmenter.name=Alchemic Segmenter -item.alchemical_cleanser.name=Alchemic Cleanser -item.demon_crystal.name=Demon Crystal -item.creative_dagger.name=Creative Sacrificial Knife -item.blood_pack.name=Blood Letter's Pack -item.harvest_sigil.name=Harvest Goddess Sigil -item.compression_sigil.name=Sigil of Compression -item.assassin_sigil.name=Sigil of the Assassin -item.transcendent_blood_orb.name=Transcendent Blood Orb -item.mail_catalogue.name=Mail Order Catalogue -item.input_routing_focus.name=Input Routing Focus -item.output_routing_focus.default.name=Default Output Routing Focus -item.output_routing_focus.modItem.name=Output Routing Focus (ModItem) -item.output_routing_focus.ignMeta.name=Output Routing Focus (Ignore Meta) -item.output_routing_focus.matchNBT.name=Output Routing Focus (MatchNBT) -item.output_routing_focus.global.name=Output Routing Focus (Global) -item.dawn_scribe_tool.name=Elemental Inscription Tool: Dawn -item.bound_helmet_earth.name=Earth Omega Helmet -item.bound_chestplate_earth.name=Earth Omega Chestplate -item.bound_leggings_earth.name=Earth Omega Leggings -item.bound_boots_earth.name=Earth Omega Boots -item.bound_helmet_wind.name=Wind Omega Helmet -item.bound_chestplate_wind.name=Wind Omega Chestplate -item.bound_leggings_wind.name=Wind Omega Leggings -item.bound_boots_wind.name=Wind Omega Boots -item.bound_helmet_fire.name=Fire Omega Helmet -item.bound_chestplate_fire.name=Fire Omega Chestplate -item.bound_leggings_fire.name=Fire Omega Leggings -item.bound_boots_fire.name=Fire Omega Boots -item.bound_helmet_water.name=Water Omega Helmet -item.bound_chestplate_water.name=Water Omega Chestplate -item.bound_leggings_water.name=Water Omega Leggings -item.bound_boots_water.name=Water Omega Boots - -item.incense.wood_ash.name=Wood Ash -item.incense.byrrus.name=Byrrus -item.incense.livens.name=Livens -item.incense.viridis.name=Viridis -item.incense.purpura.name=Purpura - -#Creative Tab -itemGroup.tabBloodMagic=Blood Magic - -#Extra Strings -bm.string.consume=Usage -bm.string.drain=Drain -bm.string.tier=Tier -bm.string.crafting.orb.shaped=Shaped Orb Crafting -bm.string.crafting.orb.shapeless=Shapeless Orb Crafting -text.recipe.altar=Blood Altar -text.recipe.altar.tier=Tier: %s -text.recipe.altar.bloodRequired=LP: %s -text.recipe.shapedOrb=Shaped Orb Recipe - -#Entities -entity.AWWayofTime.EarthElemental.name=Earth Elemental -entity.AWWayofTime.FireElemental.name=Fire Elemental -entity.AWWayofTime.HolyElemental.name=Holy Elemental -entity.AWWayofTime.ShadeElemental.name=Shade Elemental -entity.AWWayofTime.WaterElemental.name=Water Elemental -entity.AWWayofTime.AirElemental.name=Air Elemental -entity.AWWayofTime.Shade.name=Shade -entity.AWWayofTime.BoulderFist.name=Boulder Fist -entity.AWWayofTime.IceDemon.name=Ice Demon -entity.AWWayofTime.SmallEarthGolem.name=Small Earth Golem -entity.AWWayofTime.WingedFireDemon.name=Winged Fire Demon -entity.AWWayofTime.BileDemon.name=Bile Demon -entity.AWWayofTime.LowerGuardian.name=Lower Guardian -entity.AWWayofTime.FallenAngel.name=Fallen Angel -entity.AWWayofTime.MinorDemonGruntGuardian.name=Demon Grunt Guardian -entity.AWWayofTime.MinorDemonGruntGuardianWind.name=Wind Demon Grunt Guardian -entity.AWWayofTime.MinorDemonGruntGuardianFire.name=Fire Demon Grunt Guardian -entity.AWWayofTime.MinorDemonGruntGuardianIce.name=Ice Demon Grunt Guardian -entity.AWWayofTime.MinorDemonGruntGuardianEarth.name=Earth Demon Grunt Guardian -entity.AWWayofTime.MinorDemonGruntWind.name=Wind Demon Grunt -entity.AWWayofTime.MinorDemonGruntFire.name=Fire Demon Grunt -entity.AWWayofTime.MinorDemonGruntIce.name=Ice Demon Grunt -entity.AWWayofTime.MinorDemonGruntEarth.name=Earth Demon Grunt -entity.AWWayofTime.MinorDemonGrunt.name=Demon Grunt - -#Commands -commands.soulnetwork.usage=/soulnetwork -commands.bind.usage=/bind -commands.bind.success=Item successfully bound! -commands.bind.failed.noPlayer=There is no player specified -commands.bind.failed.alreadyBound=Item is already bound; use /unbind to unbind it -commands.bind.failed.notBindable=Item cannot be bound -commands.unbind.usage=/unbind -commands.unbind.success=Item successfully unbound! -commands.unbind.failed.notBindable=Item cannot be unbound -commands.soulnetwork.usage=/soulnetwork [amount] -commands.soulnetwork.add.success=Successfully added %dLP to %s's Soul Network! -commands.soulnetwork.subtract.success=Successfully subtracted %dLP from %s's Soul Network! -commands.soulnetwork.fill.success=Successfully filled %s's Soul Network! -commands.soulnetwork.empty.success=Successfully emptied %s's Soul Network! -commands.soulnetwork.get.success=There is %dLP in %s's Soul Network! -commands.soulnetwork.noPlayer=There is no player specified -commands.soulnetwork.noCommand=There is no command specified -commands.soulnetwork.notACommand=That is not a valid command -commands.soulnetwork.fillMax.success=Successfully filled %s's Soul Network to their orb max! -commands.soulnetwork.create.success=Successfully created %s's Soul Network (Orb tier: %d) - -#Tooltips -tooltip.activationcrystal.creativeonly=Creative Only - activates any ritual -tooltip.activationcrystal.lowlevelrituals=Activates low-level rituals -tooltip.activationcrystal.powerfulrituals=Activates more powerful rituals -tooltip.airsigil.desc=I feel lighter already... -tooltip.alchemy.coords=Coords: -tooltip.alchemy.damage=Damage: -tooltip.alchemy.dimension=Bound Dimension: -tooltip.alchemy.direction=Direction: -tooltip.alchemy.forrecipe=for Recipe -tooltip.alchemy.press=Press -tooltip.alchemy.recipe=Recipe: -tooltip.alchemy.ritualid=RitualID: -tooltip.alchemy.shift=shift -tooltip.alchemy.usedinalchemy=Used in Alchemy -tooltip.alchemyflask.caution=CAUTION: Contents are throwable -tooltip.alchemyflask.swigsleft=Swigs Left: -tooltip.armorinhibitor.desc1=Used to suppress a soul's -tooltip.armorinhibitor.desc2=unnatural abilities. -tooltip.attunedcrystal.desc1=A tool to tune alchemy -tooltip.attunedcrystal.desc2=reagent transmission -tooltip.blankspell.desc=Crystal of infinite possibilities. -tooltip.bloodframe.desc=Stirs bees into a frenzy. -tooltip.bloodletterpack.desc=This pack really chaffes... -tooltip.bloodlightsigil.desc=I see a light! -tooltip.boundarmor.devprotect=Devilish Protection -tooltip.boundaxe.desc=Axe me about my puns! -tooltip.boundpickaxe.desc1=The Souls of the Damned -tooltip.boundpickaxe.desc2=do not like stone... -tooltip.boundshovel.desc=No, not that type of spade. -tooltip.caution.desc1=Caution: may cause -tooltip.caution.desc2=a bad day... -tooltip.cheatyitem.desc1=Right-click to fill network, -tooltip.cheatyitem.desc2=shift-right to empty. -tooltip.complexspellcrystal.desc=Crystal of unimaginable power -tooltip.crystalbelljar.contents=Current Contents: -tooltip.crystalbelljar.empty=- Empty -tooltip.demonictelepfocus.desc1=A stronger version of the focus, -tooltip.demonictelepfocus.desc2=using a demonic shard -tooltip.demonplacer.desc=Used to spawn demons. -tooltip.destclearer.desc1=Used to clear the destination -tooltip.destclearer.desc2=list for an alchemy container -tooltip.diablokey.desc=Binds other items to the owner's network -tooltip.divinationsigil.desc1=Peer into the soul to -tooltip.divinationsigil.desc2=get the current essence -tooltip.energybazooka.desc=Boom. -tooltip.energybattery.desc=Stores raw Life Essence -tooltip.energyblast.desc1=Used to fire devastating -tooltip.energyblast.desc2=projectiles. -tooltip.enhancedtelepfocus.desc=A focus further enhanced in an altar -tooltip.fluidsigil.beastmode=Beast Mode -tooltip.fluidsigil.desc=A sigil with a lovely affinity for fluids -tooltip.fluidsigil.draintankmode=Drain Tank Mode -tooltip.fluidsigil.filltankmode=Fill Tank Mode -tooltip.fluidsigil.fluidplacementmode=Fluid Placement Mode -tooltip.fluidsigil.forcesyphonmode=Force-syphon Mode -tooltip.fluidsigil.syphoningmode=Syphoning Mode -tooltip.harvestsigil.desc=You sow what you reap -tooltip.infusedstone.desc1=Infused stone inside of -tooltip.infusedstone.desc2=a blood altar -tooltip.item.iteminslot=Item in slot -tooltip.item.currentitem=Current Item: -tooltip.lavacrystal.desc1=Store life to smelt -tooltip.lavacrystal.desc2=stuff in the furnace. -tooltip.lavasigil.desc1=Contact with liquid is -tooltip.lavasigil.desc2=highly unrecommended. -tooltip.lp.storedlp=Stored LP: -tooltip.mode.creative=Creative Only -tooltip.owner.currentowner=Current Owner: -tooltip.owner.demonsowner=Demon's Owner: -tooltip.packratsigil.desc=Hands of Diamonds -tooltip.reagent.selectedreagent=Currently selected reagent: -tooltip.reinforcedtelepfocus.desc1=A stronger version of the focus, -tooltip.reinforcedtelepfocus.desc2=using a weak shard -tooltip.ritualdiviner.airstones=Air Stones: -tooltip.ritualdiviner.blankstones=Blank Stones: -tooltip.ritualdiviner.cannotplace=Can not place Dusk runes -tooltip.ritualdiviner.canplace=Can place Dusk runes -tooltip.ritualdiviner.canplacedawn=Can place Dusk and Dawn runes -tooltip.ritualdiviner.desc=Used to explore new types of rituals -tooltip.ritualdiviner.duskstones=Dusk Stones: -tooltip.ritualdiviner.earthstones=Earth Stones: -tooltip.ritualdiviner.firestones=Fire Stones: -tooltip.ritualdiviner.moreinfo=Press shift for extended information -tooltip.ritualdiviner.ritualtunedto=Ritual tuned to face: -tooltip.ritualdiviner.waterstones=Water Stones: -tooltip.ritualdiviner.dawnstones=Dawn Stones: -tooltip.ritualdiviner.totalStones=Total Stones: -tooltip.dismatler.desc=You could turn this upside down? -tooltip.sacrificialdagger.desc1=A slight draining feeling tickles your fingers -tooltip.sacrificialdagger.desc2=Just a prick of the -tooltip.sacrificialdagger.desc3=finger will suffice... -tooltip.sanguinearmor.desc1=A pair of goggles imbued with power -tooltip.sanguinearmor.desc2=Robes imbued with forbidden power -tooltip.sanguinearmor.visdisc=Vis discount: -tooltip._scribe_tool.desc=The writing is on the wall... -tooltip.seersigil.desc=When seeing all is not enough -tooltip.sigil_ofelementalaffinity.desc1=Perfect for a fire-breathing fish -tooltip.sigil_ofelementalaffinity.desc2=who is afraid of heights! -tooltip.sigil_ofenderseverance.desc=Put those endermen in a Dire situation! -tooltip.sigil_ofgrowth.desc1=Who needs a green thumb when -tooltip.sigil_ofgrowth.desc2=you have a green slate? -tooltip.sigil_ofhaste.desc=One dose of caffeine later... -tooltip.sigil_ofholding.desc=Used to hold several Sigils! -tooltip.sigil_ofmagnetism.desc=I have a very magnetic personality! -tooltip.sigil_ofsupression.desc=Better than telekinesis -tooltip.sigil_oftheassassin.desc=Time to stay stealthy... -tooltip.sigil_ofthebridge.desc1=Activate to create a bridge -tooltip.sigil_ofthebridge.desc2=beneath your feet. -tooltip.sigil_ofthefastminer.desc=Keep going and going and going... -tooltip.sigil_ofwind.desc=Best not to wear a skirt. -tooltip.sigil.state.activated=Activated -tooltip.sigil.state.deactivated=Deactivated -tooltip.tanksegmenter.desc1=Used to designate which -tooltip.tanksegmenter.desc2=reagents can go into a container -tooltip._teleposition_focus.desc=An Enderpearl imbued with blood -tooltip.voidsigil.desc=Better than a Swiffer! -tooltip.watersigil.desc=Infinite water, anyone? -tooltip.routingFocus.limit=Limit: -tooltip.routingFocus.desc=A focus used to route items -tooltip.alchemy.usedinincense=Purifying incense used in a crucible - -#Messages -message.altar.capacity=Capacity: %s LP -message.altar.consumptionrate=Consumption Rate: -message.altar.currentessence=Altar's Current Essence: %s LP -message.altar.currenttier=Altar's Current Tier: %s -message.altar.progress=Altar's Progress: -message.altar.inputtank= Input Tank: %s LP -message.altar.outputtank= Output Tank: %s LP -message.altar.hunger=[BM] Your high regeneration rate has caused you to become hungry... -message.attunedcrystal.clearing=Clearing saved container... -message.attunedcrystal.error.cannotfind=Can no longer find linked container. -message.attunedcrystal.error.noconnections=Linked container has no connections remaining! -message.attunedcrystal.error.toofar=Linked container is either too far or is in a different dimension. -message.attunedcrystal.linked=Container is now linked. Transmitting: -message.attunedcrystal.linking=Linking to selected container. -message.attunedcrystal.setto=Attuned Crystal now set to: -message.demon.shallfollow=I shall follow and protect you! -message.demon.willstay=I will stay here for now, Master. -message.destinationclearer.cleared=Destination list now cleared. -message.divinationsigil.amount=Amount: -message.divinationsigil.currentessence=Current Essence: -message.divinationsigil.reagent=Reagent: -message.masterstone.crystalvibrates=Your crystal vibrates pathetically. -message.masterstone.energyflows=A rush of energy flows through the ritual! -message.masterstone.nothinghappened=Nothing appears to have happened... -message.masterstone.ritualresistyou=The ritual appears to actively resist you! -message.masterstone.somethingstoppedyou=Something stopped you in your tracks... -message.masterstone.youfeelapull=You feel a pull, but you are too weak to push any further. -message.ritual.currentritual=Current Ritual: -message.ritual.side.east=EAST -message.ritual.side.north=NORTH -message.ritual.side.south=SOUTH -message.ritual.side.west=WEST -message.ritualdemonportal.missingjar=A jar on one of the pillars appears to be missing... -message.tanksegmenter.nowhas=Tank now has -message.tanksegmenter.setto=Tank Segmenter now set to: -message.tanksegmenter.tankssetto=tank(s) set to: -message.routerfocus.limit=Focus' Item Limit set to: - -#Achievements -achievement.alchemicalwizardry:firstPrick=Your First Prick! -achievement.alchemicalwizardry:firstPrick.desc=The first drop of life into the Altar... -achievement.alchemicalwizardry:weakOrb=Faintly Glowing Red... -achievement.alchemicalwizardry:weakOrb.desc=This orb will suffice...for now... - -#G-API Downloading -bm.versioning.getGAPI=["[BM] You don't have Guide-API installed! Install it to get it to unlock the book! [",{"text":"Download","color":"red","hoverEvent":{"action":"show_text","value":{"text":"Click this to auto-magically download the latest version","color":"red"}},"clickEvent":{"action":"run_command","value":"/bloodmagic-download-g-api"}},"]"] -bm.versioning.startingDownload=[{"text":"Starting download of %s Please do not remove your hard disk.", "color":"orange"}] -bm.versioning.doneDownloading=Finished downloading %s Reload your game to update. -bm.versioning.error=An error has occurred while downloading the mod! -bm.versioning.downloadedAlready=You have the latest version already, reload your game to update! -bm.versioning.downloadingAlready=It's downloading! Be patient! -bm.versioning.disabled=This feature is disabled. diff --git a/src/main/resources/assets/alchemicalwizardry/lang/fr_FR.lang b/src/main/resources/assets/alchemicalwizardry/lang/fr_FR.lang deleted file mode 100644 index 5a957bdf..00000000 --- a/src/main/resources/assets/alchemicalwizardry/lang/fr_FR.lang +++ /dev/null @@ -1,236 +0,0 @@ -#Block Localization -tile.bloodAltar.name=Autel de Sang -tile.bloodRune.blank.name=Rune de Sang -tile.bloodRune.fill.name=Rune de Capacité Augmentée -tile.bloodRune.empty.name=Rune de Dislocation -tile.bloodRune.test.name=Rune de l’Orbe -tile.bloodRune.betterCapacity.name=Rune de la Capacité Supérieure -tile.bloodRune.acceleration.name=Rune d'Accélération -tile.speedRune.name=Rune de Vitesse -tile.efficiencyRune.name=Rune d’Efficacité -tile.runeOfSacrifice.name=Rune du Sacrifice -tile.runeOfSelfSacrifice.name=Rune de l’Auto-Sacrifice -tile.ritualStone.name=Pierre Rituelle -tile.blockMasterStone.name=Pierre Rituelle Maître -tile.bloodSocket.name=Poche Remplie -tile.imperfectRitualStone.name=Pierre Rituelle Imparfaite -tile.armourForge.name=Forge d’Armure d’Âme -tile.emptySocket.name=Poche Vide -tile.bloodStoneBrick.name=Brique de Roche-Sang -tile.largeBloodStoneBrick.name=Brique Large de Roche-Sang -tile.blockWritingTable.name=Matériel d’Alchimie -tile.blockHomHeart.name=Table des Maléfices -tile.bloodPedestal.name=Piédéstal Arcanique -tile.bloodPlinth.name=Socle Arcanique -tile.bloodTeleposer.name=Téléposeur -tile.blockConduit.name=Conduit des Maléfices -tile.blockSpellParadigm.projectile.name=Générateur de Particule -tile.blockSpellParadigm.self.name=Auto-Augmenteur -tile.blockSpellParadigm.melee.name=Agrégation à la Mêlée -tile.blockSpellParadigm.tool.name=Forgeron Outilleur -tile.blockSpellEnhancement.power1.name=Renforcement Instable des Maléfices -tile.blockSpellEnhancement.power2.name=Renforcement Standard des Maléfices -tile.blockSpellEnhancement.power3.name=Renforcement Renforcé des Maléfices -tile.blockSpellEnhancement.power4.name=Renforcement Imprégné des Maléfices -tile.blockSpellEnhancement.power5.name=Renforcement Diabolo des Maléfices -tile.blockSpellEnhancement.cost1.name=Ristourne Instable des Maléfices -tile.blockSpellEnhancement.cost2.name=Ristourne Standard des Maléfices -tile.blockSpellEnhancement.cost3.name=Ristourne Renforcée des Maléfices -tile.blockSpellEnhancement.cost4.name=Ristourne Imprégnée des Maléfices -tile.blockSpellEnhancement.cost5.name=Ristourne Démoniaque des Maléfices -tile.blockSpellEnhancement.potency1.name=Amélioration Instable des Maléfices -tile.blockSpellEnhancement.potency2.name=Amélioration Standard des Maléfices -tile.blockSpellEnhancement.potency3.name=Amélioration Renforcée des Maléfices -tile.blockSpellEnhancement.potency4.name=Amélioration Imprégnée des Maléfices -tile.blockSpellEnhancement.potency5.name=Amélioration Diabolo des Maléfices -tile.blockSpellModifier.default.name=Modification Basique des Maléfices -tile.blockSpellModifier.offensive.name= Modification Offensive des Maléfices -tile.blockSpellModifier.defensive.name= Modification Défensive des Maléfices -tile.blockSpellModifier.environmental.name=Modification Environnementale des Maléfices -tile.blockSpellEffect.fire.name=Creuset des Flammes -tile.blockSpellEffect.ice.name=Geyser de Glace -tile.blockSpellEffect.wind.name=Jaillissement des Vents -tile.blockSpellEffect.earth.name=Assembleur des Terres -tile.alchemicCalcinator.name=Calcinateur Alchimique -tile.crystalBelljar.name=Cloche de Cristal -tile.blockReagentConduit.name=Relais Alchimique -tile.lifeEssenceFluidBlock.name=Extrait de Vitalité -tile.crystalBlock.fullCrystal.name=Fragments de Cristaux -tile.crystalBlock.crystalBrick.name=Briques de Fragments de Cristaux -tile.demonPortal.name=Portail Diabolo - -#Item Localization -item.weakBloodOrb.name=Orbe Sanguinaire Affaiblie -item.apprenticeBloodOrb.name=Orbe Sanguinaire de l’Apprenti -item.magicianBloodOrb.name=Orbe Sanguinaire du Magicien -item.masterBloodOrb.name=Orbe Sanguinaire du Maître -item.archmageBloodOrb.name=Orbe Sanguinaire de l'Enchanteur -item.energyBlast.name=Blaster à Energie -item.energySword.name=Lame Sacrificielle -item.lavaCrystal.name=Cristal de Lave -item.waterSigil.name=Emblème de l’Eau -item.lavaSigil.name=Emblème de la Lave -item.voidSigil.name=Emblème du Vide -item.blankSlate.name=Tablette Vierge -item.reinforcedSlate.name=Tablette Renforcée -item.sacrificialDagger.name=Couteau Sacrificiel -item.daggerOfSacrifice.name=Dague des Sacrifices -item.airSigil.name=Emblème Stratos -item.sigilOfTheFastMiner.name=Emblème Spelunk -item.sigilOfElementalAffinity.name=Emblème d’Affinité Elémentaire -item.sigilOfHaste.name=Emblème de Célérité -item.sigilOfHolding.name=Emblème Possessif -item.divinationSigil.name=Emblème des Pythies -item.waterScribeTool.name=Craie d’Inscription Elémentaire: Eau -item.fireScribeTool.name=Craie d’Inscription Elémentaire: Feu -item.earthScribeTool.name=Craie d’Inscription Elémentaire: Terre -item.airScribeTool.name=Craie d’Inscription Elémentaire: Air -item.duskScribeTool.name=Craie d’Inscription Elémentaire: Crépuscule -item.activationCrystalWeak.name=Cristal d’Activation Affaibli -item.activationCrystalAwakened.name=Cristal d’Activation Eveillé -item.activationCrystalCreative.name=Cristal d'Activation Créatif -item.boundPickaxe.name=Pioche Sacrificielle -item.boundAxe.name=Hâche Sacrificielle -item.boundShovel.name=Pelle Sacrificielle -item.boundHelmet.name=Casque Sacrificiel -item.boundPlate.name=Plastron Sacrificiel -item.boundLeggings.name=Jambières Sacrificielles -item.boundBoots.name=Bottes Sacrificielles -item.weakBloodShard.name=Eclat Sanguinaire Affaibli -item.growthSigil.name=Emblème du -item.blankSpell.name=Cristal Délié -item.alchemyFlask.name=Fiole à Potion -item.standardBindingAgent.name=Agent Sacrificiel Standard -item.mundanePowerCatalyst.name=Cristal de Puissance Commun -item.averagePowerCatalyst.name=Cristal de Puissance Moyen -item.greaterPowerCatalyst.name=Cristal de Puissance Supérieur -item.mundaneLengtheningCatalyst.name=Catalyseur d'Extension Commun -item.averageLengtheningCatalyst.name=Catalyseur d’Extension Moyen -item.greaterLengtheningCatalyst.name=Catalyseur d’Extension Supérieur -item.incendium.name=Incendium -item.magicales.name=Magicales -item.sanctus.name=Sanctus -item.aether.name=Aether -item.simpleCatalyst.name=Catalyseur Simple -item.crepitous.name=Crepitous -item.crystallos.name=Crystallos -item.terrae.name=Terrae -item.aquasalus.name=Aquasalus -item.tennebrae.name=Tenebrae -item.demonBloodShard.name=Eclat Sanguinaire Diabolo -item.sigilOfWind.name=Emblème Mistral -item.telepositionFocus.name=Focus de Téléposition -item.enhancedTelepositionFocus.name= Focus de Téléposition Amélioré -item.reinforcedTelepositionFocus.name=Focus de Téléposition Renforcé -item.demonicTelepositionFocus.name= Focus de Téléposition Diabolo -item.imbuedSlate.name=Tablette Imprégnée -item.demonicSlate.name=Tablette Diabolo -item.sigilOfTheBridge.name=Emblème du Pont Fantôme -item.armourInhibitor.name=Neutralisarmure -item.cheatyItem.name=Orbe de Test -item.weakFillingAgent.name=Agent de Remplissage Affaibli -item.standardFillingAgent.name=Agent de Remplissage Standard -item.enhancedFillingAgent.name=Agent de Remplissage Amélioré -item.weakBindingAgent.name=Agent de Sacrifice Affaibli -item.ritualDiviner.name=Sourcier à Rituel -item.sigilOfMagnetism.name=Emblème Magnétique -item.itemDiabloKey.name=Clé Diabolo -item.energyBazooka.name=Bazooka à Energie -item.bloodLightSigil.name=Emblème de la Lampe de Sang -item.itemComplexSpellCrystal.name=Cristal de Maléfice Complexe -item.itemSigilOfSupression.name=Emblème de Délétion -item.itemSigilOfEnderSeverance.name=Emblème of Ender Severance -item.bucketLive.name=Seau d'Extrait Vital -item.bloodMagicBaseItem.quartzRod.name=Bâton de Quartz -item.bloodMagicBaseItem.EmptyCore.name=CÅ“ur Creux -item.bloodMagicBaseItem.MagicalesCable.name=Câble de Magicales -item.bloodMagicBaseItem.WoodBrace.name=Attelle de Bois -item.bloodMagicBaseItem.StoneBrace.name=Attelle de Pierre -item.bloodMagicBaseItem.ProjectileCore.name=CÅ“ur de Projectile -item.bloodMagicBaseItem.SelfCore.name=CÅ“ur des Egotistes -item.bloodMagicBaseItem.MeleeCore.name=CÅ“ur de Mêlée -item.bloodMagicBaseItem.ToolCore.name=CÅ“ur d'Outillage -item.bloodMagicBaseItem.ParadigmBackPlate.name=Tablette du Paradigme -item.bloodMagicBaseItem.OutputCable.name=Sortie Maléfique -item.bloodMagicBaseItem.InputCable.name=Entrée Maléfique -item.bloodMagicBaseItem.FlameCore.name=CÅ“ur Incandescent -item.bloodMagicBaseItem.IcyCore.name=CÅ“ur Figé -item.bloodMagicBaseItem.GustCore.name=CÅ“ur des Bourrasques -item.bloodMagicBaseItem.EarthenCore.name=CÅ“ur Téllurique -item.bloodMagicBaseItem.CrackedRunicPlate.name=Tablette Runique Craquelée -item.bloodMagicBaseItem.RunicPlate.name=Tablette Runique -item.bloodMagicBaseItem.ScribedRunicPlate.name=Tablette Runique Imprégnée -item.bloodMagicBaseItem.DefaultCore.name=CÅ“ur Neutre -item.bloodMagicBaseItem.OffensiveCore.name=CÅ“ur Offensif -item.bloodMagicBaseItem.DefensiveCore.name=CÅ“ur Défensif -item.bloodMagicBaseItem.EnvironmentalCore.name=CÅ“ur Environnemental -item.bloodMagicBaseItem.PowerCore.name=CÅ“ur de Force -item.bloodMagicBaseItem.CostCore.name=CÅ“ur de Réduction -item.bloodMagicBaseItem.PotencyCore.name=CÅ“ur de Puissance -item.bloodMagicBaseItem.ObsidianBrace.name=Attelle d’Obsidienne -item.bloodMagicBaseItem.EtherealSlate.name=Tablette Ethérale -item.bloodMagicBaseItem.LifeShard.name=Eclat de Vie -item.bloodMagicBaseItem.SoulShard.name=Eclat d'Esprit -item.bloodMagicBaseItem.LifeBrace.name=Attelle de Vie -item.bloodMagicBaseItem.SoulRunicPlate.name=Plaque Runique Spirituelle -item.bloodMagicAlchemyItem.Offensa.name=Offensa -item.bloodMagicAlchemyItem.Praesidium.name=Praesidium -item.bloodMagicAlchemyItem.OrbisTerrae.name=Orbis Terrae -item.bloodMagicAlchemyItem.StrengthenedCatalyst.name=Catalyseur Renforcé -item.bloodMagicAlchemyItem.ConcentratedCatalyst.name=Catalyseur Concentré -item.bloodMagicAlchemyItem.FracturedBone.name=Os Fracturé -item.bloodMagicAlchemyItem.Virtus.name=Virtus -item.bloodMagicAlchemyItem.Reductus.name=Reductus -item.bloodMagicAlchemyItem.Potentia.name=Potentia -item.sanguineHelmet.name=Casque Sanglant -item.itemSeerSigil.name=Emblème de la Vision -item.itemFluidSigil.name=Emblème Fluide -item.multiTool.name=Dynamasse -item.itemCombinationalCatalyst.name=Catalyseur Combinatoire -item.sanguineRobe.name=Robe Sanglante -item.sanguinePants.name=Jambières Sanglantes -item.sanguineBoots.name=Bottes Sanglantes -item.itemAttunedCrystal.name=Routeur Alchimique -item.itemTankSegmenter.name=Segment Alchimique -item.destinationClearer.name=Détergent Alchimique -item.demonPlacer.name=Cristal Diabolo -item.creativeDagger.name=Couteau Sacrificiel Créatif -item.itemBloodPack.name=Pack de la Lettre de Sang -item.itemHarvestSigil.name=Emblême Déméter -item.itemCompressionSigil.name=Emblême Compresseur -item.transcendentBloodOrb.name=Orbe Sanguinaire Transcendante -#Creative Tab -itemGroup.tabBloodMagic=Blood Magic - -#Extra Strings -bm.string.consume=Exaction -bm.string.drain=Ponction Veineuse -bm.string.tier=Tiers -bm.string.crafting.orb.shaped=Fabrication Orbée Formée -bm.string.crafting.orb.shapeless=Fabrication Orbée Déformée - -#Entities -entity.AWWayofTime.EarthElemental.name=Elémenterrestre -entity.AWWayofTime.FireElemental.name=Elémentaire de Feu -entity.AWWayofTime.HolyElemental.name=Elémentaire Sacré -entity.AWWayofTime.ShadeElemental.name=Elémentaire Nocturne -entity.AWWayofTime.WaterElemental.name=Elémentaire d'Eau -entity.AWWayofTime.AirElemental.name=Elémentaire d'Air -entity.AWWayofTime.Shade.name=Ombre -entity.AWWayofTime.BoulderFist.name=Poing de Pierre -entity.AWWayofTime.IceDemon.name=Diable Glacial -entity.AWWayofTime.SmallEarthGolem.name=Petit Golem de Terre -entity.AWWayofTime.WingedFireDemon.name=Démon de Feu Ailé -entity.AWWayofTime.BileDemon.name=Diabile -entity.AWWayofTime.LowerGuardian.name=Gardien Inférieur -entity.AWWayofTime.FallenAngel.name=Ange Déchu -entity.AWWayofTime.MinorDemonGruntGuardian.name=Gardien Démon -entity.AWWayofTime.MinorDemonGruntGuardianWind.name=Gardien Démon Aérien -entity.AWWayofTime.MinorDemonGruntGuardianFire.name=Gardien Démon de Feu -entity.AWWayofTime.MinorDemonGruntGuardianIce.name=Gardien Démon de Glace -entity.AWWayofTime.MinorDemonGruntGuardianEarth.name=Gardien Démon de Terre -entity.AWWayofTime.MinorDemonGruntWind.name=Soldat Démont Aérien -entity.AWWayofTime.MinorDemonGruntFire.name=Soldat Démon de Feu -entity.AWWayofTime.MinorDemonGruntIce.name=Soldat Démon de Glace -entity.AWWayofTime.MinorDemonGruntEarth.name=Soldat Démon de Terre -entity.AWWayofTime.MinorDemonGrunt.name=Soldat Démon diff --git a/src/main/resources/assets/alchemicalwizardry/lang/it_IT.lang b/src/main/resources/assets/alchemicalwizardry/lang/it_IT.lang deleted file mode 100644 index 265b4275..00000000 --- a/src/main/resources/assets/alchemicalwizardry/lang/it_IT.lang +++ /dev/null @@ -1,181 +0,0 @@ -#Block Localization -tile.bloodAltar.name=Altare del Sangue -tile.bloodRune.blank.name=Runa del Sangue -tile.bloodRune.fill.name=Runa di Capacità Aumentata -tile.bloodRune.empty.name=Runa di Dislocazione -tile.bloodRune.test.name=Runa del Globo -tile.speedRune.name=Runa di Velocità -tile.efficiencyRune.name=Runa di Efficienza -tile.runeOfSacrifice.name=Runa del Sacrificio -tile.runeOfSelfSacrifice.name=Runa di Auto-Sacrificio -tile.ritualStone.name=Pietra del Rituale -tile.blockMasterStone.name=Pietra Maestra del Rituale -tile.bloodSocket.name=Cavità Piena -tile.imperfectRitualStone.name=Pietra del Rituale Imperfetta -tile.armourForge.name=Forgia delle Armature dell'Anima -tile.emptySocket.name=Cavità Vuota -tile.bloodStoneBrick.name=Mattone di Pietra del Sangue -tile.largeBloodStoneBrick.name=Gran Mattone di Pietra del Sangue -tile.blockWritingTable.name=Set da Alchimista -tile.blockHomHeart.name=Tavolo della Magia -tile.bloodPedestal.name=Piedistallo Arcano -tile.bloodPlinth.name=Basamento Arcano -tile.bloodTeleposer.name=Teleposer -tile.blockConduit.name=Condotto di Magia -tile.blockSpellParadigm.projectile.name=Generatore di Particelle -tile.blockSpellParadigm.self.name=Auto-Miglioratore -tile.blockSpellParadigm.melee.name=Aggregatore di Mischia -tile.blockSpellEnhancement.power1.name=Potenziatore Instabile di Magia -tile.blockSpellEnhancement.power2.name=Potenziatore Standard di Magia -tile.blockSpellEnhancement.power3.name=Potenziatore Rinforzato di Magia -tile.blockSpellEnhancement.power4.name=Potenziatore Invaso di Magia -tile.blockSpellEnhancement.power5.name=Potenziatore Demoniaco di Magia -tile.blockSpellEnhancement.cost1.name=Smorzatore Instabile di Magia -tile.blockSpellEnhancement.cost2.name=Smorzatore Standard di Magia -tile.blockSpellEnhancement.cost3.name=Smorzatore Rinforzato di Magia -tile.blockSpellEnhancement.cost4.name=Smorzatore Invaso di Magia -tile.blockSpellEnhancement.cost5.name=Smorzatore Demoniaco di Magia -tile.blockSpellEnhancement.potency1.name=Miglioratore Instabile di Magia -tile.blockSpellEnhancement.potency2.name=Miglioratore Standard di Magia -tile.blockSpellEnhancement.potency3.name=Miglioratore Rinforzato di Magia -tile.blockSpellEnhancement.potency4.name=Miglioratore Invaso di Magia -tile.blockSpellEnhancement.potency5.name=Miglioratore Demoniaco di Magia -tile.blockSpellModifier.default.name=Modificatore di Magia -tile.blockSpellModifier.offensive.name=Modificatore di Magia Offensiva -tile.blockSpellModifier.defensive.name=Modificatore di Magia Difensiva -tile.blockSpellModifier.environmental.name=Modificatore di Magia Ambientale -tile.blockSpellEffect.fire.name=Crogiolo del Fuoco -tile.blockSpellEffect.ice.name=Creatore di Ghiaccio -tile.blockSpellEffect.wind.name=Generatore del Vento -tile.blockSpellEffect.earth.name=Formatore della Terra - -#Item Localization -item.weakBloodOrb.name=Globo di Sangue Debole -item.apprenticeBloodOrb.name=Globo di Sangue dell'Apprendista -item.magicianBloodOrb.name=Globo di Sangue del Mago -item.masterBloodOrb.name=Globo di Sangue del Maestro -item.archmageBloodOrb.name=Globo di Sangue dell'Arcimago -item.energyBlast.name=Blaster Energetico -item.energySword.name=Lama Legata -item.lavaCrystal.name=Cristallo Lavico -item.waterSigil.name=Sigillo dell'Acqua -item.lavaSigil.name=Sigillo di Lava -item.voidSigil.name=Sigillo del Vuoto -item.blankSlate.name=Ardesia Bianca -item.reinforcedSlate.name=Ardesia Rinforzata -item.sacrificialDagger.name=Pugnale Sacrificale -item.daggerOfSacrifice.name=Daga Sacrificale -item.airSigil.name=Sigillo dell'Aria -item.sigilOfTheFastMiner.name=Sigillo del Rapido Minatore -item.sigilOfElementalAffinity.name=Sigillo di Affinità Elementale -item.sigilOfHaste.name=Sigillo di Rapidità -item.sigilOfHolding.name=Sigillo della Tenacia Egoista -item.divinationSigil.name=Sigillo di Divinatione -item.waterScribeTool.name=Utensile d'Iscrizione Elementale: Acqua -item.fireScribeTool.name=Utensile d'Iscrizione Elementale: Fuoco -item.earthScribeTool.name=Utensile d'Iscrizione Elementale: Terra -item.airScribeTool.name=Utensile d'Iscrizione Elementale: Aria -item.duskScribeTool.name=Utensile d'Iscrizione Elementale: Crepuscolo -item.activationCrystalWeak.name=Cristallo d'Attivazione Debole -item.activationCrystalAwakened.name=Cristallo d'Attivazione Risvegliato -item.boundPickaxe.name=Piccone Vincolato -item.boundAxe.name=Ascia Vincolata -item.boundShovel.name=Vanga Vincolata -item.boundHelmet.name=Elmo Vincolato -item.boundPlate.name=Piastra Vincolata -item.boundLeggings.name=Gambali Vincolati -item.boundBoots.name=Stivali Vincolati -item.weakBloodShard.name=Scheggia di Sangue Debole -item.growthSigil.name=Sigillo del Verde Bosco -item.blankSpell.name=Cristallo non Vincolato -item.alchemyFlask.name=Boccetta per Pozione -item.standardBindingAgent.name=Agente Vincolante Standard -item.mundanePowerCatalyst.name=Catalizzatore Comune di Potere -item.averagePowerCatalyst.name=Catalizzatore Medio di Potere -item.greaterPowerCatalyst.name=Catalizzatore Maggiore di Potere -item.mundaneLengtheningCatalyst.name=Catalizzatore Procastinante Comune -item.averageLengtheningCatalyst.name=Catalizzatore Procastinante Medio -item.greaterLengtheningCatalyst.name=Catalizzatore Procastinante Maggiore -item.incendium.name=Incendium -item.magicales.name=Magicales -item.sanctus.name=Sanctus -item.aether.name=Etere -item.simpleCatalyst.name=Catalizzatore Semplice -item.crepitous.name=Crepitous -item.crystallos.name=Crystallos -item.terrae.name=Terrae -item.aquasalus.name=Aquasalus -item.tennebrae.name=Tenebrae -item.demonBloodShard.name=Scheggia di Sangue di Demone -item.sigilOfWind.name=Sigillo del Vortice -item.telepositionFocus.name=Focus di Teleposizione -item.enhancedTelepositionFocus.name=Focus Migliorato di Teleposizione -item.reinforcedTelepositionFocus.name=Focus Rinforzato di Teleposizione -item.demonicTelepositionFocus.name=Focus Demoniaco di Teleposizione -item.imbuedSlate.name=Piastra Invasa -item.demonicSlate.name=Piastra Demoniaca -item.sigilOfTheBridge.name=Sigillo del POnte Spettrale -item.armourInhibitor.name=Inibitore di Armatura -item.cheatyItem.name=Globo di Prova -item.weakFillingAgent.name=Agente Riempiente Debole -item.standardFillingAgent.name=Agente Riempiente Standard -item.enhancedFillingAgent.name=Agente Riempiente Potenziato -item.weakBindingAgent.name=Agente Vincolante Debole -item.ritualDiviner.name=Divinatore del Rituale -item.sigilOfMagnetism.name=Sigillo del Magnetismo -item.itemDiabloKey.name=Chiave del Vincolo -item.energyBazooka.name=Cannone Energetico -item.bloodLightSigil.name=Sigillo della Torcia di Sangue -item.itemComplexSpellCrystal.name=Cristallo Magico Complesso -item.itemSigilOfSupression.name=Sigillo di Soppressione -item.itemSigilOfEnderSeverance.name=Sigillo di Disgiunzione Ender -item.bucketLive.name=Secchio di Vita -item.bloodMagicBaseItem.QuartzRod.name=Verga di Quarzo -item.bloodMagicBaseItem.EmptyCore.name=Nucleo Vuoto -item.bloodMagicBaseItem.MagicalesCable.name=Connessione Magicales -item.bloodMagicBaseItem.WoodBrace.name=Pilastro di Legno -item.bloodMagicBaseItem.StoneBrace.name=Pilastro di Pietra -item.bloodMagicBaseItem.ProjectileCore.name=Nucleo Proiettile -item.bloodMagicBaseItem.SelfCore.name=Auto-Nucleo -item.bloodMagicBaseItem.MeleeCore.name=Nucleo di Mischia -item.bloodMagicBaseItem.ParadigmBackPlate.name=Piastra Modello -item.bloodMagicBaseItem.OutputCable.name=Connessione in Uscita di Magia -item.bloodMagicBaseItem.InputCable.name=Connessione in Entrata di Magia -item.bloodMagicBaseItem.FlameCore.name=Nucleo Infuocato -item.bloodMagicBaseItem.IcyCore.name=Nucleo Ghiacciato -item.bloodMagicBaseItem.GustCore.name=Nucleo Ventoso -item.bloodMagicBaseItem.EarthenCore.name=Nucleo Terroso -item.bloodMagicBaseItem.CrackedRunicPlate.name=Piastra Runica Incrinata -item.bloodMagicBaseItem.RunicPlate.name=Piastra Runica -item.bloodMagicBaseItem.ScribedRunicPlate.name=Piastra Runica Invasa -item.bloodMagicBaseItem.DefaultCore.name=Nucleo Disarmonico -item.bloodMagicBaseItem.OffensiveCore.name=Nucleo Offensivo -item.bloodMagicBaseItem.DefensiveCore.name=Nucleo Difensivo -item.bloodMagicBaseItem.EnvironmentalCore.name=Nucleo Ambientale -item.bloodMagicBaseItem.PowerCore.name=Nucleo di Forza -item.bloodMagicBaseItem.CostCore.name=Nucleo di Riduzione -item.bloodMagicBaseItem.PotencyCore.name=Nucleo di Potenza -item.bloodMagicBaseItem.ObsidianBrace.name=Pilastro di Ossidiana -item.bloodMagicAlchemyItem.Offensa.name=Offensa -item.bloodMagicAlchemyItem.Praesidium.name=Praesidium -item.bloodMagicAlchemyItem.OrbisTerrae.name=Orbis Terrae -item.bloodMagicAlchemyItem.StrengthenedCatalyst.name=Catalizzatore Rafforzato -item.bloodMagicAlchemyItem.ConcentratedCatalyst.name=Catalizzatore Concentrato -item.bloodMagicAlchemyItem.FracturedBone.name=Osso Fratturato -item.bloodMagicAlchemyItem.Virtus.name=Virtus -item.bloodMagicAlchemyItem.Reductus.name=Reductus -item.bloodMagicAlchemyItem.Potentia.name=Potentia -item.sanguineHelmet.name=Elmo Sanguigno -item.itemSeerSigil.name=Sigillo della Veduta -item.itemFluidSigil.name= - - -#Creative Tab -itemGroup.tabBloodMagic=Magia del Sangue - -#Extra Strings -bm.string.consume=Utilizzo -bm.string.drain=Drenaggio -bm.string.tier=Livello -bm.string.crafting.orb.shaped=Creazione di un Glodo Formato -bm.string.crafting.orb.shapeless=Creazione di un Globo Informe \ No newline at end of file diff --git a/src/main/resources/assets/alchemicalwizardry/lang/ko_KR.lang b/src/main/resources/assets/alchemicalwizardry/lang/ko_KR.lang deleted file mode 100644 index 7daaacae..00000000 --- a/src/main/resources/assets/alchemicalwizardry/lang/ko_KR.lang +++ /dev/null @@ -1,194 +0,0 @@ -#Block Localization -tile.bloodAltar.name=í”¼ì˜ ì œë‹¨ -tile.bloodRune.blank.name=í”¼ì˜ ë£¬ -tile.bloodRune.fill.name=저장량ì¦ê°€ì˜ 룬 -tile.bloodRune.empty.name=í¡ìˆ˜ì˜ 룬 -tile.bloodRune.orb.name=ë³´ì£¼ì˜ ë£¬ -tile.bloodRune.betterCapacity.name=Rune of Superior Capacity -tile.speedRune.name=ì†ë„ì˜ ë£¬ -tile.efficiencyRune.name=íš¨ìœ¨ì˜ ë£¬ -tile.runeOfSacrifice.name=í¬ìƒì˜ 룬 -tile.runeOfSelfSacrifice.name=ìžê¸°í¬ìƒì˜ 룬 -tile.ritualStone.name=ì˜ì‹ì˜ ëŒ -tile.blockMasterStone.name=ì˜ì‹ì˜ëŒ 제어 -tile.bloodSocket.name=Filled Socket -tile.imperfectRitualStone.name=Imperfect Ritual Stone -tile.armourForge.name=Soul Armour Forge -tile.emptySocket.name=빈 소켓 -tile.bloodStoneBrick.name=Bloodstone Brick -tile.largeBloodStoneBrick.name=í° ì„ í˜ˆì„ìž¬ë²½ëŒ -tile.blockWritingTable.name=Alchemic Chemistry Set -tile.blockHomHeart.name=Spell Table -tile.bloodPedestal.name=Arcane Pedestal -tile.bloodPlinth.name=Arcane Plinth -tile.bloodTeleposer.name=Teleposer -tile.blockConduit.name=Spell Conduit -tile.blockSpellParadigm.projectile.name=Particle Generator -tile.blockSpellParadigm.self.name=Self Augmentator -tile.blockSpellParadigm.melee.name=Melee Aggregator -tile.blockSpellParadigm.tool.name=Tool Forger -tile.blockSpellEnhancement.power1.name=Unstable Spell Empowerer -tile.blockSpellEnhancement.power2.name=Standard Spell Empowerer -tile.blockSpellEnhancement.power3.name=Reinforced Spell Empowerer -tile.blockSpellEnhancement.power4.name=Imbued Spell Empowerer -tile.blockSpellEnhancement.power5.name=Demonic Spell Empowerer -tile.blockSpellEnhancement.cost1.name=Unstable Spell Dampener -tile.blockSpellEnhancement.cost2.name=Standard Spell Dampener -tile.blockSpellEnhancement.cost3.name=Reinforced Spell Dampener -tile.blockSpellEnhancement.cost4.name=Imbued Spell Dampener -tile.blockSpellEnhancement.cost5.name=Demonic Spell Dampener -tile.blockSpellEnhancement.potency1.name=Unstable Spell Augmentor -tile.blockSpellEnhancement.potency2.name=Standard Spell Augmentor -tile.blockSpellEnhancement.potency3.name=Reinforced Spell Augmentor -tile.blockSpellEnhancement.potency4.name=Imbued Spell Augmentor -tile.blockSpellEnhancement.potency5.name=Demonic Spell Augmentor -tile.blockSpellModifier.default.name=Default Spell Modifier -tile.blockSpellModifier.offensive.name=Offensive Spell Modifier -tile.blockSpellModifier.defensive.name=Defensive Spell Modifier -tile.blockSpellModifier.environmental.name=Environmental Spell Modifier -tile.blockSpellEffect.fire.name=Crucible of Fire -tile.blockSpellEffect.ice.name=Ice Maker -tile.blockSpellEffect.wind.name=Wind Generator -tile.blockSpellEffect.earth.name=Earth Former -tile.alchemicCalcinator.name=Alchemic Calcinator -tile.crystalBelljar.name=Crystal Belljar -tile.blockReagentConduit.name=Alchemy Relay - -#Item Localization -item.weakBloodOrb.name=약한 ì„ í˜ˆì˜ ë³´ì£¼ -item.apprenticeBloodOrb.name=견습 ì„ í˜ˆì˜ ë³´ì£¼ -item.magicianBloodOrb.name=ë§ˆë²•ì‚¬ì˜ ì„ í˜ˆë³´ì£¼ -item.masterBloodOrb.name=마스터 ì„ í˜ˆì˜ ë³´ì£¼ -item.archmageBloodOrb.name=ì•„í¬ë©”ì´ì§€ì˜ 선혈보주 -item.energyBlast.name=Energy Blaster -item.energySword.name=Bound Blade -item.lavaCrystal.name=용암수정 -item.waterSigil.name=ë¬¼ì˜ ë¶€ì  -item.lavaSigil.name=ìš©ì•”ì˜ ë¶€ì  -item.voidSigil.name=ê³µí—ˆì˜ ë¶€ì  -item.blankSlate.name=빈 íŒ -item.reinforcedSlate.name=ë³´ê°•ëœ íŒ -item.sacrificialDagger.name=í¬ìƒì˜ ê²€ -item.daggerOfSacrifice.name=í¬ìƒì˜ 단검 -item.airSigil.name=ë°”ëžŒì˜ ë¶€ì  -item.sigilOfTheFastMiner.name=쾌ì†ì˜ê´‘ë¶€ ë¶€ì  -item.sigilOfElementalAffinity.name=ì›ì†Œì¹œí™”ì˜ ë¶€ì  -item.sigilOfHaste.name=Sigil of Haste -item.sigilOfHolding.name=ë³´ê´€ì˜ ë¶€ì  -item.divinationSigil.name=ì ìˆ ì˜ 시질 -item.waterScribeTool.name=Elemental Inscription Tool: Water -item.fireScribeTool.name=Elemental Inscription Tool: Fire -item.earthScribeTool.name=Elemental Inscription Tool: Earth -item.airScribeTool.name=Elemental Inscription Tool: Air -item.duskScribeTool.name=Elemental Inscription Tool: Dusk -item.activationCrystalWeak.name=Weak Activation Crystal -item.activationCrystalAwakened.name=Awakened Activation Crystal -item.boundPickaxe.name=Bound Pickaxe -item.boundAxe.name=Bound Axe -item.boundShovel.name=Bound Shovel -item.boundHelmet.name=Bound Helmet -item.boundPlate.name=Bound Plate -item.boundLeggings.name=Bound Leggings -item.boundBoots.name=Bound Boots -item.weakBloodShard.name=Weak Blood Shard -item.growthSigil.name=ìˆ˜í’€ì˜ ë¶€ì  -item.blankSpell.name=Unbound Crystal -item.alchemyFlask.name=Potion Flask -item.standardBindingAgent.name=Standard Binding Agent -item.mundanePowerCatalyst.name=Mundane Power Catalyst -item.averagePowerCatalyst.name=Average Power Catalyst -item.greaterPowerCatalyst.name=Greater Power Catalyst -item.mundaneLengtheningCatalyst.name=Mundane Lengthening Catalyst -item.averageLengtheningCatalyst.name=Average Lengthening Catalyst -item.greaterLengtheningCatalyst.name=Greater Lengthening Catalyst -item.incendium.name=Incendium -item.magicales.name=Magicales -item.sanctus.name=Sanctus -item.aether.name=Aether -item.simpleCatalyst.name=Simple Catalyst -item.crepitous.name=Crepitous -item.crystallos.name=Crystallos -item.terrae.name=Terrae -item.aquasalus.name=Aquasalus -item.tennebrae.name=Tenebrae -item.demonBloodShard.name=Demon Blood Shard -item.sigilOfWind.name=Sigil of the Whirlwind -item.telepositionFocus.name=Teleposition Focus -item.enhancedTelepositionFocus.name=Enhanced Teleposition Focus -item.reinforcedTelepositionFocus.name=Reinforced Teleposition Focus -item.demonicTelepositionFocus.name=Demonic Teleposition Focus -item.imbuedSlate.name=Imbued Slate -item.demonicSlate.name=Demonic Slate -item.sigilOfTheBridge.name=ì˜ê°ì˜ ë¶€ì  -item.armourInhibitor.name=Armour Inhibitor -item.cheatyItem.name=Orb of Testing -item.weakFillingAgent.name=Weak Filling Agent -item.standardFillingAgent.name=Standard Filling Agent -item.enhancedFillingAgent.name=Enhanced Filling Agent -item.weakBindingAgent.name=Weak Binding Agent -item.ritualDiviner.name=Ritual Diviner -item.sigilOfMagnetism.name=ìžê¸°ë ¥ ë¶€ì  -item.itemDiabloKey.name=Key of Binding -item.energyBazooka.name=Energy Bazooka -item.bloodLightSigil.name=ì„ í˜ˆì˜ ëž¨í”„ ë¶€ì  -item.itemComplexSpellCrystal.name=Complex Spell Crystal -item.itemSigilOfSupression.name=Sigil of Supression -item.itemSigilOfEnderSeverance.name=Sigil of Ender Severance -item.bucketLife.name=Bucket of Life -item.bloodMagicBaseItem.QuartzRod.name=Quartz Rod -item.bloodMagicBaseItem.EmptyCore.name=Empty Core -item.bloodMagicBaseItem.MagicalesCable.name=Magicales Cable -item.bloodMagicBaseItem.WoodBrace.name=Wooden Brace -item.bloodMagicBaseItem.StoneBrace.name=Stone Brace -item.bloodMagicBaseItem.ProjectileCore.name=Projectile Core -item.bloodMagicBaseItem.SelfCore.name=Self Core -item.bloodMagicBaseItem.MeleeCore.name=Melee Core -item.bloodMagicBaseItem.ToolCore.name=Tool Core -item.bloodMagicBaseItem.ParadigmBackPlate.name=Paradigm Plate -item.bloodMagicBaseItem.OutputCable.name=Output Spell Cable -item.bloodMagicBaseItem.InputCable.name=Input Spell Cable -item.bloodMagicBaseItem.FlameCore.name=Fire Core -item.bloodMagicBaseItem.IcyCore.name=Icy Core -item.bloodMagicBaseItem.GustCore.name=Gusty Core -item.bloodMagicBaseItem.EarthenCore.name=Earthen Core -item.bloodMagicBaseItem.CrackedRunicPlate.name=Cracked Runic Plate -item.bloodMagicBaseItem.RunicPlate.name=Runic Plate -item.bloodMagicBaseItem.ScribedRunicPlate.name=Imbued Runic Plate -item.bloodMagicBaseItem.DefaultCore.name=Unattuned Core -item.bloodMagicBaseItem.OffensiveCore.name=Offensive Core -item.bloodMagicBaseItem.DefensiveCore.name=Defensive Core -item.bloodMagicBaseItem.EnvironmentalCore.name=Environmental Core -item.bloodMagicBaseItem.PowerCore.name=Power Core -item.bloodMagicBaseItem.CostCore.name=Reduction Core -item.bloodMagicBaseItem.PotencyCore.name=Potency Core -item.bloodMagicBaseItem.ObsidianBrace.name=Obsidian Brace -item.bloodMagicAlchemyItem.Offensa.name=Offensa -item.bloodMagicAlchemyItem.Praesidium.name=Praesidium -item.bloodMagicAlchemyItem.OrbisTerrae.name=Orbis Terrae -item.bloodMagicAlchemyItem.StrengthenedCatalyst.name=Strengthened Catalyst -item.bloodMagicAlchemyItem.ConcentratedCatalyst.name=Concentrated Catalyst -item.bloodMagicAlchemyItem.FracturedBone.name=Fractured Bone -item.bloodMagicAlchemyItem.Virtus.name=Virtus -item.bloodMagicAlchemyItem.Reductus.name=Reductus -item.bloodMagicAlchemyItem.Potentia.name=Potentia -item.sanguineHelmet.name=Sanguine Helmet -item.itemSeerSigil.name=Sigil of Sight -#item.itemFluidSigil.name= -item.multiTool.name=Dynamic Mace -item.itemCombinationalCatalyst.name=Combinational Catalyst -item.sanguineRobe.name=Sanguine Robes -item.sanguinePants.name=Sanguine Leggings -item.sanguineBoots.name=Sanguine Boots -item.itemAttunedCrystal.name=Alchemic Router -item.itemTankSegmenter.name=Alchemic Segmenter -item.destinationClearer.name=Alchemic Cleanser - -#Creative Tab -itemGroup.tabBloodMagic=선혈ì˜ë§ˆìˆ [Blood Magic] - -#Extra Strings -bm.string.consume=사용량 -bm.string.drain=í¡ìˆ˜ëŸ‰ -bm.string.tier=í‹°ì–´ -bm.string.crafting.orb.shaped=ë¸”ëŸ¬ë“œë§¤ì§ ì˜¤ë¸Œ 조합법 -bm.string.crafting.orb.shapeless=ë¸”ëŸ¬ë“œë§¤ì§ ì˜¤ë¸Œ 조합법 diff --git a/src/main/resources/assets/alchemicalwizardry/lang/ru_RU.lang b/src/main/resources/assets/alchemicalwizardry/lang/ru_RU.lang deleted file mode 100644 index 8d749816..00000000 --- a/src/main/resources/assets/alchemicalwizardry/lang/ru_RU.lang +++ /dev/null @@ -1,461 +0,0 @@ -#Block Localization -tile.bloodAltar.name=Кровавый алтарь -tile.bloodRune.blank.name=ÐšÑ€Ð¾Ð²Ð°Ð²Ð°Ñ Ñ€ÑƒÐ½Ð° -tile.bloodRune.fill.name=Руна дополнительной ёмкоÑти -tile.bloodRune.empty.name=Руна диÑлокации -tile.bloodRune.orb.name=Руна шара -tile.bloodRune.betterCapacity.name=Руна улучшенной ёмкоÑти -tile.bloodRune.acceleration.name=Руна уÑÐºÐ¾Ñ€ÐµÐ½Ð¸Ñ -tile.speedRune.name=Руна ÑкороÑти -tile.efficiencyRune.name=Руна ÑффективноÑти -tile.runeOfSacrifice.name=Руна Ð¶ÐµÑ€Ñ‚Ð²Ð¾Ð¿Ñ€Ð¸Ð½Ð¾ÑˆÐµÐ½Ð¸Ñ -tile.runeOfSelfSacrifice.name=Руна ÑÐ°Ð¼Ð¾Ð¿Ð¾Ð¶ÐµÑ€Ñ‚Ð²Ð¾Ð²Ð°Ð½Ð¸Ñ -tile.ritualStone.name=Ритуальный камень -tile.blockMasterStone.name=Ритуальный камень маÑтера -tile.bloodSocket.name=Заполненный Ñокет -tile.imperfectRitualStone.name=ÐеÑовершенный ритуальный камень -tile.armourForge.name=Кузница душевной брони -tile.emptySocket.name=ПуÑтой Ñокет -tile.bloodStoneBrick.name=Кровавый кирпич -tile.largeBloodStoneBrick.name=Большой кровавый кирпич -tile.blockWritingTable.name=ÐлхимичеÑÐºÐ°Ñ Ð¸ химичеÑÐºÐ°Ñ ÑƒÑтановка -tile.blockHomHeart.name=Стол заклинаний -tile.bloodPedestal.name=Тайный пьедеÑтал -tile.bloodPlinth.name=Тайный поÑтамент -tile.bloodTeleposer.name=Телепозер -tile.blockConduit.name=Труба Ð´Ð»Ñ Ð·Ð°ÐºÐ»Ð¸Ð½Ð°Ð½Ð¸Ð¹ -tile.blockSpellParadigm.projectile.name=Генератор чаÑтиц -tile.blockSpellParadigm.self.name=Self Augmentator -tile.blockSpellParadigm.melee.name=Ðгрегатор ближнего дейÑÑ‚Ð²Ð¸Ñ -tile.blockSpellParadigm.tool.name=Кузница инÑтрументов -tile.blockSpellEnhancement.power1.name=ÐеÑтабильный уÑилитель заклинаний -tile.blockSpellEnhancement.power2.name=Обычный уÑилитель заклинаний -tile.blockSpellEnhancement.power3.name=УÑиленный уÑилитель заклинаний -tile.blockSpellEnhancement.power4.name=Пропитанный уÑилитель заклинаний -tile.blockSpellEnhancement.power5.name=ДемоничеÑкий уÑилитель заклинаний -tile.blockSpellEnhancement.cost1.name=ÐеÑтабильный удешевитель заклинаний -tile.blockSpellEnhancement.cost2.name=Обычный удешевитель заклинаний -tile.blockSpellEnhancement.cost3.name=УÑиленный удешевитель заклинаний -tile.blockSpellEnhancement.cost4.name=Пропитанный удешевитель заклинаний -tile.blockSpellEnhancement.cost5.name=ДемоничеÑкий удешевитель заклинаний -tile.blockSpellEnhancement.potency1.name=ÐеÑтабильный ÑтимулÑтор заклинаний -tile.blockSpellEnhancement.potency2.name=Обычный ÑтимулÑтор заклинаний -tile.blockSpellEnhancement.potency3.name=УÑиленный ÑтимулÑтор заклинаний -tile.blockSpellEnhancement.potency4.name=Пропитанный ÑтимулÑтор заклинаний -tile.blockSpellEnhancement.potency5.name=ДемоничеÑкий ÑтимулÑтор заклинаний -tile.blockSpellModifier.default.name=Модификатор обычных заклинаний -tile.blockSpellModifier.offensive.name=Модификатор заклинаний Ð½Ð°Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ -tile.blockSpellModifier.defensive.name=Модификатор заклинаний обороны -tile.blockSpellModifier.environmental.name=Модификатор заклинаний на окружающую природу -tile.blockSpellEffect.fire.name=Тигель Ð¾Ð³Ð½Ñ -tile.blockSpellEffect.ice.name=Производитель льда -tile.blockSpellEffect.wind.name=Ветрогенератор -tile.blockSpellEffect.earth.name=Формировщик земли -tile.alchemicCalcinator.name=ÐлхимичеÑкий кальцинатор -tile.crystalBelljar.name=КриÑтальный ÑтеклÑнный колпак -tile.blockReagentConduit.name=ÐлхимичеÑкое реле -tile.lifeEssenceFluidBlock.name=Ð–Ð¸Ð·Ð½ÐµÐ½Ð½Ð°Ñ ÑÑÑÐµÐ½Ñ†Ð¸Ñ -tile.crystalBlock.fullCrystal.name=КриÑтальное Ñкопление -tile.crystalBlock.crystalBrick.name=Кирпич криÑтального ÑÐºÐ¾Ð¿Ð»ÐµÐ½Ð¸Ñ -tile.demonPortal.name=ДемоничеÑкий портал -tile.demonChest.name=Сундук демона -tile.enchantmentGlyph.enchantability.name=Глиф иÑкуÑного Ð·Ð°Ñ‡Ð°Ñ€Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -tile.enchantmentGlyph.enchantmentLevel.name=Глиф магичеÑкой Ñилы -tile.stabilityGlyph.stability1.name=Глиф непреклонный ÑтабильноÑти -tile.schematicSaver.name=Schematic Saver -tile.blockMimic.name=Блок-имитатор -tile.blockSpectralContainer.name=Призрачный контейнер -tile.blockBloodLightSource.name=Кровавый Ñвет -tile.spectralBlock.name=Призрачный блок - -#Item Localization -item.weakBloodOrb.name=Слабый кровавый шар -item.apprenticeBloodOrb.name=Кровавый шар ученика -item.magicianBloodOrb.name=Кровавый шар мага -item.masterBloodOrb.name=Кровавый шар маÑтера -item.archmageBloodOrb.name=Кровавый шар архимага -item.energyBlast.name=ЭнергетичеÑÐºÐ°Ñ Ð¿ÑƒÑˆÐºÐ° -item.energySword.name=СвÑзанное лезвие -item.lavaCrystal.name=Лавовый криÑтал -item.waterSigil.name=Водный Ñигил -item.lavaSigil.name=Лавовый Ñигил -item.voidSigil.name=ПуÑтотный Ñигил -item.blankSlate.name=ЧиÑÑ‚Ð°Ñ Ð¿Ð»Ð¸Ñ‚ÐºÐ° -item.reinforcedSlate.name=Ð£ÐºÑ€ÐµÐ¿Ð»Ñ‘Ð½Ð½Ð°Ñ Ð¿Ð»Ð¸Ñ‚ÐºÐ° -item.sacrificialDagger.name=Жертвенный кинжал -item.daggerOfSacrifice.name=Кинжал Ð¶ÐµÑ€Ñ‚Ð²Ð¾Ð¿Ñ€Ð¸Ð½Ð¾ÑˆÐµÐ½Ð¸Ñ -item.airSigil.name=Воздушный Ñигил -item.sigilOfTheFastMiner.name=Сигил быÑтрого ÐºÐ¾Ð¿Ð°Ñ‚ÐµÐ»Ñ -item.sigilOfElementalAffinity.name=Сигил Ñтихийного родÑтва -item.sigilOfHaste.name=Сигил быÑтроты -item.sigilOfHolding.name=Сигил ÑƒÐ´ÐµÑ€Ð¶Ð°Ð½Ð¸Ñ -item.divinationSigil.name=Сигил предÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ -item.waterScribeTool.name=ИнÑтрумент Ð½Ð°Ñ‡ÐµÑ€Ñ‚Ð°Ð½Ð¸Ñ ÑлементалÑ: Вода -item.fireScribeTool.name=ИнÑтрумент Ð½Ð°Ñ‡ÐµÑ€Ñ‚Ð°Ð½Ð¸Ñ ÑлементалÑ: Огонь -item.earthScribeTool.name=ИнÑтрумент Ð½Ð°Ñ‡ÐµÑ€Ñ‚Ð°Ð½Ð¸Ñ ÑлементалÑ: Ð—ÐµÐ¼Ð»Ñ -item.airScribeTool.name=ИнÑтрумент Ð½Ð°Ñ‡ÐµÑ€Ñ‚Ð°Ð½Ð¸Ñ ÑлементалÑ: Воздух -item.duskScribeTool.name=ИнÑтрумент Ð½Ð°Ñ‡ÐµÑ€Ñ‚Ð°Ð½Ð¸Ñ ÑлементалÑ: Сумерки -item.activationCrystalWeak.name=Слабый криÑтал активации -item.activationCrystalAwakened.name=Пробуждённый криÑтал активации -item.activationCrystalCreative.name=ТворчеÑкий криÑтал активации -item.boundPickaxe.name=СвÑÐ·Ð°Ð½Ð½Ð°Ñ ÐºÐ¸Ñ€ÐºÐ° -item.boundAxe.name=СвÑзанный топор -item.boundShovel.name=СвÑÐ·Ð°Ð½Ð½Ð°Ñ Ð»Ð¾Ð¿Ð°Ñ‚Ð° -item.boundHelmet.name=СвÑзанный шлем -item.boundPlate.name=СвÑÐ·Ð°Ð½Ð½Ð°Ñ ÐºÐ¸Ñ€Ð°Ñа -item.boundLeggings.name=СвÑзанные поножи -item.boundBoots.name=СвÑзанные ботинки -item.weakBloodShard.name=Слабый кровавый оÑколок -item.growthSigil.name=Сигил зелёной рощи -item.blankSpell.name=КриÑтал отвÑÐ·Ñ‹Ð²Ð°Ð½Ð¸Ñ -item.alchemyFlask.name=ФлÑжка Ð´Ð»Ñ Ð·ÐµÐ»Ð¸Ð¹ -item.standardBindingAgent.name=Обычный ÑвÑзывающий реагент -item.mundanePowerCatalyst.name=Земной ÑнергетичеÑкий криÑтал -item.averagePowerCatalyst.name=Обычный ÑнергетичеÑкий криÑтал -item.greaterPowerCatalyst.name=Большой ÑнергетичеÑкий криÑтал -item.mundaneLengtheningCatalyst.name=Земной удлинÑющий криÑтал -item.averageLengtheningCatalyst.name=Обычный удлинÑющий криÑтал -item.greaterLengtheningCatalyst.name=Большой удлинÑющий криÑтал -item.incendium.name=Incendium -item.magicales.name=Magicales -item.sanctus.name=Sanctus -item.aether.name=Эфир -item.simpleCatalyst.name=ПроÑтой катализатор -item.crepitous.name=Crepitous -item.crystallos.name=Crystallos -item.terrae.name=Terrae -item.aquasalus.name=Aquasalus -item.tennebrae.name=Tenebrae -item.demonBloodShard.name=ОÑколок крови демона -item.sigilOfWind.name=Сигил Ð²Ð¸Ñ…Ñ€Ñ -item.telepositionFocus.name=Ð¤Ð¾ÐºÑƒÑ Ñ‚ÐµÐ»ÐµÐ¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¸ -item.enhancedTelepositionFocus.name=Улучшенный Ñ„Ð¾ÐºÑƒÑ Ñ‚ÐµÐ»ÐµÐ¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¸ -item.reinforcedTelepositionFocus.name=УÑиленный Ñ„Ð¾ÐºÑƒÑ Ñ‚ÐµÐ»ÐµÐ¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¸ -item.demonicTelepositionFocus.name=ДемоничеÑкий Ñ„Ð¾ÐºÑƒÑ Ñ‚ÐµÐ»ÐµÐ¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¸ -item.imbuedSlate.name=ÐŸÑ€Ð¾Ð¿Ð¸Ñ‚Ð°Ð½Ð½Ð°Ñ Ð¿Ð»Ð¸Ñ‚ÐºÐ° -item.demonicSlate.name=ДемоничеÑÐºÐ°Ñ Ð¿Ð»Ð¸Ñ‚ÐºÐ° -item.sigilOfTheBridge.name=Сигил призрачного моÑта -item.armourInhibitor.name=Земедлитель брони -item.cheatyItem.name=Шар теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ -item.weakFillingAgent.name=Слабый заполнÑющий реагент -item.standardFillingAgent.name=Обычный заполнÑющий реагент -item.enhancedFillingAgent.name=Улучшенный заполнÑющий реагент -item.weakBindingAgent.name=Слабый ÑвÑзывающий реагент -item.ritualDiviner.name=ПредÑказатель ритуала -item.sigilOfMagnetism.name=Сигил магнетизма -item.itemDiabloKey.name=Ключ ÑвÑÐ·Ñ‹Ð²Ð°Ð½Ð¸Ñ -item.energyBazooka.name=ЭнергетичеÑÐºÐ°Ñ Ð±Ð°Ð·ÑƒÐºÐ° -item.bloodLightSigil.name=Сигил кровавого Ñветильника -item.itemComplexSpellCrystal.name=Сложный криÑтал заклинаний -item.itemSigilOfSupression.name=Сигил Ð¿Ð¾Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ -item.itemSigilOfEnderSeverance.name=Сигил разрыва ÐšÑ€Ð°Ñ -item.bucketLife.name=Ведро жизни -item.bloodMagicBaseItem.QuartzRod.name=Кварцевый Ñтержень -item.bloodMagicBaseItem.EmptyCore.name=ПуÑтое Ñдро -item.bloodMagicBaseItem.MagicalesCable.name=МагичеÑкий провод -item.bloodMagicBaseItem.WoodBrace.name=ДеревÑнное Ñкрепление -item.bloodMagicBaseItem.StoneBrace.name=Каменное Ñкрепление -item.bloodMagicBaseItem.ProjectileCore.name=Метательное Ñдро -item.bloodMagicBaseItem.SelfCore.name=Сплошное Ñдро -item.bloodMagicBaseItem.MeleeCore.name=Ближнее Ñдро -item.bloodMagicBaseItem.ToolCore.name=Ядро инÑтрументов -item.bloodMagicBaseItem.ParadigmBackPlate.name=ÐŸÑ€Ð¸Ð¼ÐµÑ€Ð½Ð°Ñ Ð¿Ð»Ð°Ñтина -item.bloodMagicBaseItem.OutputCable.name=Провод Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° заклинаний -item.bloodMagicBaseItem.InputCable.name=Провод Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð° заклинаний -item.bloodMagicBaseItem.FlameCore.name=Огненное Ñдро -item.bloodMagicBaseItem.IcyCore.name=ЛедÑное Ñдро -item.bloodMagicBaseItem.GustCore.name=Ветреное Ñдро -item.bloodMagicBaseItem.EarthenCore.name=ЗемлÑное Ñдро -item.bloodMagicBaseItem.CrackedRunicPlate.name=Ð¡Ð»Ð¾Ð¼Ð°Ð½Ð½Ð°Ñ Ñ€ÑƒÐ½Ð¸Ñ‡ÐµÑÐºÐ°Ñ Ð¿Ð»Ð°Ñтина -item.bloodMagicBaseItem.RunicPlate.name=РуничеÑÐºÐ°Ñ Ð¿Ð»Ð°Ñтина -item.bloodMagicBaseItem.ScribedRunicPlate.name=ÐŸÑ€Ð¾Ð¿Ð¸Ñ‚Ð°Ð½Ð½Ð°Ñ Ñ€ÑƒÐ½Ð¸Ñ‡ÐµÑÐºÐ°Ñ Ð¿Ð»Ð°Ñтина -item.bloodMagicBaseItem.DefaultCore.name=ÐенаÑтроенное Ñдро -item.bloodMagicBaseItem.OffensiveCore.name=Ядро Ð½Ð°Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ -item.bloodMagicBaseItem.DefensiveCore.name=Ядро обороны -item.bloodMagicBaseItem.EnvironmentalCore.name=Ядро окружающей Ñреды -item.bloodMagicBaseItem.PowerCore.name=ЭнергетичеÑкое Ñдро -item.bloodMagicBaseItem.CostCore.name=Ядро ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ñ -item.bloodMagicBaseItem.PotencyCore.name=Ядро ÑффективноÑти -item.bloodMagicBaseItem.ObsidianBrace.name=ОбÑидиановое Ñкрепление -item.bloodMagicBaseItem.EtherealSlate.name=Ð­Ñ„Ð¸Ñ€Ð½Ð°Ñ Ð¿Ð»Ð¸Ñ‚ÐºÐ° -item.bloodMagicBaseItem.LifeShard.name=ОÑколок жизни -item.bloodMagicBaseItem.SoulShard.name=ОÑколок души -item.bloodMagicBaseItem.LifeBrace.name=Живое Ñкрепление -item.bloodMagicBaseItem.SoulRunicPlate.name=РуничеÑÐºÐ°Ñ Ð¿Ð»Ð°Ñтина души -item.bloodMagicAlchemyItem.Offensa.name=Offensa -item.bloodMagicAlchemyItem.Praesidium.name=Praesidium -item.bloodMagicAlchemyItem.OrbisTerrae.name=Orbis Terrae -item.bloodMagicAlchemyItem.StrengthenedCatalyst.name=УÑиленный катализатор -item.bloodMagicAlchemyItem.ConcentratedCatalyst.name=Концентрированный катализатор -item.bloodMagicAlchemyItem.FracturedBone.name=Ð¡Ð»Ð¾Ð¼Ð°Ð½Ð½Ð°Ñ ÐºÐ¾Ñть -item.bloodMagicAlchemyItem.Virtus.name=Virtus -item.bloodMagicAlchemyItem.Reductus.name=Reductus -item.bloodMagicAlchemyItem.Potentia.name=Potentia -item.sanguineHelmet.name=Шлем цвета крови -item.itemSeerSigil.name=Сигил Ð·Ñ€ÐµÐ½Ð¸Ñ -item.itemFluidSigil.name= -item.multiTool.name=ДинамичеÑкий жезл -item.itemCombinationalCatalyst.name=Комбинационный катализатор -item.sanguineRobe.name=ÐœÐ°Ð½Ñ‚Ð¸Ñ Ñ†Ð²ÐµÑ‚Ð° крови -item.sanguinePants.name=Поножи цвета крови -item.sanguineBoots.name=Ботинки цвета крови -item.itemAttunedCrystal.name=ÐлхимичеÑкий маршрутизатор -item.itemTankSegmenter.name=ÐлхимичеÑкий Ñегментер -item.destinationClearer.name=ÐлхимичеÑкий очиÑтитель -item.demonPlacer.name=ДемоничеÑкий криÑталл -item.creativeDagger.name=ТворчеÑкий жертвенный кинжал -item.itemBloodPack.name=Рюкзак кровопуÑÐºÐ°Ñ‚ÐµÐ»Ñ -item.itemHarvestSigil.name=Сигил богини Ð¿Ð»Ð¾Ð´Ð¾Ñ€Ð¾Ð´Ð¸Ñ -item.itemCompressionSigil.name=Сигил ÑÐ¶Ð°Ñ‚Ð¸Ñ -item.itemAssassinSigil.name=Сигил убийцы -item.transcendentBloodOrb.name=ТранÑцендентальный кровавый шар -item.itemMailCatalogue.name=Mail Order Catalogue -item.inputRoutingFocus.name=Ð¤Ð¾ÐºÑƒÑ Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ñ…Ð¾Ð´Ð° -item.bloodMagicBaseItem.EnderShard.name=ОÑколок ÐšÑ€Ð°Ñ -item.outputRoutingFocus.default.name=Обычный Ñ„Ð¾ÐºÑƒÑ Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° -item.outputRoutingFocus.modItem.name=Ð¤Ð¾ÐºÑƒÑ Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° (ModItem) -item.outputRoutingFocus.ignMeta.name=Ð¤Ð¾ÐºÑƒÑ Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° (Ignore Meta) -item.outputRoutingFocus.matchNBT.name=Ð¤Ð¾ÐºÑƒÑ Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° (MatchNBT) -item.outputRoutingFocus.global.name=Ð¤Ð¾ÐºÑƒÑ Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° (Global) -item.dawnScribeTool.name=Elemental Inscription Tool: Dawn -item.boundHelmetEarth.name=ЗемлÑной омега шлем -item.boundPlateEarth.name=ЗемлÑÐ½Ð°Ñ Ð¾Ð¼ÐµÐ³Ð° кираÑа -item.boundLeggingsEarth.name=ЗемлÑные омега поножи -item.boundBootsEarth.name=ЗемлÑные омега ботинки -item.boundHelmetWind.name=Воздушный омега шлем -item.boundPlateWind.name=Ð’Ð¾Ð·Ð´ÑƒÑˆÐ½Ð°Ñ Ð¾Ð¼ÐµÐ³Ð° кираÑа -item.boundLeggingsWind.name=Воздушные омега поножи -item.boundBootsWind.name=Воздушные омега ботинки -item.boundHelmetFire.name=Огненный омега шлем -item.boundPlateFire.name=ÐžÐ³Ð½ÐµÐ½Ð½Ð°Ñ Ð¾Ð¼ÐµÐ³Ð° кираÑа -item.boundLeggingsFire.name=Огненные омега поножи -item.boundBootsFire.name=Огненные омега ботинки -item.boundHelmetWater.name=Водный омега шлем -item.boundPlateWater.name=Ð’Ð¾Ð´Ð½Ð°Ñ Ð¾Ð¼ÐµÐ³Ð° кираÑа -item.boundLeggingsWater.name=Водные омега поножи -item.boundBootsWater.name=Водные омега ботинки - -#Creative Tab -itemGroup.tabBloodMagic=Blood Magic - -#Extra Strings -bm.string.consume=Потребление -bm.string.drain=ОпуÑтошение -bm.string.tier=Уровень -bm.string.crafting.orb.shaped=Форменное Ñоздание шара -bm.string.crafting.orb.shapeless=БеÑформенное Ñоздание шара -text.recipe.altar=Кровавый алтарь -text.recipe.altar.tier=Уровень: %s -text.recipe.altar.bloodRequired=LP: %s -text.recipe.shapedOrb=Форменный рецепт шара - -#Entities -entity.AWWayofTime.EarthElemental.name=Элементаль земли -entity.AWWayofTime.FireElemental.name=Элементаль Ð¾Ð³Ð½Ñ -entity.AWWayofTime.HolyElemental.name=Элементаль Ñвета -entity.AWWayofTime.ShadeElemental.name=Элементаль тени -entity.AWWayofTime.WaterElemental.name=Элементаль воды -entity.AWWayofTime.AirElemental.name=Элементаль воздуха -entity.AWWayofTime.Shade.name=Тень -entity.AWWayofTime.BoulderFist.name=Каменный кулак -entity.AWWayofTime.IceDemon.name=ЛедÑной демон -entity.AWWayofTime.SmallEarthGolem.name=Маленький землÑной голем -entity.AWWayofTime.WingedFireDemon.name=Крылатый огненный демон -entity.AWWayofTime.BileDemon.name=Желчный демон -entity.AWWayofTime.LowerGuardian.name=Ðизший Ñтраж -entity.AWWayofTime.FallenAngel.name=Падший ангел -entity.AWWayofTime.MinorDemonGruntGuardian.name=Страж демона Грунта -entity.AWWayofTime.MinorDemonGruntGuardianWind.name=ВетрÑной Ñтраж демона Грунта -entity.AWWayofTime.MinorDemonGruntGuardianFire.name=Огненный Ñтраж демона Грунта -entity.AWWayofTime.MinorDemonGruntGuardianIce.name=ЛедÑной Ñтраж демона Грунта -entity.AWWayofTime.MinorDemonGruntGuardianEarth.name=ЗемлÑной Ñтраж демона Грунта -entity.AWWayofTime.MinorDemonGruntWind.name=ВетрÑной демон Грунт -entity.AWWayofTime.MinorDemonGruntFire.name=Огненный демон Грунт -entity.AWWayofTime.MinorDemonGruntIce.name=ЛедÑной демон Грунт -entity.AWWayofTime.MinorDemonGruntEarth.name=ЗемлÑной демон Грунт -entity.AWWayofTime.MinorDemonGrunt.name=Демон Грунт - -#Commands -commands.soulnetwork.usage=/soulnetwork <игрок> -commands.bind.usage=/bind <игрок> -commands.bind.success=Предмет уÑпешно привÑзан! -commands.bind.failed.noPlayer=Игрок не выбран -commands.bind.failed.alreadyBound=Предмет уже привÑзан; иÑпользуйте /unbind Ð´Ð»Ñ Ð¾Ñ‚Ð²Ñзки -commands.bind.failed.notBindable=Предмет Ð½ÐµÐ»ÑŒÐ·Ñ Ð¿Ñ€Ð¸Ð²Ñзать -commands.unbind.usage=/unbind -commands.unbind.success=Предмет уÑпешно отвÑзан! -commands.unbind.failed.notBindable=Предмет Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð²Ñзать -commands.soulnetwork.usage=/soulnetwork <игрок> [кол-во] -commands.soulnetwork.add.success=УÑпешно добавлено %dLP в Ñеть души игрока %s! -commands.soulnetwork.subtract.success=УÑпешно взÑто %dLP из Ñети души игрока %s! -commands.soulnetwork.fill.success=УÑпешно заполнена Ñеть души игрока %s! -commands.soulnetwork.empty.success=УÑпешно опуÑтошена Ñеть души %s! -commands.soulnetwork.get.success=Ð’ Ñети души игрока %s %dLP! -commands.soulnetwork.noPlayer=Игрок не выбран -commands.soulnetwork.noCommand=Команда не выбрана -commands.soulnetwork.notACommand=Это Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° - -#Tooltips -tooltip.activationcrystal.creativeonly=Только Ð´Ð»Ñ Ñ‚Ð²Ð¾Ñ€Ñ‡ÐµÑкого режима - активирует любой ритуал -tooltip.activationcrystal.lowlevelrituals=Ðктивирует низкоуровневые ритуалы -tooltip.activationcrystal.powerfulrituals=Ðктивирует более мощные ритуалы -tooltip.airsigil.desc=Я уже чувÑтвую ÑÐµÐ±Ñ Ð»ÐµÐ³Ñ‡Ðµ... -tooltip.alchemy.coords=Координаты: -tooltip.alchemy.damage=Урон: -tooltip.alchemy.dimension=СвÑзанное измерение: -tooltip.alchemy.direction=Ðаправление: -tooltip.alchemy.forrecipe=чтобы увидеть рецепт -tooltip.alchemy.press=Ðажмите -tooltip.alchemy.recipe=Рецепт: -tooltip.alchemy.ritualid=ID ритуала: -tooltip.alchemy.shift=shift, -tooltip.alchemy.usedinalchemy=ИÑпользуетÑÑ Ð² алхимии -tooltip.alchemyflask.caution=Ð’ÐИМÐÐИЕ: Содержимое можно кидать -tooltip.alchemyflask.swigsleft=Глотков оÑталоÑÑŒ: -tooltip.armorinhibitor.desc1=ИÑпользуетÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ -tooltip.armorinhibitor.desc2=нееÑтеÑтвенных ÑпоÑобноÑтей души. -tooltip.attunedcrystal.desc1=ИнÑтрумент Ð´Ð»Ñ Ð½Ð°Ñтройки -tooltip.attunedcrystal.desc2=алхимичеÑкой передачи реагента -tooltip.blankspell.desc=КриÑталл беÑконечных возможноÑтей. -tooltip.bloodframe.desc=Доводит пчёл до иÑÑтуплениÑ. -tooltip.bloodletterpack.desc=Этот рюкзак дейÑтвительно Ñогревает... -tooltip.bloodlightsigil.desc=Я вижу Ñвет! -tooltip.boundarmor.devprotect=ÐдÑÐºÐ°Ñ Ð·Ð°Ñ‰Ð¸Ñ‚Ð° -tooltip.boundaxe.desc=Заруби Ð¼ÐµÐ½Ñ Ð·Ð° мой каламбур! -tooltip.boundpickaxe.desc1=Души проклÑтых -tooltip.boundpickaxe.desc2=не любÑÑ‚ камень... -tooltip.boundshovel.desc=Ðет, не Ñтот вид лопаты. -tooltip.caution.desc1=Внимание: может привеÑти -tooltip.caution.desc2=к плохому дню... -tooltip.cheatyitem.desc1=ПКМ, чтобы заполнить Ñеть, -tooltip.cheatyitem.desc2=shift-ПКМ, чтобы опуÑтошить. -tooltip.complexspellcrystal.desc=КриÑталл невообразимой Ñилы -tooltip.crystalbelljar.contents=Текущее Ñодержимое: -tooltip.crystalbelljar.empty=- ПуÑто -tooltip.demonictelepfocus.desc1=Более ÑÐ¸Ð»ÑŒÐ½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñ„Ð¾ÐºÑƒÑа, -tooltip.demonictelepfocus.desc2=иÑпользует демоничеÑкий оÑколок -tooltip.demonplacer.desc=ИÑпользуетÑÑ Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð·Ð²Ð°Ð½Ð¸Ñ Ð´ÐµÐ¼Ð¾Ð½Ð¾Ð². -tooltip.destclearer.desc1=ИÑпользуетÑÑ Ð´Ð»Ñ Ð¾Ñ‡Ð¸Ñтки ÑпиÑка -tooltip.destclearer.desc2=Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð°Ð»Ñ…Ð¸Ð¼Ð¸Ñ‡ÐµÑкого контейнера -tooltip.diablokey.desc=ПривÑзывает разные предметы к Ñети владельца -tooltip.divinationsigil.desc1=ВглÑдитеÑÑŒ в душу, чтобы -tooltip.divinationsigil.desc2=получить ÑÑÑенцию -tooltip.energybazooka.desc=Бум. -tooltip.energybattery.desc=Содержит необработанную жизненную ÑÑÑенцию -tooltip.energyblast.desc1=ИÑпользуетÑÑ Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка -tooltip.energyblast.desc2=разрушительных ÑнарÑдов. -tooltip.enhancedtelepfocus.desc=ФокуÑ, который был улучшен в алтаре -tooltip.fluidsigil.beastmode=Режим «ЗверÑ» -tooltip.fluidsigil.desc=Сигил Ñ Ð¿Ñ€ÐµÐºÑ€Ð°Ñным родÑтвом к жидкоÑÑ‚Ñм -tooltip.fluidsigil.draintankmode=Режим «ОпуÑÑ‚Ð¾ÑˆÐµÐ½Ð¸Ñ Ñ€ÐµÐ·ÐµÑ€Ð²ÑƒÐ°Ñ€Ð°Â» -tooltip.fluidsigil.filltankmode=Режим Â«Ð—Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ€ÐµÐ·ÐµÑ€Ð²ÑƒÐ°Ñ€Ð°Â» -tooltip.fluidsigil.fluidplacementmode=Режим Â«Ð Ð°Ð·Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¶Ð¸Ð´ÐºÐ¾Ñти» -tooltip.fluidsigil.forcesyphonmode=Режим «Принудительного переливаниÑ» -tooltip.fluidsigil.syphoningmode=Режим «ПереливаниÑ» -tooltip.harvestsigil.desc=Что поÑеешь то и пожнёшь -tooltip.infusedstone.desc1=Ðаполненный камень внутри -tooltip.infusedstone.desc2=кровавого Ð°Ð»Ñ‚Ð°Ñ€Ñ -tooltip.item.currentitem=Текущий предмет: -tooltip.item.iteminslot=Предмет в Ñлоте -tooltip.lavacrystal.desc1=Содержит жизнь, Ð´Ð»Ñ Ð¿Ð»Ð°Ð²ÐºÐ¸ -tooltip.lavacrystal.desc2=вещей в печи. -tooltip.lavasigil.desc1=Контакт Ñ Ð¶Ð¸Ð´ÐºÐ¾Ñтью -tooltip.lavasigil.desc2=очень нежелателен. -tooltip.lp.storedlp=ХранитÑÑ LP: -tooltip.mode.creative=Только Ð´Ð»Ñ Ñ‚Ð²Ð¾Ñ€Ñ‡ÐµÑкого режима -tooltip.owner.currentowner=Текущий владелец: -tooltip.owner.demonsowner=Владелец демона: -tooltip.packratsigil.desc=Ðлмазные руки -tooltip.reagent.selectedreagent=Выбранный реагент: -tooltip.reinforcedtelepfocus.desc1=Ещё более ÑÐ¸Ð»ÑŒÐ½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñ„Ð¾ÐºÑƒÑа, -tooltip.reinforcedtelepfocus.desc2=ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¸Ñпользует Ñлабый оÑколок -tooltip.ritualdiviner.airstones=Камни воздуха: -tooltip.ritualdiviner.blankstones=ПуÑтые камни: -tooltip.ritualdiviner.cannotplace=Ðе может размещать руны Ñумерек -tooltip.ritualdiviner.canplace=Может размещать руны Ñумерек -tooltip.ritualdiviner.canplacedawn=Может размещать руны Ñумерек и раÑÑвета -tooltip.ritualdiviner.desc=ИÑпользуетÑÑ Ð´Ð»Ñ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ñ‹Ñ… видов ритуалов -tooltip.ritualdiviner.duskstones=Камни Ñумерек: -tooltip.ritualdiviner.earthstones=Камни земли: -tooltip.ritualdiviner.firestones=Камни огнÑ: -tooltip.ritualdiviner.moreinfo=Ðажмите shift, чтобы увидеть дополнительную информацию -tooltip.ritualdiviner.ritualtunedto=Ритуал наÑтроен на Ñторону: -tooltip.ritualdiviner.waterstones=Камни воды: -tooltip.ritualdiviner.dawnstones=Камни раÑÑвета: -tooltip.ritualdiviner.totalStones=Ð’Ñего камней: -tooltip.sacrificialdagger.desc1=ЧувÑтво потери крови щекочет Ваши пальцы -tooltip.sacrificialdagger.desc2=ПроÑтого укольчика -tooltip.sacrificialdagger.desc3=будет доÑтаточно... -tooltip.sanguinearmor.desc1=Пара очков проникнутых Ñилой -tooltip.sanguinearmor.desc2=ОдеÑÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð½Ð¸ÐºÐ½ÑƒÑ‚Ñ‹Ðµ запретной Ñилой -tooltip.sanguinearmor.visdisc=Уменьшение затрат ВиÑ: -tooltip.scribetool.desc=РоÑпиÑи на Ñтене... -tooltip.seersigil.desc=Когда видеть вÑÑ‘, недоÑтаточно. -tooltip.sigilofelementalaffinity.desc1=Идеально подходит Ð´Ð»Ñ Ð¾Ð³Ð½ÐµÐ´Ñ‹ÑˆÐ°Ñ‰ÐµÐ¹ рыбы, -tooltip.sigilofelementalaffinity.desc2=ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±Ð¾Ð¸Ñ‚ÑÑ Ð²Ñ‹Ñоты! -tooltip.sigilofenderseverance.desc=ПоÑтавьте Ñтих Ñтранников ÐšÑ€Ð°Ñ Ð² затруднительную Ñитуацию! -tooltip.sigilofgrowth.desc1=Кому нужен зелёный палец, когда -tooltip.sigilofgrowth.desc2=Ð·ÐµÐ»Ñ‘Ð½Ð°Ñ Ð¿Ð»Ð¸Ñ‚ÐºÐ°? -tooltip.sigilofhaste.desc=Одна доза кофеина... -tooltip.sigilofholding.desc=ИÑпользуетÑÑ Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð½ÐµÑкольких Ñигилов! -tooltip.sigilofmagnetism.desc=Я очень магнетичеÑÐºÐ°Ñ Ð»Ð¸Ñ‡Ð½Ð¾Ñть! -tooltip.sigilofsupression.desc=Лучше, чем телекинез -tooltip.sigiloftheassassin.desc=Ð’Ñ€ÐµÐ¼Ñ ÑтановитьÑÑ Ñкрытнее... -tooltip.sigilofthebridge.desc1=Ðктивируйте, чтобы Ñоздать моÑÑ‚ -tooltip.sigilofthebridge.desc2=под Вашими ногами. -tooltip.sigilofthefastminer.desc=Продолжаем идти и идти и идти... -tooltip.sigilofwind.desc=Лучше не одевать юбку. -tooltip.sigil.state.activated=Ðктивирован -tooltip.sigil.state.deactivated=Деактивирован -tooltip.tanksegmenter.desc1=ИÑпользуетÑÑ Ð´Ð»Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ -tooltip.tanksegmenter.desc2=реагентов, которые могут быть в контейнере -tooltip.telepositionfocus.desc=Жемчуг КраÑ, проникнутый кровью -tooltip.voidsigil.desc=Лучше, чем швабра «Swiffer»! -tooltip.watersigil.desc=БеÑÐºÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ð²Ð¾Ð´Ð°, кому-нибудь? -tooltip.routingFocus.limit=Лимит: -tooltip.routingFocus.desc=ФокуÑ, иÑпользуемый Ð´Ð»Ñ Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ð¼ÐµÑ‚Ð¾Ð² - -#Messages -message.altar.capacity=ÐмкоÑть: %s LP -message.altar.consumptionrate=СкороÑть потреблениÑ: -message.altar.currentessence=Ð¢ÐµÐºÑƒÑ‰Ð°Ñ ÑÑÑÐµÐ½Ñ†Ð¸Ñ Ð°Ð»Ñ‚Ð°Ñ€Ñ: %s LP -message.altar.currenttier=Текущий уровень алтарÑ: %s -message.altar.progress=ПрогреÑÑ Ð°Ð»Ñ‚Ð°Ñ€Ñ: -message.altar.inputtank= Резервуар Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð°: %s LP -message.altar.outputtank= Резервуар Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð°: %s LP -message.altar.hunger=[BM] Из-за Вашего выÑокого ÑƒÑ€Ð¾Ð²Ð½Ñ Ñ€ÐµÐ³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ Ð’Ñ‹ проголодалиÑÑŒ... -message.attunedcrystal.clearing=ОчиÑтка Ñохранённого контейнера... -message.attunedcrystal.error.cannotfind=Ðе удалоÑÑŒ найти Ñоединённый контейнер. -message.attunedcrystal.error.noconnections=У Ñоединённого контейнера не оÑталоÑÑŒ Ñвободных Ñоединений! -message.attunedcrystal.error.toofar=Соединённый контейнер либо Ñлишком далеко или в другом измерении. -message.attunedcrystal.linked=Контейнер Ñоединён. Передача: -message.attunedcrystal.linking=ПриÑоединение к выбранному контейнеру. -message.attunedcrystal.setto=ÐлхимичеÑкий маршрутизатор уÑтановлен на: -message.demon.shallfollow=Я обещаю Ñледовать за Вами и защищать! -message.demon.willstay=Я буду ÑтоÑть здеÑÑŒ, ХозÑин. -message.destinationclearer.cleared=СпиÑок Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¾Ñ‡Ð¸Ñ‰ÐµÐ½. -message.divinationsigil.amount=КоличеÑтво: -message.divinationsigil.currentessence=Ð¢ÐµÐºÑƒÑ‰Ð°Ñ ÑÑÑенциÑ: -message.divinationsigil.reagent=Реагент: -message.masterstone.crystalvibrates=Ваш криÑталл жалобно вибрирует. -message.masterstone.energyflows=Порыв потоков Ñнергии проходит через ритуал! -message.masterstone.nothinghappened=Ðичего не проиÑходит... -message.masterstone.ritualresistyou=Ритуал, кажетÑÑ, защищает ВаÑ! -message.masterstone.somethingstoppedyou=Что-то оÑтанавливает ВаÑ... -message.masterstone.youfeelapull=Ð’Ñ‹ чувÑтвуете втÑгивание, но Ð’Ñ‹ Ñлишком Ñлабы, чтобы толкать дальше. -message.ritual.currentritual=Текущий ритуал: -message.ritual.side.east=ВОСТОК -message.ritual.side.north=СЕВЕР -message.ritual.side.south=ЮГ -message.ritual.side.west=ЗÐПÐД -message.ritualdemonportal.missingjar=СоÑуд на одной из колонн, кажетÑÑ, отÑутÑтвует... -message.tanksegmenter.nowhas=У резервуара теперь -message.tanksegmenter.setto=Сегментер резервуаров уÑтановлен на: -message.tanksegmenter.tankssetto=резервуара(-ов) уÑтановлены на: -message.routerfocus.limit=Ограничение предметов уÑтановлено на: - -#Achievements -achievement.alchemicalwizardry:firstPrick=Ваш первый укольчик! -achievement.alchemicalwizardry:firstPrick.desc=ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ°Ð¿Ð»Ñ Ð¶Ð¸Ð·Ð½Ð¸ в алтаре... -achievement.alchemicalwizardry:weakOrb=Слабо мерцающий краÑный цвет... -achievement.alchemicalwizardry:weakOrb.desc=Этого шара будет доÑтаточно...пока что... diff --git a/src/main/resources/assets/alchemicalwizardry/lang/zh_CN.lang b/src/main/resources/assets/alchemicalwizardry/lang/zh_CN.lang deleted file mode 100644 index d49998b6..00000000 --- a/src/main/resources/assets/alchemicalwizardry/lang/zh_CN.lang +++ /dev/null @@ -1,217 +0,0 @@ -#Block Localization -tile.bloodAltar.name=è¡€ä¹‹ç¥­å› -tile.bloodRune.blank.name=气血符文 -tile.bloodRune.fill.name=增容符文 -tile.bloodRune.empty.name=转ä½ç¬¦æ–‡ -tile.bloodRune.orb.name=å®ç ç¬¦æ–‡ -tile.bloodRune.betterCapacity.name=超容符文 -tile.bloodRune.acceleration.name=促进符文 -tile.speedRune.name=速度符文 -tile.efficiencyRune.name=效率符文 -tile.runeOfSacrifice.name=献祭符文 -tile.runeOfSelfSacrifice.name=牺牲符文 -tile.ritualStone.name=仪å¼çŸ³ -tile.blockMasterStone.name=主仪å¼çŸ³ -tile.bloodSocket.name=æ»¡çš„è¡€æ’æ§½ -tile.imperfectRitualStone.name=ä¸å®Œå–„的仪å¼çŸ³ -tile.armourForge.name=çµé­‚装甲锻造石 -tile.emptySocket.name=ç©ºçš„è¡€æ’æ§½ -tile.bloodStoneBrick.name=血石砖 -tile.largeBloodStoneBrick.name=大血石砖 -tile.blockWritingTable.name=ç‚¼é‡‘æœ¯å° -tile.blockHomHeart.name=符咒桌 -tile.bloodPedestal.name=奥术基座 -tile.bloodPlinth.name=奥术基柱 -tile.bloodTeleposer.name=ä¼ é€å™¨ -tile.blockConduit.name=æ³•æœ¯ç®¡é“ -tile.blockSpellParadigm.projectile.name=抛射法术基架 -tile.blockSpellParadigm.self.name=自体法术基架 -tile.blockSpellParadigm.melee.name=格斗法术基架 -tile.blockSpellParadigm.tool.name=工具法术基架 -tile.blockSpellEnhancement.power1.name=[ä¸ç¨³å®š]æ³•æœ¯é™„å±žï¼šåŠ›é‡ -tile.blockSpellEnhancement.power2.name=[标准]æ³•æœ¯é™„å±žï¼šåŠ›é‡ -tile.blockSpellEnhancement.power3.name=[加强]æ³•æœ¯é™„å±žï¼šåŠ›é‡ -tile.blockSpellEnhancement.power4.name=[çŒè¾“]æ³•æœ¯é™„å±žï¼šåŠ›é‡ -tile.blockSpellEnhancement.power5.name=[æ¶é­”]æ³•æœ¯é™„å±žï¼šåŠ›é‡ -tile.blockSpellEnhancement.cost1.name=[ä¸ç¨³å®š]法术附属:代价 -tile.blockSpellEnhancement.cost2.name=[标准]法术附属:代价 -tile.blockSpellEnhancement.cost3.name=[加强]法术附属:代价 -tile.blockSpellEnhancement.cost4.name=[çŒè¾“]法术附属:代价 -tile.blockSpellEnhancement.cost5.name=[æ¶é­”]法术附属:代价 -tile.blockSpellEnhancement.potency1.name=[ä¸ç¨³å®š]法术附属:效能 -tile.blockSpellEnhancement.potency2.name=[标准]法术附属:效能 -tile.blockSpellEnhancement.potency3.name=[加强]法术附属:效能 -tile.blockSpellEnhancement.potency4.name=[çŒè¾“]法术附属:效能 -tile.blockSpellEnhancement.potency5.name=[æ¶é­”]法术附属:效能 -tile.blockSpellModifier.default.name=法术修饰符:默认 -tile.blockSpellModifier.offensive.name=法术修饰符:攻势 -tile.blockSpellModifier.defensive.name=法术修饰符:防守 -tile.blockSpellModifier.environmental.name=法术修饰符:环境 -tile.blockSpellEffect.fire.name=ç«ç„°æ•ˆåº”器 -tile.blockSpellEffect.ice.name=冰霜效应器 -tile.blockSpellEffect.wind.name=风暴效应器 -tile.blockSpellEffect.earth.name=尘土效应器 -tile.alchemicCalcinator.name=元素煅烧炉 -tile.crystalBelljar.name=玻璃钟罩 -tile.blockReagentConduit.name=元素中续器 -tile.lifeEssenceFluidBlock.name=生命本质 - -#Item Localization -item.weakBloodOrb.name=虚弱气血å®ç  -item.apprenticeBloodOrb.name=学徒气血å®ç  -item.magicianBloodOrb.name=法师的气血å®ç  -item.masterBloodOrb.name=导师气血å®ç  -item.archmageBloodOrb.name=大法师的气血å®ç  -item.energyBlast.name=能æºçˆ†ç ´æžª -item.energySword.name=约æŸä¹‹å‰‘ -item.lavaCrystal.name=熔岩晶体 -item.waterSigil.name=水之å°è®° -item.lavaSigil.name=熔岩å°è®° -item.voidSigil.name=虚空å°è®° -item.blankSlate.name=ç©ºç™½çš„çŸ³æ¿ -item.reinforcedSlate.name=åŠ å¼ºçš„çŸ³æ¿ -item.sacrificialDagger.name=牺牲匕首 -item.daggerOfSacrifice.name=献祭刀 -item.airSigil.name=空气å°è®° -item.sigilOfTheFastMiner.name=速掘å°è®° -item.sigilOfElementalAffinity.name=元素å°è®° -item.sigilOfHaste.name=急速å°è®° -item.sigilOfHolding.name=集åˆå°è®° -item.divinationSigil.name=å åœå°è®° -item.waterScribeTool.name=元素铭文:水 -item.fireScribeTool.name=å…ƒç´ é“­æ–‡ï¼šç« -item.earthScribeTool.name=元素铭文:地 -item.airScribeTool.name=元素铭文:风 -item.duskScribeTool.name=元素铭文: 幽暗 -item.activationCrystalWeak.name=[低等]激活水晶 -item.activationCrystalAwakened.name=[觉醒]激活水晶 -item.boundPickaxe.name=约æŸä¹‹é• -item.boundAxe.name=约æŸä¹‹æ–§ -item.boundShovel.name=约æŸä¹‹é”¹ -item.boundHelmet.name=约æŸå¤´ç›” -item.boundPlate.name=约æŸèƒ¸ç”² -item.boundLeggings.name=çº¦æŸæŠ¤è…¿ -item.boundBoots.name=约æŸé´å­ -item.weakBloodShard.name=虚弱气血碎片 -item.growthSigil.name=绿丛å°è®° -item.blankSpell.name=未绑定的水晶 -item.alchemyFlask.name=è¯ç“¶ -item.standardBindingAgent.name=[标准的]粘åˆå‰‚ -item.mundanePowerCatalyst.name=[平凡的]功率催化剂 -item.averagePowerCatalyst.name=[普通的]功率催化剂 -item.greaterPowerCatalyst.name=[更好的]功率催化剂 -item.mundaneLengtheningCatalyst.name=[平凡的]延时催化剂 -item.averageLengtheningCatalyst.name=[普通的]延时催化剂 -item.greaterLengtheningCatalyst.name=[更好的]延时催化剂 -item.incendium.name=ç«ç„°ç²‰æœ« -item.magicales.name=魔法粉末 -item.sanctus.name=神圣粉末 -item.aether.name=以太元素 -item.simpleCatalyst.name=简å•的催化剂 -item.crepitous.name=爆破粉末 -item.crystallos.name=冰晶粉末 -item.terrae.name=泥土粉末 -item.aquasalus.name=液之粉末 -item.tennebrae.name=暗黑粉末 -item.demonBloodShard.name=æ¶é­”气血碎片 -item.sigilOfWind.name=旋风å°è®° -item.telepositionFocus.name=传逿–¹ä½æ ¸å¿ƒ -item.enhancedTelepositionFocus.name=[加强]传逿–¹ä½æ ¸å¿ƒ -item.reinforcedTelepositionFocus.name=[强化]传逿–¹ä½æ ¸å¿ƒ -item.demonicTelepositionFocus.name=[æ¶é­”]传逿–¹ä½æ ¸å¿ƒ -item.imbuedSlate.name=çŒè¾“çŸ³æ¿ -item.demonicSlate.name=æ¶é­”çŸ³æ¿ -item.sigilOfTheBridge.name=影桥å°è®° -item.armourInhibitor.name=装甲约æŸå™¨ -item.cheatyItem.name=测试å®ç  -item.weakFillingAgent.name=[虚弱的]填充剂 -item.standardFillingAgent.name=[标准的]填充剂 -item.enhancedFillingAgent.name=[加强的]填充剂 -item.weakBindingAgent.name=[虚弱的]粘åˆå‰‚ -item.ritualDiviner.name=ä»ªå¼æŽ¨æµ‹æ– -item.sigilOfMagnetism.name=ç£å¼•å°è®° -item.itemDiabloKey.name=约æŸé’¥åŒ™ -item.energyBazooka.name=能æºç«ç®­ç­’ -item.bloodLightSigil.name=血光å°è®° -item.itemComplexSpellCrystal.name=夿‚的法术水晶 -item.itemSigilOfSupression.name=抑液å°è®° -item.itemSigilOfEnderSeverance.name=ç»å½±å°è®° -item.bucketLive.name=生命之桶 -item.bloodMagicBaseItem.QuartzRod.name=çŸ³è‹±æ£ -item.bloodMagicBaseItem.EmptyCore.name=空白核心 -item.bloodMagicBaseItem.MagicalesCable.name=魔法线缆 -item.bloodMagicBaseItem.WoodBrace.name=木支架 -item.bloodMagicBaseItem.StoneBrace.name=石支架 -item.bloodMagicBaseItem.ProjectileCore.name=抛射核心 -item.bloodMagicBaseItem.SelfCore.name=自体核心 -item.bloodMagicBaseItem.MeleeCore.name=格斗核心 -item.bloodMagicBaseItem.ToolCore.name=工具核心 -item.bloodMagicBaseItem.ParadigmBackPlate.name=èŒƒå¼æ¿ -item.bloodMagicBaseItem.OutputCable.name=法术线缆:输出 -item.bloodMagicBaseItem.InputCable.name=法术线缆:输入 -item.bloodMagicBaseItem.FlameCore.name=ç«ç„°æ ¸å¿ƒ -item.bloodMagicBaseItem.IcyCore.name=冰霜核心 -item.bloodMagicBaseItem.GustCore.name=风暴核心 -item.bloodMagicBaseItem.EarthenCore.name=尘土核心 -item.bloodMagicBaseItem.CrackedRunicPlate.name=[裂æŸ]å¤ç¢‘æ–‡æ¿ -item.bloodMagicBaseItem.RunicPlate.name=å¤ç¢‘æ–‡æ¿ -item.bloodMagicBaseItem.ScribedRunicPlate.name=[çŒè¾“]å¤ç¢‘æ–‡æ¿ -item.bloodMagicBaseItem.DefaultCore.name=未鉴核心 -item.bloodMagicBaseItem.OffensiveCore.name=攻势核心 -item.bloodMagicBaseItem.DefensiveCore.name=防守核心 -item.bloodMagicBaseItem.EnvironmentalCore.name=环境核心 -item.bloodMagicBaseItem.PowerCore.name=åŠ›é‡æ ¸å¿ƒ -item.bloodMagicBaseItem.CostCore.name=代价核心 -item.bloodMagicBaseItem.PotencyCore.name=效能核心 -item.bloodMagicBaseItem.ObsidianBrace.name=黑曜石支架 -item.bloodMagicBaseItem.EtherealSlate.name=æ‚¬å¹½çŸ³æ¿ -item.bloodMagicAlchemyItem.Offensa.name=攻势粉末 -item.bloodMagicAlchemyItem.Praesidium.name=防守粉末 -item.bloodMagicAlchemyItem.OrbisTerrae.name=环境粉末 -item.bloodMagicAlchemyItem.StrengthenedCatalyst.name=[加强]催化剂 -item.bloodMagicAlchemyItem.ConcentratedCatalyst.name=[浓缩]催化剂 -item.bloodMagicAlchemyItem.FracturedBone.name=断裂的骨头 -item.bloodMagicAlchemyItem.Virtus.name=力é‡ç²‰æœ« -item.bloodMagicAlchemyItem.Reductus.name=代价粉末 -item.bloodMagicAlchemyItem.Potentia.name=效能粉末 -item.sanguineHelmet.name=血红头盔 -item.itemSeerSigil.name=è§è§£å°è®° -item.itemFluidSigil.name= -item.multiTool.name=æ³•æœ¯æƒæ– -item.itemCombinationalCatalyst.name=组åˆå‚¬åŒ–剂 -item.sanguineRobe.name=è¡€çº¢æ³•è¢ -item.sanguinePants.name=血红护腿 -item.sanguineBoots.name=血红é´å­ -item.itemAttunedCrystal.name=元素通递仗 -item.itemTankSegmenter.name=元素分é…ä»— -item.destinationClearer.name=元素清通器 -item.demonPlacer.name=æ¶é­”æ°´æ™¶ -item.creativeDagger.name=[创造模å¼]牺牲匕首 -item.itemBloodPack.name=血液背包 -item.itemHarvestSigil.name=丰收å°è®° -item.itemCompressionSigil.name=压缩å°è®° -#Creative Tab -itemGroup.tabBloodMagic=血魔法 - -#Extra Strings -bm.string.consume=使用 -bm.string.drain=消耗 -bm.string.tier=层数 -bm.string.crafting.orb.shaped=特定血å®ç åˆæˆ -bm.string.crafting.orb.shapeless=ä¸å®šè¡€å®ç åˆæˆ - -#Entities -entity.AWWayofTime.EarthElemental.name=åœŸä¹‹å…ƒç´ ç²¾çµ -entity.AWWayofTime.FireElemental.name=ç«ä¹‹å…ƒç´ ç²¾çµ -entity.AWWayofTime.HolyElemental.name=ç¥žåœ£å…ƒç´ ç²¾çµ -entity.AWWayofTime.ShadeElemental.name=æš—é»‘å…ƒç´ ç²¾çµ -entity.AWWayofTime.WaterElemental.name=æ°´ä¹‹å…ƒç´ ç²¾çµ -entity.AWWayofTime.AirElemental.name=é£Žä¹‹å…ƒç´ ç²¾çµ -entity.AWWayofTime.Shade.name=影魔 -entity.AWWayofTime.BoulderFist.name=石猿 -entity.AWWayofTime.IceDemon.name=冰霜æ¶é­” -entity.AWWayofTime.SmallEarthGolem.name=å°åž‹åœŸå‚€å„¡ -entity.AWWayofTime.WingedFireDemon.name=ç«ç¿¼æ¶é­” -entity.AWWayofTime.BileDemon.name=èƒ†æ±æ¶é­” -entity.AWWayofTime.LowerGuardian.name=低等守护者 -entity.AWWayofTime.FallenAngel.name=堕天使 diff --git a/src/main/resources/assets/alchemicalwizardry/lang/zh_TW.lang b/src/main/resources/assets/alchemicalwizardry/lang/zh_TW.lang deleted file mode 100644 index fdebb4ea..00000000 --- a/src/main/resources/assets/alchemicalwizardry/lang/zh_TW.lang +++ /dev/null @@ -1,469 +0,0 @@ -#Block Localization -tile.bloodAltar.name=血之祭壇 -tile.bloodRune.blank.name=氣血符文 -tile.bloodRune.fill.name=增容符文 -tile.bloodRune.empty.name=轉ä½ç¬¦æ–‡ -tile.bloodRune.orb.name=寶ç ç¬¦æ–‡ -tile.bloodRune.betterCapacity.name=超容符文 -tile.bloodRune.acceleration.name=促進符文 -tile.speedRune.name=速度符文 -tile.efficiencyRune.name=效率符文 -tile.runeOfSacrifice.name=ç»ç¥­ç¬¦æ–‡ -tile.runeOfSelfSacrifice.name=犧牲符文 -tile.ritualStone.name=å„€å¼çŸ³ -tile.blockMasterStone.name=主儀å¼çŸ³ -tile.bloodSocket.name=æ»¿çš„è¡€æ’æ§½ -tile.imperfectRitualStone.name=ä¸å®Œå–„的儀å¼çŸ³ -tile.armourForge.name=éˆé­‚è£ç”²é›é€ çŸ³ -tile.emptySocket.name=ç©ºçš„è¡€æ’æ§½ -tile.bloodStoneBrick.name=血石磚 -tile.largeBloodStoneBrick.name=大血石磚 -tile.blockWritingTable.name=ç…‰é‡‘è¡“å° -tile.blockHomHeart.name=符咒桌 -tile.bloodPedestal.name=奧術基座 -tile.bloodPlinth.name=奧術基柱 -tile.bloodTeleposer.name=傳é€å™¨ -tile.blockConduit.name=æ³•è¡“ç®¡é“ -tile.blockSpellParadigm.projectile.name=拋射法術基架 -tile.blockSpellParadigm.self.name=自體法術基架 -tile.blockSpellParadigm.melee.name=格鬥法術基架 -tile.blockSpellParadigm.tool.name=工具法術基架 -tile.blockSpellEnhancement.power1.name=[ä¸ç©©å®š]æ³•è¡“é™„å±¬ï¼šåŠ›é‡ -tile.blockSpellEnhancement.power2.name=[標準]æ³•è¡“é™„å±¬ï¼šåŠ›é‡ -tile.blockSpellEnhancement.power3.name=[加強]æ³•è¡“é™„å±¬ï¼šåŠ›é‡ -tile.blockSpellEnhancement.power4.name=[çŒè¼¸]æ³•è¡“é™„å±¬ï¼šåŠ›é‡ -tile.blockSpellEnhancement.power5.name=[惡魔]æ³•è¡“é™„å±¬ï¼šåŠ›é‡ -tile.blockSpellEnhancement.cost1.name=[ä¸ç©©å®š]法術附屬:代價 -tile.blockSpellEnhancement.cost2.name=[標準]法術附屬:代價 -tile.blockSpellEnhancement.cost3.name=[加強]法術附屬:代價 -tile.blockSpellEnhancement.cost4.name=[çŒè¼¸]法術附屬:代價 -tile.blockSpellEnhancement.cost5.name=[惡魔]法術附屬:代價 -tile.blockSpellEnhancement.potency1.name=[ä¸ç©©å®š]法術附屬:效能 -tile.blockSpellEnhancement.potency2.name=[標準]法術附屬:效能 -tile.blockSpellEnhancement.potency3.name=[加強]法術附屬:效能 -tile.blockSpellEnhancement.potency4.name=[çŒè¼¸]法術附屬:效能 -tile.blockSpellEnhancement.potency5.name=[惡魔]法術附屬:效能 -tile.blockSpellModifier.default.name=æ³•è¡“ä¿®é£¾ç¬¦ï¼šé»˜èª -tile.blockSpellModifier.offensive.name=法術修飾符:攻勢 -tile.blockSpellModifier.defensive.name=法術修飾符:防守 -tile.blockSpellModifier.environmental.name=法術修飾符:環境 -tile.blockSpellEffect.fire.name=ç«ç„°æ•ˆæ‡‰å™¨ -tile.blockSpellEffect.ice.name=冰霜效應器 -tile.blockSpellEffect.wind.name=風暴效應器 -tile.blockSpellEffect.earth.name=塵土效應器 -tile.alchemicCalcinator.name=煉金é›ç‡’çˆ -tile.crystalBelljar.name=玻璃é˜ç½© -tile.blockReagentConduit.name=煉金中續器 -tile.lifeEssenceFluidBlock.name=生命本質 -tile.crystalBlock.fullCrystal.name=碎片集晶 -tile.crystalBlock.crystalBrick.name=碎片集晶磚 -tile.demonPortal.name=惡魔傳é€ç«™ -tile.demonChest.name=Demon's Chest -tile.enchantmentGlyph.enchantability.name=Glyph of the Adept Enchanter -tile.enchantmentGlyph.enchantmentLevel.name=Glyph of Arcane Potential -tile.stabilityGlyph.stability1.name=Glyph of Rigid Stability -tile.schematicSaver.name=Schematic Saver -tile.blockMimic.name=Mimic Block -tile.blockSpectralContainer.name=Spectral Container -tile.blockBloodLightSource.name=Blood Light -tile.spectralBlock.name=Spectral Block -tile.blockCrucible.name=Incense Crucible - -#Item Localization -item.weakBloodOrb.name=è™›å¼±æ°£è¡€å¯¶ç  -item.apprenticeBloodOrb.name=å­¸å¾’æ°£è¡€å¯¶ç  -item.magicianBloodOrb.name=æ³•å¸«æ°£è¡€å¯¶ç  -item.masterBloodOrb.name=å°Žå¸«æ°£è¡€å¯¶ç  -item.archmageBloodOrb.name=è³¢è€…æ°£è¡€å¯¶ç  -item.energyBlast.name=能æºçˆ†ç ´æ§ -item.energySword.name=ç´„æŸä¹‹åŠ -item.lavaCrystal.name=熔岩晶體 -item.waterSigil.name=水之å°è¨˜ -item.lavaSigil.name=熔岩å°è¨˜ -item.voidSigil.name=虛空å°è¨˜ -item.blankSlate.name=ç©ºç™½çš„çŸ³æ¿ -item.reinforcedSlate.name=åŠ å¼·çš„çŸ³æ¿ -item.sacrificialDagger.name=犧牲匕首 -item.daggerOfSacrifice.name=ç»ç¥­åˆ€ -item.airSigil.name=空氣å°è¨˜ -item.sigilOfTheFastMiner.name=速掘å°è¨˜ -item.sigilOfElementalAffinity.name=元素å°è¨˜ -item.sigilOfHaste.name=急速å°è¨˜ -item.sigilOfHolding.name=集åˆå°è¨˜ -item.divinationSigil.name=å åœå°è¨˜ -item.waterScribeTool.name=元素銘文:水 -item.fireScribeTool.name=å…ƒç´ éŠ˜æ–‡ï¼šç« -item.earthScribeTool.name=元素銘文:地 -item.airScribeTool.name=元素銘文:風 -item.duskScribeTool.name=元素銘文: 幽暗 -item.activationCrystalWeak.name=[虛弱]激活水晶 -item.activationCrystalAwakened.name=[覺醒]激活水晶 -item.activationCrystalCreative.name=[創造模å¼]激活水晶 -item.boundPickaxe.name=ç´„æŸä¹‹éެ -item.boundAxe.name=ç´„æŸä¹‹æ–§ -item.boundShovel.name=ç´„æŸä¹‹é¬ -item.boundHelmet.name=ç´„æŸé ­ç›” -item.boundPlate.name=ç´„æŸèƒ¸ç”² -item.boundLeggings.name=ç´„æŸè­·è…¿ -item.boundBoots.name=ç´„æŸé´å­ -item.weakBloodShard.name=虛弱氣血碎片 -item.growthSigil.name=ç¶ å¢å°è¨˜ -item.blankSpell.name=未ç¶å®šçš„æ°´æ™¶ -item.alchemyFlask.name=藥瓶 -item.standardBindingAgent.name=[標準的]é»åˆåŠ‘ -item.mundanePowerCatalyst.name=[平凡的]功率催化劑 -item.averagePowerCatalyst.name=[普通的]功率催化劑 -item.greaterPowerCatalyst.name=[更好的]功率催化劑 -item.mundaneLengtheningCatalyst.name=[平凡的]延時催化劑 -item.averageLengtheningCatalyst.name=[普通的]延時催化劑 -item.greaterLengtheningCatalyst.name=[更好的]延時催化劑 -item.incendium.name=ç«ç„°ç²‰æœ« -item.magicales.name=魔法粉末 -item.sanctus.name=神è–粉末 -item.aether.name=以太元素 -item.simpleCatalyst.name=簡單的催化劑 -item.crepitous.name=爆破粉末 -item.crystallos.name=冰晶粉末 -item.terrae.name=泥土粉末 -item.aquasalus.name=液之粉末 -item.tennebrae.name=暗黑粉末 -item.demonBloodShard.name=惡魔氣血碎片 -item.sigilOfWind.name=旋風å°è¨˜ -item.telepositionFocus.name=傳逿–¹ä½æ ¸å¿ƒ -item.enhancedTelepositionFocus.name=[加強]傳逿–¹ä½æ ¸å¿ƒ -item.reinforcedTelepositionFocus.name=[強化]傳逿–¹ä½æ ¸å¿ƒ -item.demonicTelepositionFocus.name=[惡魔]傳逿–¹ä½æ ¸å¿ƒ -item.imbuedSlate.name=çŒè¼¸çŸ³æ¿ -item.demonicSlate.name=æƒ¡é­”çŸ³æ¿ -item.sigilOfTheBridge.name=影橋å°è¨˜ -item.armourInhibitor.name=è£ç”²ç´„æŸå™¨ -item.cheatyItem.name=æ¸¬è©¦å¯¶ç  -item.weakFillingAgent.name=[虛弱的]填充劑 -item.standardFillingAgent.name=[標準的]填充劑 -item.enhancedFillingAgent.name=[加強的]填充劑 -item.weakBindingAgent.name=[虛弱的]é»åˆåŠ‘ -item.ritualDiviner.name=å„€å¼æŽ¨æ¸¬æ– -item.sigilOfMagnetism.name=ç£å¼•å°è¨˜ -item.itemDiabloKey.name=ç´„æŸé‘°åŒ™ -item.energyBazooka.name=能æºç«ç®­ç­’ -item.bloodLightSigil.name=血光å°è¨˜ -item.itemComplexSpellCrystal.name=複雜的法術水晶 -item.itemSigilOfSupression.name=抑液å°è¨˜ -item.itemSigilOfEnderSeverance.name=絕影å°è¨˜ -item.bucketLife.name=生命之桶 -item.bloodMagicBaseItem.QuartzRod.name=çŸ³è‹±æ£ -item.bloodMagicBaseItem.EmptyCore.name=空白核心 -item.bloodMagicBaseItem.MagicalesCable.name=魔法纜線 -item.bloodMagicBaseItem.WoodBrace.name=木支架 -item.bloodMagicBaseItem.StoneBrace.name=石支架 -item.bloodMagicBaseItem.ProjectileCore.name=拋射核心 -item.bloodMagicBaseItem.SelfCore.name=自體核心 -item.bloodMagicBaseItem.MeleeCore.name=格鬥核心 -item.bloodMagicBaseItem.ToolCore.name=工具核心 -item.bloodMagicBaseItem.ParadigmBackPlate.name=ç¯„å¼æ¿ -item.bloodMagicBaseItem.OutputCable.name=法術纜線:輸出 -item.bloodMagicBaseItem.InputCable.name=法術纜線:輸入 -item.bloodMagicBaseItem.FlameCore.name=ç«ç„°æ ¸å¿ƒ -item.bloodMagicBaseItem.IcyCore.name=冰霜核心 -item.bloodMagicBaseItem.GustCore.name=風暴核心 -item.bloodMagicBaseItem.EarthenCore.name=塵土核心 -item.bloodMagicBaseItem.CrackedRunicPlate.name=[裂æ]å¤ç¢‘æ–‡æ¿ -item.bloodMagicBaseItem.RunicPlate.name=å¤ç¢‘æ–‡æ¿ -item.bloodMagicBaseItem.ScribedRunicPlate.name=[çŒè¼¸]å¤ç¢‘æ–‡æ¿ -item.bloodMagicBaseItem.DefaultCore.name=未鑒核心 -item.bloodMagicBaseItem.OffensiveCore.name=攻勢核心 -item.bloodMagicBaseItem.DefensiveCore.name=防守核心 -item.bloodMagicBaseItem.EnvironmentalCore.name=環境核心 -item.bloodMagicBaseItem.PowerCore.name=åŠ›é‡æ ¸å¿ƒ -item.bloodMagicBaseItem.CostCore.name=代價核心 -item.bloodMagicBaseItem.PotencyCore.name=效能核心 -item.bloodMagicBaseItem.ObsidianBrace.name=黑曜石支架 -item.bloodMagicBaseItem.EtherealSlate.name=æ‡¸å¹½çŸ³æ¿ -item.bloodMagicBaseItem.LifeShard.name=生命碎片 -item.bloodMagicBaseItem.SoulShard.name=éˆé­‚碎片 -item.bloodMagicBaseItem.LifeBrace.name=生命支架 -item.bloodMagicBaseItem.SoulRunicPlate.name=éˆé­‚æ–‡æ¿ -item.bloodMagicAlchemyItem.Offensa.name=攻勢粉末 -item.bloodMagicAlchemyItem.Praesidium.name=防守粉末 -item.bloodMagicAlchemyItem.OrbisTerrae.name=環境粉末 -item.bloodMagicAlchemyItem.StrengthenedCatalyst.name=[加強]催化劑 -item.bloodMagicAlchemyItem.ConcentratedCatalyst.name=[濃縮]催化劑 -item.bloodMagicAlchemyItem.FracturedBone.name=斷裂的骨頭 -item.bloodMagicAlchemyItem.Virtus.name=力é‡ç²‰æœ« -item.bloodMagicAlchemyItem.Reductus.name=代價粉末 -item.bloodMagicAlchemyItem.Potentia.name=效能粉末 -item.sanguineHelmet.name=血紅頭盔 -item.itemSeerSigil.name=見解å°è¨˜ -item.itemFluidSigil.name= -item.multiTool.name=æ³•è¡“æ¬Šæ– -item.itemCombinationalCatalyst.name=組åˆå‚¬åŒ–劑 -item.sanguineRobe.name=è¡€ç´…æ³•è¢ -item.sanguinePants.name=血紅護腿 -item.sanguineBoots.name=血紅é´å­ -item.itemAttunedCrystal.name=元素通éžä»— -item.itemTankSegmenter.name=元素分é…ä»— -item.destinationClearer.name=元素清通器 -item.demonPlacer.name=惡魔水晶 -item.creativeDagger.name=[創造模å¼]犧牲匕首 -item.itemBloodPack.name=血液背包 -item.itemHarvestSigil.name=è±æ”¶å°è¨˜ -item.itemCompressionSigil.name=壓縮å°è¨˜ -item.itemAssassinSigil.name=Sigil of the Assassin -item.transcendentBloodOrb.name=å“è¶Šæ°£è¡€å¯¶ç  -item.itemMailCatalogue.name=Mail Order Catalogue -item.inputRoutingFocus.name=Input Routing Focus -item.bloodMagicBaseItem.EnderShard.name=Ender Shard -item.outputRoutingFocus.default.name=Default Output Routing Focus -item.outputRoutingFocus.modItem.name=Output Routing Focus (ModItem) -item.outputRoutingFocus.ignMeta.name=Output Routing Focus (Ignore Meta) -item.outputRoutingFocus.matchNBT.name=Output Routing Focus (MatchNBT) -item.outputRoutingFocus.global.name=Output Routing Focus (Global) -item.dawnScribeTool.name=Elemental Inscription Tool: Dawn -item.boundHelmetEarth.name=Earth Omega Helmet -item.boundPlateEarth.name=Earth Omega Plate -item.boundLeggingsEarth.name=Earth Omega Leggings -item.boundBootsEarth.name=Earth Omega Boots -item.boundHelmetWind.name=Wind Omega Helmet -item.boundPlateWind.name=Wind Omega Plate -item.boundLeggingsWind.name=Wind Omega Leggings -item.boundBootsWind.name=Wind Omega Boots -item.boundHelmetFire.name=Fire Omega Helmet -item.boundPlateFire.name=Fire Omega Plate -item.boundLeggingsFire.name=Fire Omega Leggings -item.boundBootsFire.name=Fire Omega Boots -item.boundHelmetWater.name=Water Omega Helmet -item.boundPlateWater.name=Water Omega Plate -item.boundLeggingsWater.name=Water Omega Leggings -item.boundBootsWater.name=Water Omega Boots - -item.bloodMagicIncenseItem.Woodash.name=Wood Ash -item.bloodMagicIncenseItem.Byrrus.name=Byrrus -item.bloodMagicIncenseItem.Livens.name=Livens -item.bloodMagicIncenseItem.Viridis.name=Viridis -item.bloodMagicIncenseItem.Purpura.name=Purpura - -#Creative Tab -itemGroup.tabBloodMagic=血魔法 - -#Extra Strings -bm.string.consume=使用 -bm.string.drain=消耗 -bm.string.tier=層數 -bm.string.crafting.orb.shaped=特定血寶ç åˆæˆ -bm.string.crafting.orb.shapeless=ç„¡åºè¡€å¯¶ç åˆæˆ -text.recipe.altar=Blood Altar -text.recipe.altar.tier=Tier: %s -text.recipe.altar.bloodRequired=LP: %s -text.recipe.shapedOrb=Shaped Orb Recipe - -#Entities -entity.AWWayofTime.EarthElemental.name=åœŸä¹‹å…ƒç´ ç²¾éˆ -entity.AWWayofTime.FireElemental.name=ç«ä¹‹å…ƒç´ ç²¾éˆ -entity.AWWayofTime.HolyElemental.name=神è–å…ƒç´ ç²¾éˆ -entity.AWWayofTime.ShadeElemental.name=æš—é»‘å…ƒç´ ç²¾éˆ -entity.AWWayofTime.WaterElemental.name=æ°´ä¹‹å…ƒç´ ç²¾éˆ -entity.AWWayofTime.AirElemental.name=é¢¨ä¹‹å…ƒç´ ç²¾éˆ -entity.AWWayofTime.Shade.name=影魔 -entity.AWWayofTime.BoulderFist.name=石猿 -entity.AWWayofTime.IceDemon.name=冰霜惡魔 -entity.AWWayofTime.SmallEarthGolem.name=å°åž‹åœŸå‚€å„¡ -entity.AWWayofTime.WingedFireDemon.name=ç«ç¿¼æƒ¡é­” -entity.AWWayofTime.BileDemon.name=è†½æ±æƒ¡é­” -entity.AWWayofTime.LowerGuardian.name=低等守護者 -entity.AWWayofTime.FallenAngel.name=墮天使 -entity.AWWayofTime.MinorDemonGruntGuardian.name=格倫魔守衛 -entity.AWWayofTime.MinorDemonGruntGuardianWind.name=風格倫魔守衛 -entity.AWWayofTime.MinorDemonGruntGuardianFire.name=ç«æ ¼å€«é­”守衛 -entity.AWWayofTime.MinorDemonGruntGuardianIce.name=冰格倫魔守衛 -entity.AWWayofTime.MinorDemonGruntGuardianEarth.name=土格倫魔守衛 -entity.AWWayofTime.MinorDemonGruntWind.name=風格倫魔 -entity.AWWayofTime.MinorDemonGruntFire.name=ç«æ ¼å€«é­” -entity.AWWayofTime.MinorDemonGruntIce.name=冰格倫魔 -entity.AWWayofTime.MinorDemonGruntEarth.name=土格倫魔 -entity.AWWayofTime.MinorDemonGrunt.name=格倫魔 - -#Commands -commands.soulnetwork.usage=/soulnetwork <玩家> -commands.bind.usage=/bind <玩家> -commands.bind.success=ç‰©å“æˆåŠŸç¶å®š! -commands.bind.failed.noPlayer=沒有指定玩家 -commands.bind.failed.alreadyBound=物å“已經被ç¶å®š; 使用 /unbind 來解除ç¶å®š -commands.bind.failed.notBindable=物å“無法被ç¶å®š -commands.unbind.usage=/unbind -commands.unbind.success=ç‰©å“æˆåŠŸè§£é™¤ç¶å®š! -commands.unbind.failed.notBindable=物å“無法解除ç¶å®š -commands.soulnetwork.usage=/soulnetwork <玩家> [數é‡] -commands.soulnetwork.add.success=æˆåŠŸæ·»åŠ  %dLP 到 %s çš„éˆé­‚網絡! -commands.soulnetwork.subtract.success=æˆåŠŸå¾ž %s çš„éˆé­‚網絡中減去 %dLP ! -commands.soulnetwork.fill.success=æˆåŠŸå¡«æ»¿ %s çš„éˆé­‚網絡! -commands.soulnetwork.empty.success=æˆåŠŸæŽç©º %s çš„éˆé­‚網絡! -commands.soulnetwork.get.success=ç›®å‰æœ‰ %dLP 在 %s çš„éˆé­‚網絡! -commands.soulnetwork.noPlayer=沒有指定玩家 -commands.soulnetwork.noCommand=命令ä¸å¤ è©³ç´° -commands.soulnetwork.notACommand=這䏿˜¯æœ‰æ•ˆçš„命令 - -#Tooltips -tooltip.activationcrystal.creativeonly=Creative Only - activates any ritual -tooltip.activationcrystal.lowlevelrituals=Activates low-level rituals -tooltip.activationcrystal.powerfulrituals=Activates more powerful rituals -tooltip.airsigil.desc=I feel lighter already... -tooltip.alchemy.coords=Coords: -tooltip.alchemy.damage=Damage: -tooltip.alchemy.dimension=Bound Dimension: -tooltip.alchemy.direction=Direction: -tooltip.alchemy.forrecipe=for Recipe -tooltip.alchemy.press=Press -tooltip.alchemy.recipe=Recipe: -tooltip.alchemy.ritualid=RitualID: -tooltip.alchemy.shift=shift -tooltip.alchemy.usedinalchemy=Used in Alchemy -tooltip.alchemyflask.caution=CAUTION: Contents are throwable -tooltip.alchemyflask.swigsleft=Swigs Left: -tooltip.armorinhibitor.desc1=Used to suppress a soul's -tooltip.armorinhibitor.desc2=unnatural abilities. -tooltip.attunedcrystal.desc1=A tool to tune alchemy -tooltip.attunedcrystal.desc2=reagent transmission -tooltip.blankspell.desc=Crystal of infinite possibilities. -tooltip.bloodframe.desc=Stirs bees into a frenzy. -tooltip.bloodletterpack.desc=This pack really chaffes... -tooltip.bloodlightsigil.desc=I see a light! -tooltip.boundarmor.devprotect=Devilish Protection -tooltip.boundaxe.desc=Axe me about my puns! -tooltip.boundpickaxe.desc1=The Souls of the Damned -tooltip.boundpickaxe.desc2=do not like stone... -tooltip.boundshovel.desc=No, not that type of spade. -tooltip.caution.desc1=Caution: may cause -tooltip.caution.desc2=a bad day... -tooltip.cheatyitem.desc1=Right-click to fill network, -tooltip.cheatyitem.desc2=shift-right to empty. -tooltip.complexspellcrystal.desc=Crystal of unimaginable power -tooltip.crystalbelljar.contents=Current Contents: -tooltip.crystalbelljar.empty=- Empty -tooltip.demonictelepfocus.desc1=A stronger version of the focus, -tooltip.demonictelepfocus.desc2=using a demonic shard -tooltip.demonplacer.desc=Used to spawn demons. -tooltip.destclearer.desc1=Used to clear the destination -tooltip.destclearer.desc2=list for an alchemy container -tooltip.diablokey.desc=Binds other items to the owner's network -tooltip.divinationsigil.desc1=Peer into the soul to -tooltip.divinationsigil.desc2=get the current essence -tooltip.energybazooka.desc=Boom. -tooltip.energybattery.desc=Stores raw Life Essence -tooltip.energyblast.desc1=Used to fire devastating -tooltip.energyblast.desc2=projectiles. -tooltip.enhancedtelepfocus.desc=A focus further enhanced in an altar -tooltip.fluidsigil.beastmode=Beast Mode -tooltip.fluidsigil.desc=A sigil with a lovely affinity for fluids -tooltip.fluidsigil.draintankmode=Drain Tank Mode -tooltip.fluidsigil.filltankmode=Fill Tank Mode -tooltip.fluidsigil.fluidplacementmode=Fluid Placement Mode -tooltip.fluidsigil.forcesyphonmode=Force-syphon Mode -tooltip.fluidsigil.syphoningmode=Syphoning Mode -tooltip.harvestsigil.desc=You sow what you reap -tooltip.infusedstone.desc1=Infused stone inside of -tooltip.infusedstone.desc2=a blood altar -tooltip.item.iteminslot=Item in slot -tooltip.item.currentitem=Current Item: -tooltip.lavacrystal.desc1=Store life to smelt -tooltip.lavacrystal.desc2=stuff in the furnace. -tooltip.lavasigil.desc1=Contact with liquid is -tooltip.lavasigil.desc2=highly unrecommended. -tooltip.lp.storedlp=Stored LP: -tooltip.mode.creative=Creative Only -tooltip.owner.currentowner=Current Owner: -tooltip.owner.demonsowner=Demon's Owner: -tooltip.packratsigil.desc=Hands of Diamonds -tooltip.reagent.selectedreagent=Currently selected reagent: -tooltip.reinforcedtelepfocus.desc1=A stronger version of the focus, -tooltip.reinforcedtelepfocus.desc2=using a weak shard -tooltip.ritualdiviner.airstones=Air Stones: -tooltip.ritualdiviner.blankstones=Blank Stones: -tooltip.ritualdiviner.cannotplace=Can not place Dusk runes -tooltip.ritualdiviner.canplace=Can place Dusk runes -tooltip.ritualdiviner.canplacedawn=Can place Dusk and Dawn runes -tooltip.ritualdiviner.desc=Used to explore new types of rituals -tooltip.ritualdiviner.duskstones=Dusk Stones: -tooltip.ritualdiviner.earthstones=Earth Stones: -tooltip.ritualdiviner.firestones=Fire Stones: -tooltip.ritualdiviner.moreinfo=Press shift for extended information -tooltip.ritualdiviner.ritualtunedto=Ritual tuned to face: -tooltip.ritualdiviner.waterstones=Water Stones: -tooltip.ritualdiviner.dawnstones=Dawn Stones: -tooltip.ritualdiviner.totalStones=Total Stones: -tooltip.sacrificialdagger.desc1=A slight draining feeling tickles your fingers -tooltip.sacrificialdagger.desc2=Just a prick of the -tooltip.sacrificialdagger.desc3=finger will suffice... -tooltip.sanguinearmor.desc1=A pair of goggles imbued with power -tooltip.sanguinearmor.desc2=Robes imbued with forbidden power -tooltip.sanguinearmor.visdisc=Vis discount: -tooltip.scribetool.desc=The writing is on the wall... -tooltip.seersigil.desc=When seeing all is not enough -tooltip.sigilofelementalaffinity.desc1=Perfect for a fire-breathing fish -tooltip.sigilofelementalaffinity.desc2=who is afraid of heights! -tooltip.sigilofenderseverance.desc=Put those endermen in a Dire situation! -tooltip.sigilofgrowth.desc1=Who needs a green thumb when -tooltip.sigilofgrowth.desc2=you have a green slate? -tooltip.sigilofhaste.desc=One dose of caffeine later... -tooltip.sigilofholding.desc=Used to hold several Sigils! -tooltip.sigilofmagnetism.desc=I have a very magnetic personality! -tooltip.sigilofsupression.desc=Better than telekinesis -tooltip.sigiloftheassassin.desc=Time to stay stealthy... -tooltip.sigilofthebridge.desc1=Activate to create a bridge -tooltip.sigilofthebridge.desc2=beneath your feet. -tooltip.sigilofthefastminer.desc=Keep going and going and going... -tooltip.sigilofwind.desc=Best not to wear a skirt. -tooltip.sigil.state.activated=Activated -tooltip.sigil.state.deactivated=Deactivated -tooltip.tanksegmenter.desc1=Used to designate which -tooltip.tanksegmenter.desc2=reagents can go into a container -tooltip.telepositionfocus.desc=An Enderpearl imbued with blood -tooltip.voidsigil.desc=Better than a Swiffer! -tooltip.watersigil.desc=Infinite water, anyone? -tooltip.routingFocus.limit=Limit: -tooltip.routingFocus.desc=A focus used to route items -tooltip.alchemy.usedinincense=Purifying incense used in a crucible - -#Messages -message.altar.capacity=Capacity: %s LP -message.altar.consumptionrate=Consumption Rate: -message.altar.currentessence=Altar's Current Essence: %s LP -message.altar.currenttier=Altar's Current Tier: %s -message.altar.progress=Altar's Progress: -message.altar.inputtank= Input Tank: %s LP -message.altar.outputtank= Output Tank: %s LP -message.altar.hunger=[BM] Your high regeneration rate has caused you to become hungry... -message.attunedcrystal.clearing=Clearing saved container... -message.attunedcrystal.error.cannotfind=Can no longer find linked container. -message.attunedcrystal.error.noconnections=Linked container has no connections remaining! -message.attunedcrystal.error.toofar=Linked container is either too far or is in a different dimension. -message.attunedcrystal.linked=Container is now linked. Transmitting: -message.attunedcrystal.linking=Linking to selected container. -message.attunedcrystal.setto=Attuned Crystal now set to: -message.demon.shallfollow=I shall follow and protect you! -message.demon.willstay=I will stay here for now, Master. -message.destinationclearer.cleared=Destination list now cleared. -message.divinationsigil.amount=Amount: -message.divinationsigil.currentessence=Current Essence: -message.divinationsigil.reagent=Reagent: -message.masterstone.crystalvibrates=Your crystal vibrates pathetically. -message.masterstone.energyflows=A rush of energy flows through the ritual! -message.masterstone.nothinghappened=Nothing appears to have happened... -message.masterstone.ritualresistyou=The ritual appears to actively resist you! -message.masterstone.somethingstoppedyou=Something stopped you in your tracks... -message.masterstone.youfeelapull=You feel a pull, but you are too weak to push any further. -message.ritual.currentritual=Current Ritual: -message.ritual.side.east=æ± -message.ritual.side.north=北 -message.ritual.side.south=å— -message.ritual.side.west=西 -message.ritualdemonportal.missingjar=A jar on one of the pillars appears to be missing... -message.tanksegmenter.nowhas=Tank now has -message.tanksegmenter.setto=Tank Segmenter now set to: -message.tanksegmenter.tankssetto=tank(s) set to: -message.routerfocus.limit=Focus' Item Limit set to: - -#Achievements -achievement.alchemicalwizardry:firstPrick=Your First Prick! -achievement.alchemicalwizardry:firstPrick.desc=The first drop of life into the Altar... -achievement.alchemicalwizardry:weakOrb=Faintly Glowing Red... -achievement.alchemicalwizardry:weakOrb.desc=This orb will suffice...for now... diff --git a/src/main/resources/assets/alchemicalwizardry/models/armor/BloodArmour_WIP.png b/src/main/resources/assets/alchemicalwizardry/models/armor/BloodArmour_WIP.png deleted file mode 100644 index 9b19c5fc..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/models/armor/BloodArmour_WIP.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/models/armor/OmegaEarth.png b/src/main/resources/assets/alchemicalwizardry/models/armor/OmegaEarth.png deleted file mode 100644 index 6b95f9c4..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/models/armor/OmegaEarth.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/models/armor/OmegaFire.png b/src/main/resources/assets/alchemicalwizardry/models/armor/OmegaFire.png deleted file mode 100644 index deb57fec..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/models/armor/OmegaFire.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/models/armor/OmegaWater.png b/src/main/resources/assets/alchemicalwizardry/models/armor/OmegaWater.png deleted file mode 100644 index 067fb05b..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/models/armor/OmegaWater.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/models/armor/OmegaWind.png b/src/main/resources/assets/alchemicalwizardry/models/armor/OmegaWind.png deleted file mode 100644 index 7ef69c3e..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/models/armor/OmegaWind.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/models/armor/bloodPack_layer_1.png b/src/main/resources/assets/alchemicalwizardry/models/armor/bloodPack_layer_1.png deleted file mode 100644 index 246902a9..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/models/armor/bloodPack_layer_1.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/models/armor/boundArmour_invisible_layer_1.png b/src/main/resources/assets/alchemicalwizardry/models/armor/boundArmour_invisible_layer_1.png deleted file mode 100644 index 6ec1ced0..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/models/armor/boundArmour_invisible_layer_1.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/models/armor/boundArmour_invisible_layer_2.png b/src/main/resources/assets/alchemicalwizardry/models/armor/boundArmour_invisible_layer_2.png deleted file mode 100644 index 7fe14b5e..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/models/armor/boundArmour_invisible_layer_2.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/models/armor/boundArmour_layer_1.png b/src/main/resources/assets/alchemicalwizardry/models/armor/boundArmour_layer_1.png deleted file mode 100644 index d472d41d..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/models/armor/boundArmour_layer_1.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/models/armor/boundArmour_layer_2.png b/src/main/resources/assets/alchemicalwizardry/models/armor/boundArmour_layer_2.png deleted file mode 100644 index 420ca181..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/models/armor/boundArmour_layer_2.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/models/armor/sanguineArmour_layer_1.png b/src/main/resources/assets/alchemicalwizardry/models/armor/sanguineArmour_layer_1.png deleted file mode 100644 index 3570c7e8..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/models/armor/sanguineArmour_layer_1.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/models/armor/sanguineArmour_layer_2.png b/src/main/resources/assets/alchemicalwizardry/models/armor/sanguineArmour_layer_2.png deleted file mode 100644 index 3763755b..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/models/armor/sanguineArmour_layer_2.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/models/block/soul_armour_forge.json b/src/main/resources/assets/alchemicalwizardry/models/block/soul_armour_forge.json deleted file mode 100644 index b455a113..00000000 --- a/src/main/resources/assets/alchemicalwizardry/models/block/soul_armour_forge.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "alchemicalwizardry:blocks/SoulForge" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/alchemicalwizardry/models/item/soul_armour_forge.json b/src/main/resources/assets/alchemicalwizardry/models/item/soul_armour_forge.json deleted file mode 100644 index ca3e1dff..00000000 --- a/src/main/resources/assets/alchemicalwizardry/models/item/soul_armour_forge.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent":"hemomancy:block/soul_armour_forge", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/alchemicalwizardry/schematics/building/buildings.zip b/src/main/resources/assets/alchemicalwizardry/schematics/building/buildings.zip deleted file mode 100644 index 8bd63a85..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/schematics/building/buildings.zip and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/shaders/beam.frag b/src/main/resources/assets/alchemicalwizardry/shaders/beam.frag deleted file mode 100644 index 82fccbe1..00000000 --- a/src/main/resources/assets/alchemicalwizardry/shaders/beam.frag +++ /dev/null @@ -1,12 +0,0 @@ - uniform sampler2D bgl_RenderedTexture; - uniform int time; - - void main() { - vec2 texcoord = vec2(gl_TexCoord[0]); - vec4 color = texture2D(bgl_RenderedTexture, texcoord); - - float gs = (color.r + color.g + color.b) / 3; - float r = sin(texcoord.x * 6 - 1.5 + sin(texcoord.y - time / 3.0)) * 1.1; //(sin((texcoord.x - texcoord.y) * 4 - time) + 1) / 2; - - gl_FragColor = vec4(gs, gs, max(gs, r), gl_Color.a); - } diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/AccelerationRune.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/AccelerationRune.png deleted file mode 100644 index 42015ed2..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/AccelerationRune.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/AirRitualStone.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/AirRitualStone.png deleted file mode 100644 index 73be4924..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/AirRitualStone.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/AlchemicChemistrySet.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/AlchemicChemistrySet.png deleted file mode 100644 index 23e179ab..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/AlchemicChemistrySet.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/AltarCapacityRune.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/AltarCapacityRune.png deleted file mode 100644 index 567f1315..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/AltarCapacityRune.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/ArcanePedestal.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/ArcanePedestal.png deleted file mode 100644 index 6156e3c4..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/ArcanePedestal.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/ArcanePlinth.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/ArcanePlinth.png deleted file mode 100644 index 30609eab..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/ArcanePlinth.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/BetterCapacityRune.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/BetterCapacityRune.png deleted file mode 100644 index d28ef9bf..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/BetterCapacityRune.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/BlankRune.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/BlankRune.png deleted file mode 100644 index 69f8f713..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/BlankRune.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/BlockBloodLight.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/BlockBloodLight.png deleted file mode 100644 index 67bede34..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/BlockBloodLight.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/BloodAltar_Bottom.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/BloodAltar_Bottom.png deleted file mode 100644 index 8154b3cd..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/BloodAltar_Bottom.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/BloodAltar_SideType1.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/BloodAltar_SideType1.png deleted file mode 100644 index f5d8949c..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/BloodAltar_SideType1.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/BloodAltar_SideType2.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/BloodAltar_SideType2.png deleted file mode 100644 index 2cb3bc34..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/BloodAltar_SideType2.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/BloodAltar_Top.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/BloodAltar_Top.png deleted file mode 100644 index 3bc3a60a..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/BloodAltar_Top.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/BloodSocket.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/BloodSocket.png deleted file mode 100644 index ce0abab0..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/BloodSocket.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/BloodStoneBrick.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/BloodStoneBrick.png deleted file mode 100644 index 1fd91f9e..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/BloodStoneBrick.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/Crucible_Bottom.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/Crucible_Bottom.png deleted file mode 100644 index b3fac0f7..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/Crucible_Bottom.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/Crucible_Side.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/Crucible_Side.png deleted file mode 100644 index 535b0a9a..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/Crucible_Side.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/Crucible_Top.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/Crucible_Top.png deleted file mode 100644 index ba280f66..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/Crucible_Top.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/DemonPortal.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/DemonPortal.png deleted file mode 100644 index 0183e979..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/DemonPortal.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/DislocationRune.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/DislocationRune.png deleted file mode 100644 index ed6c886f..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/DislocationRune.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/DuskRitualStone.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/DuskRitualStone.png deleted file mode 100644 index 34c6a0a4..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/DuskRitualStone.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/EarthRitualStone.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/EarthRitualStone.png deleted file mode 100644 index 4cd9d44b..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/EarthRitualStone.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/EfficiencyRune.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/EfficiencyRune.png deleted file mode 100644 index 6c950f9e..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/EfficiencyRune.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/EmptySocket.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/EmptySocket.png deleted file mode 100644 index 46c32374..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/EmptySocket.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/FireRitualStone.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/FireRitualStone.png deleted file mode 100644 index 34464e7e..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/FireRitualStone.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/GlyphEnchantability.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/GlyphEnchantability.png deleted file mode 100644 index 9b7a925c..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/GlyphEnchantability.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/GlyphEnchantmentLevel.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/GlyphEnchantmentLevel.png deleted file mode 100644 index 873fb3d4..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/GlyphEnchantmentLevel.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/GlyphStability1.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/GlyphStability1.png deleted file mode 100644 index 4d3a8245..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/GlyphStability1.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/HomHeart_bottom.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/HomHeart_bottom.png deleted file mode 100644 index de3fb1bf..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/HomHeart_bottom.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/HomHeart_side.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/HomHeart_side.png deleted file mode 100644 index 33e25e94..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/HomHeart_side.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/HomHeart_top.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/HomHeart_top.png deleted file mode 100644 index 45c4f5bb..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/HomHeart_top.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/HomHeart_top1.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/HomHeart_top1.png deleted file mode 100644 index d8ad8f9e..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/HomHeart_top1.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/ImperfectRitualStone.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/ImperfectRitualStone.png deleted file mode 100644 index dbd6b761..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/ImperfectRitualStone.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/LargeBloodStoneBrick.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/LargeBloodStoneBrick.png deleted file mode 100644 index 662473b1..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/LargeBloodStoneBrick.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/LightRitualStone.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/LightRitualStone.png deleted file mode 100644 index f89fdbcc..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/LightRitualStone.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/MasterStone.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/MasterStone.png deleted file mode 100644 index bd240989..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/MasterStone.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/OrbCapacityRune.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/OrbCapacityRune.png deleted file mode 100644 index 2845bd85..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/OrbCapacityRune.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/RitualStone.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/RitualStone.png deleted file mode 100644 index 0bd9343b..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/RitualStone.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/RuneOfSacrifice.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/RuneOfSacrifice.png deleted file mode 100644 index 20faa107..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/RuneOfSacrifice.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/RuneOfSelfSacrifice.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/RuneOfSelfSacrifice.png deleted file mode 100644 index 748a287d..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/RuneOfSelfSacrifice.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/ShardCluster.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/ShardCluster.png deleted file mode 100644 index 0eeaaf47..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/ShardCluster.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/ShardClusterBrick.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/ShardClusterBrick.png deleted file mode 100644 index c2d3e27f..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/ShardClusterBrick.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/SoulForge.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/SoulForge.png deleted file mode 100644 index 11dc21a4..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/SoulForge.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/SpectralBlock.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/SpectralBlock.png deleted file mode 100644 index 7a98c46a..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/SpectralBlock.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/SpeedRune.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/SpeedRune.png deleted file mode 100644 index 741006b5..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/SpeedRune.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/Teleposer_Side.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/Teleposer_Side.png deleted file mode 100644 index 45a0707b..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/Teleposer_Side.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/Teleposer_Top.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/Teleposer_Top.png deleted file mode 100644 index 3818b504..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/Teleposer_Top.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/Testing.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/Testing.png deleted file mode 100644 index afc0bcb0..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/Testing.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/WaterRitualStone.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/WaterRitualStone.png deleted file mode 100644 index 101908e8..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/WaterRitualStone.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/fireEffectBlock_blank.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/fireEffectBlock_blank.png deleted file mode 100644 index 29c332d4..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/fireEffectBlock_blank.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/fireEffectBlock_input.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/fireEffectBlock_input.png deleted file mode 100644 index 55345660..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/fireEffectBlock_input.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/fireEffectBlock_output.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/fireEffectBlock_output.png deleted file mode 100644 index 52490247..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/fireEffectBlock_output.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/fireEffectBlock_upArrow.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/fireEffectBlock_upArrow.png deleted file mode 100644 index 5fcbd044..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/fireEffectBlock_upArrow.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/lifeEssenceFlowing.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/lifeEssenceFlowing.png deleted file mode 100644 index 12241ce0..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/lifeEssenceFlowing.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/lifeEssenceStill.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/lifeEssenceStill.png deleted file mode 100644 index a2ceeae8..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/blocks/lifeEssenceStill.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/entities/energyBlastProjectile.png b/src/main/resources/assets/alchemicalwizardry/textures/entities/energyBlastProjectile.png deleted file mode 100644 index 91b4a55d..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/entities/energyBlastProjectile.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/entities/explosionProjectile.png b/src/main/resources/assets/alchemicalwizardry/textures/entities/explosionProjectile.png deleted file mode 100644 index 24b7a2f4..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/entities/explosionProjectile.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/entities/fireProjectile.png b/src/main/resources/assets/alchemicalwizardry/textures/entities/fireProjectile.png deleted file mode 100644 index 5a6d4f2a..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/entities/fireProjectile.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/entities/holyProjectile.png b/src/main/resources/assets/alchemicalwizardry/textures/entities/holyProjectile.png deleted file mode 100644 index 35a03e3d..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/entities/holyProjectile.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/entities/iceProjectile.png b/src/main/resources/assets/alchemicalwizardry/textures/entities/iceProjectile.png deleted file mode 100644 index 9eab38e0..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/entities/iceProjectile.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/entities/lightningProjectile.png b/src/main/resources/assets/alchemicalwizardry/textures/entities/lightningProjectile.png deleted file mode 100644 index e68e7880..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/entities/lightningProjectile.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/entities/mudProjectile.png b/src/main/resources/assets/alchemicalwizardry/textures/entities/mudProjectile.png deleted file mode 100644 index 5c8189f5..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/entities/mudProjectile.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/entities/waterProjectile.png b/src/main/resources/assets/alchemicalwizardry/textures/entities/waterProjectile.png deleted file mode 100644 index 42f35c42..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/entities/waterProjectile.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/entities/windGustProjectile.png b/src/main/resources/assets/alchemicalwizardry/textures/entities/windGustProjectile.png deleted file mode 100644 index 9bf829d9..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/entities/windGustProjectile.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/gui/HPBar1.png b/src/main/resources/assets/alchemicalwizardry/textures/gui/HPBar1.png deleted file mode 100644 index e2619401..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/gui/HPBar1.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/gui/HPBar2.png b/src/main/resources/assets/alchemicalwizardry/textures/gui/HPBar2.png deleted file mode 100644 index 826f3eac..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/gui/HPBar2.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/gui/container.png b/src/main/resources/assets/alchemicalwizardry/textures/gui/container.png deleted file mode 100644 index 742d7b69..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/gui/container.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/gui/container1.png b/src/main/resources/assets/alchemicalwizardry/textures/gui/container1.png deleted file mode 100644 index 5834e853..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/gui/container1.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/gui/guide/altar.png b/src/main/resources/assets/alchemicalwizardry/textures/gui/guide/altar.png deleted file mode 100644 index 75c61c7e..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/gui/guide/altar.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/gui/lpVial.png b/src/main/resources/assets/alchemicalwizardry/textures/gui/lpVial.png deleted file mode 100644 index 8dfcfcc9..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/gui/lpVial.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/8wWtY8d.png b/src/main/resources/assets/alchemicalwizardry/textures/items/8wWtY8d.png deleted file mode 100644 index 0e9d01e2..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/8wWtY8d.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/Aether.png b/src/main/resources/assets/alchemicalwizardry/textures/items/Aether.png deleted file mode 100644 index 9bf829d9..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/Aether.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/AirScribeTool.png b/src/main/resources/assets/alchemicalwizardry/textures/items/AirScribeTool.png deleted file mode 100644 index 574f4222..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/AirScribeTool.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/AirSigil.png b/src/main/resources/assets/alchemicalwizardry/textures/items/AirSigil.png deleted file mode 100644 index 17246bb0..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/AirSigil.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/ApprenticeBloodOrb.png b/src/main/resources/assets/alchemicalwizardry/textures/items/ApprenticeBloodOrb.png deleted file mode 100644 index 1653f049..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/ApprenticeBloodOrb.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/Aquasalus.png b/src/main/resources/assets/alchemicalwizardry/textures/items/Aquasalus.png deleted file mode 100644 index 24f96281..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/Aquasalus.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/ArchmageBloodOrb.png b/src/main/resources/assets/alchemicalwizardry/textures/items/ArchmageBloodOrb.png deleted file mode 100644 index 327d2b27..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/ArchmageBloodOrb.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/ArmourInhibitor_activated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/ArmourInhibitor_activated.png deleted file mode 100644 index ab4bf964..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/ArmourInhibitor_activated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/ArmourInhibitor_deactivated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/ArmourInhibitor_deactivated.png deleted file mode 100644 index 9b412be0..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/ArmourInhibitor_deactivated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/AttunedCrystal1.png b/src/main/resources/assets/alchemicalwizardry/textures/items/AttunedCrystal1.png deleted file mode 100644 index 5ae66ba2..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/AttunedCrystal1.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/AttunedCrystal2.png b/src/main/resources/assets/alchemicalwizardry/textures/items/AttunedCrystal2.png deleted file mode 100644 index 788a5db0..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/AttunedCrystal2.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/AverageLengtheningCatalyst.png b/src/main/resources/assets/alchemicalwizardry/textures/items/AverageLengtheningCatalyst.png deleted file mode 100644 index e2dc835e..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/AverageLengtheningCatalyst.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/AveragePowerCatalyst.png b/src/main/resources/assets/alchemicalwizardry/textures/items/AveragePowerCatalyst.png deleted file mode 100644 index bef44443..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/AveragePowerCatalyst.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/BlankSlate.png b/src/main/resources/assets/alchemicalwizardry/textures/items/BlankSlate.png deleted file mode 100644 index f9761287..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/BlankSlate.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/BlankSpell.png b/src/main/resources/assets/alchemicalwizardry/textures/items/BlankSpell.png deleted file mode 100644 index ba113199..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/BlankSpell.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/BloodFrame.png b/src/main/resources/assets/alchemicalwizardry/textures/items/BloodFrame.png deleted file mode 100644 index 717f240c..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/BloodFrame.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/BloodLightSigil.png b/src/main/resources/assets/alchemicalwizardry/textures/items/BloodLightSigil.png deleted file mode 100644 index 9223ee99..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/BloodLightSigil.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/BloodPack.png b/src/main/resources/assets/alchemicalwizardry/textures/items/BloodPack.png deleted file mode 100644 index a6d99cc8..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/BloodPack.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/BoundAxe_activated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/BoundAxe_activated.png deleted file mode 100644 index 3f332c6d..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/BoundAxe_activated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/BoundBoots.png b/src/main/resources/assets/alchemicalwizardry/textures/items/BoundBoots.png deleted file mode 100644 index 0c5e21e5..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/BoundBoots.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/BoundHelmet.png b/src/main/resources/assets/alchemicalwizardry/textures/items/BoundHelmet.png deleted file mode 100644 index 4b4b366d..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/BoundHelmet.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/BoundLeggings.png b/src/main/resources/assets/alchemicalwizardry/textures/items/BoundLeggings.png deleted file mode 100644 index 9effc699..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/BoundLeggings.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/BoundPickaxe_activated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/BoundPickaxe_activated.png deleted file mode 100644 index 88c60264..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/BoundPickaxe_activated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/BoundPickaxe_deactivated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/BoundPickaxe_deactivated.png deleted file mode 100644 index 59504032..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/BoundPickaxe_deactivated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/BoundPlate.png b/src/main/resources/assets/alchemicalwizardry/textures/items/BoundPlate.png deleted file mode 100644 index 49702f68..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/BoundPlate.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/BoundShovel_activated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/BoundShovel_activated.png deleted file mode 100644 index 8dd6dc38..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/BoundShovel_activated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/BoundSword_activated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/BoundSword_activated.png deleted file mode 100644 index 4ae9464f..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/BoundSword_activated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/BoundTool.png b/src/main/resources/assets/alchemicalwizardry/textures/items/BoundTool.png deleted file mode 100644 index f79088b6..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/BoundTool.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/BridgeSigil_activated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/BridgeSigil_activated.png deleted file mode 100644 index 37ddd604..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/BridgeSigil_activated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/BridgeSigil_deactivated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/BridgeSigil_deactivated.png deleted file mode 100644 index 88fed2b9..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/BridgeSigil_deactivated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/CeremonialDagger.png b/src/main/resources/assets/alchemicalwizardry/textures/items/CeremonialDagger.png deleted file mode 100644 index c8a666ce..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/CeremonialDagger.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/CombinationalCatalyst.png b/src/main/resources/assets/alchemicalwizardry/textures/items/CombinationalCatalyst.png deleted file mode 100644 index dc14d2dc..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/CombinationalCatalyst.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/ComplexCrystal.png b/src/main/resources/assets/alchemicalwizardry/textures/items/ComplexCrystal.png deleted file mode 100644 index a6f2ccf7..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/ComplexCrystal.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/CompressionSigil_activated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/CompressionSigil_activated.png deleted file mode 100644 index 666b1f76..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/CompressionSigil_activated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/CompressionSigil_deactivated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/CompressionSigil_deactivated.png deleted file mode 100644 index c85dde7e..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/CompressionSigil_deactivated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/Crepitous.png b/src/main/resources/assets/alchemicalwizardry/textures/items/Crepitous.png deleted file mode 100644 index 1422bd5b..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/Crepitous.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/Crystallos.png b/src/main/resources/assets/alchemicalwizardry/textures/items/Crystallos.png deleted file mode 100644 index 0ade6203..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/Crystallos.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/DaggerOfSacrifice.png b/src/main/resources/assets/alchemicalwizardry/textures/items/DaggerOfSacrifice.png deleted file mode 100644 index 2d7f4a1c..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/DaggerOfSacrifice.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/DawnScribeTool.png b/src/main/resources/assets/alchemicalwizardry/textures/items/DawnScribeTool.png deleted file mode 100644 index cd420037..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/DawnScribeTool.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/DemonBloodShard.png b/src/main/resources/assets/alchemicalwizardry/textures/items/DemonBloodShard.png deleted file mode 100644 index 0aa05b5c..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/DemonBloodShard.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/DemonPlacer.png b/src/main/resources/assets/alchemicalwizardry/textures/items/DemonPlacer.png deleted file mode 100644 index 371ffac6..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/DemonPlacer.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/DemonSlate.png b/src/main/resources/assets/alchemicalwizardry/textures/items/DemonSlate.png deleted file mode 100644 index ca195b9e..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/DemonSlate.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/DemonicTeleposerFocus.png b/src/main/resources/assets/alchemicalwizardry/textures/items/DemonicTeleposerFocus.png deleted file mode 100644 index 72f3c036..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/DemonicTeleposerFocus.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/DiabloKey.png b/src/main/resources/assets/alchemicalwizardry/textures/items/DiabloKey.png deleted file mode 100644 index e0537ee7..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/DiabloKey.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/DivinationSigil.png b/src/main/resources/assets/alchemicalwizardry/textures/items/DivinationSigil.png deleted file mode 100644 index 53dd25c7..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/DivinationSigil.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/DuskScribeTool.png b/src/main/resources/assets/alchemicalwizardry/textures/items/DuskScribeTool.png deleted file mode 100644 index b7e2aeab..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/DuskScribeTool.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/EarthScribeTool.png b/src/main/resources/assets/alchemicalwizardry/textures/items/EarthScribeTool.png deleted file mode 100644 index a7f197a4..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/EarthScribeTool.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/ElementalSigil_activated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/ElementalSigil_activated.png deleted file mode 100644 index 04c3aafc..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/ElementalSigil_activated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/ElementalSigil_deactivated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/ElementalSigil_deactivated.png deleted file mode 100644 index f91496e1..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/ElementalSigil_deactivated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/EnergyBattery.png b/src/main/resources/assets/alchemicalwizardry/textures/items/EnergyBattery.png deleted file mode 100644 index 1ab960d1..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/EnergyBattery.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/EnergyBazooka_activated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/EnergyBazooka_activated.png deleted file mode 100644 index ddd369fe..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/EnergyBazooka_activated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/EnergyBlaster_activated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/EnergyBlaster_activated.png deleted file mode 100644 index 2e245f2f..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/EnergyBlaster_activated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/EnhancedFillingAgent.png b/src/main/resources/assets/alchemicalwizardry/textures/items/EnhancedFillingAgent.png deleted file mode 100644 index 17137014..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/EnhancedFillingAgent.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/EnhancedTeleposerFocus.png b/src/main/resources/assets/alchemicalwizardry/textures/items/EnhancedTeleposerFocus.png deleted file mode 100644 index 06436a18..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/EnhancedTeleposerFocus.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/FireScribeTool.png b/src/main/resources/assets/alchemicalwizardry/textures/items/FireScribeTool.png deleted file mode 100644 index 537d7a23..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/FireScribeTool.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/GreaterLengtheningCatalyst.png b/src/main/resources/assets/alchemicalwizardry/textures/items/GreaterLengtheningCatalyst.png deleted file mode 100644 index dd7811a1..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/GreaterLengtheningCatalyst.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/GreaterPowerCatalyst.png b/src/main/resources/assets/alchemicalwizardry/textures/items/GreaterPowerCatalyst.png deleted file mode 100644 index 8d1ad0c5..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/GreaterPowerCatalyst.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/GrowthSigil_activated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/GrowthSigil_activated.png deleted file mode 100644 index e970db38..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/GrowthSigil_activated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/GrowthSigil_deactivated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/GrowthSigil_deactivated.png deleted file mode 100644 index 49925f0f..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/GrowthSigil_deactivated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/HarvestGoddessSigil_activated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/HarvestGoddessSigil_activated.png deleted file mode 100644 index 2dd8d1ff..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/HarvestGoddessSigil_activated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/HarvestGoddessSigil_deactivated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/HarvestGoddessSigil_deactivated.png deleted file mode 100644 index 399a73a9..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/HarvestGoddessSigil_deactivated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/HasteSigil_activated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/HasteSigil_activated.png deleted file mode 100644 index b264b6e0..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/HasteSigil_activated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/HasteSigil_deactivated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/HasteSigil_deactivated.png deleted file mode 100644 index aff173d7..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/HasteSigil_deactivated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/IceSigil_activated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/IceSigil_activated.png deleted file mode 100644 index 30ff69d3..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/IceSigil_activated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/IceSigil_deactivated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/IceSigil_deactivated.png deleted file mode 100644 index 19ea4b56..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/IceSigil_deactivated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/Incendium.png b/src/main/resources/assets/alchemicalwizardry/textures/items/Incendium.png deleted file mode 100644 index 6bd023dc..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/Incendium.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/InfusedSlate.png b/src/main/resources/assets/alchemicalwizardry/textures/items/InfusedSlate.png deleted file mode 100644 index 88d13950..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/InfusedSlate.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/InputRoutingFocus.png b/src/main/resources/assets/alchemicalwizardry/textures/items/InputRoutingFocus.png deleted file mode 100644 index de371ed4..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/InputRoutingFocus.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/LavaCrystal.png b/src/main/resources/assets/alchemicalwizardry/textures/items/LavaCrystal.png deleted file mode 100644 index 688b6091..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/LavaCrystal.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/LavaSigil.png b/src/main/resources/assets/alchemicalwizardry/textures/items/LavaSigil.png deleted file mode 100644 index 0179cf94..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/LavaSigil.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/LifeBucket.png b/src/main/resources/assets/alchemicalwizardry/textures/items/LifeBucket.png deleted file mode 100644 index 52756dbf..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/LifeBucket.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/Magicales.png b/src/main/resources/assets/alchemicalwizardry/textures/items/Magicales.png deleted file mode 100644 index e078a01b..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/Magicales.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/MagicianBloodOrb.png b/src/main/resources/assets/alchemicalwizardry/textures/items/MagicianBloodOrb.png deleted file mode 100644 index eaf11afb..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/MagicianBloodOrb.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/MailOrder.png b/src/main/resources/assets/alchemicalwizardry/textures/items/MailOrder.png deleted file mode 100644 index 788f8f5e..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/MailOrder.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/MasterBloodOrb.png b/src/main/resources/assets/alchemicalwizardry/textures/items/MasterBloodOrb.png deleted file mode 100644 index 3a448cf2..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/MasterBloodOrb.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/MiningSigil_activated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/MiningSigil_activated.png deleted file mode 100644 index 8b25db87..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/MiningSigil_activated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/MiningSigil_deactivated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/MiningSigil_deactivated.png deleted file mode 100644 index 3d80e351..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/MiningSigil_deactivated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/MundaneLengtheningCatalyst.png b/src/main/resources/assets/alchemicalwizardry/textures/items/MundaneLengtheningCatalyst.png deleted file mode 100644 index ce906c35..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/MundaneLengtheningCatalyst.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/MundanePowerCatalyst.png b/src/main/resources/assets/alchemicalwizardry/textures/items/MundanePowerCatalyst.png deleted file mode 100644 index 217fc375..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/MundanePowerCatalyst.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaBoots_earth.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaBoots_earth.png deleted file mode 100644 index 9a9e1910..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaBoots_earth.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaBoots_fire.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaBoots_fire.png deleted file mode 100644 index c8e54acc..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaBoots_fire.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaBoots_water.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaBoots_water.png deleted file mode 100644 index af845690..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaBoots_water.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaBoots_wind.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaBoots_wind.png deleted file mode 100644 index 40984f9f..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaBoots_wind.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaHelmet_earth.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaHelmet_earth.png deleted file mode 100644 index bae4d153..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaHelmet_earth.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaHelmet_fire.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaHelmet_fire.png deleted file mode 100644 index 8baaf35a..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaHelmet_fire.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaHelmet_water.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaHelmet_water.png deleted file mode 100644 index 73d11c79..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaHelmet_water.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaHelmet_wind.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaHelmet_wind.png deleted file mode 100644 index b236bd22..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaHelmet_wind.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaLeggings_earth.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaLeggings_earth.png deleted file mode 100644 index f1086c31..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaLeggings_earth.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaLeggings_fire.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaLeggings_fire.png deleted file mode 100644 index d6638272..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaLeggings_fire.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaLeggings_water.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaLeggings_water.png deleted file mode 100644 index 3db1612b..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaLeggings_water.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaLeggings_wind.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaLeggings_wind.png deleted file mode 100644 index 262d2d88..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaLeggings_wind.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaPlate_earth.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaPlate_earth.png deleted file mode 100644 index 708ed4ed..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaPlate_earth.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaPlate_fire.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaPlate_fire.png deleted file mode 100644 index b010bbfb..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaPlate_fire.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaPlate_water.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaPlate_water.png deleted file mode 100644 index c12cc41c..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaPlate_water.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaPlate_wind.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaPlate_wind.png deleted file mode 100644 index 02b734be..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/OmegaPlate_wind.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OutputRoutingFocusGlobal.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OutputRoutingFocusGlobal.png deleted file mode 100644 index d32942d5..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/OutputRoutingFocusGlobal.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OutputRoutingFocusIgnMeta.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OutputRoutingFocusIgnMeta.png deleted file mode 100644 index 0265f368..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/OutputRoutingFocusIgnMeta.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OutputRoutingFocusMatchNBT.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OutputRoutingFocusMatchNBT.png deleted file mode 100644 index 834ed8f6..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/OutputRoutingFocusMatchNBT.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OutputRoutingFocusModItems.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OutputRoutingFocusModItems.png deleted file mode 100644 index dc7d0b26..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/OutputRoutingFocusModItems.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/PotionFlask.png b/src/main/resources/assets/alchemicalwizardry/textures/items/PotionFlask.png deleted file mode 100644 index b0d3231e..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/PotionFlask.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/ReinforcedSlate.png b/src/main/resources/assets/alchemicalwizardry/textures/items/ReinforcedSlate.png deleted file mode 100644 index 0084030f..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/ReinforcedSlate.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/ReinforcedTeleposerFocus.png b/src/main/resources/assets/alchemicalwizardry/textures/items/ReinforcedTeleposerFocus.png deleted file mode 100644 index 0ff4f129..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/ReinforcedTeleposerFocus.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/RitualDiviner.png b/src/main/resources/assets/alchemicalwizardry/textures/items/RitualDiviner.png deleted file mode 100644 index 8e61b052..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/RitualDiviner.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/SacrificialDagger.png b/src/main/resources/assets/alchemicalwizardry/textures/items/SacrificialDagger.png deleted file mode 100644 index 28cb9378..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/SacrificialDagger.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/Sanctus.png b/src/main/resources/assets/alchemicalwizardry/textures/items/Sanctus.png deleted file mode 100644 index 21dbc74a..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/Sanctus.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/SanguineBoots.png b/src/main/resources/assets/alchemicalwizardry/textures/items/SanguineBoots.png deleted file mode 100644 index 2294a81b..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/SanguineBoots.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/SanguineHelmet.png b/src/main/resources/assets/alchemicalwizardry/textures/items/SanguineHelmet.png deleted file mode 100644 index e64e7a75..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/SanguineHelmet.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/SanguineLeggings.png b/src/main/resources/assets/alchemicalwizardry/textures/items/SanguineLeggings.png deleted file mode 100644 index 5c4c4727..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/SanguineLeggings.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/SanguinePlate.png b/src/main/resources/assets/alchemicalwizardry/textures/items/SanguinePlate.png deleted file mode 100644 index 8114d71c..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/SanguinePlate.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/SeerSigil.png b/src/main/resources/assets/alchemicalwizardry/textures/items/SeerSigil.png deleted file mode 100644 index f2f6c0a0..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/SeerSigil.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/SheathedItem.png b/src/main/resources/assets/alchemicalwizardry/textures/items/SheathedItem.png deleted file mode 100644 index beec20e9..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/SheathedItem.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfHolding.png b/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfHolding.png deleted file mode 100644 index 0eb3443c..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfHolding.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfMagnetism_activated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfMagnetism_activated.png deleted file mode 100644 index 47427490..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfMagnetism_activated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfMagnetism_deactivated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfMagnetism_deactivated.png deleted file mode 100644 index d740b00c..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfMagnetism_deactivated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfSeverance_activated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfSeverance_activated.png deleted file mode 100644 index 2311f509..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfSeverance_activated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfSeverance_deactivated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfSeverance_deactivated.png deleted file mode 100644 index 7fcc68cd..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfSeverance_deactivated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfSupression_activated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfSupression_activated.png deleted file mode 100644 index eb2d7dee..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfSupression_activated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfSupression_deactivated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfSupression_deactivated.png deleted file mode 100644 index b8d835a3..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/SigilOfSupression_deactivated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/SimpleCatalyst.png b/src/main/resources/assets/alchemicalwizardry/textures/items/SimpleCatalyst.png deleted file mode 100644 index 3fb0f327..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/SimpleCatalyst.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/StandardBindingAgent.png b/src/main/resources/assets/alchemicalwizardry/textures/items/StandardBindingAgent.png deleted file mode 100644 index 64d2cacb..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/StandardBindingAgent.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/StandardFillingAgent.png b/src/main/resources/assets/alchemicalwizardry/textures/items/StandardFillingAgent.png deleted file mode 100644 index 4e4c8f45..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/StandardFillingAgent.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/TankClearer.png b/src/main/resources/assets/alchemicalwizardry/textures/items/TankClearer.png deleted file mode 100644 index 3a077c2c..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/TankClearer.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/TankSegmenter1.png b/src/main/resources/assets/alchemicalwizardry/textures/items/TankSegmenter1.png deleted file mode 100644 index 18dd85b0..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/TankSegmenter1.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/TankSegmenter2.png b/src/main/resources/assets/alchemicalwizardry/textures/items/TankSegmenter2.png deleted file mode 100644 index a9a3ba6d..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/TankSegmenter2.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/TeleposerFocus.png b/src/main/resources/assets/alchemicalwizardry/textures/items/TeleposerFocus.png deleted file mode 100644 index 6d9533fa..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/TeleposerFocus.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/Tennebrae.png b/src/main/resources/assets/alchemicalwizardry/textures/items/Tennebrae.png deleted file mode 100644 index e4768e22..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/Tennebrae.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/Terrae.png b/src/main/resources/assets/alchemicalwizardry/textures/items/Terrae.png deleted file mode 100644 index 81e1154a..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/Terrae.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/TranscendentBloodOrb.png b/src/main/resources/assets/alchemicalwizardry/textures/items/TranscendentBloodOrb.png deleted file mode 100644 index 5066e683..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/TranscendentBloodOrb.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/UntamedCrystal.png b/src/main/resources/assets/alchemicalwizardry/textures/items/UntamedCrystal.png deleted file mode 100644 index 651bd068..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/UntamedCrystal.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/VoidSigil.png b/src/main/resources/assets/alchemicalwizardry/textures/items/VoidSigil.png deleted file mode 100644 index dc133cdf..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/VoidSigil.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/WarriorSigil_activated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/WarriorSigil_activated.png deleted file mode 100644 index 592ff422..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/WarriorSigil_activated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/WarriorSigil_deactivated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/WarriorSigil_deactivated.png deleted file mode 100644 index 41c0b81d..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/WarriorSigil_deactivated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/WaterScribeTool.png b/src/main/resources/assets/alchemicalwizardry/textures/items/WaterScribeTool.png deleted file mode 100644 index 69b8f722..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/WaterScribeTool.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/WaterSigil.png b/src/main/resources/assets/alchemicalwizardry/textures/items/WaterSigil.png deleted file mode 100644 index dfd095b5..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/WaterSigil.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/WeakBindingAgent.png b/src/main/resources/assets/alchemicalwizardry/textures/items/WeakBindingAgent.png deleted file mode 100644 index 2cf917b9..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/WeakBindingAgent.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/WeakBloodShard.png b/src/main/resources/assets/alchemicalwizardry/textures/items/WeakBloodShard.png deleted file mode 100644 index b09932c4..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/WeakBloodShard.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/WeakFillingAgent.png b/src/main/resources/assets/alchemicalwizardry/textures/items/WeakFillingAgent.png deleted file mode 100644 index d9b054ee..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/WeakFillingAgent.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/WindSigil_activated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/WindSigil_activated.png deleted file mode 100644 index df200e2b..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/WindSigil_activated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/WindSigil_deactivated.png b/src/main/resources/assets/alchemicalwizardry/textures/items/WindSigil_deactivated.png deleted file mode 100644 index bfb6ab4d..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/WindSigil_deactivated.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/activationCrystalAwakened.png b/src/main/resources/assets/alchemicalwizardry/textures/items/activationCrystalAwakened.png deleted file mode 100644 index 7fb3dd1f..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/activationCrystalAwakened.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/activationCrystalCreative.png b/src/main/resources/assets/alchemicalwizardry/textures/items/activationCrystalCreative.png deleted file mode 100644 index d6ee0b77..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/activationCrystalCreative.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/activationCrystalWeak.png b/src/main/resources/assets/alchemicalwizardry/textures/items/activationCrystalWeak.png deleted file mode 100644 index d6ee0b77..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/activationCrystalWeak.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemConcentratedCatalyst.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemConcentratedCatalyst.png deleted file mode 100644 index 21976c29..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemConcentratedCatalyst.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemFracturedBone.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemFracturedBone.png deleted file mode 100644 index 930bffde..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemFracturedBone.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemOffensa.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemOffensa.png deleted file mode 100644 index e5829ea3..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemOffensa.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemOrbisTerrae.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemOrbisTerrae.png deleted file mode 100644 index 33ffb99d..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemOrbisTerrae.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemPotentia.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemPotentia.png deleted file mode 100644 index d2ed68a8..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemPotentia.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemPraesidium.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemPraesidium.png deleted file mode 100644 index 8bcc782c..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemPraesidium.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemReductus.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemReductus.png deleted file mode 100644 index 304784d3..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemReductus.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemStrengthenedCatalyst.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemStrengthenedCatalyst.png deleted file mode 100644 index dbc9c8aa..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemStrengthenedCatalyst.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemVirtus.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemVirtus.png deleted file mode 100644 index f2fee006..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseAlchemyItemVirtus.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseIncenseItem.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseIncenseItem.png deleted file mode 100644 index 0cec47e7..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseIncenseItem.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseIncenseItemWoodash.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseIncenseItemWoodash.png deleted file mode 100644 index e5829ea3..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseIncenseItemWoodash.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemCostCore.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemCostCore.png deleted file mode 100644 index 1fdfd2d4..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemCostCore.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemCrackedRunicPlate.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemCrackedRunicPlate.png deleted file mode 100644 index 934477e5..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemCrackedRunicPlate.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemDefaultCore.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemDefaultCore.png deleted file mode 100644 index e9fa7764..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemDefaultCore.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemDefensiveCore.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemDefensiveCore.png deleted file mode 100644 index 49c595c3..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemDefensiveCore.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemEarthenCore.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemEarthenCore.png deleted file mode 100644 index d275736f..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemEarthenCore.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemEmptyCore.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemEmptyCore.png deleted file mode 100644 index 0f63c293..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemEmptyCore.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemEnderShard.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemEnderShard.png deleted file mode 100644 index b8783acc..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemEnderShard.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemEnvironmentalCore.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemEnvironmentalCore.png deleted file mode 100644 index b1adfb2a..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemEnvironmentalCore.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemEtherealSlate.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemEtherealSlate.png deleted file mode 100644 index 1c7b912c..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemEtherealSlate.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemFlameCore.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemFlameCore.png deleted file mode 100644 index 73eeeaf0..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemFlameCore.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemGustCore.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemGustCore.png deleted file mode 100644 index 27874a4c..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemGustCore.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemIcyCore.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemIcyCore.png deleted file mode 100644 index 1c918c5e..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemIcyCore.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemInputCable.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemInputCable.png deleted file mode 100644 index 5a4a6fc0..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemInputCable.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemLifeBrace.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemLifeBrace.png deleted file mode 100644 index 578790ef..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemLifeBrace.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemLifeShard.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemLifeShard.png deleted file mode 100644 index 14e5237d..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemLifeShard.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemMagicalesCable.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemMagicalesCable.png deleted file mode 100644 index 40606587..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemMagicalesCable.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemMeleeCore.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemMeleeCore.png deleted file mode 100644 index 77af8723..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemMeleeCore.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemObsidianBrace.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemObsidianBrace.png deleted file mode 100644 index b4016353..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemObsidianBrace.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemOffensiveCore.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemOffensiveCore.png deleted file mode 100644 index 33dc2d42..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemOffensiveCore.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemOutputCable.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemOutputCable.png deleted file mode 100644 index b947d783..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemOutputCable.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemParadigmBackPlate.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemParadigmBackPlate.png deleted file mode 100644 index 2b84b976..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemParadigmBackPlate.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemPotencyCore.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemPotencyCore.png deleted file mode 100644 index a4d993e8..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemPotencyCore.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemPowerCore.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemPowerCore.png deleted file mode 100644 index 870c6135..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemPowerCore.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemProjectileCore.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemProjectileCore.png deleted file mode 100644 index 6719e820..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemProjectileCore.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemQuartzRod.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemQuartzRod.png deleted file mode 100644 index 46e59b32..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemQuartzRod.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemRunicPlate.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemRunicPlate.png deleted file mode 100644 index 6f6a6e08..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemRunicPlate.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemScribedRunicPlate.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemScribedRunicPlate.png deleted file mode 100644 index 3b9891e0..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemScribedRunicPlate.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemSelfCore.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemSelfCore.png deleted file mode 100644 index e7e9bab6..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemSelfCore.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemSoulRunicPlate.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemSoulRunicPlate.png deleted file mode 100644 index d92eb06d..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemSoulRunicPlate.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemSoulShard.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemSoulShard.png deleted file mode 100644 index 13420bd1..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemSoulShard.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemStoneBrace.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemStoneBrace.png deleted file mode 100644 index 5a110322..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemStoneBrace.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemToolCore.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemToolCore.png deleted file mode 100644 index f6dd600b..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemToolCore.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemWoodBrace.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemWoodBrace.png deleted file mode 100644 index 329d46bc..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemWoodBrace.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/bloodBlastOrn.png b/src/main/resources/assets/alchemicalwizardry/textures/items/bloodBlastOrn.png deleted file mode 100644 index 1e15fd72..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/bloodBlastOrn.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/focusBloodBlastOrn.png b/src/main/resources/assets/alchemicalwizardry/textures/items/focusBloodBlastOrn.png deleted file mode 100644 index b18a4ad0..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/focusBloodBlastOrn.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/guide.png b/src/main/resources/assets/alchemicalwizardry/textures/items/guide.png deleted file mode 100644 index 75a93c14..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/guide.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/outputRoutingFocus.png b/src/main/resources/assets/alchemicalwizardry/textures/items/outputRoutingFocus.png deleted file mode 100644 index 90a36900..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/outputRoutingFocus.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/ritual_dismantler.png b/src/main/resources/assets/alchemicalwizardry/textures/items/ritual_dismantler.png deleted file mode 100644 index 2f68300f..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/ritual_dismantler.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/tYf5ft9.png b/src/main/resources/assets/alchemicalwizardry/textures/items/tYf5ft9.png deleted file mode 100644 index 052c7ca3..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/items/tYf5ft9.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/altars/T1.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/altars/T1.png deleted file mode 100644 index e7832840..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/altars/T1.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/altars/T2.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/altars/T2.png deleted file mode 100644 index 847e93c0..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/altars/T2.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/altars/T3.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/altars/T3.png deleted file mode 100644 index 35554e58..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/altars/T3.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/altars/T4.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/altars/T4.png deleted file mode 100644 index 3729d3cc..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/altars/T4.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/altars/T5.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/altars/T5.png deleted file mode 100644 index e3f3721f..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/altars/T5.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/altars/T6.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/altars/T6.png deleted file mode 100644 index f5ca90fb..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/altars/T6.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/demons/Ring1.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/demons/Ring1.png deleted file mode 100644 index c460e4d4..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/demons/Ring1.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/demons/Ring2.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/demons/Ring2.png deleted file mode 100644 index ff13a8e6..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/demons/Ring2.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Alchemy.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Alchemy.png deleted file mode 100644 index 2211390f..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Alchemy.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/AnimalGrowth.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/AnimalGrowth.png deleted file mode 100644 index e34d938e..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/AnimalGrowth.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/BeatingAnvil.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/BeatingAnvil.png deleted file mode 100644 index c5594175..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/BeatingAnvil.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Binding.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Binding.png deleted file mode 100644 index 18d7f24e..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Binding.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Containment.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Containment.png deleted file mode 100644 index 39b403a6..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Containment.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Convocation.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Convocation.png deleted file mode 100644 index 36a21666..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Convocation.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Crusher.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Crusher.png deleted file mode 100644 index 0865cd0c..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Crusher.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Dome.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Dome.png deleted file mode 100644 index b893f447..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Dome.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Ellipsoid.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Ellipsoid.png deleted file mode 100644 index 484bd725..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Ellipsoid.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/EternalSoul.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/EternalSoul.png deleted file mode 100644 index 5deb1de4..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/EternalSoul.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Evaporation.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Evaporation.png deleted file mode 100644 index b47a7ce0..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Evaporation.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Expulsion.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Expulsion.png deleted file mode 100644 index 4a6db8d3..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Expulsion.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/FeatheredEarth.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/FeatheredEarth.png deleted file mode 100644 index c48ef1f8..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/FeatheredEarth.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/FeatheredKnife.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/FeatheredKnife.png deleted file mode 100644 index d76aebe2..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/FeatheredKnife.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Flight.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Flight.png deleted file mode 100644 index 872a4798..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Flight.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Gaia.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Gaia.png deleted file mode 100644 index 339a9c3a..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Gaia.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/GreenGrove.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/GreenGrove.png deleted file mode 100644 index 2448f30b..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/GreenGrove.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Harvest.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Harvest.png deleted file mode 100644 index 71c95e44..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Harvest.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Interdiction.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Interdiction.png deleted file mode 100644 index 4205d547..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Interdiction.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Jump.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Jump.png deleted file mode 100644 index 89b8db73..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Jump.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Lava.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Lava.png deleted file mode 100644 index c0897fad..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Lava.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Magnetism.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Magnetism.png deleted file mode 100644 index 75e445f8..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Magnetism.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Meteor.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Meteor.png deleted file mode 100644 index c575e5c4..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Meteor.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/PhantomHands.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/PhantomHands.png deleted file mode 100644 index 416613da..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/PhantomHands.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Regeneration.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Regeneration.png deleted file mode 100644 index 2eda58c3..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Regeneration.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Sacrosanctity.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Sacrosanctity.png deleted file mode 100644 index a072e5d5..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Sacrosanctity.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Speed.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Speed.png deleted file mode 100644 index 586c961b..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Speed.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/StallingOmega.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/StallingOmega.png deleted file mode 100644 index bb92129f..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/StallingOmega.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Stomach.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Stomach.png deleted file mode 100644 index 5be69237..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Stomach.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/SymmetryOmega.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/SymmetryOmega.png deleted file mode 100644 index 43983c42..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/SymmetryOmega.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Unbinding.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Unbinding.png deleted file mode 100644 index 8cca65a8..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Unbinding.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/VeilOfEvil.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/VeilOfEvil.png deleted file mode 100644 index 559ab5ab..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/VeilOfEvil.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Water.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Water.png deleted file mode 100644 index c6845989..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Water.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/WellOfSuffering.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/WellOfSuffering.png deleted file mode 100644 index 1439455f..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/WellOfSuffering.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Zephyr.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Zephyr.png deleted file mode 100644 index e3973b43..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/rituals/Zephyr.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/spells/Conduit.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/spells/Conduit.png deleted file mode 100644 index 10e6db82..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/spells/Conduit.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/spells/Effect.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/spells/Effect.png deleted file mode 100644 index 9b246208..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/spells/Effect.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/spells/Enhancement.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/spells/Enhancement.png deleted file mode 100644 index 11e208b7..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/spells/Enhancement.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/spells/Modifier.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/spells/Modifier.png deleted file mode 100644 index c1584287..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/spells/Modifier.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/spells/Paradigm.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/spells/Paradigm.png deleted file mode 100644 index c0ab4873..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/spells/Paradigm.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/spells/SimpleSpellTable.png b/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/spells/SimpleSpellTable.png deleted file mode 100644 index f5d9cb6c..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/misc/screenshots/spells/SimpleSpellTable.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/AirFloatingBeacon.png b/src/main/resources/assets/alchemicalwizardry/textures/models/AirFloatingBeacon.png deleted file mode 100644 index 81fd4705..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/AirFloatingBeacon.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemicalCalcinator.png b/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemicalCalcinator.png deleted file mode 100644 index 1cd15356..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemicalCalcinator.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemyArrays/GreenGroveArray.png b/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemyArrays/GreenGroveArray.png deleted file mode 100644 index 5411368b..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemyArrays/GreenGroveArray.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemyArrays/InterdictionArray.png b/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemyArrays/InterdictionArray.png deleted file mode 100644 index bbe559ca..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemyArrays/InterdictionArray.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemyArrays/LavaArray.png b/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemyArrays/LavaArray.png deleted file mode 100644 index bb55e898..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemyArrays/LavaArray.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemyArrays/MagnetismArray.png b/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemyArrays/MagnetismArray.png deleted file mode 100644 index 6630b54b..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemyArrays/MagnetismArray.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemyArrays/WaterArray.png b/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemyArrays/WaterArray.png deleted file mode 100644 index e75a578b..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemyArrays/WaterArray.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemyArrays/WellOfSufferingArray.png b/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemyArrays/WellOfSufferingArray.png deleted file mode 100644 index c5c63f6a..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/AlchemyArrays/WellOfSufferingArray.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/BileDemon.png b/src/main/resources/assets/alchemicalwizardry/textures/models/BileDemon.png deleted file mode 100644 index 724f306f..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/BileDemon.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/Bird.png b/src/main/resources/assets/alchemicalwizardry/textures/models/Bird.png deleted file mode 100644 index e4c22ee4..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/Bird.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/BlockSpellEffect.png b/src/main/resources/assets/alchemicalwizardry/textures/models/BlockSpellEffect.png deleted file mode 100644 index e22b9c40..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/BlockSpellEffect.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/BoulderFist.png b/src/main/resources/assets/alchemicalwizardry/textures/models/BoulderFist.png deleted file mode 100644 index 92839932..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/BoulderFist.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/Conduit.png b/src/main/resources/assets/alchemicalwizardry/textures/models/Conduit.png deleted file mode 100644 index f37beb5a..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/Conduit.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/CrystalBelljar.png b/src/main/resources/assets/alchemicalwizardry/textures/models/CrystalBelljar.png deleted file mode 100644 index 253adf89..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/CrystalBelljar.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/DarkFloatingBeacon.png b/src/main/resources/assets/alchemicalwizardry/textures/models/DarkFloatingBeacon.png deleted file mode 100644 index 11b2099d..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/DarkFloatingBeacon.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/EarthFloatingBeacon.png b/src/main/resources/assets/alchemicalwizardry/textures/models/EarthFloatingBeacon.png deleted file mode 100644 index bc116b2f..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/EarthFloatingBeacon.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/EnergyBazookaMainProjectile.png b/src/main/resources/assets/alchemicalwizardry/textures/models/EnergyBazookaMainProjectile.png deleted file mode 100644 index 6be1c2b5..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/EnergyBazookaMainProjectile.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/FireFloatingBeacon.png b/src/main/resources/assets/alchemicalwizardry/textures/models/FireFloatingBeacon.png deleted file mode 100644 index f1ac14e6..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/FireFloatingBeacon.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/FloatingBeacon.png b/src/main/resources/assets/alchemicalwizardry/textures/models/FloatingBeacon.png deleted file mode 100644 index 7882bb35..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/FloatingBeacon.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/HolyFloatingBeacon.png b/src/main/resources/assets/alchemicalwizardry/textures/models/HolyFloatingBeacon.png deleted file mode 100644 index 5f775e02..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/HolyFloatingBeacon.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/IceDemon.png b/src/main/resources/assets/alchemicalwizardry/textures/models/IceDemon.png deleted file mode 100644 index 6cb34978..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/IceDemon.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/LowerGuardian.png b/src/main/resources/assets/alchemicalwizardry/textures/models/LowerGuardian.png deleted file mode 100644 index aa6b2c24..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/LowerGuardian.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/Meteor.png b/src/main/resources/assets/alchemicalwizardry/textures/models/Meteor.png deleted file mode 100644 index 194d9843..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/Meteor.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_earth.png b/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_earth.png deleted file mode 100644 index 2291a4df..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_earth.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_fire.png b/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_fire.png deleted file mode 100644 index de542b68..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_fire.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_ice.png b/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_ice.png deleted file mode 100644 index 237947df..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_ice.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_normal.png b/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_normal.png deleted file mode 100644 index 03ed5904..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_normal.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_wind.png b/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_wind.png deleted file mode 100644 index 9d713d0f..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_wind.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGrunt_earth.png b/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGrunt_earth.png deleted file mode 100644 index af1bc47a..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGrunt_earth.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGrunt_fire.png b/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGrunt_fire.png deleted file mode 100644 index 8380027a..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGrunt_fire.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGrunt_ice.png b/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGrunt_ice.png deleted file mode 100644 index 256626ac..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGrunt_ice.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGrunt_normal.png b/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGrunt_normal.png deleted file mode 100644 index cc17580c..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGrunt_normal.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGrunt_wind.png b/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGrunt_wind.png deleted file mode 100644 index 2e148f0c..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGrunt_wind.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/ParadigmBlock.png b/src/main/resources/assets/alchemicalwizardry/textures/models/ParadigmBlock.png deleted file mode 100644 index 062cfc79..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/ParadigmBlock.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/Pedestal.png b/src/main/resources/assets/alchemicalwizardry/textures/models/Pedestal.png deleted file mode 100644 index 818dd50a..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/Pedestal.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/Plinth.png b/src/main/resources/assets/alchemicalwizardry/textures/models/Plinth.png deleted file mode 100644 index df115798..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/Plinth.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/ShadeMob.png b/src/main/resources/assets/alchemicalwizardry/textures/models/ShadeMob.png deleted file mode 100644 index 7c346a35..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/ShadeMob.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SmallEarthGolem.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SmallEarthGolem.png deleted file mode 100644 index d4e5b8a7..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SmallEarthGolem.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEffectEarth.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEffectEarth.png deleted file mode 100644 index eeb026bc..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEffectEarth.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEffectFire.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEffectFire.png deleted file mode 100644 index f079a183..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEffectFire.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEffectIce.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEffectIce.png deleted file mode 100644 index 33b61d44..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEffectIce.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEffectWind.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEffectWind.png deleted file mode 100644 index 6270aa80..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEffectWind.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementCost1.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementCost1.png deleted file mode 100644 index 187b9603..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementCost1.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementCost2.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementCost2.png deleted file mode 100644 index 0a340ef7..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementCost2.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementCost3.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementCost3.png deleted file mode 100644 index 34e4a954..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementCost3.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementCost4.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementCost4.png deleted file mode 100644 index 8e4327bd..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementCost4.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPotency1.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPotency1.png deleted file mode 100644 index 1266816f..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPotency1.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPotency2.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPotency2.png deleted file mode 100644 index 918a2906..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPotency2.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPotency3.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPotency3.png deleted file mode 100644 index d74001fe..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPotency3.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPotency4.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPotency4.png deleted file mode 100644 index 99448544..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPotency4.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower1.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower1.png deleted file mode 100644 index fb711dc2..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower1.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower2.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower2.png deleted file mode 100644 index c1d61b2e..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower2.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower3.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower3.png deleted file mode 100644 index 7150c0b7..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower3.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower4.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower4.png deleted file mode 100644 index 492e505e..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower4.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellModifierDefault.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellModifierDefault.png deleted file mode 100644 index f72ff9f8..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellModifierDefault.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellModifierDefensive.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellModifierDefensive.png deleted file mode 100644 index 1dbdeed6..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellModifierDefensive.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellModifierEnvironmental.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellModifierEnvironmental.png deleted file mode 100644 index a7b5dfbe..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellModifierEnvironmental.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellModifierOffensive.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellModifierOffensive.png deleted file mode 100644 index ee6afa49..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellModifierOffensive.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellParadigmMelee.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellParadigmMelee.png deleted file mode 100644 index c74a2dd8..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellParadigmMelee.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellParadigmProjectile.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellParadigmProjectile.png deleted file mode 100644 index f579c028..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellParadigmProjectile.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellParadigmSelf.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellParadigmSelf.png deleted file mode 100644 index 17aeabb5..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellParadigmSelf.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellParadigmTool.png b/src/main/resources/assets/alchemicalwizardry/textures/models/SpellParadigmTool.png deleted file mode 100644 index 4296e387..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/SpellParadigmTool.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/TransCircle.png b/src/main/resources/assets/alchemicalwizardry/textures/models/TransCircle.png deleted file mode 100644 index ecda29fc..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/TransCircle.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/TransCircleBinding.png b/src/main/resources/assets/alchemicalwizardry/textures/models/TransCircleBinding.png deleted file mode 100644 index cc54eda5..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/TransCircleBinding.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/TransCircleDemon.png b/src/main/resources/assets/alchemicalwizardry/textures/models/TransCircleDemon.png deleted file mode 100644 index 87c4ad7a..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/TransCircleDemon.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/TransCircleSuffering.png b/src/main/resources/assets/alchemicalwizardry/textures/models/TransCircleSuffering.png deleted file mode 100644 index 52963252..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/TransCircleSuffering.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/WaterFloatingBeacon.png b/src/main/resources/assets/alchemicalwizardry/textures/models/WaterFloatingBeacon.png deleted file mode 100644 index b545bbf0..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/WaterFloatingBeacon.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/WingedAngel.png b/src/main/resources/assets/alchemicalwizardry/textures/models/WingedAngel.png deleted file mode 100644 index 4ae2cfd5..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/WingedAngel.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/WingedFireDemon.png b/src/main/resources/assets/alchemicalwizardry/textures/models/WingedFireDemon.png deleted file mode 100644 index 0e365bab..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/WingedFireDemon.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/WritingTable.png b/src/main/resources/assets/alchemicalwizardry/textures/models/WritingTable.png deleted file mode 100644 index 5aa176e4..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/WritingTable.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/altar.png b/src/main/resources/assets/alchemicalwizardry/textures/models/altar.png deleted file mode 100644 index 6b6ac12e..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/altar.png and /dev/null differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/baseItemToolCore.png b/src/main/resources/assets/alchemicalwizardry/textures/models/baseItemToolCore.png deleted file mode 100644 index 3c171d98..00000000 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/models/baseItemToolCore.png and /dev/null differ diff --git a/src/main/resources/assets/bloodmagic/blockstates/alchemy_array.json b/src/main/resources/assets/bloodmagic/blockstates/alchemy_array.json new file mode 100644 index 00000000..38eed1f0 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/alchemy_array.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/blockalchemyarray" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/alchemytable.json b/src/main/resources/assets/bloodmagic/blockstates/alchemytable.json new file mode 100644 index 00000000..3e963f47 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/alchemytable.json @@ -0,0 +1,31 @@ +{ + "variants": { + "direction=north,invisible=false": { + "model": "bloodmagic:block/alchemytable", + "y": 90 + }, + "direction=south,invisible=false": { + "model": "bloodmagic:block/alchemytable", + "y": 270 + }, + "direction=east,invisible=false": { + "model": "bloodmagic:block/alchemytable", + "y": 180 + }, + "direction=west,invisible=false": { + "model": "bloodmagic:block/alchemytable" + }, + "direction=north,invisible=true": { + "model": "bloodmagic:block/alchemytable_invis" + }, + "direction=south,invisible=true": { + "model": "bloodmagic:block/alchemytable_invis" + }, + "direction=east,invisible=true": { + "model": "bloodmagic:block/alchemytable_invis" + }, + "direction=west,invisible=true": { + "model": "bloodmagic:block/alchemytable_invis" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/altar.json b/src/main/resources/assets/bloodmagic/blockstates/altar.json new file mode 100644 index 00000000..256d4acd --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/altar.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/bloodaltar" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demoncrucible.json b/src/main/resources/assets/bloodmagic/blockstates/demoncrucible.json new file mode 100644 index 00000000..376ae6c6 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demoncrucible.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/demoncrucible" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demoncrystallizer.json b/src/main/resources/assets/bloodmagic/blockstates/demoncrystallizer.json new file mode 100644 index 00000000..b309aac3 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demoncrystallizer.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/demoncrystallizer" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demonpylon.json b/src/main/resources/assets/bloodmagic/blockstates/demonpylon.json new file mode 100644 index 00000000..a3f6b11a --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demonpylon.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/demonpylon" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/ethereal_mimic.json b/src/main/resources/assets/bloodmagic/blockstates/ethereal_mimic.json new file mode 100644 index 00000000..8ea12c85 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/ethereal_mimic.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "bloodmagic:block/ethereal_mimic" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/incensealtar.json b/src/main/resources/assets/bloodmagic/blockstates/incensealtar.json new file mode 100644 index 00000000..a625a8b1 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/incensealtar.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/incensealtar" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/mimic.json b/src/main/resources/assets/bloodmagic/blockstates/mimic.json new file mode 100644 index 00000000..697c5514 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/mimic.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "bloodmagic:block/opaquemimic" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/soulforge.json b/src/main/resources/assets/bloodmagic/blockstates/soulforge.json new file mode 100644 index 00000000..12e4803a --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/soulforge.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/soulforge" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/alchemicalwizardry/gui/bookleft.png b/src/main/resources/assets/bloodmagic/gui/bookleft.png similarity index 100% rename from src/main/resources/assets/alchemicalwizardry/gui/bookleft.png rename to src/main/resources/assets/bloodmagic/gui/bookleft.png diff --git a/src/main/resources/assets/bloodmagic/gui/jei/alchemy.png b/src/main/resources/assets/bloodmagic/gui/jei/alchemy.png new file mode 100644 index 00000000..a84a5220 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/gui/jei/alchemy.png differ diff --git a/src/main/resources/assets/bloodmagic/gui/jei/alchemytable.png b/src/main/resources/assets/bloodmagic/gui/jei/alchemytable.png new file mode 100644 index 00000000..b4e27d58 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/gui/jei/alchemytable.png differ diff --git a/src/main/resources/assets/bloodmagic/gui/jei/altar.png b/src/main/resources/assets/bloodmagic/gui/jei/altar.png new file mode 100644 index 00000000..50607365 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/gui/jei/altar.png differ diff --git a/src/main/resources/assets/bloodmagic/gui/jei/arc.png b/src/main/resources/assets/bloodmagic/gui/jei/arc.png new file mode 100644 index 00000000..3c507024 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/gui/jei/arc.png differ diff --git a/src/main/resources/assets/bloodmagic/gui/jei/binding.png b/src/main/resources/assets/bloodmagic/gui/jei/binding.png new file mode 100644 index 00000000..390049da Binary files /dev/null and b/src/main/resources/assets/bloodmagic/gui/jei/binding.png differ diff --git a/src/main/resources/assets/bloodmagic/gui/jei/soulforge.png b/src/main/resources/assets/bloodmagic/gui/jei/soulforge.png new file mode 100644 index 00000000..d19cf8e7 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/gui/jei/soulforge.png differ diff --git a/src/main/resources/assets/bloodmagic/gui/sigilholding.png b/src/main/resources/assets/bloodmagic/gui/sigilholding.png new file mode 100644 index 00000000..d3468096 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/gui/sigilholding.png differ diff --git a/src/main/resources/assets/alchemicalwizardry/gui/Teleposer.png b/src/main/resources/assets/bloodmagic/gui/teleposer.png similarity index 100% rename from src/main/resources/assets/alchemicalwizardry/gui/Teleposer.png rename to src/main/resources/assets/bloodmagic/gui/teleposer.png diff --git a/src/main/resources/assets/bloodmagic/gui/writingtable.png b/src/main/resources/assets/bloodmagic/gui/writingtable.png new file mode 100644 index 00000000..9a873fc2 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/gui/writingtable.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/alchemy_array/divination_array_1.png b/src/main/resources/assets/bloodmagic/images/entries/alchemy_array/divination_array_1.png new file mode 100644 index 00000000..d2e4c7c4 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/alchemy_array/divination_array_1.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/alchemy_array/divination_array_2.png b/src/main/resources/assets/bloodmagic/images/entries/alchemy_array/divination_array_2.png new file mode 100644 index 00000000..a6d20ae3 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/alchemy_array/divination_array_2.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/alchemy_array/simple_array.png b/src/main/resources/assets/bloodmagic/images/entries/alchemy_array/simple_array.png new file mode 100644 index 00000000..04771848 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/alchemy_array/simple_array.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/alchemy_table/alchemy_table_gui.png b/src/main/resources/assets/bloodmagic/images/entries/alchemy_table/alchemy_table_gui.png new file mode 100644 index 00000000..ace6e562 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/alchemy_table/alchemy_table_gui.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t1.png b/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t1.png new file mode 100644 index 00000000..bb04d3d8 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t1.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t2_1.png b/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t2_1.png new file mode 100644 index 00000000..5eb54019 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t2_1.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t2_2.png b/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t2_2.png new file mode 100644 index 00000000..c3d953db Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t2_2.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t3_1.png b/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t3_1.png new file mode 100644 index 00000000..8d93789b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t3_1.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t3_2.png b/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t3_2.png new file mode 100644 index 00000000..2d362a8d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t3_2.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t4_1.png b/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t4_1.png new file mode 100644 index 00000000..d0f5bc83 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t4_1.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t4_2.png b/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t4_2.png new file mode 100644 index 00000000..9f16d8f0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/altar/altar_t4_2.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/demon_will/demon_crucible.png b/src/main/resources/assets/bloodmagic/images/entries/demon_will/demon_crucible.png new file mode 100644 index 00000000..143c444f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/demon_will/demon_crucible.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/demon_will/demon_will.png b/src/main/resources/assets/bloodmagic/images/entries/demon_will/demon_will.png new file mode 100644 index 00000000..f75a0af8 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/demon_will/demon_will.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/demon_will/snare_particles.png b/src/main/resources/assets/bloodmagic/images/entries/demon_will/snare_particles.png new file mode 100644 index 00000000..b8723d3e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/demon_will/snare_particles.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/demon_will/will_splitting.png b/src/main/resources/assets/bloodmagic/images/entries/demon_will/will_splitting.png new file mode 100644 index 00000000..9c0f66d0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/demon_will/will_splitting.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/divination_sigil.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/divination_sigil.png new file mode 100644 index 00000000..e50354ec Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/divination_sigil.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/grove_sigil1.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/grove_sigil1.png new file mode 100644 index 00000000..b9855936 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/grove_sigil1.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/grove_sigil2.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/grove_sigil2.png new file mode 100644 index 00000000..dc31e01c Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/grove_sigil2.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/grove_sigil3.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/grove_sigil3.png new file mode 100644 index 00000000..5dc6f01f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/grove_sigil3.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/lava_sigil1.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/lava_sigil1.png new file mode 100644 index 00000000..8eee1885 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/lava_sigil1.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/lava_sigil2.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/lava_sigil2.png new file mode 100644 index 00000000..083b1862 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/lava_sigil2.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/mining_sigil1.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/mining_sigil1.png new file mode 100644 index 00000000..7b8ed509 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/mining_sigil1.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/mining_sigil2.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/mining_sigil2.png new file mode 100644 index 00000000..223eb030 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/mining_sigil2.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/seer_sigil_info.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/seer_sigil_info.png new file mode 100644 index 00000000..afb33dab Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/seer_sigil_info.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/water_sigil1.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/water_sigil1.png new file mode 100644 index 00000000..cf6e7ee9 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/water_sigil1.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/water_sigil2.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/water_sigil2.png new file mode 100644 index 00000000..e94e2021 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/water_sigil2.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar.png b/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar.png new file mode 100644 index 00000000..617e26c0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar1.png b/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar1.png new file mode 100644 index 00000000..24a50817 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar1.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar2.png b/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar2.png new file mode 100644 index 00000000..1a4ae8cf Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar2.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar3.png b/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar3.png new file mode 100644 index 00000000..a8cb9062 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar3.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar4.png b/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar4.png new file mode 100644 index 00000000..dbdfe60e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar4.png differ diff --git a/src/main/resources/assets/bloodmagic/models/armor/livingarmour_layer_1.png b/src/main/resources/assets/bloodmagic/models/armor/livingarmour_layer_1.png new file mode 100644 index 00000000..9d3658dd Binary files /dev/null and b/src/main/resources/assets/bloodmagic/models/armor/livingarmour_layer_1.png differ diff --git a/src/main/resources/assets/bloodmagic/models/armor/livingarmour_layer_2.png b/src/main/resources/assets/bloodmagic/models/armor/livingarmour_layer_2.png new file mode 100644 index 00000000..0ad04f7a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/models/armor/livingarmour_layer_2.png differ diff --git a/src/main/resources/assets/bloodmagic/models/armor/sacrificearmour_layer_1.png b/src/main/resources/assets/bloodmagic/models/armor/sacrificearmour_layer_1.png new file mode 100644 index 00000000..db260f2f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/models/armor/sacrificearmour_layer_1.png differ diff --git a/src/main/resources/assets/bloodmagic/models/armor/selfsacrificearmour_layer_1.png b/src/main/resources/assets/bloodmagic/models/armor/selfsacrificearmour_layer_1.png new file mode 100644 index 00000000..98048cbf Binary files /dev/null and b/src/main/resources/assets/bloodmagic/models/armor/selfsacrificearmour_layer_1.png differ diff --git a/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_corrosive_layer_1.png b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_corrosive_layer_1.png new file mode 100644 index 00000000..a1f3b53f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_corrosive_layer_1.png differ diff --git a/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_corrosive_layer_2.png b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_corrosive_layer_2.png new file mode 100644 index 00000000..f31effeb Binary files /dev/null and b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_corrosive_layer_2.png differ diff --git a/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_destructive_layer_1.png b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_destructive_layer_1.png new file mode 100644 index 00000000..7f000064 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_destructive_layer_1.png differ diff --git a/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_destructive_layer_2.png b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_destructive_layer_2.png new file mode 100644 index 00000000..4228a2ef Binary files /dev/null and b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_destructive_layer_2.png differ diff --git a/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_layer_1.png b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_layer_1.png new file mode 100644 index 00000000..79a2b1db Binary files /dev/null and b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_layer_1.png differ diff --git a/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_layer_2.png b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_layer_2.png new file mode 100644 index 00000000..184ad5c6 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_layer_2.png differ diff --git a/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_steadfast_layer_1.png b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_steadfast_layer_1.png new file mode 100644 index 00000000..834c126b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_steadfast_layer_1.png differ diff --git a/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_steadfast_layer_2.png b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_steadfast_layer_2.png new file mode 100644 index 00000000..c2a85f7b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_steadfast_layer_2.png differ diff --git a/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_vengeful_layer_1.png b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_vengeful_layer_1.png new file mode 100644 index 00000000..d1a85eb2 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_vengeful_layer_1.png differ diff --git a/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_vengeful_layer_2.png b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_vengeful_layer_2.png new file mode 100644 index 00000000..66b73bca Binary files /dev/null and b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_vengeful_layer_2.png differ diff --git a/src/main/resources/assets/bloodmagic/models/block/alchemytable.json b/src/main/resources/assets/bloodmagic/models/block/alchemytable.json new file mode 100644 index 00000000..60db6215 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/alchemytable.json @@ -0,0 +1,10 @@ +{ + "parent": "block/block", + "loader": "forge:obj", + "flip-v": true, + "model": "bloodmagic:models/block/modelalchemytable.obj", + "textures": { + "default": "bloodmagic:models/alchemytable", + "particle": "#default" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/alchemytable_invis.json b/src/main/resources/assets/bloodmagic/models/block/alchemytable_invis.json new file mode 100644 index 00000000..24550069 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/alchemytable_invis.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "bloodmagic:models/alchemytable" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/blockalchemyarray.json b/src/main/resources/assets/bloodmagic/models/block/blockalchemyarray.json new file mode 100644 index 00000000..7cb890db --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockalchemyarray.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "bloodmagic:models/AlchemyArrays/StupidArray" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/block/blockaltar.mtl b/src/main/resources/assets/bloodmagic/models/block/blockaltar.mtl new file mode 100644 index 00000000..983345f9 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockaltar.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl Meta +#Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +#Ks 0.8 0.8 0.8 +d 1 +#illum 2 +map_Kd bloodmagic:models/altar \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/blockaltar.obj b/src/main/resources/assets/bloodmagic/models/block/blockaltar.obj new file mode 100644 index 00000000..0d33a216 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockaltar.obj @@ -0,0 +1,390 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib blockaltar.mtl +o Shape1 +v 0.000000 0.500000 1.000000 +v 0.000000 -0.000000 1.000000 +v 1.000000 -0.000000 1.000000 +v 1.000000 0.500000 1.000000 +v 1.000000 0.500000 -0.000000 +v 1.000000 0.000000 -0.000000 +v 0.000000 0.000000 -0.000000 +v 0.000000 0.500000 -0.000000 +v 0.068534 0.771784 -0.108243 +v 0.022324 0.024636 -0.154453 +v -0.154453 0.024636 0.022324 +v -0.108243 0.771784 0.068534 +v 0.067862 0.750000 0.244638 +v 0.021652 0.002853 0.198428 +v 0.198428 0.002853 0.021651 +v 0.244638 0.750000 0.067862 +v 1.108243 0.771784 0.068534 +v 1.154453 0.024636 0.022324 +v 0.977676 0.024636 -0.154453 +v 0.931466 0.771784 -0.108243 +v 0.755362 0.750000 0.067862 +v 0.801572 0.002853 0.021651 +v 0.978348 0.002853 0.198428 +v 0.932138 0.750000 0.244638 +v 0.000000 0.750000 1.000000 +v 0.000000 0.500000 1.000000 +v 1.000000 0.500000 1.000000 +v 1.000000 0.750000 1.000000 +v 1.000000 0.750000 0.812500 +v 1.000000 0.500000 0.812500 +v 0.000000 0.500000 0.812500 +v 0.000000 0.750000 0.812500 +v 0.000000 0.750000 0.187500 +v 0.000000 0.500000 0.187500 +v 1.000000 0.500000 0.187500 +v 1.000000 0.750000 0.187500 +v 1.000000 0.750000 -0.000000 +v 1.000000 0.500000 -0.000000 +v 0.000000 0.500000 -0.000000 +v 0.000000 0.750000 -0.000000 +v 0.000000 0.750000 0.812500 +v 0.000000 0.500000 0.812500 +v 0.187500 0.500000 0.812500 +v 0.187500 0.750000 0.812500 +v 0.187500 0.750000 0.187500 +v 0.187500 0.500000 0.187500 +v 0.000000 0.500000 0.187500 +v 0.000000 0.750000 0.187500 +v 0.931466 0.771784 1.108243 +v 0.977676 0.024636 1.154453 +v 1.154453 0.024636 0.977676 +v 1.108243 0.771784 0.931466 +v 0.932138 0.750000 0.755362 +v 0.978348 0.002853 0.801571 +v 0.801572 0.002852 0.978348 +v 0.755362 0.750000 0.932138 +v -0.108243 0.771784 0.931466 +v -0.154453 0.024636 0.977676 +v 0.022324 0.024636 1.154453 +v 0.068534 0.771784 1.108243 +v 0.244638 0.750000 0.932138 +v 0.198428 0.002852 0.978348 +v 0.021652 0.002853 0.801571 +v 0.067862 0.750000 0.755362 +v 0.812500 0.750000 0.812500 +v 0.812500 0.500000 0.812500 +v 1.000000 0.500000 0.812500 +v 1.000000 0.750000 0.812500 +v 1.000000 0.750000 0.187500 +v 1.000000 0.500000 0.187500 +v 0.812500 0.500000 0.187500 +v 0.812500 0.750000 0.187500 +v 0.375000 0.687500 1.000000 +v 0.375000 0.002615 1.059905 +v 0.625000 0.002615 1.059905 +v 0.625000 0.687500 1.000000 +v 0.625000 0.665716 0.750951 +v 0.625000 -0.019169 0.810856 +v 0.375000 -0.019169 0.810856 +v 0.375000 0.665716 0.750951 +v 0.625000 0.687500 -0.000000 +v 0.625000 0.002615 -0.059905 +v 0.375000 0.002615 -0.059905 +v 0.375000 0.687500 -0.000000 +v 0.375000 0.665716 0.249049 +v 0.375000 -0.019169 0.189144 +v 0.625000 -0.019169 0.189144 +v 0.625000 0.665716 0.249049 +v 1.000000 0.687500 0.625000 +v 1.059905 0.002615 0.625000 +v 1.059905 0.002615 0.375000 +v 1.000000 0.687500 0.375000 +v 0.750951 0.665716 0.375000 +v 0.810856 -0.019169 0.375000 +v 0.810856 -0.019169 0.625000 +v 0.750951 0.665716 0.625000 +v 0.000000 0.687500 0.375000 +v -0.059905 0.002615 0.375000 +v -0.059905 0.002615 0.625000 +v 0.000000 0.687500 0.625000 +v 0.249049 0.665716 0.625000 +v 0.189144 -0.019169 0.625000 +v 0.189144 -0.019169 0.375000 +v 0.249049 0.665716 0.375000 +vt 0.125000 0.875000 +vt 0.125000 0.812500 +vt 0.250000 0.812500 +vt 0.250000 0.875000 +vt 0.375000 0.875000 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.875000 +vt 0.125000 1.000000 +vt 0.250000 1.000000 +vt 0.375000 1.000000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.156250 0.531250 +vt 0.156250 0.437500 +vt 0.187500 0.437500 +vt 0.187500 0.531250 +vt 0.218750 0.531250 +vt 0.218750 0.437500 +vt 0.250000 0.437500 +vt 0.250000 0.531250 +vt 0.156250 0.562500 +vt 0.187500 0.562500 +vt 0.218750 0.562500 +vt 0.125000 0.531250 +vt 0.125000 0.437500 +vt 0.031250 0.531250 +vt 0.031250 0.437500 +vt 0.062500 0.437500 +vt 0.062500 0.531250 +vt 0.093750 0.531250 +vt 0.093750 0.437500 +vt 0.031250 0.562500 +vt 0.062500 0.562500 +vt 0.093750 0.562500 +vt 0.000000 0.531250 +vt 0.000000 0.437500 +vt 0.023438 0.789062 +vt 0.023438 0.757812 +vt 0.148438 0.757812 +vt 0.148438 0.789062 +vt 0.171875 0.789062 +vt 0.171875 0.757812 +vt 0.296875 0.757812 +vt 0.296875 0.789062 +vt 0.023438 0.812500 +vt 0.148438 0.812500 +vt 0.273438 0.789062 +vt 0.273438 0.812500 +vt 0.000000 0.789062 +vt 0.000000 0.757812 +vt 0.023438 0.734375 +vt 0.023438 0.703125 +vt 0.148438 0.703125 +vt 0.148438 0.734375 +vt 0.171875 0.734375 +vt 0.171875 0.703125 +vt 0.296875 0.703125 +vt 0.296875 0.734375 +vt 0.273438 0.734375 +vt 0.273438 0.757812 +vt 0.000000 0.734375 +vt 0.000000 0.703125 +vt 0.367188 0.734375 +vt 0.367188 0.703125 +vt 0.390625 0.703125 +vt 0.390625 0.734375 +vt 0.468750 0.734375 +vt 0.468750 0.703125 +vt 0.492188 0.703125 +vt 0.492188 0.734375 +vt 0.367188 0.812500 +vt 0.390625 0.812500 +vt 0.414062 0.734375 +vt 0.414062 0.812500 +vt 0.289062 0.734375 +vt 0.289062 0.703125 +vt 0.156250 0.671875 +vt 0.156250 0.578125 +vt 0.187500 0.578125 +vt 0.187500 0.671875 +vt 0.218750 0.671875 +vt 0.218750 0.578125 +vt 0.250000 0.578125 +vt 0.250000 0.671875 +vt 0.156250 0.703125 +vt 0.187500 0.703125 +vt 0.218750 0.703125 +vt 0.125000 0.671875 +vt 0.125000 0.578125 +vt 0.031250 0.671875 +vt 0.031250 0.578125 +vt 0.062500 0.578125 +vt 0.062500 0.671875 +vt 0.093750 0.671875 +vt 0.093750 0.578125 +vt 0.031250 0.703125 +vt 0.062500 0.703125 +vt 0.093750 0.703125 +vt 0.000000 0.671875 +vt 0.000000 0.578125 +vt 0.367188 0.625000 +vt 0.367188 0.593750 +vt 0.390625 0.593750 +vt 0.390625 0.625000 +vt 0.468750 0.625000 +vt 0.468750 0.593750 +vt 0.492188 0.593750 +vt 0.492188 0.625000 +vt 0.414062 0.625000 +vt 0.414062 0.703125 +vt 0.289062 0.625000 +vt 0.289062 0.593750 +vt 0.031250 0.281250 +vt 0.031250 0.195312 +vt 0.062500 0.195312 +vt 0.062500 0.281250 +vt 0.093750 0.281250 +vt 0.093750 0.195312 +vt 0.125000 0.195312 +vt 0.125000 0.281250 +vt 0.031250 0.312500 +vt 0.062500 0.312500 +vt 0.093750 0.312500 +vt 0.000000 0.281250 +vt 0.000000 0.195312 +vt 0.031250 0.140625 +vt 0.031250 0.054688 +vt 0.062500 0.054688 +vt 0.062500 0.140625 +vt 0.093750 0.140625 +vt 0.093750 0.054688 +vt 0.125000 0.054688 +vt 0.125000 0.140625 +vt 0.031250 0.171875 +vt 0.062500 0.171875 +vt 0.093750 0.171875 +vt 0.000000 0.140625 +vt 0.000000 0.054688 +vt 0.156250 0.140625 +vt 0.156250 0.054688 +vt 0.187500 0.054688 +vt 0.187500 0.140625 +vt 0.218750 0.140625 +vt 0.218750 0.054688 +vt 0.250000 0.054688 +vt 0.250000 0.140625 +vt 0.156250 0.171875 +vt 0.187500 0.171875 +vt 0.218750 0.171875 +vt 0.156250 0.281250 +vt 0.156250 0.195312 +vt 0.187500 0.195312 +vt 0.187500 0.281250 +vt 0.218750 0.281250 +vt 0.218750 0.195312 +vt 0.250000 0.195312 +vt 0.250000 0.281250 +vt 0.156250 0.312500 +vt 0.187500 0.312500 +vt 0.218750 0.312500 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn -0.704400 0.087100 -0.704400 +vn 0.704400 -0.087100 0.704400 +vn 0.061600 0.996200 0.061600 +vn -0.061600 -0.996200 -0.061600 +vn -0.707100 -0.000000 0.707100 +vn 0.707100 0.000000 -0.707100 +vn 0.704400 0.087100 -0.704400 +vn -0.704400 -0.087100 0.704400 +vn -0.061600 0.996200 0.061600 +vn 0.061600 -0.996200 -0.061600 +vn -0.707100 0.000000 -0.707100 +vn 0.707100 -0.000000 0.707100 +vn 0.704400 0.087100 0.704400 +vn -0.704400 -0.087100 -0.704400 +vn -0.061600 0.996200 -0.061600 +vn 0.061600 -0.996200 0.061600 +vn -0.704400 0.087100 0.704400 +vn 0.704400 -0.087100 -0.704400 +vn 0.061600 0.996200 -0.061600 +vn -0.061600 -0.996200 0.061600 +vn 0.000000 0.087100 0.996200 +vn 0.000000 -0.087100 -0.996200 +vn 0.000000 0.996200 -0.087100 +vn 0.000000 -0.996200 0.087100 +vn 0.000000 0.087100 -0.996200 +vn 0.000000 -0.087100 0.996200 +vn 0.000000 0.996200 0.087100 +vn 0.000000 -0.996200 -0.087100 +vn 0.996200 0.087100 0.000000 +vn -0.996200 -0.087100 0.000000 +vn -0.087100 0.996200 0.000000 +vn 0.087100 -0.996200 0.000000 +vn -0.996200 0.087100 0.000000 +vn 0.996200 -0.087100 0.000000 +vn 0.087100 0.996200 0.000000 +vn -0.087100 -0.996200 0.000000 +usemtl Meta +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 8/9/3 1/1/3 4/4/3 5/10/3 +f 2/5/4 7/11/4 6/10/4 3/4/4 +f 5/5/5 4/4/5 3/3/5 6/6/5 +f 8/12/6 7/13/6 2/2/6 1/1/6 +f 9/14/7 10/15/7 11/16/7 12/17/7 +f 13/18/8 14/19/8 15/20/8 16/21/8 +f 16/22/9 9/14/9 12/17/9 13/23/9 +f 10/18/10 15/24/10 14/23/10 11/17/10 +f 13/18/11 12/17/11 11/16/11 14/19/11 +f 16/25/12 15/26/12 10/15/12 9/14/12 +f 17/27/13 18/28/13 19/29/13 20/30/13 +f 21/31/14 22/32/14 23/26/14 24/25/14 +f 24/33/15 17/27/15 20/30/15 21/34/15 +f 18/31/16 23/35/16 22/34/16 19/30/16 +f 21/31/17 20/30/17 19/29/17 22/32/17 +f 24/36/18 23/37/18 18/28/18 17/27/18 +f 25/38/1 26/39/1 27/40/1 28/41/1 +f 29/42/2 30/43/2 31/44/2 32/45/2 +f 32/46/3 25/38/3 28/41/3 29/47/3 +f 26/48/4 31/49/4 30/47/4 27/41/4 +f 29/42/5 28/41/5 27/40/5 30/43/5 +f 32/50/6 31/51/6 26/39/6 25/38/6 +f 33/52/1 34/53/1 35/54/1 36/55/1 +f 37/56/2 38/57/2 39/58/2 40/59/2 +f 40/39/3 33/52/3 36/55/3 37/40/3 +f 34/60/4 39/61/4 38/40/4 35/55/4 +f 37/56/5 36/55/5 35/54/5 38/57/5 +f 40/62/6 39/63/6 34/53/6 33/52/6 +f 41/64/1 42/65/1 43/66/1 44/67/1 +f 45/68/2 46/69/2 47/70/2 48/71/2 +f 48/72/3 41/64/3 44/67/3 45/73/3 +f 42/74/4 47/75/4 46/73/4 43/67/4 +f 45/68/5 44/67/5 43/66/5 46/69/5 +f 48/76/6 47/77/6 42/65/6 41/64/6 +f 49/78/19 50/79/19 51/80/19 52/81/19 +f 53/82/20 54/83/20 55/84/20 56/85/20 +f 56/86/21 49/78/21 52/81/21 53/87/21 +f 50/82/22 55/88/22 54/87/22 51/81/22 +f 53/82/12 52/81/12 51/80/12 54/83/12 +f 56/89/11 55/90/11 50/79/11 49/78/11 +f 57/91/23 58/92/23 59/93/23 60/94/23 +f 61/95/24 62/96/24 63/90/24 64/89/24 +f 64/97/25 57/91/25 60/94/25 61/98/25 +f 58/95/26 63/99/26 62/98/26 59/94/26 +f 61/95/18 60/94/18 59/93/18 62/96/18 +f 64/100/17 63/101/17 58/92/17 57/91/17 +f 65/102/1 66/103/1 67/104/1 68/105/1 +f 69/106/2 70/107/2 71/108/2 72/109/2 +f 72/65/3 65/102/3 68/105/3 69/66/3 +f 66/110/4 71/111/4 70/66/4 67/105/4 +f 69/106/5 68/105/5 67/104/5 70/107/5 +f 72/112/6 71/113/6 66/103/6 65/102/6 +f 73/114/27 74/115/27 75/116/27 76/117/27 +f 77/118/28 78/119/28 79/120/28 80/121/28 +f 80/122/29 73/114/29 76/117/29 77/123/29 +f 74/118/30 79/124/30 78/123/30 75/117/30 +f 77/118/5 76/117/5 75/116/5 78/119/5 +f 80/125/6 79/126/6 74/115/6 73/114/6 +f 81/127/31 82/128/31 83/129/31 84/130/31 +f 85/131/32 86/132/32 87/133/32 88/134/32 +f 88/135/33 81/127/33 84/130/33 85/136/33 +f 82/131/34 87/137/34 86/136/34 83/130/34 +f 85/131/6 84/130/6 83/129/6 86/132/6 +f 88/138/5 87/139/5 82/128/5 81/127/5 +f 89/140/35 90/141/35 91/142/35 92/143/35 +f 93/144/36 94/145/36 95/146/36 96/147/36 +f 96/148/37 89/140/37 92/143/37 93/149/37 +f 90/144/38 95/150/38 94/149/38 91/143/38 +f 93/144/2 92/143/2 91/142/2 94/145/2 +f 96/134/1 95/133/1 90/141/1 89/140/1 +f 97/151/39 98/152/39 99/153/39 100/154/39 +f 101/155/40 102/156/40 103/157/40 104/158/40 +f 104/159/41 97/151/41 100/154/41 101/160/41 +f 98/155/42 103/161/42 102/160/42 99/154/42 +f 101/155/1 100/154/1 99/153/1 102/156/1 +f 104/121/2 103/120/2 98/152/2 97/151/2 diff --git a/src/main/resources/assets/bloodmagic/models/block/blockblank.json b/src/main/resources/assets/bloodmagic/models/block/blockblank.json new file mode 100644 index 00000000..3e405550 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockblank.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "from": [ 0, 0, 0 ], + "to": [ 0, 0, 0 ], + "faces": { + "up": { "uv": [ 16, 0, 0, 16 ], "texture": "bloodmagic:empty" }, + "down": { "uv": [ 16, 0, 0, 16 ], "texture": "bloodmagic:empty" }, + "north": { "uv": [ 16, 0, 0, 16 ], "texture": "bloodmagic:empty" }, + "south": { "uv": [ 16, 0, 0, 16 ], "texture": "bloodmagic:empty" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "bloodmagic:empty" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "bloodmagic:empty" } + } + } + ] +} + diff --git a/src/main/resources/assets/bloodmagic/models/block/blockbloodlight.json b/src/main/resources/assets/bloodmagic/models/block/blockbloodlight.json new file mode 100644 index 00000000..5a2673b2 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockbloodlight.json @@ -0,0 +1,15 @@ +{ + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 0, 0, 0 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/blockbloodtank.json b/src/main/resources/assets/bloodmagic/models/block/blockbloodtank.json new file mode 100644 index 00000000..8ec58735 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockbloodtank.json @@ -0,0 +1,433 @@ +{ + "__comment": "Copyright © InsomniaKitten 2017", + "textures": { + "particle": "bloodmagic:blocks/BlankRune", + "texture": "bloodmagic:blocks/BloodTank" + }, + "elements": [ + { + "__comment": "Voxels-80FF00", + "from": [ 3, 0, 3 ], + "to": [ 13, 1, 13 ], + "faces": { + "down": { "uv": [ 5, 0, 10, 5 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 5, 0, 10, 5 ], "texture": "#texture" }, + "north": { "uv": [ 0, 6.5, 5, 7 ], "texture": "#texture" }, + "south": { "uv": [ 0, 6.5, 5, 7 ], "texture": "#texture" }, + "west": { "uv": [ 0, 6.5, 5, 7 ], "texture": "#texture" }, + "east": { "uv": [ 0, 6.5, 5, 7 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FF00FF", + "from": [ 3, 1, 3 ], + "to": [ 4, 14, 4 ], + "faces": { + "up": { "uv": [ 4.5, 11.5, 5, 12 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FF0000", + "from": [ 3, 1, 4 ], + "to": [ 4, 12, 5 ], + "faces": { + "up": { "uv": [ 4.5, 11, 5, 11.5 ], "texture": "#texture" }, + "south": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-71FFFF", + "from": [ 3, 1, 5 ], + "to": [ 4, 2, 11 ], + "faces": { + "up": { "uv": [ 0.5, 1.5, 1, 4.5 ], "texture": "#texture" }, + "west": { "uv": [ 1, 6, 4, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 1, 6, 4, 6.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FF0000", + "from": [ 3, 1, 11 ], + "to": [ 4, 12, 12 ], + "faces": { + "up": { "uv": [ 4.5, 7.5, 5, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FF00FF", + "from": [ 3, 1, 12 ], + "to": [ 4, 14, 13 ], + "faces": { + "up": { "uv": [ 4.5, 7, 5, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FFFF00", + "from": [ 3, 10, 5 ], + "to": [ 4, 12, 11 ], + "faces": { + "up": { "uv": [ 4.5, 8, 5, 11.5 ], "texture": "#texture" }, + "west": { "uv": [ 1, 1, 4, 2 ], "texture": "#texture" }, + "east": { "uv": [ 1, 1, 4, 2 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FF8000", + "from": [ 3, 13, 4 ], + "to": [ 4, 14, 12 ], + "faces": { + "down": { "uv": [ 0, 7.5, 0.5, 11.5 ], "texture": "#texture" }, + "up": { "uv": [ 4.5, 7.5, 5, 11.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 0, 4.5, 0.5 ], "texture": "#texture" }, + "east": { "uv": [ 0.5, 0, 4.5, 0.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FF0000", + "from": [ 4, 1, 3 ], + "to": [ 5, 12, 4 ], + "faces": { + "up": { "uv": [ 4, 11.5, 4.5, 12 ], "texture": "#texture" }, + "north": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FF0000", + "from": [ 4, 1, 12 ], + "to": [ 5, 12, 13 ], + "faces": { + "up": { "uv": [ 4, 7, 4.5, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-3AC6FF", + "from": [ 4, 11, 4 ], + "to": [ 12, 12, 12 ], + "faces": { + "down": { "uv": [ 5.5, 0.5, 9.5, 4.5 ], "texture": "#texture" }, + "up": { "uv": [ 5.5, 0.5, 9.5, 4.5 ], "texture": "#texture" }, + "north": { "uv": [ 0.5, 7.5, 4.5, 8 ], "texture": "#texture" }, + "south": { "uv": [ 0.5, 11, 4.5, 11.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 7.5, 1, 11.5 ], "texture": "#texture" }, + "east": { "uv": [ 4, 7.5, 4.5, 11.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-71FFFF", + "from": [ 5, 1, 3 ], + "to": [ 11, 2, 4 ], + "faces": { + "up": { "uv": [ 1, 1.5, 4, 2 ], "texture": "#texture" }, + "north": { "uv": [ 1, 6, 4, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 1, 6, 4, 6.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-71FFFF", + "from": [ 5, 1, 12 ], + "to": [ 11, 2, 13 ], + "faces": { + "up": { "uv": [ 1, 1.5, 4, 2 ], "texture": "#texture" }, + "north": { "uv": [ 1, 6, 4, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 1, 6, 4, 6.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FFFF00", + "from": [ 5, 10, 3 ], + "to": [ 11, 12, 4 ], + "faces": { + "down": { "uv": [ 1, 1.5, 4, 2 ], "texture": "#texture" }, + "up": { "uv": [ 1, 7, 4, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 1, 4, 2 ], "texture": "#texture" }, + "south": { "uv": [ 1, 1, 4, 2 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FFFF00", + "from": [ 5, 10, 12 ], + "to": [ 11, 12, 13 ], + "faces": { + "down": { "uv": [ 1, 1.5, 4, 2 ], "texture": "#texture" }, + "up": { "uv": [ 1, 7, 4, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 1, 4, 2 ], "texture": "#texture" }, + "south": { "uv": [ 1, 1, 4, 2 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FF9571", + "from": [ 5, 12, 5 ], + "to": [ 11, 13, 11 ], + "faces": { + "up": { "uv": [ 1, 8, 4, 11 ], "texture": "#texture" }, + "north": { "uv": [ 5, 5.5, 8, 6 ], "texture": "#texture" }, + "south": { "uv": [ 5, 5.5, 8, 6 ], "texture": "#texture" }, + "west": { "uv": [ 5, 5.5, 8, 6 ], "texture": "#texture" }, + "east": { "uv": [ 5, 5.5, 8, 6 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FF8000", + "from": [ 4, 13, 3 ], + "to": [ 12, 14, 4 ], + "faces": { + "down": { "uv": [ 0.5, 11.5, 4.5, 12 ], "texture": "#texture" }, + "up": { "uv": [ 0.5, 7, 4.5, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 0.5, 0, 4.5, 0.5 ], "texture": "#texture" }, + "south": { "uv": [ 0.5, 0, 4.5, 0.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-EBAAFF", + "from": [ 5, 13, 6 ], + "to": [ 6, 14, 10 ], + "faces": { + "up": { "uv": [ 3.5, 8.5, 4, 10.5 ], "texture": "#texture" }, + "north": { "uv": [ 7.5, 5, 8, 5.5 ], "texture": "#texture" }, + "south": { "uv": [ 5, 5, 5.5, 5.5 ], "texture": "#texture" }, + "west": { "uv": [ 5.5, 5, 7.5, 5.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FF8000", + "from": [ 4, 13, 12 ], + "to": [ 12, 14, 13 ], + "faces": { + "down": { "uv": [ 0.5, 11.5, 4.5, 12 ], "texture": "#texture" }, + "up": { "uv": [ 0.5, 7, 4.5, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 0.5, 0, 4.5, 0.5 ], "texture": "#texture" }, + "south": { "uv": [ 0.5, 0, 4.5, 0.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-EBAAFF", + "from": [ 6, 13, 5 ], + "to": [ 10, 14, 6 ], + "faces": { + "up": { "uv": [ 1.5, 10.5, 3.5, 11 ], "texture": "#texture" }, + "north": { "uv": [ 5.5, 5, 7.5, 5.5 ], "texture": "#texture" }, + "west": { "uv": [ 5, 5, 5.5, 5.5 ], "texture": "#texture" }, + "east": { "uv": [ 7.5, 5, 8, 5.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-5595FF", + "from": [ 6, 13, 6 ], + "to": [ 10, 14, 10 ], + "faces": { + "up": { "uv": [ 1.5, 8.499999, 3.5, 10.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-EBAAFF", + "from": [ 6, 13, 10 ], + "to": [ 10, 14, 11 ], + "faces": { + "up": { "uv": [ 1.5, 8, 3.5, 8.5 ], "texture": "#texture" }, + "south": { "uv": [ 5.5, 5, 7.5, 5.5 ], "texture": "#texture" }, + "west": { "uv": [ 5, 5, 5.5, 5.5 ], "texture": "#texture" }, + "east": { "uv": [ 7.5, 5, 8, 5.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-EBAAFF", + "from": [ 10, 13, 6 ], + "to": [ 11, 14, 10 ], + "faces": { + "up": { "uv": [ 1, 8.5, 1.5, 10.5 ], "texture": "#texture" }, + "north": { "uv": [ 5, 5, 5.5, 5.5 ], "texture": "#texture" }, + "south": { "uv": [ 7.5, 5, 8, 5.5 ], "texture": "#texture" }, + "east": { "uv": [ 5.5, 5, 7.5, 5.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FF0000", + "from": [ 11, 1, 3 ], + "to": [ 12, 12, 4 ], + "faces": { + "up": { "uv": [ 0.5, 11.5, 1, 12 ], "texture": "#texture" }, + "north": { "uv": [ 0.5, 1, 1, 6.499999 ], "texture": "#texture" }, + "south": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FF0000", + "from": [ 11, 1, 12 ], + "to": [ 12, 12, 13 ], + "faces": { + "up": { "uv": [ 0.5, 7, 1, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FF00FF", + "from": [ 12, 1, 3 ], + "to": [ 13, 14, 4 ], + "faces": { + "up": { "uv": [ 0, 11.5, 0.5, 12 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FF0000", + "from": [ 12, 1, 4 ], + "to": [ 13, 12, 5 ], + "faces": { + "up": { "uv": [ 0, 11, 0.5, 11.5 ], "texture": "#texture" }, + "south": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-71FFFF", + "from": [ 12, 1, 5 ], + "to": [ 13, 2, 11 ], + "faces": { + "up": { "uv": [ 0.5, 1.5, 1, 4.5 ], "texture": "#texture" }, + "west": { "uv": [ 1, 6, 4, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 1, 6, 4, 6.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FF0000", + "from": [ 12, 1, 11 ], + "to": [ 13, 12, 12 ], + "faces": { + "up": { "uv": [ 0, 7.5, 0.5, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FF00FF", + "from": [ 12, 1, 12 ], + "to": [ 13, 14, 13 ], + "faces": { + "up": { "uv": [ 0, 7, 0.5, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FFFF00", + "from": [ 12, 10, 5 ], + "to": [ 13, 12, 11 ], + "faces": { + "down": { "uv": [ 0, 8, 0.5, 11 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 0.5, 11 ], "texture": "#texture" }, + "west": { "uv": [ 1, 1, 4, 2 ], "texture": "#texture" }, + "east": { "uv": [ 1, 1, 4, 2 ], "texture": "#texture" } + } + }, + { + "__comment": "Voxels-FF8000", + "from": [ 12, 13, 4 ], + "to": [ 13, 14, 12 ], + "faces": { + "down": { "uv": [ 4.5, 7.5, 5, 11.5 ], "texture": "#texture" }, + "up": { "uv": [ 0, 7.5, 0.5, 11.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 0, 4.5, 0.5 ], "texture": "#texture" }, + "east": { "uv": [ 0.5, 0, 4.5, 0.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Cube33", + "from": [ 5, 2, 3 ], + "to": [ 11, 10, 4 ], + "faces": { + "north": { "uv": [ 1, 2, 4, 6 ], "texture": "#texture" }, + "south": { "uv": [ 1, 2, 4, 6 ], "texture": "#texture" } + } + }, + { + "__comment": "Cube33", + "from": [ 3, 2, 5 ], + "to": [ 4, 10, 11 ], + "faces": { + "west": { "uv": [ 1, 2, 4, 6 ], "texture": "#texture" }, + "east": { "uv": [ 1, 2, 4, 6 ], "texture": "#texture" } + } + }, + { + "__comment": "Cube33", + "from": [ 12, 2, 5 ], + "to": [ 13, 10, 11 ], + "faces": { + "west": { "uv": [ 1, 2, 4, 6 ], "texture": "#texture" }, + "east": { "uv": [ 1, 2, 4, 6 ], "texture": "#texture" } + } + }, + { + "__comment": "Cube33", + "from": [ 5, 2, 12 ], + "to": [ 11, 10, 13 ], + "faces": { + "north": { "uv": [ 1, 2, 4, 6 ], "texture": "#texture" }, + "south": { "uv": [ 1, 2, 4, 6 ], "texture": "#texture" } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2.5, 0 ], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2.5, 0 ], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "scale": [ 0.4, 0.4, 0.4 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 45, 0 ], + "scale": [ 0.4, 0.4, 0.4 ] + }, + "gui": { + "rotation": [ 30, 225, 0 ], + "scale": [ 0.625, 0.625, 0.625 ] + }, + "head": { + "translation": [ 0, 12, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + }, + "ground": { + "translation": [ 0, 3, 0 ], + "scale": [ 0.25, 0.25, 0.25 ] + }, + "fixed": { + "scale": [ 0.5, 0.5, 0.5 ] + } + } +} diff --git a/src/main/resources/assets/bloodmagic/models/block/blockdemoncrucible.mtl b/src/main/resources/assets/bloodmagic/models/block/blockdemoncrucible.mtl new file mode 100644 index 00000000..8632a57a --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockdemoncrucible.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +#Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +#Ks 0.8 0.8 0.8 +d 1 +#illum 2 +map_Kd bloodmagic:models/demoncrucible \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/blockdemoncrucible.obj b/src/main/resources/assets/bloodmagic/models/block/blockdemoncrucible.obj new file mode 100644 index 00000000..423f18c5 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockdemoncrucible.obj @@ -0,0 +1,937 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib blockdemoncrucible.mtl +o BlockDemonCrucible +v 0.125000 0.125000 0.875000 +v 0.125000 -0.000000 0.875000 +v 0.375000 -0.000000 0.875000 +v 0.375000 0.125000 0.875000 +v 0.375000 0.125000 0.625000 +v 0.375000 -0.000000 0.625000 +v 0.125000 -0.000000 0.625000 +v 0.125000 0.125000 0.625000 +v 0.193151 0.473851 0.803768 +v 0.151353 0.103509 0.845306 +v 0.337685 0.082741 0.847635 +v 0.379483 0.453082 0.806098 +v 0.379483 0.432183 0.619766 +v 0.337685 0.061842 0.661303 +v 0.151353 0.082610 0.658974 +v 0.193151 0.452952 0.617437 +v 0.625000 0.125000 0.375000 +v 0.625000 0.000000 0.375000 +v 0.875000 0.000000 0.375000 +v 0.875000 0.125000 0.375000 +v 0.875000 0.125000 0.125000 +v 0.875000 0.000000 0.125000 +v 0.625000 0.000000 0.125000 +v 0.625000 0.125000 0.125000 +v 0.620517 0.432206 0.380235 +v 0.662315 0.061873 0.338698 +v 0.848645 0.082641 0.341027 +v 0.806847 0.452974 0.382564 +v 0.806847 0.473873 0.196235 +v 0.848645 0.103540 0.154698 +v 0.662315 0.082772 0.152368 +v 0.620517 0.453105 0.193905 +v 0.125000 0.125000 0.375000 +v 0.125000 0.000000 0.375000 +v 0.375000 0.000000 0.375000 +v 0.375000 0.125000 0.375000 +v 0.375000 0.125000 0.125000 +v 0.375000 0.000000 0.125000 +v 0.125000 0.000000 0.125000 +v 0.125000 0.125000 0.125000 +v 0.193151 0.452963 0.382563 +v 0.151353 0.082626 0.341026 +v 0.337685 0.061857 0.338696 +v 0.379483 0.432194 0.380234 +v 0.379483 0.453093 0.193904 +v 0.337685 0.082756 0.152367 +v 0.151353 0.103525 0.154696 +v 0.193151 0.473862 0.196233 +v 0.625000 0.125000 0.875000 +v 0.625000 -0.000000 0.875000 +v 0.875000 -0.000000 0.875000 +v 0.875000 0.125000 0.875000 +v 0.875000 0.125000 0.625000 +v 0.875000 -0.000000 0.625000 +v 0.625000 -0.000000 0.625000 +v 0.625000 0.125000 0.625000 +v 0.620517 0.453093 0.806096 +v 0.662315 0.082756 0.847633 +v 0.848645 0.103525 0.845304 +v 0.806847 0.473862 0.803767 +v 0.806847 0.452963 0.617435 +v 0.848645 0.082626 0.658972 +v 0.662315 0.061857 0.661302 +v 0.620517 0.432194 0.619765 +v 0.125000 0.500000 0.875000 +v 0.125000 0.437500 0.875000 +v 0.875000 0.437500 0.875000 +v 0.875000 0.500000 0.875000 +v 0.875000 0.500000 0.125000 +v 0.875000 0.437500 0.125000 +v 0.125000 0.437500 0.125000 +v 0.125000 0.500000 0.125000 +v 0.187500 0.562500 0.812500 +v 0.187500 0.500000 0.812500 +v 0.812500 0.500000 0.812500 +v 0.812500 0.562500 0.812500 +v 0.812500 0.562500 0.187500 +v 0.812500 0.500000 0.187500 +v 0.187500 0.500000 0.187500 +v 0.187500 0.562500 0.187500 +v 0.125000 0.625000 0.875000 +v 0.125000 0.562500 0.875000 +v 0.875000 0.562500 0.875000 +v 0.875000 0.625000 0.875000 +v 0.875000 0.625000 0.125000 +v 0.875000 0.562500 0.125000 +v 0.125000 0.562500 0.125000 +v 0.125000 0.625000 0.125000 +v 0.218750 0.875000 0.781250 +v 0.218750 0.625000 0.781250 +v 0.781250 0.625000 0.781250 +v 0.781250 0.875000 0.781250 +v 0.781250 0.875000 0.218750 +v 0.781250 0.625000 0.218750 +v 0.218750 0.625000 0.218750 +v 0.218750 0.875000 0.218750 +v 0.218750 1.093750 0.843750 +v 0.218750 0.718750 0.843750 +v 0.781250 0.718750 0.843750 +v 0.781250 1.093750 0.843750 +v 0.781250 1.093750 0.781250 +v 0.781250 0.718750 0.781250 +v 0.218750 0.718750 0.781250 +v 0.218750 1.093750 0.781250 +v 0.343750 1.281250 0.968750 +v 0.343750 0.843750 0.968750 +v 0.656250 0.843750 0.968750 +v 0.656250 1.281250 0.968750 +v 0.656250 1.281250 0.843750 +v 0.656250 0.843750 0.843750 +v 0.343750 0.843750 0.843750 +v 0.343750 1.281250 0.843750 +v 0.406250 1.531250 0.968750 +v 0.406250 1.281250 0.968750 +v 0.593750 1.281250 0.968750 +v 0.593750 1.531250 0.968750 +v 0.593750 1.531250 0.906250 +v 0.593750 1.281250 0.906250 +v 0.406250 1.281250 0.906250 +v 0.406250 1.531250 0.906250 +v 0.156250 1.093750 0.781250 +v 0.156250 0.718750 0.781250 +v 0.218750 0.718750 0.781250 +v 0.218750 1.093750 0.781250 +v 0.218750 1.093750 0.218750 +v 0.218750 0.718750 0.218750 +v 0.156250 0.718750 0.218750 +v 0.156250 1.093750 0.218750 +v 0.031250 1.281250 0.656250 +v 0.031250 0.843750 0.656250 +v 0.156250 0.843750 0.656250 +v 0.156250 1.281250 0.656250 +v 0.156250 1.281250 0.343750 +v 0.156250 0.843750 0.343750 +v 0.031250 0.843750 0.343750 +v 0.031250 1.281250 0.343750 +v 0.031250 1.531250 0.593750 +v 0.031250 1.281250 0.593750 +v 0.093750 1.281250 0.593750 +v 0.093750 1.531250 0.593750 +v 0.093750 1.531250 0.406250 +v 0.093750 1.281250 0.406250 +v 0.031250 1.281250 0.406250 +v 0.031250 1.531250 0.406250 +v 0.218750 1.093750 0.218750 +v 0.218750 0.718750 0.218750 +v 0.781250 0.718750 0.218750 +v 0.781250 1.093750 0.218750 +v 0.781250 1.093750 0.156250 +v 0.781250 0.718750 0.156250 +v 0.218750 0.718750 0.156250 +v 0.218750 1.093750 0.156250 +v 0.343750 1.281250 0.156250 +v 0.343750 0.843750 0.156250 +v 0.656250 0.843750 0.156250 +v 0.656250 1.281250 0.156250 +v 0.656250 1.281250 0.031250 +v 0.656250 0.843750 0.031250 +v 0.343750 0.843750 0.031250 +v 0.343750 1.281250 0.031250 +v 0.406250 1.531250 0.093750 +v 0.406250 1.281250 0.093750 +v 0.593750 1.281250 0.093750 +v 0.593750 1.531250 0.093750 +v 0.593750 1.531250 0.031250 +v 0.593750 1.281250 0.031250 +v 0.406250 1.281250 0.031250 +v 0.406250 1.531250 0.031250 +v 0.781250 1.093750 0.781250 +v 0.781250 0.718750 0.781250 +v 0.843750 0.718750 0.781250 +v 0.843750 1.093750 0.781250 +v 0.843750 1.093750 0.218750 +v 0.843750 0.718750 0.218750 +v 0.781250 0.718750 0.218750 +v 0.781250 1.093750 0.218750 +v 0.843750 1.281250 0.656250 +v 0.843750 0.843750 0.656250 +v 0.968750 0.843750 0.656250 +v 0.968750 1.281250 0.656250 +v 0.968750 1.281250 0.343750 +v 0.968750 0.843750 0.343750 +v 0.843750 0.843750 0.343750 +v 0.843750 1.281250 0.343750 +v 0.906250 1.531250 0.593750 +v 0.906250 1.281250 0.593750 +v 0.968750 1.281250 0.593750 +v 0.968750 1.531250 0.593750 +v 0.968750 1.531250 0.406250 +v 0.968750 1.281250 0.406250 +v 0.906250 1.281250 0.406250 +v 0.906250 1.531250 0.406250 +v 0.193151 0.473851 0.803768 +v 0.151353 0.103509 0.845306 +v 0.337685 0.082741 0.847635 +v 0.379483 0.453082 0.806098 +v 0.379483 0.432183 0.619766 +v 0.337685 0.061842 0.661303 +v 0.151353 0.082610 0.658974 +v 0.193151 0.452952 0.617437 +v 0.620517 0.432206 0.380235 +v 0.662315 0.061873 0.338698 +v 0.848645 0.082641 0.341027 +v 0.806847 0.452974 0.382564 +v 0.806847 0.473873 0.196235 +v 0.848645 0.103540 0.154698 +v 0.662315 0.082772 0.152368 +v 0.620517 0.453105 0.193905 +v 0.193151 0.452963 0.382563 +v 0.151353 0.082626 0.341026 +v 0.337685 0.061857 0.338696 +v 0.379483 0.432194 0.380234 +v 0.379483 0.453093 0.193904 +v 0.337685 0.082756 0.152367 +v 0.151353 0.103525 0.154696 +v 0.193151 0.473862 0.196233 +v 0.620517 0.453093 0.806096 +v 0.662315 0.082756 0.847633 +v 0.848645 0.103525 0.845304 +v 0.806847 0.473862 0.803767 +v 0.806847 0.452963 0.617435 +v 0.848645 0.082626 0.658972 +v 0.662315 0.061857 0.661302 +v 0.620517 0.432194 0.619765 +v 0.218750 1.093750 0.843750 +v 0.218750 0.718750 0.843750 +v 0.781250 0.718750 0.843750 +v 0.781250 1.093750 0.843750 +v 0.781250 1.093750 0.781250 +v 0.781250 0.718750 0.781250 +v 0.218750 0.718750 0.781250 +v 0.218750 1.093750 0.781250 +v 0.343750 1.281250 0.968750 +v 0.343750 0.843750 0.968750 +v 0.656250 0.843750 0.968750 +v 0.656250 1.281250 0.968750 +v 0.656250 1.281250 0.843750 +v 0.656250 0.843750 0.843750 +v 0.343750 0.843750 0.843750 +v 0.343750 1.281250 0.843750 +v 0.406250 1.531250 0.968750 +v 0.406250 1.281250 0.968750 +v 0.593750 1.281250 0.968750 +v 0.593750 1.531250 0.968750 +v 0.593750 1.531250 0.906250 +v 0.593750 1.281250 0.906250 +v 0.406250 1.281250 0.906250 +v 0.406250 1.531250 0.906250 +v 0.156250 1.093750 0.781250 +v 0.156250 0.718750 0.781250 +v 0.218750 0.718750 0.781250 +v 0.218750 1.093750 0.781250 +v 0.218750 1.093750 0.218750 +v 0.218750 0.718750 0.218750 +v 0.156250 0.718750 0.218750 +v 0.156250 1.093750 0.218750 +v 0.031250 1.281250 0.656250 +v 0.031250 0.843750 0.656250 +v 0.156250 0.843750 0.656250 +v 0.156250 1.281250 0.656250 +v 0.156250 1.281250 0.343750 +v 0.156250 0.843750 0.343750 +v 0.031250 0.843750 0.343750 +v 0.031250 1.281250 0.343750 +v 0.031250 1.531250 0.593750 +v 0.031250 1.281250 0.593750 +v 0.093750 1.281250 0.593750 +v 0.093750 1.531250 0.593750 +v 0.093750 1.531250 0.406250 +v 0.093750 1.281250 0.406250 +v 0.031250 1.281250 0.406250 +v 0.031250 1.531250 0.406250 +v 0.218750 1.093750 0.218750 +v 0.218750 0.718750 0.218750 +v 0.781250 0.718750 0.218750 +v 0.781250 1.093750 0.218750 +v 0.781250 1.093750 0.156250 +v 0.781250 0.718750 0.156250 +v 0.218750 0.718750 0.156250 +v 0.218750 1.093750 0.156250 +v 0.343750 1.281250 0.156250 +v 0.343750 0.843750 0.156250 +v 0.656250 0.843750 0.156250 +v 0.656250 1.281250 0.156250 +v 0.656250 1.281250 0.031250 +v 0.656250 0.843750 0.031250 +v 0.343750 0.843750 0.031250 +v 0.343750 1.281250 0.031250 +v 0.406250 1.531250 0.093750 +v 0.406250 1.281250 0.093750 +v 0.593750 1.281250 0.093750 +v 0.593750 1.531250 0.093750 +v 0.593750 1.531250 0.031250 +v 0.593750 1.281250 0.031250 +v 0.406250 1.281250 0.031250 +v 0.406250 1.531250 0.031250 +v 0.781250 1.093750 0.781250 +v 0.781250 0.718750 0.781250 +v 0.843750 0.718750 0.781250 +v 0.843750 1.093750 0.781250 +v 0.843750 1.093750 0.218750 +v 0.843750 0.718750 0.218750 +v 0.781250 0.718750 0.218750 +v 0.781250 1.093750 0.218750 +v 0.843750 1.281250 0.656250 +v 0.843750 0.843750 0.656250 +v 0.968750 0.843750 0.656250 +v 0.968750 1.281250 0.656250 +v 0.968750 1.281250 0.343750 +v 0.968750 0.843750 0.343750 +v 0.843750 0.843750 0.343750 +v 0.843750 1.281250 0.343750 +v 0.906250 1.531250 0.593750 +v 0.906250 1.281250 0.593750 +v 0.968750 1.281250 0.593750 +v 0.968750 1.531250 0.593750 +v 0.968750 1.531250 0.406250 +v 0.968750 1.281250 0.406250 +v 0.906250 1.281250 0.406250 +v 0.906250 1.531250 0.406250 +v 0.343750 1.281250 0.968750 +v 0.343750 0.843750 0.968750 +v 0.656250 0.843750 0.968750 +v 0.656250 1.281250 0.968750 +v 0.656250 1.281250 0.843750 +v 0.656250 0.843750 0.843750 +v 0.343750 0.843750 0.843750 +v 0.343750 1.281250 0.843750 +v 0.406250 1.531250 0.968750 +v 0.406250 1.281250 0.968750 +v 0.593750 1.281250 0.968750 +v 0.593750 1.531250 0.968750 +v 0.593750 1.531250 0.906250 +v 0.593750 1.281250 0.906250 +v 0.406250 1.281250 0.906250 +v 0.406250 1.531250 0.906250 +v 0.406250 1.531250 0.968750 +v 0.406250 1.281250 0.968750 +v 0.593750 1.281250 0.968750 +v 0.593750 1.531250 0.968750 +v 0.593750 1.531250 0.906250 +v 0.593750 1.281250 0.906250 +v 0.406250 1.281250 0.906250 +v 0.406250 1.531250 0.906250 +v 0.031250 1.281250 0.656250 +v 0.031250 0.843750 0.656250 +v 0.156250 0.843750 0.656250 +v 0.156250 1.281250 0.656250 +v 0.156250 1.281250 0.343750 +v 0.156250 0.843750 0.343750 +v 0.031250 0.843750 0.343750 +v 0.031250 1.281250 0.343750 +v 0.031250 1.531250 0.593750 +v 0.031250 1.281250 0.593750 +v 0.093750 1.281250 0.593750 +v 0.093750 1.531250 0.593750 +v 0.093750 1.531250 0.406250 +v 0.093750 1.281250 0.406250 +v 0.031250 1.281250 0.406250 +v 0.031250 1.531250 0.406250 +v 0.031250 1.531250 0.593750 +v 0.031250 1.281250 0.593750 +v 0.093750 1.281250 0.593750 +v 0.093750 1.531250 0.593750 +v 0.093750 1.531250 0.406250 +v 0.093750 1.281250 0.406250 +v 0.031250 1.281250 0.406250 +v 0.031250 1.531250 0.406250 +v 0.343750 1.281250 0.156250 +v 0.343750 0.843750 0.156250 +v 0.656250 0.843750 0.156250 +v 0.656250 1.281250 0.156250 +v 0.656250 1.281250 0.031250 +v 0.656250 0.843750 0.031250 +v 0.343750 0.843750 0.031250 +v 0.343750 1.281250 0.031250 +v 0.406250 1.531250 0.093750 +v 0.406250 1.281250 0.093750 +v 0.593750 1.281250 0.093750 +v 0.593750 1.531250 0.093750 +v 0.593750 1.531250 0.031250 +v 0.593750 1.281250 0.031250 +v 0.406250 1.281250 0.031250 +v 0.406250 1.531250 0.031250 +v 0.406250 1.531250 0.093750 +v 0.406250 1.281250 0.093750 +v 0.593750 1.281250 0.093750 +v 0.593750 1.531250 0.093750 +v 0.593750 1.531250 0.031250 +v 0.593750 1.281250 0.031250 +v 0.406250 1.281250 0.031250 +v 0.406250 1.531250 0.031250 +v 0.843750 1.281250 0.656250 +v 0.843750 0.843750 0.656250 +v 0.968750 0.843750 0.656250 +v 0.968750 1.281250 0.656250 +v 0.968750 1.281250 0.343750 +v 0.968750 0.843750 0.343750 +v 0.843750 0.843750 0.343750 +v 0.843750 1.281250 0.343750 +v 0.906250 1.531250 0.593750 +v 0.906250 1.281250 0.593750 +v 0.968750 1.281250 0.593750 +v 0.968750 1.531250 0.593750 +v 0.968750 1.531250 0.406250 +v 0.968750 1.281250 0.406250 +v 0.906250 1.281250 0.406250 +v 0.906250 1.531250 0.406250 +v 0.906250 1.531250 0.593750 +v 0.906250 1.281250 0.593750 +v 0.968750 1.281250 0.593750 +v 0.968750 1.531250 0.593750 +v 0.968750 1.531250 0.406250 +v 0.968750 1.281250 0.406250 +v 0.906250 1.281250 0.406250 +v 0.906250 1.531250 0.406250 +vt 0.062500 0.937500 +vt 0.062500 0.906250 +vt 0.125000 0.906250 +vt 0.125000 0.937500 +vt 0.187500 0.937500 +vt 0.187500 0.906250 +vt 0.250000 0.906250 +vt 0.250000 0.937500 +vt 0.062500 1.000000 +vt 0.125000 1.000000 +vt 0.187500 1.000000 +vt 0.000000 0.937500 +vt 0.000000 0.906250 +vt 0.046875 0.843750 +vt 0.046875 0.750000 +vt 0.093750 0.750000 +vt 0.093750 0.843750 +vt 0.140625 0.843750 +vt 0.140625 0.750000 +vt 0.187500 0.750000 +vt 0.187500 0.843750 +vt 0.046875 0.890625 +vt 0.093750 0.890625 +vt 0.140625 0.890625 +vt 0.000000 0.843750 +vt 0.000000 0.750000 +vt 0.437500 0.015625 +vt 0.437500 0.000000 +vt 0.625000 0.000000 +vt 0.625000 0.015625 +vt 0.812500 0.015625 +vt 0.812500 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.015625 +vt 0.437500 0.203125 +vt 0.625000 0.203125 +vt 0.812500 0.203125 +vt 0.250000 0.015625 +vt 0.250000 0.000000 +vt 0.531250 0.234375 +vt 0.531250 0.218750 +vt 0.687500 0.218750 +vt 0.687500 0.234375 +vt 0.843750 0.234375 +vt 0.843750 0.218750 +vt 1.000000 0.218750 +vt 1.000000 0.234375 +vt 0.531250 0.390625 +vt 0.687500 0.390625 +vt 0.843750 0.390625 +vt 0.375000 0.234375 +vt 0.375000 0.218750 +vt 0.578125 0.468750 +vt 0.578125 0.406250 +vt 0.718750 0.406250 +vt 0.718750 0.468750 +vt 0.859375 0.468750 +vt 0.859375 0.406250 +vt 1.000000 0.406250 +vt 1.000000 0.468750 +vt 0.578125 0.609375 +vt 0.718750 0.609375 +vt 0.859375 0.609375 +vt 0.437500 0.468750 +vt 0.437500 0.406250 +vt 0.703125 0.984375 +vt 0.703125 0.890625 +vt 0.843750 0.890625 +vt 0.843750 0.984375 +vt 0.859375 0.984375 +vt 0.859375 0.890625 +vt 1.000000 0.890625 +vt 1.000000 0.984375 +vt 0.703125 1.000000 +vt 0.843750 1.000000 +vt 0.984375 0.984375 +vt 0.984375 1.000000 +vt 0.687500 0.984375 +vt 0.687500 0.890625 +vt 0.578125 0.843750 +vt 0.578125 0.734375 +vt 0.656250 0.734375 +vt 0.656250 0.843750 +vt 0.687500 0.843750 +vt 0.687500 0.734375 +vt 0.765625 0.734375 +vt 0.765625 0.843750 +vt 0.578125 0.875000 +vt 0.656250 0.875000 +vt 0.734375 0.843750 +vt 0.734375 0.875000 +vt 0.546875 0.843750 +vt 0.546875 0.734375 +vt 0.890625 0.703125 +vt 0.890625 0.640625 +vt 0.937500 0.640625 +vt 0.937500 0.703125 +vt 0.953125 0.703125 +vt 0.953125 0.640625 +vt 1.000000 0.640625 +vt 1.000000 0.703125 +vt 0.890625 0.718750 +vt 0.937500 0.718750 +vt 0.984375 0.703125 +vt 0.984375 0.718750 +vt 0.875000 0.703125 +vt 0.875000 0.640625 +vt 0.140625 0.593750 +vt 0.140625 0.500000 +vt 0.156250 0.500000 +vt 0.156250 0.593750 +vt 0.296875 0.593750 +vt 0.296875 0.500000 +vt 0.312500 0.500000 +vt 0.312500 0.593750 +vt 0.140625 0.734375 +vt 0.156250 0.734375 +vt 0.171875 0.593750 +vt 0.171875 0.734375 +vt 0.000000 0.593750 +vt 0.000000 0.500000 +vt 0.421875 0.671875 +vt 0.421875 0.562500 +vt 0.453125 0.562500 +vt 0.453125 0.671875 +vt 0.531250 0.671875 +vt 0.531250 0.562500 +vt 0.562500 0.562500 +vt 0.562500 0.671875 +vt 0.421875 0.750000 +vt 0.453125 0.750000 +vt 0.484375 0.671875 +vt 0.484375 0.750000 +vt 0.343750 0.671875 +vt 0.343750 0.562500 +vt 0.343750 0.484375 +vt 0.343750 0.421875 +vt 0.359375 0.421875 +vt 0.359375 0.484375 +vt 0.406250 0.484375 +vt 0.406250 0.421875 +vt 0.421875 0.421875 +vt 0.421875 0.484375 +vt 0.343750 0.531250 +vt 0.359375 0.531250 +vt 0.375000 0.484375 +vt 0.375000 0.531250 +vt 0.296875 0.484375 +vt 0.296875 0.421875 +vt 0.375000 0.984375 +vt 0.375000 0.890625 +vt 0.515625 0.890625 +vt 0.515625 0.984375 +vt 0.531250 0.984375 +vt 0.531250 0.890625 +vt 0.671875 0.890625 +vt 0.671875 0.984375 +vt 0.375000 1.000000 +vt 0.515625 1.000000 +vt 0.656250 0.984375 +vt 0.656250 1.000000 +vt 0.359375 0.984375 +vt 0.359375 0.890625 +vt 0.812500 0.843750 +vt 0.812500 0.734375 +vt 0.890625 0.734375 +vt 0.890625 0.843750 +vt 0.921875 0.843750 +vt 0.921875 0.734375 +vt 1.000000 0.734375 +vt 1.000000 0.843750 +vt 0.812500 0.875000 +vt 0.890625 0.875000 +vt 0.968750 0.843750 +vt 0.968750 0.875000 +vt 0.781250 0.843750 +vt 0.781250 0.734375 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn -0.000000 0.111500 0.993800 +vn -0.000000 -0.111500 -0.993800 +vn 0.111500 0.987600 -0.110800 +vn -0.111500 -0.987600 0.110800 +vn 0.993800 -0.110800 0.012400 +vn -0.993800 0.110800 -0.012400 +vn 0.000000 -0.111500 0.993800 +vn 0.000000 0.111500 -0.993800 +vn -0.111500 0.987600 0.110800 +vn 0.111500 -0.987600 -0.110800 +vn 0.993800 0.110800 0.012400 +vn -0.993800 -0.110800 -0.012400 +vn 0.111500 0.987600 0.110800 +vn -0.111500 -0.987600 -0.110800 +vn 0.993800 -0.110800 -0.012400 +vn -0.993800 0.110800 0.012400 +vn -0.111500 0.987600 -0.110800 +vn 0.111500 -0.987600 0.110800 +vn 0.993800 0.110800 -0.012400 +vn -0.993800 -0.110800 0.012400 +usemtl None +#s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 8/9/3 1/1/3 4/4/3 5/10/3 +f 2/5/4 7/11/4 6/10/4 3/4/4 +f 5/5/5 4/4/5 3/3/5 6/6/5 +f 8/12/6 7/13/6 2/2/6 1/1/6 +f 9/14/7 10/15/7 11/16/7 12/17/7 +f 13/18/8 14/19/8 15/20/8 16/21/8 +f 16/22/9 9/14/9 12/17/9 13/23/9 +f 10/18/10 15/24/10 14/23/10 11/17/10 +f 13/18/11 12/17/11 11/16/11 14/19/11 +f 16/25/12 15/26/12 10/15/12 9/14/12 +f 17/1/1 18/2/1 19/3/1 20/4/1 +f 21/5/2 22/6/2 23/7/2 24/8/2 +f 24/9/3 17/1/3 20/4/3 21/10/3 +f 18/5/4 23/11/4 22/10/4 19/4/4 +f 21/5/5 20/4/5 19/3/5 22/6/5 +f 24/12/6 23/13/6 18/2/6 17/1/6 +f 25/14/13 26/15/13 27/16/13 28/17/13 +f 29/18/14 30/19/14 31/20/14 32/21/14 +f 32/22/15 25/14/15 28/17/15 29/23/15 +f 26/18/16 31/24/16 30/23/16 27/17/16 +f 29/18/17 28/17/17 27/16/17 30/19/17 +f 32/25/18 31/26/18 26/15/18 25/14/18 +f 33/1/1 34/2/1 35/3/1 36/4/1 +f 37/5/2 38/6/2 39/7/2 40/8/2 +f 40/9/3 33/1/3 36/4/3 37/10/3 +f 34/5/4 39/11/4 38/10/4 35/4/4 +f 37/5/5 36/4/5 35/3/5 38/6/5 +f 40/12/6 39/13/6 34/2/6 33/1/6 +f 41/14/13 42/15/13 43/16/13 44/17/13 +f 45/18/14 46/19/14 47/20/14 48/21/14 +f 48/22/19 41/14/19 44/17/19 45/23/19 +f 42/18/20 47/24/20 46/23/20 43/17/20 +f 45/18/21 44/17/21 43/16/21 46/19/21 +f 48/25/22 47/26/22 42/15/22 41/14/22 +f 49/1/1 50/2/1 51/3/1 52/4/1 +f 53/5/2 54/6/2 55/7/2 56/8/2 +f 56/9/3 49/1/3 52/4/3 53/10/3 +f 50/5/4 55/11/4 54/10/4 51/4/4 +f 53/5/5 52/4/5 51/3/5 54/6/5 +f 56/12/6 55/13/6 50/2/6 49/1/6 +f 57/14/7 58/15/7 59/16/7 60/17/7 +f 61/18/8 62/19/8 63/20/8 64/21/8 +f 64/22/23 57/14/23 60/17/23 61/23/23 +f 58/18/24 63/24/24 62/23/24 59/17/24 +f 61/18/25 60/17/25 59/16/25 62/19/25 +f 64/25/26 63/26/26 58/15/26 57/14/26 +f 65/27/1 66/28/1 67/29/1 68/30/1 +f 69/31/2 70/32/2 71/33/2 72/34/2 +f 72/35/3 65/27/3 68/30/3 69/36/3 +f 66/31/4 71/37/4 70/36/4 67/30/4 +f 69/31/5 68/30/5 67/29/5 70/32/5 +f 72/38/6 71/39/6 66/28/6 65/27/6 +f 73/40/1 74/41/1 75/42/1 76/43/1 +f 77/44/2 78/45/2 79/46/2 80/47/2 +f 80/48/3 73/40/3 76/43/3 77/49/3 +f 74/44/4 79/50/4 78/49/4 75/43/4 +f 77/44/5 76/43/5 75/42/5 78/45/5 +f 80/51/6 79/52/6 74/41/6 73/40/6 +f 81/27/1 82/28/1 83/29/1 84/30/1 +f 85/31/2 86/32/2 87/33/2 88/34/2 +f 88/35/3 81/27/3 84/30/3 85/36/3 +f 82/31/4 87/37/4 86/36/4 83/30/4 +f 85/31/5 84/30/5 83/29/5 86/32/5 +f 88/38/6 87/39/6 82/28/6 81/27/6 +f 89/53/1 90/54/1 91/55/1 92/56/1 +f 93/57/2 94/58/2 95/59/2 96/60/2 +f 96/61/3 89/53/3 92/56/3 93/62/3 +f 90/57/4 95/63/4 94/62/4 91/56/4 +f 93/57/5 92/56/5 91/55/5 94/58/5 +f 96/64/6 95/65/6 90/54/6 89/53/6 +f 97/66/1 98/67/1 99/68/1 100/69/1 +f 101/70/2 102/71/2 103/72/2 104/73/2 +f 104/74/3 97/66/3 100/69/3 101/75/3 +f 98/76/4 103/77/4 102/75/4 99/69/4 +f 101/70/5 100/69/5 99/68/5 102/71/5 +f 104/78/6 103/79/6 98/67/6 97/66/6 +f 105/80/1 106/81/1 107/82/1 108/83/1 +f 109/84/2 110/85/2 111/86/2 112/87/2 +f 112/88/3 105/80/3 108/83/3 109/89/3 +f 106/90/4 111/91/4 110/89/4 107/83/4 +f 109/84/5 108/83/5 107/82/5 110/85/5 +f 112/92/6 111/93/6 106/81/6 105/80/6 +f 113/94/1 114/95/1 115/96/1 116/97/1 +f 117/98/2 118/99/2 119/100/2 120/101/2 +f 120/102/3 113/94/3 116/97/3 117/103/3 +f 114/104/4 119/105/4 118/103/4 115/97/4 +f 117/98/5 116/97/5 115/96/5 118/99/5 +f 120/106/6 119/107/6 114/95/6 113/94/6 +f 121/108/1 122/109/1 123/110/1 124/111/1 +f 125/112/2 126/113/2 127/114/2 128/115/2 +f 128/116/3 121/108/3 124/111/3 125/117/3 +f 122/118/4 127/119/4 126/117/4 123/111/4 +f 125/112/5 124/111/5 123/110/5 126/113/5 +f 128/120/6 127/121/6 122/109/6 121/108/6 +f 129/122/1 130/123/1 131/124/1 132/125/1 +f 133/126/2 134/127/2 135/128/2 136/129/2 +f 136/130/3 129/122/3 132/125/3 133/131/3 +f 130/132/4 135/133/4 134/131/4 131/125/4 +f 133/126/5 132/125/5 131/124/5 134/127/5 +f 136/134/6 135/135/6 130/123/6 129/122/6 +f 137/136/1 138/137/1 139/138/1 140/139/1 +f 141/140/2 142/141/2 143/142/2 144/143/2 +f 144/144/3 137/136/3 140/139/3 141/145/3 +f 138/146/4 143/147/4 142/145/4 139/139/4 +f 141/140/5 140/139/5 139/138/5 142/141/5 +f 144/148/6 143/149/6 138/137/6 137/136/6 +f 145/150/1 146/151/1 147/152/1 148/153/1 +f 149/154/2 150/155/2 151/156/2 152/157/2 +f 152/158/3 145/150/3 148/153/3 149/159/3 +f 146/160/4 151/161/4 150/159/4 147/153/4 +f 149/154/5 148/153/5 147/152/5 150/155/5 +f 152/162/6 151/163/6 146/151/6 145/150/6 +f 153/164/1 154/165/1 155/166/1 156/167/1 +f 157/168/2 158/169/2 159/170/2 160/171/2 +f 160/172/3 153/164/3 156/167/3 157/173/3 +f 154/174/4 159/175/4 158/173/4 155/167/4 +f 157/168/5 156/167/5 155/166/5 158/169/5 +f 160/176/6 159/177/6 154/165/6 153/164/6 +f 161/94/1 162/95/1 163/96/1 164/97/1 +f 165/98/2 166/99/2 167/100/2 168/101/2 +f 168/102/3 161/94/3 164/97/3 165/103/3 +f 162/104/4 167/105/4 166/103/4 163/97/4 +f 165/98/5 164/97/5 163/96/5 166/99/5 +f 168/106/6 167/107/6 162/95/6 161/94/6 +f 169/108/1 170/109/1 171/110/1 172/111/1 +f 173/112/2 174/113/2 175/114/2 176/115/2 +f 176/116/3 169/108/3 172/111/3 173/117/3 +f 170/118/4 175/119/4 174/117/4 171/111/4 +f 173/112/5 172/111/5 171/110/5 174/113/5 +f 176/120/6 175/121/6 170/109/6 169/108/6 +f 177/122/1 178/123/1 179/124/1 180/125/1 +f 181/126/2 182/127/2 183/128/2 184/129/2 +f 184/130/3 177/122/3 180/125/3 181/131/3 +f 178/132/4 183/133/4 182/131/4 179/125/4 +f 181/126/5 180/125/5 179/124/5 182/127/5 +f 184/134/6 183/135/6 178/123/6 177/122/6 +f 185/136/1 186/137/1 187/138/1 188/139/1 +f 189/140/2 190/141/2 191/142/2 192/143/2 +f 192/144/3 185/136/3 188/139/3 189/145/3 +f 186/146/4 191/147/4 190/145/4 187/139/4 +f 189/140/5 188/139/5 187/138/5 190/141/5 +f 192/148/6 191/149/6 186/137/6 185/136/6 +f 193/14/7 194/15/7 195/16/7 196/17/7 +f 197/18/8 198/19/8 199/20/8 200/21/8 +f 200/22/9 193/14/9 196/17/9 197/23/9 +f 194/18/10 199/24/10 198/23/10 195/17/10 +f 197/18/11 196/17/11 195/16/11 198/19/11 +f 200/25/12 199/26/12 194/15/12 193/14/12 +f 201/14/13 202/15/13 203/16/13 204/17/13 +f 205/18/14 206/19/14 207/20/14 208/21/14 +f 208/22/15 201/14/15 204/17/15 205/23/15 +f 202/18/16 207/24/16 206/23/16 203/17/16 +f 205/18/17 204/17/17 203/16/17 206/19/17 +f 208/25/18 207/26/18 202/15/18 201/14/18 +f 209/14/13 210/15/13 211/16/13 212/17/13 +f 213/18/14 214/19/14 215/20/14 216/21/14 +f 216/22/19 209/14/19 212/17/19 213/23/19 +f 210/18/20 215/24/20 214/23/20 211/17/20 +f 213/18/21 212/17/21 211/16/21 214/19/21 +f 216/25/22 215/26/22 210/15/22 209/14/22 +f 217/14/7 218/15/7 219/16/7 220/17/7 +f 221/18/8 222/19/8 223/20/8 224/21/8 +f 224/22/23 217/14/23 220/17/23 221/23/23 +f 218/18/24 223/24/24 222/23/24 219/17/24 +f 221/18/25 220/17/25 219/16/25 222/19/25 +f 224/25/26 223/26/26 218/15/26 217/14/26 +f 225/66/1 226/67/1 227/68/1 228/69/1 +f 229/70/2 230/71/2 231/72/2 232/73/2 +f 232/74/3 225/66/3 228/69/3 229/75/3 +f 226/76/4 231/77/4 230/75/4 227/69/4 +f 229/70/5 228/69/5 227/68/5 230/71/5 +f 232/78/6 231/79/6 226/67/6 225/66/6 +f 233/80/1 234/81/1 235/82/1 236/83/1 +f 237/84/2 238/85/2 239/86/2 240/87/2 +f 240/88/3 233/80/3 236/83/3 237/89/3 +f 234/90/4 239/91/4 238/89/4 235/83/4 +f 237/84/5 236/83/5 235/82/5 238/85/5 +f 240/92/6 239/93/6 234/81/6 233/80/6 +f 241/94/1 242/95/1 243/96/1 244/97/1 +f 245/98/2 246/99/2 247/100/2 248/101/2 +f 248/102/3 241/94/3 244/97/3 245/103/3 +f 242/104/4 247/105/4 246/103/4 243/97/4 +f 245/98/5 244/97/5 243/96/5 246/99/5 +f 248/106/6 247/107/6 242/95/6 241/94/6 +f 249/108/1 250/109/1 251/110/1 252/111/1 +f 253/112/2 254/113/2 255/114/2 256/115/2 +f 256/116/3 249/108/3 252/111/3 253/117/3 +f 250/118/4 255/119/4 254/117/4 251/111/4 +f 253/112/5 252/111/5 251/110/5 254/113/5 +f 256/120/6 255/121/6 250/109/6 249/108/6 +f 257/122/1 258/123/1 259/124/1 260/125/1 +f 261/126/2 262/127/2 263/128/2 264/129/2 +f 264/130/3 257/122/3 260/125/3 261/131/3 +f 258/132/4 263/133/4 262/131/4 259/125/4 +f 261/126/5 260/125/5 259/124/5 262/127/5 +f 264/134/6 263/135/6 258/123/6 257/122/6 +f 265/136/1 266/137/1 267/138/1 268/139/1 +f 269/140/2 270/141/2 271/142/2 272/143/2 +f 272/144/3 265/136/3 268/139/3 269/145/3 +f 266/146/4 271/147/4 270/145/4 267/139/4 +f 269/140/5 268/139/5 267/138/5 270/141/5 +f 272/148/6 271/149/6 266/137/6 265/136/6 +f 273/150/1 274/151/1 275/152/1 276/153/1 +f 277/154/2 278/155/2 279/156/2 280/157/2 +f 280/158/3 273/150/3 276/153/3 277/159/3 +f 274/160/4 279/161/4 278/159/4 275/153/4 +f 277/154/5 276/153/5 275/152/5 278/155/5 +f 280/162/6 279/163/6 274/151/6 273/150/6 +f 281/164/1 282/165/1 283/166/1 284/167/1 +f 285/168/2 286/169/2 287/170/2 288/171/2 +f 288/172/3 281/164/3 284/167/3 285/173/3 +f 282/174/4 287/175/4 286/173/4 283/167/4 +f 285/168/5 284/167/5 283/166/5 286/169/5 +f 288/176/6 287/177/6 282/165/6 281/164/6 +f 289/94/1 290/95/1 291/96/1 292/97/1 +f 293/98/2 294/99/2 295/100/2 296/101/2 +f 296/102/3 289/94/3 292/97/3 293/103/3 +f 290/104/4 295/105/4 294/103/4 291/97/4 +f 293/98/5 292/97/5 291/96/5 294/99/5 +f 296/106/6 295/107/6 290/95/6 289/94/6 +f 297/108/1 298/109/1 299/110/1 300/111/1 +f 301/112/2 302/113/2 303/114/2 304/115/2 +f 304/116/3 297/108/3 300/111/3 301/117/3 +f 298/118/4 303/119/4 302/117/4 299/111/4 +f 301/112/5 300/111/5 299/110/5 302/113/5 +f 304/120/6 303/121/6 298/109/6 297/108/6 +f 305/122/1 306/123/1 307/124/1 308/125/1 +f 309/126/2 310/127/2 311/128/2 312/129/2 +f 312/130/3 305/122/3 308/125/3 309/131/3 +f 306/132/4 311/133/4 310/131/4 307/125/4 +f 309/126/5 308/125/5 307/124/5 310/127/5 +f 312/134/6 311/135/6 306/123/6 305/122/6 +f 313/136/1 314/137/1 315/138/1 316/139/1 +f 317/140/2 318/141/2 319/142/2 320/143/2 +f 320/144/3 313/136/3 316/139/3 317/145/3 +f 314/146/4 319/147/4 318/145/4 315/139/4 +f 317/140/5 316/139/5 315/138/5 318/141/5 +f 320/148/6 319/149/6 314/137/6 313/136/6 +f 321/80/1 322/81/1 323/82/1 324/83/1 +f 325/84/2 326/85/2 327/86/2 328/87/2 +f 328/88/3 321/80/3 324/83/3 325/89/3 +f 322/90/4 327/91/4 326/89/4 323/83/4 +f 325/84/5 324/83/5 323/82/5 326/85/5 +f 328/92/6 327/93/6 322/81/6 321/80/6 +f 329/94/1 330/95/1 331/96/1 332/97/1 +f 333/98/2 334/99/2 335/100/2 336/101/2 +f 336/102/3 329/94/3 332/97/3 333/103/3 +f 330/104/4 335/105/4 334/103/4 331/97/4 +f 333/98/5 332/97/5 331/96/5 334/99/5 +f 336/106/6 335/107/6 330/95/6 329/94/6 +f 337/94/1 338/95/1 339/96/1 340/97/1 +f 341/98/2 342/99/2 343/100/2 344/101/2 +f 344/102/3 337/94/3 340/97/3 341/103/3 +f 338/104/4 343/105/4 342/103/4 339/97/4 +f 341/98/5 340/97/5 339/96/5 342/99/5 +f 344/106/6 343/107/6 338/95/6 337/94/6 +f 345/122/1 346/123/1 347/124/1 348/125/1 +f 349/126/2 350/127/2 351/128/2 352/129/2 +f 352/130/3 345/122/3 348/125/3 349/131/3 +f 346/132/4 351/133/4 350/131/4 347/125/4 +f 349/126/5 348/125/5 347/124/5 350/127/5 +f 352/134/6 351/135/6 346/123/6 345/122/6 +f 353/136/1 354/137/1 355/138/1 356/139/1 +f 357/140/2 358/141/2 359/142/2 360/143/2 +f 360/144/3 353/136/3 356/139/3 357/145/3 +f 354/146/4 359/147/4 358/145/4 355/139/4 +f 357/140/5 356/139/5 355/138/5 358/141/5 +f 360/148/6 359/149/6 354/137/6 353/136/6 +f 361/136/1 362/137/1 363/138/1 364/139/1 +f 365/140/2 366/141/2 367/142/2 368/143/2 +f 368/144/3 361/136/3 364/139/3 365/145/3 +f 362/146/4 367/147/4 366/145/4 363/139/4 +f 365/140/5 364/139/5 363/138/5 366/141/5 +f 368/148/6 367/149/6 362/137/6 361/136/6 +f 369/164/1 370/165/1 371/166/1 372/167/1 +f 373/168/2 374/169/2 375/170/2 376/171/2 +f 376/172/3 369/164/3 372/167/3 373/173/3 +f 370/174/4 375/175/4 374/173/4 371/167/4 +f 373/168/5 372/167/5 371/166/5 374/169/5 +f 376/176/6 375/177/6 370/165/6 369/164/6 +f 377/94/1 378/95/1 379/96/1 380/97/1 +f 381/98/2 382/99/2 383/100/2 384/101/2 +f 384/102/3 377/94/3 380/97/3 381/103/3 +f 378/104/4 383/105/4 382/103/4 379/97/4 +f 381/98/5 380/97/5 379/96/5 382/99/5 +f 384/106/6 383/107/6 378/95/6 377/94/6 +f 385/94/1 386/95/1 387/96/1 388/97/1 +f 389/98/2 390/99/2 391/100/2 392/101/2 +f 392/102/3 385/94/3 388/97/3 389/103/3 +f 386/104/4 391/105/4 390/103/4 387/97/4 +f 389/98/5 388/97/5 387/96/5 390/99/5 +f 392/106/6 391/107/6 386/95/6 385/94/6 +f 393/122/1 394/123/1 395/124/1 396/125/1 +f 397/126/2 398/127/2 399/128/2 400/129/2 +f 400/130/3 393/122/3 396/125/3 397/131/3 +f 394/132/4 399/133/4 398/131/4 395/125/4 +f 397/126/5 396/125/5 395/124/5 398/127/5 +f 400/134/6 399/135/6 394/123/6 393/122/6 +f 401/136/1 402/137/1 403/138/1 404/139/1 +f 405/140/2 406/141/2 407/142/2 408/143/2 +f 408/144/3 401/136/3 404/139/3 405/145/3 +f 402/146/4 407/147/4 406/145/4 403/139/4 +f 405/140/5 404/139/5 403/138/5 406/141/5 +f 408/148/6 407/149/6 402/137/6 401/136/6 +f 409/136/1 410/137/1 411/138/1 412/139/1 +f 413/140/2 414/141/2 415/142/2 416/143/2 +f 416/144/3 409/136/3 412/139/3 413/145/3 +f 410/146/4 415/147/4 414/145/4 411/139/4 +f 413/140/5 412/139/5 411/138/5 414/141/5 +f 416/148/6 415/149/6 410/137/6 409/136/6 diff --git a/src/main/resources/assets/bloodmagic/models/block/blockdemoncrystallizer.mtl b/src/main/resources/assets/bloodmagic/models/block/blockdemoncrystallizer.mtl new file mode 100644 index 00000000..5475fc76 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockdemoncrystallizer.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +#Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +#Ks 0.8 0.8 0.8 +d 1 +#illum 2 +map_Kd bloodmagic:models/demoncrystallizer \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/blockdemoncrystallizer.obj b/src/main/resources/assets/bloodmagic/models/block/blockdemoncrystallizer.obj new file mode 100644 index 00000000..7558622b --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockdemoncrystallizer.obj @@ -0,0 +1,1359 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib blockdemoncrystallizer.mtl +o BlockDemonCrystallizer.001 +v 0.125000 0.062500 0.875000 +v 0.125000 -0.000000 0.875000 +v 0.875000 -0.000000 0.875000 +v 0.875000 0.062500 0.875000 +v 0.875000 0.062500 0.125000 +v 0.875000 0.000000 0.125000 +v 0.125000 0.000000 0.125000 +v 0.125000 0.062500 0.125000 +v 0.187500 0.125000 0.812500 +v 0.187500 0.062500 0.812500 +v 0.812500 0.062500 0.812500 +v 0.812500 0.125000 0.812500 +v 0.812500 0.125000 0.187500 +v 0.812500 0.062500 0.187500 +v 0.187500 0.062500 0.187500 +v 0.187500 0.125000 0.187500 +v 0.125000 0.187500 0.875000 +v 0.125000 0.125000 0.875000 +v 0.875000 0.125000 0.875000 +v 0.875000 0.187500 0.875000 +v 0.875000 0.187500 0.125000 +v 0.875000 0.125000 0.125000 +v 0.125000 0.125000 0.125000 +v 0.125000 0.187500 0.125000 +v 0.631420 0.815976 0.370107 +v 0.556035 0.136742 0.445037 +v 0.742405 0.116307 0.447292 +v 0.817789 0.795541 0.372362 +v 0.817789 0.774981 0.185992 +v 0.742405 0.095747 0.260922 +v 0.556035 0.116183 0.258668 +v 0.631420 0.795417 0.183738 +v 0.580484 0.643738 0.420547 +v 0.573631 0.581989 0.427359 +v 0.822124 0.554742 0.430365 +v 0.828977 0.616490 0.423553 +v 0.828977 0.589078 0.175061 +v 0.822124 0.527329 0.181873 +v 0.573631 0.554577 0.178867 +v 0.580484 0.616325 0.172055 +v 0.631420 0.795416 0.816259 +v 0.556035 0.116189 0.741328 +v 0.742405 0.095754 0.739074 +v 0.817789 0.774980 0.814004 +v 0.817789 0.795540 0.627637 +v 0.742405 0.116313 0.552707 +v 0.556035 0.136748 0.554961 +v 0.631420 0.815975 0.629891 +v 0.548960 0.332286 0.796607 +v 0.542106 0.270538 0.789795 +v 0.790599 0.243291 0.786789 +v 0.797452 0.305039 0.793601 +v 0.797452 0.332451 0.545111 +v 0.790599 0.270704 0.538299 +v 0.542106 0.297951 0.541305 +v 0.548960 0.359699 0.548117 +v 0.182214 0.774979 0.814004 +v 0.257599 0.095760 0.739075 +v 0.443966 0.116195 0.741329 +v 0.368581 0.795415 0.816258 +v 0.368581 0.815974 0.629891 +v 0.443966 0.136755 0.554962 +v 0.257599 0.116319 0.552707 +v 0.182214 0.795539 0.627637 +v 0.192272 0.397664 0.803819 +v 0.199125 0.335916 0.797007 +v 0.447615 0.363163 0.800013 +v 0.440762 0.424911 0.806825 +v 0.440762 0.452323 0.558335 +v 0.447615 0.390576 0.551523 +v 0.199125 0.363329 0.548517 +v 0.192272 0.425076 0.555329 +v 0.182214 0.795540 0.372362 +v 0.257599 0.116313 0.447291 +v 0.443966 0.136748 0.445037 +v 0.368581 0.815975 0.370107 +v 0.368581 0.795416 0.183738 +v 0.443966 0.116189 0.258667 +v 0.257599 0.095753 0.260922 +v 0.182214 0.774980 0.185992 +v 0.178886 0.517012 0.431383 +v 0.185739 0.455264 0.438195 +v 0.434229 0.482511 0.435189 +v 0.427376 0.544259 0.428378 +v 0.427376 0.516846 0.179885 +v 0.434229 0.455098 0.186697 +v 0.185739 0.427851 0.189703 +v 0.178886 0.489599 0.182891 +v 0.125000 1.000000 0.875000 +v 0.125000 0.875000 0.875000 +v 0.875000 0.875000 0.875000 +v 0.875000 1.000000 0.875000 +v 0.875000 1.000000 0.125000 +v 0.875000 0.875000 0.125000 +v 0.125000 0.875000 0.125000 +v 0.125000 1.000000 0.125000 +v 0.125000 1.000000 0.125000 +v 0.125000 0.875000 0.125000 +v 0.875000 0.875000 0.125000 +v 0.875000 1.000000 0.125000 +v 0.875000 1.000000 0.000000 +v 0.875000 0.875000 0.000000 +v 0.125000 0.875000 0.000000 +v 0.125000 1.000000 0.000000 +v 0.125000 1.000000 1.000000 +v 0.125000 0.875000 1.000000 +v 0.875000 0.875000 1.000000 +v 0.875000 1.000000 1.000000 +v 0.875000 1.000000 0.875000 +v 0.875000 0.875000 0.875000 +v 0.125000 0.875000 0.875000 +v 0.125000 1.000000 0.875000 +v 0.875000 1.000000 0.875000 +v 0.875000 0.875000 0.875000 +v 1.000000 0.875000 0.875000 +v 1.000000 1.000000 0.875000 +v 1.000000 1.000000 0.125000 +v 1.000000 0.875000 0.125000 +v 0.875000 0.875000 0.125000 +v 0.875000 1.000000 0.125000 +v 0.000000 1.000000 0.875000 +v 0.000000 0.875000 0.875000 +v 0.125000 0.875000 0.875000 +v 0.125000 1.000000 0.875000 +v 0.125000 1.000000 0.125000 +v 0.125000 0.875000 0.125000 +v 0.000000 0.875000 0.125000 +v 0.000000 1.000000 0.125000 +v 0.343750 1.062500 0.656250 +v 0.343750 1.000000 0.656250 +v 0.656250 1.000000 0.656250 +v 0.656250 1.062500 0.656250 +v 0.656250 1.062500 0.343750 +v 0.656250 1.000000 0.343750 +v 0.343750 1.000000 0.343750 +v 0.343750 1.062500 0.343750 +v 0.343667 1.062449 0.656250 +v 0.255279 0.974061 0.656250 +v 0.299473 0.929867 0.656250 +v 0.387862 1.018255 0.656250 +v 0.387862 1.018255 0.343750 +v 0.299473 0.929867 0.343750 +v 0.255279 0.974061 0.343750 +v 0.343667 1.062449 0.343750 +v 0.343750 1.062449 0.656332 +v 0.343750 0.974061 0.744721 +v 0.656250 0.974061 0.744721 +v 0.656250 1.062449 0.656332 +v 0.656250 1.018255 0.612138 +v 0.656250 0.929866 0.700527 +v 0.343750 0.929866 0.700527 +v 0.343750 1.018255 0.612138 +v 0.343750 1.018255 0.388125 +v 0.343750 0.929867 0.299737 +v 0.656250 0.929867 0.299737 +v 0.656250 1.018255 0.388125 +v 0.656250 1.062449 0.343931 +v 0.656250 0.974061 0.255542 +v 0.343750 0.974061 0.255542 +v 0.343750 1.062449 0.343931 +v 0.612138 1.018255 0.656250 +v 0.700527 0.929867 0.656250 +v 0.744721 0.974061 0.656250 +v 0.656333 1.062449 0.656250 +v 0.656333 1.062449 0.343750 +v 0.744721 0.974061 0.343750 +v 0.700527 0.929867 0.343750 +v 0.612138 1.018255 0.343750 +v 0.875000 1.187500 0.125000 +v 0.875000 0.937500 0.125000 +v 1.000000 0.937500 0.125000 +v 1.000000 1.187500 0.125000 +v 1.000000 1.187500 0.000000 +v 1.000000 0.937500 0.000000 +v 0.875000 0.937500 0.000000 +v 0.875000 1.187500 0.000000 +v 0.937500 1.250000 0.062500 +v 0.937500 1.187500 0.062500 +v 1.000000 1.187500 0.062500 +v 1.000000 1.250000 0.062500 +v 1.000000 1.250000 0.000000 +v 1.000000 1.187500 0.000000 +v 0.937500 1.187500 0.000000 +v 0.937500 1.250000 0.000000 +v 0.937500 1.375000 0.062500 +v 0.937500 1.312500 0.062500 +v 1.000000 1.312500 0.062500 +v 1.000000 1.375000 0.062500 +v 1.000000 1.375000 0.000000 +v 1.000000 1.312500 0.000000 +v 0.937500 1.312500 0.000000 +v 0.937500 1.375000 0.000000 +v 0.000000 1.187500 1.000000 +v 0.000000 0.937500 1.000000 +v 0.125000 0.937500 1.000000 +v 0.125000 1.187500 1.000000 +v 0.125000 1.187500 0.875000 +v 0.125000 0.937500 0.875000 +v 0.000000 0.937500 0.875000 +v 0.000000 1.187500 0.875000 +v 0.000000 1.250000 1.000000 +v 0.000000 1.187500 1.000000 +v 0.062500 1.187500 1.000000 +v 0.062500 1.250000 1.000000 +v 0.062500 1.250000 0.937500 +v 0.062500 1.187500 0.937500 +v 0.000000 1.187500 0.937500 +v 0.000000 1.250000 0.937500 +v 0.000000 1.375000 1.000000 +v 0.000000 1.312500 1.000000 +v 0.062500 1.312500 1.000000 +v 0.062500 1.375000 1.000000 +v 0.062500 1.375000 0.937500 +v 0.062500 1.312500 0.937500 +v 0.000000 1.312500 0.937500 +v 0.000000 1.375000 0.937500 +v 0.875000 1.187500 1.000000 +v 0.875000 0.937500 1.000000 +v 1.000000 0.937500 1.000000 +v 1.000000 1.187500 1.000000 +v 1.000000 1.187500 0.875000 +v 1.000000 0.937500 0.875000 +v 0.875000 0.937500 0.875000 +v 0.875000 1.187500 0.875000 +v 0.937500 1.250000 1.000000 +v 0.937500 1.187500 1.000000 +v 1.000000 1.187500 1.000000 +v 1.000000 1.250000 1.000000 +v 1.000000 1.250000 0.937500 +v 1.000000 1.187500 0.937500 +v 0.937500 1.187500 0.937500 +v 0.937500 1.250000 0.937500 +v 0.937500 1.375000 1.000000 +v 0.937500 1.312500 1.000000 +v 1.000000 1.312500 1.000000 +v 1.000000 1.375000 1.000000 +v 1.000000 1.375000 0.937500 +v 1.000000 1.312500 0.937500 +v 0.937500 1.312500 0.937500 +v 0.937500 1.375000 0.937500 +v 0.000000 1.187500 0.125000 +v 0.000000 0.937500 0.125000 +v 0.125000 0.937500 0.125000 +v 0.125000 1.187500 0.125000 +v 0.125000 1.187500 0.000000 +v 0.125000 0.937500 0.000000 +v 0.000000 0.937500 0.000000 +v 0.000000 1.187500 0.000000 +v 0.000000 1.250000 0.062500 +v 0.000000 1.187500 0.062500 +v 0.062500 1.187500 0.062500 +v 0.062500 1.250000 0.062500 +v 0.062500 1.250000 0.000000 +v 0.062500 1.187500 0.000000 +v 0.000000 1.187500 0.000000 +v 0.000000 1.250000 0.000000 +v 0.000000 1.375000 0.062500 +v 0.000000 1.312500 0.062500 +v 0.062500 1.312500 0.062500 +v 0.062500 1.375000 0.062500 +v 0.062500 1.375000 0.000000 +v 0.062500 1.312500 0.000000 +v 0.000000 1.312500 0.000000 +v 0.000000 1.375000 0.000000 +v 0.187500 0.875000 0.812500 +v 0.187500 0.750000 0.812500 +v 0.812500 0.750000 0.812500 +v 0.812500 0.875000 0.812500 +v 0.812500 0.875000 0.187500 +v 0.812500 0.750000 0.187500 +v 0.187500 0.750000 0.187500 +v 0.187500 0.875000 0.187500 +v 0.062500 0.875000 0.812500 +v 0.062500 0.750000 0.812500 +v 0.187500 0.750000 0.812500 +v 0.187500 0.875000 0.812500 +v 0.187500 0.875000 0.187500 +v 0.187500 0.750000 0.187500 +v 0.062500 0.750000 0.187500 +v 0.062500 0.875000 0.187500 +v 0.187500 0.875000 0.187500 +v 0.187500 0.750000 0.187500 +v 0.812500 0.750000 0.187500 +v 0.812500 0.875000 0.187500 +v 0.812500 0.875000 0.062500 +v 0.812500 0.750000 0.062500 +v 0.187500 0.750000 0.062500 +v 0.187500 0.875000 0.062500 +v 0.187500 0.875000 0.937500 +v 0.187500 0.750000 0.937500 +v 0.812500 0.750000 0.937500 +v 0.812500 0.875000 0.937500 +v 0.812500 0.875000 0.812500 +v 0.812500 0.750000 0.812500 +v 0.187500 0.750000 0.812500 +v 0.187500 0.875000 0.812500 +v 0.812500 0.875000 0.812500 +v 0.812500 0.750000 0.812500 +v 0.937500 0.750000 0.812500 +v 0.937500 0.875000 0.812500 +v 0.937500 0.875000 0.187500 +v 0.937500 0.750000 0.187500 +v 0.812500 0.750000 0.187500 +v 0.812500 0.875000 0.187500 +v 0.187500 0.125000 0.812500 +v 0.187500 0.062500 0.812500 +v 0.812500 0.062500 0.812500 +v 0.812500 0.125000 0.812500 +v 0.812500 0.125000 0.187500 +v 0.812500 0.062500 0.187500 +v 0.187500 0.062500 0.187500 +v 0.187500 0.125000 0.187500 +v 0.125000 0.187500 0.875000 +v 0.125000 0.125000 0.875000 +v 0.875000 0.125000 0.875000 +v 0.875000 0.187500 0.875000 +v 0.875000 0.187500 0.125000 +v 0.875000 0.125000 0.125000 +v 0.125000 0.125000 0.125000 +v 0.125000 0.187500 0.125000 +v 0.125000 0.187500 0.875000 +v 0.125000 0.125000 0.875000 +v 0.875000 0.125000 0.875000 +v 0.875000 0.187500 0.875000 +v 0.875000 0.187500 0.125000 +v 0.875000 0.125000 0.125000 +v 0.125000 0.125000 0.125000 +v 0.125000 0.187500 0.125000 +v 0.580484 0.643738 0.420547 +v 0.573631 0.581989 0.427359 +v 0.822124 0.554742 0.430365 +v 0.828977 0.616490 0.423553 +v 0.828977 0.589078 0.175061 +v 0.822124 0.527329 0.181873 +v 0.573631 0.554577 0.178867 +v 0.580484 0.616325 0.172055 +v 0.548960 0.332286 0.796607 +v 0.542106 0.270538 0.789795 +v 0.790599 0.243291 0.786789 +v 0.797452 0.305039 0.793601 +v 0.797452 0.332451 0.545111 +v 0.790599 0.270704 0.538299 +v 0.542106 0.297951 0.541305 +v 0.548960 0.359699 0.548117 +v 0.192272 0.397664 0.803819 +v 0.199125 0.335916 0.797007 +v 0.447615 0.363163 0.800013 +v 0.440762 0.424911 0.806825 +v 0.440762 0.452323 0.558335 +v 0.447615 0.390576 0.551523 +v 0.199125 0.363329 0.548517 +v 0.192272 0.425076 0.555329 +v 0.178886 0.517012 0.431383 +v 0.185739 0.455264 0.438195 +v 0.434229 0.482511 0.435189 +v 0.427376 0.544259 0.428378 +v 0.427376 0.516846 0.179885 +v 0.434229 0.455098 0.186697 +v 0.185739 0.427851 0.189703 +v 0.178886 0.489599 0.182891 +v 0.125000 1.000000 0.125000 +v 0.125000 0.875000 0.125000 +v 0.875000 0.875000 0.125000 +v 0.875000 1.000000 0.125000 +v 0.875000 1.000000 0.000000 +v 0.875000 0.875000 0.000000 +v 0.125000 0.875000 0.000000 +v 0.125000 1.000000 0.000000 +v 0.125000 1.000000 1.000000 +v 0.125000 0.875000 1.000000 +v 0.875000 0.875000 1.000000 +v 0.875000 1.000000 1.000000 +v 0.875000 1.000000 0.875000 +v 0.875000 0.875000 0.875000 +v 0.125000 0.875000 0.875000 +v 0.125000 1.000000 0.875000 +v 0.875000 1.000000 0.875000 +v 0.875000 0.875000 0.875000 +v 1.000000 0.875000 0.875000 +v 1.000000 1.000000 0.875000 +v 1.000000 1.000000 0.125000 +v 1.000000 0.875000 0.125000 +v 0.875000 0.875000 0.125000 +v 0.875000 1.000000 0.125000 +v 0.000000 1.000000 0.875000 +v 0.000000 0.875000 0.875000 +v 0.125000 0.875000 0.875000 +v 0.125000 1.000000 0.875000 +v 0.125000 1.000000 0.125000 +v 0.125000 0.875000 0.125000 +v 0.000000 0.875000 0.125000 +v 0.000000 1.000000 0.125000 +v 0.343750 1.062500 0.656250 +v 0.343750 1.000000 0.656250 +v 0.656250 1.000000 0.656250 +v 0.656250 1.062500 0.656250 +v 0.656250 1.062500 0.343750 +v 0.656250 1.000000 0.343750 +v 0.343750 1.000000 0.343750 +v 0.343750 1.062500 0.343750 +v 0.343667 1.062449 0.656250 +v 0.255279 0.974061 0.656250 +v 0.299473 0.929867 0.656250 +v 0.387862 1.018255 0.656250 +v 0.387862 1.018255 0.343750 +v 0.299473 0.929867 0.343750 +v 0.255279 0.974061 0.343750 +v 0.343667 1.062449 0.343750 +v 0.343750 1.062449 0.656332 +v 0.343750 0.974061 0.744721 +v 0.656250 0.974061 0.744721 +v 0.656250 1.062449 0.656332 +v 0.656250 1.018255 0.612138 +v 0.656250 0.929866 0.700527 +v 0.343750 0.929866 0.700527 +v 0.343750 1.018255 0.612138 +v 0.343750 1.018255 0.388125 +v 0.343750 0.929867 0.299737 +v 0.656250 0.929867 0.299737 +v 0.656250 1.018255 0.388125 +v 0.656250 1.062449 0.343931 +v 0.656250 0.974061 0.255542 +v 0.343750 0.974061 0.255542 +v 0.343750 1.062449 0.343931 +v 0.612138 1.018255 0.656250 +v 0.700527 0.929867 0.656250 +v 0.744721 0.974061 0.656250 +v 0.656333 1.062449 0.656250 +v 0.656333 1.062449 0.343750 +v 0.744721 0.974061 0.343750 +v 0.700527 0.929867 0.343750 +v 0.612138 1.018255 0.343750 +v 0.343667 1.062449 0.656250 +v 0.255279 0.974061 0.656250 +v 0.299473 0.929867 0.656250 +v 0.387862 1.018255 0.656250 +v 0.387862 1.018255 0.343750 +v 0.299473 0.929867 0.343750 +v 0.255279 0.974061 0.343750 +v 0.343667 1.062449 0.343750 +v 0.343750 1.062449 0.656332 +v 0.343750 0.974061 0.744721 +v 0.656250 0.974061 0.744721 +v 0.656250 1.062449 0.656332 +v 0.656250 1.018255 0.612138 +v 0.656250 0.929866 0.700527 +v 0.343750 0.929866 0.700527 +v 0.343750 1.018255 0.612138 +v 0.343750 1.018255 0.388125 +v 0.343750 0.929867 0.299737 +v 0.656250 0.929867 0.299737 +v 0.656250 1.018255 0.388125 +v 0.656250 1.062449 0.343931 +v 0.656250 0.974061 0.255542 +v 0.343750 0.974061 0.255542 +v 0.343750 1.062449 0.343931 +v 0.612138 1.018255 0.656250 +v 0.700527 0.929867 0.656250 +v 0.744721 0.974061 0.656250 +v 0.656333 1.062449 0.656250 +v 0.656333 1.062449 0.343750 +v 0.744721 0.974061 0.343750 +v 0.700527 0.929867 0.343750 +v 0.612138 1.018255 0.343750 +v 0.937500 1.250000 0.062500 +v 0.937500 1.187500 0.062500 +v 1.000000 1.187500 0.062500 +v 1.000000 1.250000 0.062500 +v 1.000000 1.250000 0.000000 +v 1.000000 1.187500 0.000000 +v 0.937500 1.187500 0.000000 +v 0.937500 1.250000 0.000000 +v 0.937500 1.375000 0.062500 +v 0.937500 1.312500 0.062500 +v 1.000000 1.312500 0.062500 +v 1.000000 1.375000 0.062500 +v 1.000000 1.375000 0.000000 +v 1.000000 1.312500 0.000000 +v 0.937500 1.312500 0.000000 +v 0.937500 1.375000 0.000000 +v 0.937500 1.375000 0.062500 +v 0.937500 1.312500 0.062500 +v 1.000000 1.312500 0.062500 +v 1.000000 1.375000 0.062500 +v 1.000000 1.375000 0.000000 +v 1.000000 1.312500 0.000000 +v 0.937500 1.312500 0.000000 +v 0.937500 1.375000 0.000000 +v 0.000000 1.250000 1.000000 +v 0.000000 1.187500 1.000000 +v 0.062500 1.187500 1.000000 +v 0.062500 1.250000 1.000000 +v 0.062500 1.250000 0.937500 +v 0.062500 1.187500 0.937500 +v 0.000000 1.187500 0.937500 +v 0.000000 1.250000 0.937500 +v 0.000000 1.375000 1.000000 +v 0.000000 1.312500 1.000000 +v 0.062500 1.312500 1.000000 +v 0.062500 1.375000 1.000000 +v 0.062500 1.375000 0.937500 +v 0.062500 1.312500 0.937500 +v 0.000000 1.312500 0.937500 +v 0.000000 1.375000 0.937500 +v 0.000000 1.375000 1.000000 +v 0.000000 1.312500 1.000000 +v 0.062500 1.312500 1.000000 +v 0.062500 1.375000 1.000000 +v 0.062500 1.375000 0.937500 +v 0.062500 1.312500 0.937500 +v 0.000000 1.312500 0.937500 +v 0.000000 1.375000 0.937500 +v 0.937500 1.250000 1.000000 +v 0.937500 1.187500 1.000000 +v 1.000000 1.187500 1.000000 +v 1.000000 1.250000 1.000000 +v 1.000000 1.250000 0.937500 +v 1.000000 1.187500 0.937500 +v 0.937500 1.187500 0.937500 +v 0.937500 1.250000 0.937500 +v 0.937500 1.375000 1.000000 +v 0.937500 1.312500 1.000000 +v 1.000000 1.312500 1.000000 +v 1.000000 1.375000 1.000000 +v 1.000000 1.375000 0.937500 +v 1.000000 1.312500 0.937500 +v 0.937500 1.312500 0.937500 +v 0.937500 1.375000 0.937500 +v 0.937500 1.375000 1.000000 +v 0.937500 1.312500 1.000000 +v 1.000000 1.312500 1.000000 +v 1.000000 1.375000 1.000000 +v 1.000000 1.375000 0.937500 +v 1.000000 1.312500 0.937500 +v 0.937500 1.312500 0.937500 +v 0.937500 1.375000 0.937500 +v 0.000000 1.250000 0.062500 +v 0.000000 1.187500 0.062500 +v 0.062500 1.187500 0.062500 +v 0.062500 1.250000 0.062500 +v 0.062500 1.250000 0.000000 +v 0.062500 1.187500 0.000000 +v 0.000000 1.187500 0.000000 +v 0.000000 1.250000 0.000000 +v 0.000000 1.375000 0.062500 +v 0.000000 1.312500 0.062500 +v 0.062500 1.312500 0.062500 +v 0.062500 1.375000 0.062500 +v 0.062500 1.375000 0.000000 +v 0.062500 1.312500 0.000000 +v 0.000000 1.312500 0.000000 +v 0.000000 1.375000 0.000000 +v 0.000000 1.375000 0.062500 +v 0.000000 1.312500 0.062500 +v 0.062500 1.312500 0.062500 +v 0.062500 1.375000 0.062500 +v 0.062500 1.375000 0.000000 +v 0.062500 1.312500 0.000000 +v 0.000000 1.312500 0.000000 +v 0.000000 1.375000 0.000000 +v 0.062500 0.875000 0.812500 +v 0.062500 0.750000 0.812500 +v 0.187500 0.750000 0.812500 +v 0.187500 0.875000 0.812500 +v 0.187500 0.875000 0.187500 +v 0.187500 0.750000 0.187500 +v 0.062500 0.750000 0.187500 +v 0.062500 0.875000 0.187500 +v 0.187500 0.875000 0.187500 +v 0.187500 0.750000 0.187500 +v 0.812500 0.750000 0.187500 +v 0.812500 0.875000 0.187500 +v 0.812500 0.875000 0.062500 +v 0.812500 0.750000 0.062500 +v 0.187500 0.750000 0.062500 +v 0.187500 0.875000 0.062500 +v 0.187500 0.875000 0.937500 +v 0.187500 0.750000 0.937500 +v 0.812500 0.750000 0.937500 +v 0.812500 0.875000 0.937500 +v 0.812500 0.875000 0.812500 +v 0.812500 0.750000 0.812500 +v 0.187500 0.750000 0.812500 +v 0.187500 0.875000 0.812500 +v 0.812500 0.875000 0.812500 +v 0.812500 0.750000 0.812500 +v 0.937500 0.750000 0.812500 +v 0.937500 0.875000 0.812500 +v 0.937500 0.875000 0.187500 +v 0.937500 0.750000 0.187500 +v 0.812500 0.750000 0.187500 +v 0.812500 0.875000 0.187500 +vt 0.437500 0.015625 +vt 0.437500 0.000000 +vt 0.625000 0.000000 +vt 0.625000 0.015625 +vt 0.812500 0.015625 +vt 0.812500 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.015625 +vt 0.437500 0.203125 +vt 0.625000 0.203125 +vt 0.812500 0.203125 +vt 0.250000 0.015625 +vt 0.250000 0.000000 +vt 0.531250 0.234375 +vt 0.531250 0.218750 +vt 0.687500 0.218750 +vt 0.687500 0.234375 +vt 0.843750 0.234375 +vt 0.843750 0.218750 +vt 1.000000 0.218750 +vt 1.000000 0.234375 +vt 0.531250 0.390625 +vt 0.687500 0.390625 +vt 0.843750 0.390625 +vt 0.375000 0.234375 +vt 0.375000 0.218750 +vt 0.046875 0.171875 +vt 0.046875 0.000000 +vt 0.093750 0.000000 +vt 0.093750 0.171875 +vt 0.140625 0.171875 +vt 0.140625 0.000000 +vt 0.187500 0.000000 +vt 0.187500 0.171875 +vt 0.046875 0.218750 +vt 0.093750 0.218750 +vt 0.140625 0.218750 +vt 0.000000 0.171875 +vt 0.000000 0.000000 +vt 0.609375 0.281250 +vt 0.609375 0.265625 +vt 0.671875 0.265625 +vt 0.671875 0.281250 +vt 0.734375 0.281250 +vt 0.734375 0.265625 +vt 0.796875 0.265625 +vt 0.796875 0.281250 +vt 0.609375 0.343750 +vt 0.671875 0.343750 +vt 0.734375 0.343750 +vt 0.546875 0.281250 +vt 0.546875 0.265625 +vt 0.609375 0.234375 +vt 0.609375 0.218750 +vt 0.671875 0.218750 +vt 0.671875 0.234375 +vt 0.734375 0.234375 +vt 0.734375 0.218750 +vt 0.796875 0.218750 +vt 0.796875 0.234375 +vt 0.609375 0.296875 +vt 0.671875 0.296875 +vt 0.734375 0.296875 +vt 0.546875 0.234375 +vt 0.546875 0.218750 +vt 0.609375 0.250000 +vt 0.671875 0.250000 +vt 0.734375 0.250000 +vt 0.796875 0.250000 +vt 0.609375 0.312500 +vt 0.671875 0.312500 +vt 0.734375 0.312500 +vt 0.546875 0.250000 +vt 0.609375 0.328125 +vt 0.671875 0.328125 +vt 0.734375 0.328125 +vt 0.187500 0.812500 +vt 0.187500 0.781250 +vt 0.375000 0.781250 +vt 0.375000 0.812500 +vt 0.562500 0.812500 +vt 0.562500 0.781250 +vt 0.750000 0.781250 +vt 0.750000 0.812500 +vt 0.187500 1.000000 +vt 0.375000 1.000000 +vt 0.562500 1.000000 +vt 0.000000 0.812500 +vt 0.000000 0.781250 +vt 0.593750 0.640625 +vt 0.593750 0.609375 +vt 0.781250 0.609375 +vt 0.781250 0.640625 +vt 0.812500 0.640625 +vt 0.812500 0.609375 +vt 1.000000 0.609375 +vt 1.000000 0.640625 +vt 0.593750 0.671875 +vt 0.781250 0.671875 +vt 0.968750 0.640625 +vt 0.968750 0.671875 +vt 0.562500 0.640625 +vt 0.562500 0.609375 +vt 0.593750 0.718750 +vt 0.593750 0.687500 +vt 0.781250 0.687500 +vt 0.781250 0.718750 +vt 0.812500 0.718750 +vt 0.812500 0.687500 +vt 1.000000 0.687500 +vt 1.000000 0.718750 +vt 0.593750 0.750000 +vt 0.781250 0.750000 +vt 0.968750 0.718750 +vt 0.968750 0.750000 +vt 0.562500 0.718750 +vt 0.562500 0.687500 +vt 0.187500 0.578125 +vt 0.187500 0.546875 +vt 0.218750 0.546875 +vt 0.218750 0.578125 +vt 0.406250 0.578125 +vt 0.406250 0.546875 +vt 0.437500 0.546875 +vt 0.437500 0.578125 +vt 0.187500 0.765625 +vt 0.218750 0.765625 +vt 0.250000 0.578125 +vt 0.250000 0.765625 +vt 0.000000 0.578125 +vt 0.000000 0.546875 +vt 0.078125 0.453125 +vt 0.078125 0.437500 +vt 0.156250 0.437500 +vt 0.156250 0.453125 +vt 0.234375 0.453125 +vt 0.234375 0.437500 +vt 0.312500 0.437500 +vt 0.312500 0.453125 +vt 0.078125 0.531250 +vt 0.156250 0.531250 +vt 0.234375 0.531250 +vt 0.000000 0.453125 +vt 0.000000 0.437500 +vt 0.312500 0.062500 +vt 0.312500 0.031250 +vt 0.328125 0.031250 +vt 0.328125 0.062500 +vt 0.406250 0.062500 +vt 0.406250 0.031250 +vt 0.421875 0.031250 +vt 0.421875 0.062500 +vt 0.312500 0.140625 +vt 0.328125 0.140625 +vt 0.343750 0.062500 +vt 0.343750 0.140625 +vt 0.234375 0.062500 +vt 0.234375 0.031250 +vt 0.250000 0.187500 +vt 0.250000 0.156250 +vt 0.328125 0.156250 +vt 0.328125 0.187500 +vt 0.343750 0.187500 +vt 0.343750 0.156250 +vt 0.421875 0.156250 +vt 0.421875 0.187500 +vt 0.250000 0.203125 +vt 0.328125 0.203125 +vt 0.406250 0.187500 +vt 0.406250 0.203125 +vt 0.234375 0.187500 +vt 0.234375 0.156250 +vt 0.906250 0.093750 +vt 0.906250 0.031250 +vt 0.937500 0.031250 +vt 0.937500 0.093750 +vt 0.968750 0.093750 +vt 0.968750 0.031250 +vt 1.000000 0.031250 +vt 1.000000 0.093750 +vt 0.906250 0.125000 +vt 0.937500 0.125000 +vt 0.968750 0.125000 +vt 0.875000 0.093750 +vt 0.875000 0.031250 +vt 0.953125 0.156250 +vt 0.953125 0.140625 +vt 0.968750 0.140625 +vt 0.968750 0.156250 +vt 0.984375 0.156250 +vt 0.984375 0.140625 +vt 1.000000 0.140625 +vt 1.000000 0.156250 +vt 0.953125 0.171875 +vt 0.968750 0.171875 +vt 0.984375 0.171875 +vt 0.937500 0.156250 +vt 0.937500 0.140625 +vt 0.656250 0.281250 +vt 0.656250 0.265625 +vt 0.687500 0.281250 +vt 0.687500 0.265625 +vt 0.703125 0.265625 +vt 0.703125 0.281250 +vt 0.656250 0.296875 +vt 0.687500 0.296875 +vt 0.640625 0.281250 +vt 0.640625 0.265625 +vt 0.593750 0.281250 +vt 0.593750 0.265625 +vt 0.625000 0.281250 +vt 0.625000 0.265625 +vt 0.593750 0.296875 +vt 0.625000 0.296875 +vt 0.578125 0.281250 +vt 0.578125 0.265625 +vt 0.750000 0.265625 +vt 0.750000 0.281250 +vt 0.765625 0.281250 +vt 0.765625 0.265625 +vt 0.781250 0.265625 +vt 0.781250 0.281250 +vt 0.750000 0.296875 +vt 0.765625 0.296875 +vt 0.718750 0.281250 +vt 0.718750 0.265625 +vt 0.640625 0.296875 +vt 0.531250 0.437500 +vt 0.531250 0.406250 +vt 0.687500 0.406250 +vt 0.687500 0.437500 +vt 0.843750 0.437500 +vt 0.843750 0.406250 +vt 1.000000 0.406250 +vt 1.000000 0.437500 +vt 0.531250 0.593750 +vt 0.687500 0.593750 +vt 0.843750 0.593750 +vt 0.375000 0.437500 +vt 0.375000 0.406250 +vt 0.156250 0.265625 +vt 0.156250 0.234375 +vt 0.187500 0.234375 +vt 0.187500 0.265625 +vt 0.343750 0.265625 +vt 0.343750 0.234375 +vt 0.375000 0.265625 +vt 0.156250 0.421875 +vt 0.187500 0.421875 +vt 0.218750 0.265625 +vt 0.218750 0.421875 +vt 0.000000 0.265625 +vt 0.000000 0.234375 +vt 0.625000 0.890625 +vt 0.625000 0.859375 +vt 0.781250 0.859375 +vt 0.781250 0.890625 +vt 0.812500 0.890625 +vt 0.812500 0.859375 +vt 0.968750 0.859375 +vt 0.968750 0.890625 +vt 0.625000 0.921875 +vt 0.781250 0.921875 +vt 0.937500 0.890625 +vt 0.937500 0.921875 +vt 0.593750 0.890625 +vt 0.593750 0.859375 +vt 0.625000 0.968750 +vt 0.625000 0.937500 +vt 0.781250 0.937500 +vt 0.781250 0.968750 +vt 0.812500 0.968750 +vt 0.812500 0.937500 +vt 0.968750 0.937500 +vt 0.968750 0.968750 +vt 0.625000 1.000000 +vt 0.781250 1.000000 +vt 0.937500 0.968750 +vt 0.937500 1.000000 +vt 0.593750 0.968750 +vt 0.593750 0.937500 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn -0.000000 0.109700 0.994000 +vn -0.000000 -0.109600 -0.994000 +vn 0.109700 0.988000 -0.109000 +vn -0.109700 -0.988000 0.109000 +vn 0.994000 -0.109000 0.012000 +vn -0.994000 0.109000 -0.012000 +vn 0.000000 -0.109700 -0.994000 +vn 0.000000 -0.109700 0.994000 +vn 0.000000 0.109700 -0.994000 +vn 0.109700 0.988000 0.109000 +vn -0.109600 -0.988000 -0.109000 +vn 0.994000 -0.109000 -0.012000 +vn -0.994000 0.109000 0.012000 +vn -0.109700 0.988000 0.109000 +vn 0.109700 -0.988000 -0.109000 +vn 0.994000 0.109000 0.012000 +vn -0.994000 -0.109000 -0.012000 +vn -0.109700 0.988000 -0.109000 +vn 0.109700 -0.988000 0.109000 +vn 0.994000 0.109000 -0.012000 +vn -0.994000 -0.109000 0.012000 +vn -0.000000 0.109600 0.994000 +vn 0.707100 0.707100 0.000000 +vn -0.707100 -0.707100 0.000000 +vn 0.707100 -0.707100 0.000000 +vn -0.707100 0.707100 0.000000 +vn 0.000000 0.707100 0.707100 +vn 0.000000 -0.707100 -0.707100 +vn 0.000000 0.707100 -0.707100 +vn 0.000000 -0.707100 0.707100 +usemtl None +#s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 8/9/3 1/1/3 4/4/3 5/10/3 +f 2/5/4 7/11/4 6/10/4 3/4/4 +f 5/5/5 4/4/5 3/3/5 6/6/5 +f 8/12/6 7/13/6 2/2/6 1/1/6 +f 9/14/1 10/15/1 11/16/1 12/17/1 +f 13/18/2 14/19/2 15/20/2 16/21/2 +f 16/22/3 9/14/3 12/17/3 13/23/3 +f 10/18/4 15/24/4 14/23/4 11/17/4 +f 13/18/5 12/17/5 11/16/5 14/19/5 +f 16/25/6 15/26/6 10/15/6 9/14/6 +f 17/1/1 18/2/1 19/3/1 20/4/1 +f 21/5/2 22/6/2 23/7/2 24/8/2 +f 24/9/3 17/1/3 20/4/3 21/10/3 +f 18/5/4 23/11/4 22/10/4 19/4/4 +f 21/5/5 20/4/5 19/3/5 22/6/5 +f 24/12/6 23/13/6 18/2/6 17/1/6 +f 25/27/7 26/28/7 27/29/7 28/30/7 +f 29/31/8 30/32/8 31/33/8 32/34/8 +f 32/35/9 25/27/9 28/30/9 29/36/9 +f 26/31/10 31/37/10 30/36/10 27/30/10 +f 29/31/11 28/30/11 27/29/11 30/32/11 +f 32/38/12 31/39/12 26/28/12 25/27/12 +f 33/40/7 34/41/7 35/42/7 36/43/7 +f 37/44/13 38/45/13 39/46/13 40/47/13 +f 40/48/9 33/40/9 36/43/9 37/49/9 +f 34/44/10 39/50/10 38/49/10 35/43/10 +f 37/44/11 36/43/11 35/42/11 38/45/11 +f 40/51/12 39/52/12 34/41/12 33/40/12 +f 41/27/14 42/28/14 43/29/14 44/30/14 +f 45/31/15 46/32/15 47/33/15 48/34/15 +f 48/35/16 41/27/16 44/30/16 45/36/16 +f 42/31/17 47/37/17 46/36/17 43/30/17 +f 45/31/18 44/30/18 43/29/18 46/32/18 +f 48/38/19 47/39/19 42/28/19 41/27/19 +f 49/53/14 50/54/14 51/55/14 52/56/14 +f 53/57/15 54/58/15 55/59/15 56/60/15 +f 56/61/16 49/53/16 52/56/16 53/62/16 +f 50/57/17 55/63/17 54/62/17 51/56/17 +f 53/57/18 52/56/18 51/55/18 54/58/18 +f 56/64/19 55/65/19 50/54/19 49/53/19 +f 57/27/14 58/28/14 59/29/14 60/30/14 +f 61/31/15 62/32/15 63/33/15 64/34/15 +f 64/35/20 57/27/20 60/30/20 61/36/20 +f 58/31/21 63/37/21 62/36/21 59/30/21 +f 61/31/22 60/30/22 59/29/22 62/32/22 +f 64/38/23 63/39/23 58/28/23 57/27/23 +f 65/66/14 66/53/14 67/56/14 68/67/14 +f 69/68/15 70/57/15 71/60/15 72/69/15 +f 72/70/20 65/66/20 68/67/20 69/71/20 +f 66/68/21 71/72/21 70/71/21 67/67/21 +f 69/68/22 68/67/22 67/56/22 70/57/22 +f 72/73/23 71/64/23 66/53/23 65/66/23 +f 73/27/7 74/28/7 75/29/7 76/30/7 +f 77/31/13 78/32/13 79/33/13 80/34/13 +f 80/35/24 73/27/24 76/30/24 77/36/24 +f 74/31/25 79/37/25 78/36/25 75/30/25 +f 77/31/26 76/30/26 75/29/26 78/32/26 +f 80/38/27 79/39/27 74/28/27 73/27/27 +f 81/41/28 82/66/28 83/67/28 84/42/28 +f 85/45/13 86/68/13 87/69/13 88/46/13 +f 88/74/24 81/41/24 84/42/24 85/75/24 +f 82/45/25 87/76/25 86/75/25 83/42/25 +f 85/45/26 84/42/26 83/67/26 86/68/26 +f 88/52/27 87/73/27 82/66/27 81/41/27 +f 89/77/1 90/78/1 91/79/1 92/80/1 +f 93/81/2 94/82/2 95/83/2 96/84/2 +f 96/85/3 89/77/3 92/80/3 93/86/3 +f 90/81/4 95/87/4 94/86/4 91/80/4 +f 93/81/5 92/80/5 91/79/5 94/82/5 +f 96/88/6 95/89/6 90/78/6 89/77/6 +f 97/90/1 98/91/1 99/92/1 100/93/1 +f 101/94/2 102/95/2 103/96/2 104/97/2 +f 104/98/3 97/90/3 100/93/3 101/99/3 +f 98/100/4 103/101/4 102/99/4 99/93/4 +f 101/94/5 100/93/5 99/92/5 102/95/5 +f 104/102/6 103/103/6 98/91/6 97/90/6 +f 105/104/1 106/105/1 107/106/1 108/107/1 +f 109/108/2 110/109/2 111/110/2 112/111/2 +f 112/112/3 105/104/3 108/107/3 109/113/3 +f 106/114/4 111/115/4 110/113/4 107/107/4 +f 109/108/5 108/107/5 107/106/5 110/109/5 +f 112/116/6 111/117/6 106/105/6 105/104/6 +f 113/118/1 114/119/1 115/120/1 116/121/1 +f 117/122/2 118/123/2 119/124/2 120/125/2 +f 120/126/3 113/118/3 116/121/3 117/127/3 +f 114/128/4 119/129/4 118/127/4 115/121/4 +f 117/122/5 116/121/5 115/120/5 118/123/5 +f 120/130/6 119/131/6 114/119/6 113/118/6 +f 121/118/1 122/119/1 123/120/1 124/121/1 +f 125/122/2 126/123/2 127/124/2 128/125/2 +f 128/126/3 121/118/3 124/121/3 125/127/3 +f 122/128/4 127/129/4 126/127/4 123/121/4 +f 125/122/5 124/121/5 123/120/5 126/123/5 +f 128/130/6 127/131/6 122/119/6 121/118/6 +f 129/132/1 130/133/1 131/134/1 132/135/1 +f 133/136/2 134/137/2 135/138/2 136/139/2 +f 136/140/3 129/132/3 132/135/3 133/141/3 +f 130/136/4 135/142/4 134/141/4 131/135/4 +f 133/136/5 132/135/5 131/134/5 134/137/5 +f 136/143/6 135/144/6 130/133/6 129/132/6 +f 137/145/1 138/146/1 139/147/1 140/148/1 +f 141/149/2 142/150/2 143/151/2 144/152/2 +f 144/153/29 137/145/29 140/148/29 141/154/29 +f 138/155/30 143/156/30 142/154/30 139/148/30 +f 141/149/31 140/148/31 139/147/31 142/150/31 +f 144/157/32 143/158/32 138/146/32 137/145/32 +f 145/159/33 146/160/33 147/161/33 148/162/33 +f 149/163/34 150/164/34 151/165/34 152/166/34 +f 152/167/35 145/159/35 148/162/35 149/168/35 +f 146/169/36 151/170/36 150/168/36 147/162/36 +f 149/163/5 148/162/5 147/161/5 150/164/5 +f 152/171/6 151/172/6 146/160/6 145/159/6 +f 153/159/36 154/160/36 155/161/36 156/162/36 +f 157/163/35 158/164/35 159/165/35 160/166/35 +f 160/167/33 153/159/33 156/162/33 157/168/33 +f 154/169/34 159/170/34 158/168/34 155/162/34 +f 157/163/5 156/162/5 155/161/5 158/164/5 +f 160/171/6 159/172/6 154/160/6 153/159/6 +f 161/145/1 162/146/1 163/147/1 164/148/1 +f 165/149/2 166/150/2 167/151/2 168/152/2 +f 168/153/32 161/145/32 164/148/32 165/154/32 +f 162/155/31 167/156/31 166/154/31 163/148/31 +f 165/149/29 164/148/29 163/147/29 166/150/29 +f 168/157/30 167/158/30 162/146/30 161/145/30 +f 169/173/1 170/174/1 171/175/1 172/176/1 +f 173/177/2 174/178/2 175/179/2 176/180/2 +f 176/181/3 169/173/3 172/176/3 173/182/3 +f 170/177/4 175/183/4 174/182/4 171/176/4 +f 173/177/5 172/176/5 171/175/5 174/178/5 +f 176/184/6 175/185/6 170/174/6 169/173/6 +f 177/186/1 178/187/1 179/188/1 180/189/1 +f 181/190/2 182/191/2 183/192/2 184/193/2 +f 184/194/3 177/186/3 180/189/3 181/195/3 +f 178/190/4 183/196/4 182/195/4 179/189/4 +f 181/190/5 180/189/5 179/188/5 182/191/5 +f 184/197/6 183/198/6 178/187/6 177/186/6 +f 185/199/1 186/200/1 187/42/1 188/43/1 +f 189/201/2 190/202/2 191/203/2 192/204/2 +f 192/205/3 185/199/3 188/43/3 189/62/3 +f 186/201/4 191/206/4 190/62/4 187/43/4 +f 189/201/5 188/43/5 187/42/5 190/202/5 +f 192/207/6 191/208/6 186/200/6 185/199/6 +f 193/173/1 194/174/1 195/175/1 196/176/1 +f 197/177/2 198/178/2 199/179/2 200/180/2 +f 200/181/3 193/173/3 196/176/3 197/182/3 +f 194/177/4 199/183/4 198/182/4 195/176/4 +f 197/177/5 196/176/5 195/175/5 198/178/5 +f 200/184/6 199/185/6 194/174/6 193/173/6 +f 201/186/1 202/187/1 203/188/1 204/189/1 +f 205/190/2 206/191/2 207/192/2 208/193/2 +f 208/194/3 201/186/3 204/189/3 205/195/3 +f 202/190/4 207/196/4 206/195/4 203/189/4 +f 205/190/5 204/189/5 203/188/5 206/191/5 +f 208/197/6 207/198/6 202/187/6 201/186/6 +f 209/209/1 210/210/1 211/41/1 212/40/1 +f 213/211/2 214/212/2 215/208/2 216/207/2 +f 216/213/3 209/209/3 212/40/3 213/61/3 +f 210/211/4 215/214/4 214/61/4 211/40/4 +f 213/211/5 212/40/5 211/41/5 214/212/5 +f 216/215/6 215/216/6 210/210/6 209/209/6 +f 217/173/1 218/174/1 219/175/1 220/176/1 +f 221/177/2 222/178/2 223/179/2 224/180/2 +f 224/181/3 217/173/3 220/176/3 221/182/3 +f 218/177/4 223/183/4 222/182/4 219/176/4 +f 221/177/5 220/176/5 219/175/5 222/178/5 +f 224/184/6 223/185/6 218/174/6 217/173/6 +f 225/186/1 226/187/1 227/188/1 228/189/1 +f 229/190/2 230/191/2 231/192/2 232/193/2 +f 232/194/3 225/186/3 228/189/3 229/195/3 +f 226/190/4 231/196/4 230/195/4 227/189/4 +f 229/190/5 228/189/5 227/188/5 230/191/5 +f 232/197/6 231/198/6 226/187/6 225/186/6 +f 233/44/1 234/45/1 235/217/1 236/218/1 +f 237/219/2 238/220/2 239/221/2 240/222/2 +f 240/63/3 233/44/3 236/218/3 237/223/3 +f 234/219/4 239/224/4 238/223/4 235/218/4 +f 237/219/5 236/218/5 235/217/5 238/220/5 +f 240/225/6 239/226/6 234/45/6 233/44/6 +f 241/173/1 242/174/1 243/175/1 244/176/1 +f 245/177/2 246/178/2 247/179/2 248/180/2 +f 248/181/3 241/173/3 244/176/3 245/182/3 +f 242/177/4 247/183/4 246/182/4 243/176/4 +f 245/177/5 244/176/5 243/175/5 246/178/5 +f 248/184/6 247/185/6 242/174/6 241/173/6 +f 249/186/1 250/187/1 251/188/1 252/189/1 +f 253/190/2 254/191/2 255/192/2 256/193/2 +f 256/194/3 249/186/3 252/189/3 253/195/3 +f 250/190/4 255/196/4 254/195/4 251/189/4 +f 253/190/5 252/189/5 251/188/5 254/191/5 +f 256/197/6 255/198/6 250/187/6 249/186/6 +f 257/207/1 258/208/1 259/200/1 260/199/1 +f 261/43/2 262/42/2 263/202/2 264/201/2 +f 264/227/3 257/207/3 260/199/3 261/205/3 +f 258/43/4 263/62/4 262/205/4 259/199/4 +f 261/43/5 260/199/5 259/200/5 262/42/5 +f 264/211/6 263/212/6 258/208/6 257/207/6 +f 265/228/1 266/229/1 267/230/1 268/231/1 +f 269/232/2 270/233/2 271/234/2 272/235/2 +f 272/236/3 265/228/3 268/231/3 269/237/3 +f 266/232/4 271/238/4 270/237/4 267/231/4 +f 269/232/5 268/231/5 267/230/5 270/233/5 +f 272/239/6 271/240/6 266/229/6 265/228/6 +f 273/241/1 274/242/1 275/243/1 276/244/1 +f 277/245/2 278/246/2 279/25/2 280/247/2 +f 280/248/3 273/241/3 276/244/3 277/249/3 +f 274/250/4 279/251/4 278/249/4 275/244/4 +f 277/245/5 276/244/5 275/243/5 278/246/5 +f 280/252/6 279/253/6 274/242/6 273/241/6 +f 281/254/1 282/255/1 283/256/1 284/257/1 +f 285/258/2 286/259/2 287/260/2 288/261/2 +f 288/262/3 281/254/3 284/257/3 285/263/3 +f 282/264/4 287/265/4 286/263/4 283/257/4 +f 285/258/5 284/257/5 283/256/5 286/259/5 +f 288/266/6 287/267/6 282/255/6 281/254/6 +f 289/268/1 290/269/1 291/270/1 292/271/1 +f 293/272/2 294/273/2 295/274/2 296/275/2 +f 296/276/3 289/268/3 292/271/3 293/277/3 +f 290/278/4 295/279/4 294/277/4 291/271/4 +f 293/272/5 292/271/5 291/270/5 294/273/5 +f 296/280/6 295/281/6 290/269/6 289/268/6 +f 297/241/1 298/242/1 299/243/1 300/244/1 +f 301/245/2 302/246/2 303/25/2 304/247/2 +f 304/248/3 297/241/3 300/244/3 301/249/3 +f 298/250/4 303/251/4 302/249/4 299/244/4 +f 301/245/5 300/244/5 299/243/5 302/246/5 +f 304/252/6 303/253/6 298/242/6 297/241/6 +f 305/14/1 306/15/1 307/16/1 308/17/1 +f 309/18/2 310/19/2 311/20/2 312/21/2 +f 312/22/3 305/14/3 308/17/3 309/23/3 +f 306/18/4 311/24/4 310/23/4 307/17/4 +f 309/18/5 308/17/5 307/16/5 310/19/5 +f 312/25/6 311/26/6 306/15/6 305/14/6 +f 313/1/1 314/2/1 315/3/1 316/4/1 +f 317/5/2 318/6/2 319/7/2 320/8/2 +f 320/9/3 313/1/3 316/4/3 317/10/3 +f 314/5/4 319/11/4 318/10/4 315/4/4 +f 317/5/5 316/4/5 315/3/5 318/6/5 +f 320/12/6 319/13/6 314/2/6 313/1/6 +f 321/1/1 322/2/1 323/3/1 324/4/1 +f 325/5/2 326/6/2 327/7/2 328/8/2 +f 328/9/3 321/1/3 324/4/3 325/10/3 +f 322/5/4 327/11/4 326/10/4 323/4/4 +f 325/5/5 324/4/5 323/3/5 326/6/5 +f 328/12/6 327/13/6 322/2/6 321/1/6 +f 329/40/7 330/41/7 331/42/7 332/43/7 +f 333/44/13 334/45/13 335/46/13 336/47/13 +f 336/48/9 329/40/9 332/43/9 333/49/9 +f 330/44/10 335/50/10 334/49/10 331/43/10 +f 333/44/11 332/43/11 331/42/11 334/45/11 +f 336/51/12 335/52/12 330/41/12 329/40/12 +f 337/53/14 338/54/14 339/55/14 340/56/14 +f 341/57/15 342/58/15 343/59/15 344/60/15 +f 344/61/16 337/53/16 340/56/16 341/62/16 +f 338/57/17 343/63/17 342/62/17 339/56/17 +f 341/57/18 340/56/18 339/55/18 342/58/18 +f 344/64/19 343/65/19 338/54/19 337/53/19 +f 345/66/14 346/53/14 347/56/14 348/67/14 +f 349/68/15 350/57/15 351/60/15 352/69/15 +f 352/70/20 345/66/20 348/67/20 349/71/20 +f 346/68/21 351/72/21 350/71/21 347/67/21 +f 349/68/22 348/67/22 347/56/22 350/57/22 +f 352/73/23 351/64/23 346/53/23 345/66/23 +f 353/41/28 354/66/28 355/67/28 356/42/28 +f 357/45/13 358/68/13 359/69/13 360/46/13 +f 360/74/24 353/41/24 356/42/24 357/75/24 +f 354/45/25 359/76/25 358/75/25 355/42/25 +f 357/45/26 356/42/26 355/67/26 358/68/26 +f 360/52/27 359/73/27 354/66/27 353/41/27 +f 361/90/1 362/91/1 363/92/1 364/93/1 +f 365/94/2 366/95/2 367/96/2 368/97/2 +f 368/98/3 361/90/3 364/93/3 365/99/3 +f 362/100/4 367/101/4 366/99/4 363/93/4 +f 365/94/5 364/93/5 363/92/5 366/95/5 +f 368/102/6 367/103/6 362/91/6 361/90/6 +f 369/104/1 370/105/1 371/106/1 372/107/1 +f 373/108/2 374/109/2 375/110/2 376/111/2 +f 376/112/3 369/104/3 372/107/3 373/113/3 +f 370/114/4 375/115/4 374/113/4 371/107/4 +f 373/108/5 372/107/5 371/106/5 374/109/5 +f 376/116/6 375/117/6 370/105/6 369/104/6 +f 377/118/1 378/119/1 379/120/1 380/121/1 +f 381/122/2 382/123/2 383/124/2 384/125/2 +f 384/126/3 377/118/3 380/121/3 381/127/3 +f 378/128/4 383/129/4 382/127/4 379/121/4 +f 381/122/5 380/121/5 379/120/5 382/123/5 +f 384/130/6 383/131/6 378/119/6 377/118/6 +f 385/118/1 386/119/1 387/120/1 388/121/1 +f 389/122/2 390/123/2 391/124/2 392/125/2 +f 392/126/3 385/118/3 388/121/3 389/127/3 +f 386/128/4 391/129/4 390/127/4 387/121/4 +f 389/122/5 388/121/5 387/120/5 390/123/5 +f 392/130/6 391/131/6 386/119/6 385/118/6 +f 393/132/1 394/133/1 395/134/1 396/135/1 +f 397/136/2 398/137/2 399/138/2 400/139/2 +f 400/140/3 393/132/3 396/135/3 397/141/3 +f 394/136/4 399/142/4 398/141/4 395/135/4 +f 397/136/5 396/135/5 395/134/5 398/137/5 +f 400/143/6 399/144/6 394/133/6 393/132/6 +f 401/145/1 402/146/1 403/147/1 404/148/1 +f 405/149/2 406/150/2 407/151/2 408/152/2 +f 408/153/29 401/145/29 404/148/29 405/154/29 +f 402/155/30 407/156/30 406/154/30 403/148/30 +f 405/149/31 404/148/31 403/147/31 406/150/31 +f 408/157/32 407/158/32 402/146/32 401/145/32 +f 409/159/33 410/160/33 411/161/33 412/162/33 +f 413/163/34 414/164/34 415/165/34 416/166/34 +f 416/167/35 409/159/35 412/162/35 413/168/35 +f 410/169/36 415/170/36 414/168/36 411/162/36 +f 413/163/5 412/162/5 411/161/5 414/164/5 +f 416/171/6 415/172/6 410/160/6 409/159/6 +f 417/159/36 418/160/36 419/161/36 420/162/36 +f 421/163/35 422/164/35 423/165/35 424/166/35 +f 424/167/33 417/159/33 420/162/33 421/168/33 +f 418/169/34 423/170/34 422/168/34 419/162/34 +f 421/163/5 420/162/5 419/161/5 422/164/5 +f 424/171/6 423/172/6 418/160/6 417/159/6 +f 425/145/1 426/146/1 427/147/1 428/148/1 +f 429/149/2 430/150/2 431/151/2 432/152/2 +f 432/153/32 425/145/32 428/148/32 429/154/32 +f 426/155/31 431/156/31 430/154/31 427/148/31 +f 429/149/29 428/148/29 427/147/29 430/150/29 +f 432/157/30 431/158/30 426/146/30 425/145/30 +f 433/145/1 434/146/1 435/147/1 436/148/1 +f 437/149/2 438/150/2 439/151/2 440/152/2 +f 440/153/29 433/145/29 436/148/29 437/154/29 +f 434/155/30 439/156/30 438/154/30 435/148/30 +f 437/149/31 436/148/31 435/147/31 438/150/31 +f 440/157/32 439/158/32 434/146/32 433/145/32 +f 441/159/33 442/160/33 443/161/33 444/162/33 +f 445/163/34 446/164/34 447/165/34 448/166/34 +f 448/167/35 441/159/35 444/162/35 445/168/35 +f 442/169/36 447/170/36 446/168/36 443/162/36 +f 445/163/5 444/162/5 443/161/5 446/164/5 +f 448/171/6 447/172/6 442/160/6 441/159/6 +f 449/159/36 450/160/36 451/161/36 452/162/36 +f 453/163/35 454/164/35 455/165/35 456/166/35 +f 456/167/33 449/159/33 452/162/33 453/168/33 +f 450/169/34 455/170/34 454/168/34 451/162/34 +f 453/163/5 452/162/5 451/161/5 454/164/5 +f 456/171/6 455/172/6 450/160/6 449/159/6 +f 457/145/1 458/146/1 459/147/1 460/148/1 +f 461/149/2 462/150/2 463/151/2 464/152/2 +f 464/153/32 457/145/32 460/148/32 461/154/32 +f 458/155/31 463/156/31 462/154/31 459/148/31 +f 461/149/29 460/148/29 459/147/29 462/150/29 +f 464/157/30 463/158/30 458/146/30 457/145/30 +f 465/186/1 466/187/1 467/188/1 468/189/1 +f 469/190/2 470/191/2 471/192/2 472/193/2 +f 472/194/3 465/186/3 468/189/3 469/195/3 +f 466/190/4 471/196/4 470/195/4 467/189/4 +f 469/190/5 468/189/5 467/188/5 470/191/5 +f 472/197/6 471/198/6 466/187/6 465/186/6 +f 473/199/1 474/200/1 475/42/1 476/43/1 +f 477/201/2 478/202/2 479/203/2 480/204/2 +f 480/205/3 473/199/3 476/43/3 477/62/3 +f 474/201/4 479/206/4 478/62/4 475/43/4 +f 477/201/5 476/43/5 475/42/5 478/202/5 +f 480/207/6 479/208/6 474/200/6 473/199/6 +f 481/199/1 482/200/1 483/42/1 484/43/1 +f 485/201/2 486/202/2 487/203/2 488/204/2 +f 488/205/3 481/199/3 484/43/3 485/62/3 +f 482/201/4 487/206/4 486/62/4 483/43/4 +f 485/201/5 484/43/5 483/42/5 486/202/5 +f 488/207/6 487/208/6 482/200/6 481/199/6 +f 489/186/1 490/187/1 491/188/1 492/189/1 +f 493/190/2 494/191/2 495/192/2 496/193/2 +f 496/194/3 489/186/3 492/189/3 493/195/3 +f 490/190/4 495/196/4 494/195/4 491/189/4 +f 493/190/5 492/189/5 491/188/5 494/191/5 +f 496/197/6 495/198/6 490/187/6 489/186/6 +f 497/209/1 498/210/1 499/41/1 500/40/1 +f 501/211/2 502/212/2 503/208/2 504/207/2 +f 504/213/3 497/209/3 500/40/3 501/61/3 +f 498/211/4 503/214/4 502/61/4 499/40/4 +f 501/211/5 500/40/5 499/41/5 502/212/5 +f 504/215/6 503/216/6 498/210/6 497/209/6 +f 505/209/1 506/210/1 507/41/1 508/40/1 +f 509/211/2 510/212/2 511/208/2 512/207/2 +f 512/213/3 505/209/3 508/40/3 509/61/3 +f 506/211/4 511/214/4 510/61/4 507/40/4 +f 509/211/5 508/40/5 507/41/5 510/212/5 +f 512/215/6 511/216/6 506/210/6 505/209/6 +f 513/186/1 514/187/1 515/188/1 516/189/1 +f 517/190/2 518/191/2 519/192/2 520/193/2 +f 520/194/3 513/186/3 516/189/3 517/195/3 +f 514/190/4 519/196/4 518/195/4 515/189/4 +f 517/190/5 516/189/5 515/188/5 518/191/5 +f 520/197/6 519/198/6 514/187/6 513/186/6 +f 521/44/1 522/45/1 523/217/1 524/218/1 +f 525/219/2 526/220/2 527/221/2 528/222/2 +f 528/63/3 521/44/3 524/218/3 525/223/3 +f 522/219/4 527/224/4 526/223/4 523/218/4 +f 525/219/5 524/218/5 523/217/5 526/220/5 +f 528/225/6 527/226/6 522/45/6 521/44/6 +f 529/44/1 530/45/1 531/217/1 532/218/1 +f 533/219/2 534/220/2 535/221/2 536/222/2 +f 536/63/3 529/44/3 532/218/3 533/223/3 +f 530/219/4 535/224/4 534/223/4 531/218/4 +f 533/219/5 532/218/5 531/217/5 534/220/5 +f 536/225/6 535/226/6 530/45/6 529/44/6 +f 537/186/1 538/187/1 539/188/1 540/189/1 +f 541/190/2 542/191/2 543/192/2 544/193/2 +f 544/194/3 537/186/3 540/189/3 541/195/3 +f 538/190/4 543/196/4 542/195/4 539/189/4 +f 541/190/5 540/189/5 539/188/5 542/191/5 +f 544/197/6 543/198/6 538/187/6 537/186/6 +f 545/207/1 546/208/1 547/200/1 548/199/1 +f 549/43/2 550/42/2 551/202/2 552/201/2 +f 552/227/3 545/207/3 548/199/3 549/205/3 +f 546/43/4 551/62/4 550/205/4 547/199/4 +f 549/43/5 548/199/5 547/200/5 550/42/5 +f 552/211/6 551/212/6 546/208/6 545/207/6 +f 553/207/1 554/208/1 555/200/1 556/199/1 +f 557/43/2 558/42/2 559/202/2 560/201/2 +f 560/227/3 553/207/3 556/199/3 557/205/3 +f 554/43/4 559/62/4 558/205/4 555/199/4 +f 557/43/5 556/199/5 555/200/5 558/42/5 +f 560/211/6 559/212/6 554/208/6 553/207/6 +f 561/241/1 562/242/1 563/243/1 564/244/1 +f 565/245/2 566/246/2 567/25/2 568/247/2 +f 568/248/3 561/241/3 564/244/3 565/249/3 +f 562/250/4 567/251/4 566/249/4 563/244/4 +f 565/245/5 564/244/5 563/243/5 566/246/5 +f 568/252/6 567/253/6 562/242/6 561/241/6 +f 569/254/1 570/255/1 571/256/1 572/257/1 +f 573/258/2 574/259/2 575/260/2 576/261/2 +f 576/262/3 569/254/3 572/257/3 573/263/3 +f 570/264/4 575/265/4 574/263/4 571/257/4 +f 573/258/5 572/257/5 571/256/5 574/259/5 +f 576/266/6 575/267/6 570/255/6 569/254/6 +f 577/268/1 578/269/1 579/270/1 580/271/1 +f 581/272/2 582/273/2 583/274/2 584/275/2 +f 584/276/3 577/268/3 580/271/3 581/277/3 +f 578/278/4 583/279/4 582/277/4 579/271/4 +f 581/272/5 580/271/5 579/270/5 582/273/5 +f 584/280/6 583/281/6 578/269/6 577/268/6 +f 585/241/1 586/242/1 587/243/1 588/244/1 +f 589/245/2 590/246/2 591/25/2 592/247/2 +f 592/248/3 585/241/3 588/244/3 589/249/3 +f 586/250/4 591/251/4 590/249/4 587/244/4 +f 589/245/5 588/244/5 587/243/5 590/246/5 +f 592/252/6 591/253/6 586/242/6 585/241/6 diff --git a/src/main/resources/assets/bloodmagic/models/block/blockdemonpylon.mtl b/src/main/resources/assets/bloodmagic/models/block/blockdemonpylon.mtl new file mode 100644 index 00000000..b4d18584 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockdemonpylon.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +#Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +#Ks 0.8 0.8 0.8 +d 1 +#illum 2 +map_Kd bloodmagic:models/demonpylon \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/blockdemonpylon.obj b/src/main/resources/assets/bloodmagic/models/block/blockdemonpylon.obj new file mode 100644 index 00000000..1e4d31b0 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockdemonpylon.obj @@ -0,0 +1,1171 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib blockdemonpylon.mtl +o BlockDemonPylon +v 0.125000 0.125000 0.875000 +v 0.125000 -0.000000 0.875000 +v 0.375000 -0.000000 0.875000 +v 0.375000 0.125000 0.875000 +v 0.375000 0.125000 0.625000 +v 0.375000 -0.000000 0.625000 +v 0.125000 -0.000000 0.625000 +v 0.125000 0.125000 0.625000 +v 0.193151 0.473851 0.803768 +v 0.151353 0.103509 0.845306 +v 0.337685 0.082741 0.847635 +v 0.379483 0.453082 0.806098 +v 0.379483 0.432183 0.619766 +v 0.337685 0.061842 0.661303 +v 0.151353 0.082610 0.658974 +v 0.193151 0.452952 0.617437 +v 0.625000 0.125000 0.375000 +v 0.625000 0.000000 0.375000 +v 0.875000 0.000000 0.375000 +v 0.875000 0.125000 0.375000 +v 0.875000 0.125000 0.125000 +v 0.875000 0.000000 0.125000 +v 0.625000 0.000000 0.125000 +v 0.625000 0.125000 0.125000 +v 0.620517 0.432206 0.380235 +v 0.662315 0.061873 0.338698 +v 0.848645 0.082641 0.341027 +v 0.806847 0.452974 0.382564 +v 0.806847 0.473873 0.196235 +v 0.848645 0.103540 0.154698 +v 0.662315 0.082772 0.152368 +v 0.620517 0.453105 0.193905 +v 0.125000 0.125000 0.375000 +v 0.125000 0.000000 0.375000 +v 0.375000 0.000000 0.375000 +v 0.375000 0.125000 0.375000 +v 0.375000 0.125000 0.125000 +v 0.375000 0.000000 0.125000 +v 0.125000 0.000000 0.125000 +v 0.125000 0.125000 0.125000 +v 0.193151 0.452963 0.382563 +v 0.151353 0.082626 0.341026 +v 0.337685 0.061857 0.338696 +v 0.379483 0.432194 0.380234 +v 0.379483 0.453093 0.193904 +v 0.337685 0.082756 0.152367 +v 0.151353 0.103525 0.154696 +v 0.193151 0.473862 0.196233 +v 0.625000 0.125000 0.875000 +v 0.625000 -0.000000 0.875000 +v 0.875000 -0.000000 0.875000 +v 0.875000 0.125000 0.875000 +v 0.875000 0.125000 0.625000 +v 0.875000 -0.000000 0.625000 +v 0.625000 -0.000000 0.625000 +v 0.625000 0.125000 0.625000 +v 0.620517 0.453093 0.806096 +v 0.662315 0.082756 0.847633 +v 0.848645 0.103525 0.845304 +v 0.806847 0.473862 0.803767 +v 0.806847 0.452963 0.617435 +v 0.848645 0.082626 0.658972 +v 0.662315 0.061857 0.661302 +v 0.620517 0.432194 0.619765 +v 0.125000 0.500000 0.875000 +v 0.125000 0.437500 0.875000 +v 0.875000 0.437500 0.875000 +v 0.875000 0.500000 0.875000 +v 0.875000 0.500000 0.125000 +v 0.875000 0.437500 0.125000 +v 0.125000 0.437500 0.125000 +v 0.125000 0.500000 0.125000 +v 0.187500 0.562500 0.812500 +v 0.187500 0.500000 0.812500 +v 0.812500 0.500000 0.812500 +v 0.812500 0.562500 0.812500 +v 0.812500 0.562500 0.187500 +v 0.812500 0.500000 0.187500 +v 0.187500 0.500000 0.187500 +v 0.187500 0.562500 0.187500 +v 0.125000 0.625000 0.875000 +v 0.125000 0.562500 0.875000 +v 0.875000 0.562500 0.875000 +v 0.875000 0.625000 0.875000 +v 0.875000 0.625000 0.125000 +v 0.875000 0.562500 0.125000 +v 0.125000 0.562500 0.125000 +v 0.125000 0.625000 0.125000 +v 0.218750 1.062500 0.781250 +v 0.218750 0.625000 0.781250 +v 0.781250 0.625000 0.781250 +v 0.781250 1.062500 0.781250 +v 0.781250 1.062500 0.218750 +v 0.781250 0.625000 0.218750 +v 0.218750 0.625000 0.218750 +v 0.218750 1.062500 0.218750 +v 0.218750 1.093750 0.843750 +v 0.218750 0.718750 0.843750 +v 0.781250 0.718750 0.843750 +v 0.781250 1.093750 0.843750 +v 0.781250 1.093750 0.781250 +v 0.781250 0.718750 0.781250 +v 0.218750 0.718750 0.781250 +v 0.218750 1.093750 0.781250 +v 0.406250 0.968750 0.937500 +v 0.406250 0.843750 0.937500 +v 0.593750 0.843750 0.937500 +v 0.593750 0.968750 0.937500 +v 0.593750 0.968750 0.812500 +v 0.593750 0.843750 0.812500 +v 0.406250 0.843750 0.812500 +v 0.406250 0.968750 0.812500 +v 0.406250 1.156250 1.000000 +v 0.406250 0.906250 1.000000 +v 0.593750 0.906250 1.000000 +v 0.593750 1.156250 1.000000 +v 0.593750 1.156250 0.937500 +v 0.593750 0.906250 0.937500 +v 0.406250 0.906250 0.937500 +v 0.406250 1.156250 0.937500 +v 0.156250 1.093750 0.781250 +v 0.156250 0.718750 0.781250 +v 0.218750 0.718750 0.781250 +v 0.218750 1.093750 0.781250 +v 0.218750 1.093750 0.218750 +v 0.218750 0.718750 0.218750 +v 0.156250 0.718750 0.218750 +v 0.156250 1.093750 0.218750 +v 0.062500 0.968750 0.593750 +v 0.062500 0.843750 0.593750 +v 0.187500 0.843750 0.593750 +v 0.187500 0.968750 0.593750 +v 0.187500 0.968750 0.406250 +v 0.187500 0.843750 0.406250 +v 0.062500 0.843750 0.406250 +v 0.062500 0.968750 0.406250 +v 0.000000 1.156250 0.593750 +v 0.000000 0.906250 0.593750 +v 0.062500 0.906250 0.593750 +v 0.062500 1.156250 0.593750 +v 0.062500 1.156250 0.406250 +v 0.062500 0.906250 0.406250 +v 0.000000 0.906250 0.406250 +v 0.000000 1.156250 0.406250 +v 0.218750 1.093750 0.218750 +v 0.218750 0.718750 0.218750 +v 0.781250 0.718750 0.218750 +v 0.781250 1.093750 0.218750 +v 0.781250 1.093750 0.156250 +v 0.781250 0.718750 0.156250 +v 0.218750 0.718750 0.156250 +v 0.218750 1.093750 0.156250 +v 0.406250 0.968750 0.187500 +v 0.406250 0.843750 0.187500 +v 0.593750 0.843750 0.187500 +v 0.593750 0.968750 0.187500 +v 0.593750 0.968750 0.062500 +v 0.593750 0.843750 0.062500 +v 0.406250 0.843750 0.062500 +v 0.406250 0.968750 0.062500 +v 0.406250 1.156250 0.062500 +v 0.406250 0.906250 0.062500 +v 0.593750 0.906250 0.062500 +v 0.593750 1.156250 0.062500 +v 0.593750 1.156250 0.000000 +v 0.593750 0.906250 0.000000 +v 0.406250 0.906250 0.000000 +v 0.406250 1.156250 0.000000 +v 0.781250 1.093750 0.781250 +v 0.781250 0.718750 0.781250 +v 0.843750 0.718750 0.781250 +v 0.843750 1.093750 0.781250 +v 0.843750 1.093750 0.218750 +v 0.843750 0.718750 0.218750 +v 0.781250 0.718750 0.218750 +v 0.781250 1.093750 0.218750 +v 0.812500 0.968750 0.593750 +v 0.812500 0.843750 0.593750 +v 0.937500 0.843750 0.593750 +v 0.937500 0.968750 0.593750 +v 0.937500 0.968750 0.406250 +v 0.937500 0.843750 0.406250 +v 0.812500 0.843750 0.406250 +v 0.812500 0.968750 0.406250 +v 0.937500 1.156250 0.593750 +v 0.937500 0.906250 0.593750 +v 1.000000 0.906250 0.593750 +v 1.000000 1.156250 0.593750 +v 1.000000 1.156250 0.406250 +v 1.000000 0.906250 0.406250 +v 0.937500 0.906250 0.406250 +v 0.937500 1.156250 0.406250 +v 0.281250 1.250000 0.718750 +v 0.281250 1.062500 0.718750 +v 0.718750 1.062500 0.718750 +v 0.718750 1.250000 0.718750 +v 0.718750 1.250000 0.281250 +v 0.718750 1.062500 0.281250 +v 0.281250 1.062500 0.281250 +v 0.281250 1.250000 0.281250 +v 0.406250 1.375000 0.593750 +v 0.406250 1.250000 0.593750 +v 0.593750 1.250000 0.593750 +v 0.593750 1.375000 0.593750 +v 0.593750 1.375000 0.406250 +v 0.593750 1.250000 0.406250 +v 0.406250 1.250000 0.406250 +v 0.406250 1.375000 0.406250 +v 0.468750 1.500000 0.531250 +v 0.468750 1.375000 0.531250 +v 0.531250 1.375000 0.531250 +v 0.531250 1.500000 0.531250 +v 0.531250 1.500000 0.468750 +v 0.531250 1.375000 0.468750 +v 0.468750 1.375000 0.468750 +v 0.468750 1.500000 0.468750 +v 0.437500 1.750000 0.562500 +v 0.437500 1.500000 0.562500 +v 0.562500 1.500000 0.562500 +v 0.562500 1.750000 0.562500 +v 0.562500 1.750000 0.437500 +v 0.562500 1.500000 0.437500 +v 0.437500 1.500000 0.437500 +v 0.437500 1.750000 0.437500 +v 0.193151 0.473851 0.803768 +v 0.151353 0.103509 0.845306 +v 0.337685 0.082741 0.847635 +v 0.379483 0.453082 0.806098 +v 0.379483 0.432183 0.619766 +v 0.337685 0.061842 0.661303 +v 0.151353 0.082610 0.658974 +v 0.193151 0.452952 0.617437 +v 0.620517 0.432206 0.380235 +v 0.662315 0.061873 0.338698 +v 0.848645 0.082641 0.341027 +v 0.806847 0.452974 0.382564 +v 0.806847 0.473873 0.196235 +v 0.848645 0.103540 0.154698 +v 0.662315 0.082772 0.152368 +v 0.620517 0.453105 0.193905 +v 0.193151 0.452963 0.382563 +v 0.151353 0.082626 0.341026 +v 0.337685 0.061857 0.338696 +v 0.379483 0.432194 0.380234 +v 0.379483 0.453093 0.193904 +v 0.337685 0.082756 0.152367 +v 0.151353 0.103525 0.154696 +v 0.193151 0.473862 0.196233 +v 0.620517 0.453093 0.806096 +v 0.662315 0.082756 0.847633 +v 0.848645 0.103525 0.845304 +v 0.806847 0.473862 0.803767 +v 0.806847 0.452963 0.617435 +v 0.848645 0.082626 0.658972 +v 0.662315 0.061857 0.661302 +v 0.620517 0.432194 0.619765 +v 0.218750 1.093750 0.843750 +v 0.218750 0.718750 0.843750 +v 0.781250 0.718750 0.843750 +v 0.781250 1.093750 0.843750 +v 0.781250 1.093750 0.781250 +v 0.781250 0.718750 0.781250 +v 0.218750 0.718750 0.781250 +v 0.218750 1.093750 0.781250 +v 0.406250 0.968750 0.937500 +v 0.406250 0.843750 0.937500 +v 0.593750 0.843750 0.937500 +v 0.593750 0.968750 0.937500 +v 0.593750 0.968750 0.812500 +v 0.593750 0.843750 0.812500 +v 0.406250 0.843750 0.812500 +v 0.406250 0.968750 0.812500 +v 0.406250 1.156250 1.000000 +v 0.406250 0.906250 1.000000 +v 0.593750 0.906250 1.000000 +v 0.593750 1.156250 1.000000 +v 0.593750 1.156250 0.937500 +v 0.593750 0.906250 0.937500 +v 0.406250 0.906250 0.937500 +v 0.406250 1.156250 0.937500 +v 0.156250 1.093750 0.781250 +v 0.156250 0.718750 0.781250 +v 0.218750 0.718750 0.781250 +v 0.218750 1.093750 0.781250 +v 0.218750 1.093750 0.218750 +v 0.218750 0.718750 0.218750 +v 0.156250 0.718750 0.218750 +v 0.156250 1.093750 0.218750 +v 0.062500 0.968750 0.593750 +v 0.062500 0.843750 0.593750 +v 0.187500 0.843750 0.593750 +v 0.187500 0.968750 0.593750 +v 0.187500 0.968750 0.406250 +v 0.187500 0.843750 0.406250 +v 0.062500 0.843750 0.406250 +v 0.062500 0.968750 0.406250 +v 0.000000 1.156250 0.593750 +v 0.000000 0.906250 0.593750 +v 0.062500 0.906250 0.593750 +v 0.062500 1.156250 0.593750 +v 0.062500 1.156250 0.406250 +v 0.062500 0.906250 0.406250 +v 0.000000 0.906250 0.406250 +v 0.000000 1.156250 0.406250 +v 0.218750 1.093750 0.218750 +v 0.218750 0.718750 0.218750 +v 0.781250 0.718750 0.218750 +v 0.781250 1.093750 0.218750 +v 0.781250 1.093750 0.156250 +v 0.781250 0.718750 0.156250 +v 0.218750 0.718750 0.156250 +v 0.218750 1.093750 0.156250 +v 0.406250 0.968750 0.187500 +v 0.406250 0.843750 0.187500 +v 0.593750 0.843750 0.187500 +v 0.593750 0.968750 0.187500 +v 0.593750 0.968750 0.062500 +v 0.593750 0.843750 0.062500 +v 0.406250 0.843750 0.062500 +v 0.406250 0.968750 0.062500 +v 0.406250 1.156250 0.062500 +v 0.406250 0.906250 0.062500 +v 0.593750 0.906250 0.062500 +v 0.593750 1.156250 0.062500 +v 0.593750 1.156250 0.000000 +v 0.593750 0.906250 0.000000 +v 0.406250 0.906250 0.000000 +v 0.406250 1.156250 0.000000 +v 0.781250 1.093750 0.781250 +v 0.781250 0.718750 0.781250 +v 0.843750 0.718750 0.781250 +v 0.843750 1.093750 0.781250 +v 0.843750 1.093750 0.218750 +v 0.843750 0.718750 0.218750 +v 0.781250 0.718750 0.218750 +v 0.781250 1.093750 0.218750 +v 0.812500 0.968750 0.593750 +v 0.812500 0.843750 0.593750 +v 0.937500 0.843750 0.593750 +v 0.937500 0.968750 0.593750 +v 0.937500 0.968750 0.406250 +v 0.937500 0.843750 0.406250 +v 0.812500 0.843750 0.406250 +v 0.812500 0.968750 0.406250 +v 0.937500 1.156250 0.593750 +v 0.937500 0.906250 0.593750 +v 1.000000 0.906250 0.593750 +v 1.000000 1.156250 0.593750 +v 1.000000 1.156250 0.406250 +v 1.000000 0.906250 0.406250 +v 0.937500 0.906250 0.406250 +v 0.937500 1.156250 0.406250 +v 0.281250 1.250000 0.718750 +v 0.281250 1.062500 0.718750 +v 0.718750 1.062500 0.718750 +v 0.718750 1.250000 0.718750 +v 0.718750 1.250000 0.281250 +v 0.718750 1.062500 0.281250 +v 0.281250 1.062500 0.281250 +v 0.281250 1.250000 0.281250 +v 0.406250 1.375000 0.593750 +v 0.406250 1.250000 0.593750 +v 0.593750 1.250000 0.593750 +v 0.593750 1.375000 0.593750 +v 0.593750 1.375000 0.406250 +v 0.593750 1.250000 0.406250 +v 0.406250 1.250000 0.406250 +v 0.406250 1.375000 0.406250 +v 0.468750 1.500000 0.531250 +v 0.468750 1.375000 0.531250 +v 0.531250 1.375000 0.531250 +v 0.531250 1.500000 0.531250 +v 0.531250 1.500000 0.468750 +v 0.531250 1.375000 0.468750 +v 0.468750 1.375000 0.468750 +v 0.468750 1.500000 0.468750 +v 0.437500 1.750000 0.562500 +v 0.437500 1.500000 0.562500 +v 0.562500 1.500000 0.562500 +v 0.562500 1.750000 0.562500 +v 0.562500 1.750000 0.437500 +v 0.562500 1.500000 0.437500 +v 0.437500 1.500000 0.437500 +v 0.437500 1.750000 0.437500 +v 0.406250 0.968750 0.937500 +v 0.406250 0.843750 0.937500 +v 0.593750 0.843750 0.937500 +v 0.593750 0.968750 0.937500 +v 0.593750 0.968750 0.812500 +v 0.593750 0.843750 0.812500 +v 0.406250 0.843750 0.812500 +v 0.406250 0.968750 0.812500 +v 0.406250 1.156250 1.000000 +v 0.406250 0.906250 1.000000 +v 0.593750 0.906250 1.000000 +v 0.593750 1.156250 1.000000 +v 0.593750 1.156250 0.937500 +v 0.593750 0.906250 0.937500 +v 0.406250 0.906250 0.937500 +v 0.406250 1.156250 0.937500 +v 0.406250 1.156250 1.000000 +v 0.406250 0.906250 1.000000 +v 0.593750 0.906250 1.000000 +v 0.593750 1.156250 1.000000 +v 0.593750 1.156250 0.937500 +v 0.593750 0.906250 0.937500 +v 0.406250 0.906250 0.937500 +v 0.406250 1.156250 0.937500 +v 0.062500 0.968750 0.593750 +v 0.062500 0.843750 0.593750 +v 0.187500 0.843750 0.593750 +v 0.187500 0.968750 0.593750 +v 0.187500 0.968750 0.406250 +v 0.187500 0.843750 0.406250 +v 0.062500 0.843750 0.406250 +v 0.062500 0.968750 0.406250 +v 0.000000 1.156250 0.593750 +v 0.000000 0.906250 0.593750 +v 0.062500 0.906250 0.593750 +v 0.062500 1.156250 0.593750 +v 0.062500 1.156250 0.406250 +v 0.062500 0.906250 0.406250 +v 0.000000 0.906250 0.406250 +v 0.000000 1.156250 0.406250 +v 0.000000 1.156250 0.593750 +v 0.000000 0.906250 0.593750 +v 0.062500 0.906250 0.593750 +v 0.062500 1.156250 0.593750 +v 0.062500 1.156250 0.406250 +v 0.062500 0.906250 0.406250 +v 0.000000 0.906250 0.406250 +v 0.000000 1.156250 0.406250 +v 0.406250 0.968750 0.187500 +v 0.406250 0.843750 0.187500 +v 0.593750 0.843750 0.187500 +v 0.593750 0.968750 0.187500 +v 0.593750 0.968750 0.062500 +v 0.593750 0.843750 0.062500 +v 0.406250 0.843750 0.062500 +v 0.406250 0.968750 0.062500 +v 0.406250 1.156250 0.062500 +v 0.406250 0.906250 0.062500 +v 0.593750 0.906250 0.062500 +v 0.593750 1.156250 0.062500 +v 0.593750 1.156250 0.000000 +v 0.593750 0.906250 0.000000 +v 0.406250 0.906250 0.000000 +v 0.406250 1.156250 0.000000 +v 0.406250 1.156250 0.062500 +v 0.406250 0.906250 0.062500 +v 0.593750 0.906250 0.062500 +v 0.593750 1.156250 0.062500 +v 0.593750 1.156250 0.000000 +v 0.593750 0.906250 0.000000 +v 0.406250 0.906250 0.000000 +v 0.406250 1.156250 0.000000 +v 0.812500 0.968750 0.593750 +v 0.812500 0.843750 0.593750 +v 0.937500 0.843750 0.593750 +v 0.937500 0.968750 0.593750 +v 0.937500 0.968750 0.406250 +v 0.937500 0.843750 0.406250 +v 0.812500 0.843750 0.406250 +v 0.812500 0.968750 0.406250 +v 0.937500 1.156250 0.593750 +v 0.937500 0.906250 0.593750 +v 1.000000 0.906250 0.593750 +v 1.000000 1.156250 0.593750 +v 1.000000 1.156250 0.406250 +v 1.000000 0.906250 0.406250 +v 0.937500 0.906250 0.406250 +v 0.937500 1.156250 0.406250 +v 0.937500 1.156250 0.593750 +v 0.937500 0.906250 0.593750 +v 1.000000 0.906250 0.593750 +v 1.000000 1.156250 0.593750 +v 1.000000 1.156250 0.406250 +v 1.000000 0.906250 0.406250 +v 0.937500 0.906250 0.406250 +v 0.937500 1.156250 0.406250 +v 0.406250 1.375000 0.593750 +v 0.406250 1.250000 0.593750 +v 0.593750 1.250000 0.593750 +v 0.593750 1.375000 0.593750 +v 0.593750 1.375000 0.406250 +v 0.593750 1.250000 0.406250 +v 0.406250 1.250000 0.406250 +v 0.406250 1.375000 0.406250 +v 0.468750 1.500000 0.531250 +v 0.468750 1.375000 0.531250 +v 0.531250 1.375000 0.531250 +v 0.531250 1.500000 0.531250 +v 0.531250 1.500000 0.468750 +v 0.531250 1.375000 0.468750 +v 0.468750 1.375000 0.468750 +v 0.468750 1.500000 0.468750 +v 0.437500 1.750000 0.562500 +v 0.437500 1.500000 0.562500 +v 0.562500 1.500000 0.562500 +v 0.562500 1.750000 0.562500 +v 0.562500 1.750000 0.437500 +v 0.562500 1.500000 0.437500 +v 0.437500 1.500000 0.437500 +v 0.437500 1.750000 0.437500 +v 0.468750 1.500000 0.531250 +v 0.468750 1.375000 0.531250 +v 0.531250 1.375000 0.531250 +v 0.531250 1.500000 0.531250 +v 0.531250 1.500000 0.468750 +v 0.531250 1.375000 0.468750 +v 0.468750 1.375000 0.468750 +v 0.468750 1.500000 0.468750 +v 0.437500 1.750000 0.562500 +v 0.437500 1.500000 0.562500 +v 0.562500 1.500000 0.562500 +v 0.562500 1.750000 0.562500 +v 0.562500 1.750000 0.437500 +v 0.562500 1.500000 0.437500 +v 0.437500 1.500000 0.437500 +v 0.437500 1.750000 0.437500 +v 0.437500 1.750000 0.562500 +v 0.437500 1.500000 0.562500 +v 0.562500 1.500000 0.562500 +v 0.562500 1.750000 0.562500 +v 0.562500 1.750000 0.437500 +v 0.562500 1.500000 0.437500 +v 0.437500 1.500000 0.437500 +v 0.437500 1.750000 0.437500 +vt 0.062500 0.937500 +vt 0.062500 0.906250 +vt 0.125000 0.906250 +vt 0.125000 0.937500 +vt 0.187500 0.937500 +vt 0.187500 0.906250 +vt 0.250000 0.906250 +vt 0.250000 0.937500 +vt 0.062500 1.000000 +vt 0.125000 1.000000 +vt 0.187500 1.000000 +vt 0.000000 0.937500 +vt 0.000000 0.906250 +vt 0.046875 0.843750 +vt 0.046875 0.750000 +vt 0.093750 0.750000 +vt 0.093750 0.843750 +vt 0.140625 0.843750 +vt 0.140625 0.750000 +vt 0.187500 0.750000 +vt 0.187500 0.843750 +vt 0.046875 0.890625 +vt 0.093750 0.890625 +vt 0.140625 0.890625 +vt 0.000000 0.843750 +vt 0.000000 0.750000 +vt 0.437500 0.015625 +vt 0.437500 0.000000 +vt 0.625000 0.000000 +vt 0.625000 0.015625 +vt 0.812500 0.015625 +vt 0.812500 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.015625 +vt 0.437500 0.203125 +vt 0.625000 0.203125 +vt 0.812500 0.203125 +vt 0.250000 0.015625 +vt 0.250000 0.000000 +vt 0.531250 0.234375 +vt 0.531250 0.218750 +vt 0.687500 0.218750 +vt 0.687500 0.234375 +vt 0.843750 0.234375 +vt 0.843750 0.218750 +vt 1.000000 0.218750 +vt 1.000000 0.234375 +vt 0.531250 0.390625 +vt 0.687500 0.390625 +vt 0.843750 0.390625 +vt 0.375000 0.234375 +vt 0.375000 0.218750 +vt 0.578125 0.531250 +vt 0.578125 0.421875 +vt 0.718750 0.421875 +vt 0.718750 0.531250 +vt 0.859375 0.531250 +vt 0.859375 0.421875 +vt 1.000000 0.421875 +vt 1.000000 0.531250 +vt 0.578125 0.671875 +vt 0.718750 0.671875 +vt 0.859375 0.671875 +vt 0.437500 0.531250 +vt 0.437500 0.421875 +vt 0.703125 0.984375 +vt 0.703125 0.890625 +vt 0.843750 0.890625 +vt 0.843750 0.984375 +vt 0.859375 0.984375 +vt 0.859375 0.890625 +vt 1.000000 0.890625 +vt 1.000000 0.984375 +vt 0.703125 1.000000 +vt 0.843750 1.000000 +vt 0.984375 0.984375 +vt 0.984375 1.000000 +vt 0.687500 0.984375 +vt 0.687500 0.890625 +vt 0.734375 0.843750 +vt 0.734375 0.812500 +vt 0.781250 0.812500 +vt 0.781250 0.843750 +vt 0.812500 0.843750 +vt 0.812500 0.812500 +vt 0.859375 0.812500 +vt 0.859375 0.843750 +vt 0.734375 0.875000 +vt 0.781250 0.875000 +vt 0.828125 0.843750 +vt 0.828125 0.875000 +vt 0.703125 0.843750 +vt 0.703125 0.812500 +vt 0.890625 0.859375 +vt 0.890625 0.796875 +vt 0.937500 0.796875 +vt 0.937500 0.859375 +vt 0.953125 0.859375 +vt 0.953125 0.796875 +vt 1.000000 0.796875 +vt 1.000000 0.859375 +vt 0.890625 0.875000 +vt 0.937500 0.875000 +vt 0.984375 0.859375 +vt 0.984375 0.875000 +vt 0.875000 0.859375 +vt 0.875000 0.796875 +vt 0.140625 0.593750 +vt 0.140625 0.500000 +vt 0.156250 0.500000 +vt 0.156250 0.593750 +vt 0.296875 0.593750 +vt 0.296875 0.500000 +vt 0.312500 0.500000 +vt 0.312500 0.593750 +vt 0.140625 0.734375 +vt 0.156250 0.734375 +vt 0.171875 0.593750 +vt 0.171875 0.734375 +vt 0.000000 0.593750 +vt 0.000000 0.500000 +vt 0.421875 0.828125 +vt 0.421875 0.796875 +vt 0.453125 0.796875 +vt 0.453125 0.828125 +vt 0.500000 0.828125 +vt 0.500000 0.796875 +vt 0.531250 0.796875 +vt 0.531250 0.828125 +vt 0.421875 0.875000 +vt 0.453125 0.875000 +vt 0.484375 0.828125 +vt 0.484375 0.875000 +vt 0.375000 0.828125 +vt 0.375000 0.796875 +vt 0.593750 0.828125 +vt 0.593750 0.765625 +vt 0.609375 0.765625 +vt 0.609375 0.828125 +vt 0.656250 0.828125 +vt 0.656250 0.765625 +vt 0.671875 0.765625 +vt 0.671875 0.828125 +vt 0.593750 0.875000 +vt 0.609375 0.875000 +vt 0.625000 0.828125 +vt 0.625000 0.875000 +vt 0.546875 0.828125 +vt 0.546875 0.765625 +vt 0.375000 0.984375 +vt 0.375000 0.890625 +vt 0.515625 0.890625 +vt 0.515625 0.984375 +vt 0.531250 0.984375 +vt 0.531250 0.890625 +vt 0.671875 0.890625 +vt 0.671875 0.984375 +vt 0.375000 1.000000 +vt 0.515625 1.000000 +vt 0.656250 0.984375 +vt 0.656250 1.000000 +vt 0.359375 0.984375 +vt 0.359375 0.890625 +vt 0.109375 0.375000 +vt 0.109375 0.328125 +vt 0.218750 0.328125 +vt 0.218750 0.375000 +vt 0.328125 0.375000 +vt 0.328125 0.328125 +vt 0.437500 0.328125 +vt 0.437500 0.375000 +vt 0.109375 0.484375 +vt 0.218750 0.484375 +vt 0.328125 0.484375 +vt 0.000000 0.375000 +vt 0.000000 0.328125 +vt 0.046875 0.203125 +vt 0.046875 0.171875 +vt 0.093750 0.171875 +vt 0.093750 0.203125 +vt 0.140625 0.203125 +vt 0.140625 0.171875 +vt 0.187500 0.171875 +vt 0.187500 0.203125 +vt 0.046875 0.250000 +vt 0.093750 0.250000 +vt 0.140625 0.250000 +vt 0.000000 0.203125 +vt 0.000000 0.171875 +vt 0.015625 0.140625 +vt 0.015625 0.109375 +vt 0.031250 0.109375 +vt 0.031250 0.140625 +vt 0.046875 0.140625 +vt 0.046875 0.109375 +vt 0.062500 0.109375 +vt 0.062500 0.140625 +vt 0.015625 0.156250 +vt 0.031250 0.156250 +vt 0.046875 0.156250 +vt 0.000000 0.140625 +vt 0.000000 0.109375 +vt 0.031250 0.062500 +vt 0.031250 0.000000 +vt 0.062500 0.000000 +vt 0.062500 0.062500 +vt 0.093750 0.062500 +vt 0.093750 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.031250 0.093750 +vt 0.062500 0.093750 +vt 0.093750 0.093750 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn -0.000000 0.111500 0.993800 +vn -0.000000 -0.111500 -0.993800 +vn 0.111500 0.987600 -0.110800 +vn -0.111500 -0.987600 0.110800 +vn 0.993800 -0.110800 0.012400 +vn -0.993800 0.110800 -0.012400 +vn 0.000000 -0.111500 0.993800 +vn 0.000000 0.111500 -0.993800 +vn -0.111500 0.987600 0.110800 +vn 0.111500 -0.987600 -0.110800 +vn 0.993800 0.110800 0.012400 +vn -0.993800 -0.110800 -0.012400 +vn 0.111500 0.987600 0.110800 +vn -0.111500 -0.987600 -0.110800 +vn 0.993800 -0.110800 -0.012400 +vn -0.993800 0.110800 0.012400 +vn -0.111500 0.987600 -0.110800 +vn 0.111500 -0.987600 0.110800 +vn 0.993800 0.110800 -0.012400 +vn -0.993800 -0.110800 0.012400 +usemtl None +#s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 8/9/3 1/1/3 4/4/3 5/10/3 +f 2/5/4 7/11/4 6/10/4 3/4/4 +f 5/5/5 4/4/5 3/3/5 6/6/5 +f 8/12/6 7/13/6 2/2/6 1/1/6 +f 9/14/7 10/15/7 11/16/7 12/17/7 +f 13/18/8 14/19/8 15/20/8 16/21/8 +f 16/22/9 9/14/9 12/17/9 13/23/9 +f 10/18/10 15/24/10 14/23/10 11/17/10 +f 13/18/11 12/17/11 11/16/11 14/19/11 +f 16/25/12 15/26/12 10/15/12 9/14/12 +f 17/1/1 18/2/1 19/3/1 20/4/1 +f 21/5/2 22/6/2 23/7/2 24/8/2 +f 24/9/3 17/1/3 20/4/3 21/10/3 +f 18/5/4 23/11/4 22/10/4 19/4/4 +f 21/5/5 20/4/5 19/3/5 22/6/5 +f 24/12/6 23/13/6 18/2/6 17/1/6 +f 25/14/13 26/15/13 27/16/13 28/17/13 +f 29/18/14 30/19/14 31/20/14 32/21/14 +f 32/22/15 25/14/15 28/17/15 29/23/15 +f 26/18/16 31/24/16 30/23/16 27/17/16 +f 29/18/17 28/17/17 27/16/17 30/19/17 +f 32/25/18 31/26/18 26/15/18 25/14/18 +f 33/1/1 34/2/1 35/3/1 36/4/1 +f 37/5/2 38/6/2 39/7/2 40/8/2 +f 40/9/3 33/1/3 36/4/3 37/10/3 +f 34/5/4 39/11/4 38/10/4 35/4/4 +f 37/5/5 36/4/5 35/3/5 38/6/5 +f 40/12/6 39/13/6 34/2/6 33/1/6 +f 41/14/13 42/15/13 43/16/13 44/17/13 +f 45/18/14 46/19/14 47/20/14 48/21/14 +f 48/22/19 41/14/19 44/17/19 45/23/19 +f 42/18/20 47/24/20 46/23/20 43/17/20 +f 45/18/21 44/17/21 43/16/21 46/19/21 +f 48/25/22 47/26/22 42/15/22 41/14/22 +f 49/1/1 50/2/1 51/3/1 52/4/1 +f 53/5/2 54/6/2 55/7/2 56/8/2 +f 56/9/3 49/1/3 52/4/3 53/10/3 +f 50/5/4 55/11/4 54/10/4 51/4/4 +f 53/5/5 52/4/5 51/3/5 54/6/5 +f 56/12/6 55/13/6 50/2/6 49/1/6 +f 57/14/7 58/15/7 59/16/7 60/17/7 +f 61/18/8 62/19/8 63/20/8 64/21/8 +f 64/22/23 57/14/23 60/17/23 61/23/23 +f 58/18/24 63/24/24 62/23/24 59/17/24 +f 61/18/25 60/17/25 59/16/25 62/19/25 +f 64/25/26 63/26/26 58/15/26 57/14/26 +f 65/27/1 66/28/1 67/29/1 68/30/1 +f 69/31/2 70/32/2 71/33/2 72/34/2 +f 72/35/3 65/27/3 68/30/3 69/36/3 +f 66/31/4 71/37/4 70/36/4 67/30/4 +f 69/31/5 68/30/5 67/29/5 70/32/5 +f 72/38/6 71/39/6 66/28/6 65/27/6 +f 73/40/1 74/41/1 75/42/1 76/43/1 +f 77/44/2 78/45/2 79/46/2 80/47/2 +f 80/48/3 73/40/3 76/43/3 77/49/3 +f 74/44/4 79/50/4 78/49/4 75/43/4 +f 77/44/5 76/43/5 75/42/5 78/45/5 +f 80/51/6 79/52/6 74/41/6 73/40/6 +f 81/27/1 82/28/1 83/29/1 84/30/1 +f 85/31/2 86/32/2 87/33/2 88/34/2 +f 88/35/3 81/27/3 84/30/3 85/36/3 +f 82/31/4 87/37/4 86/36/4 83/30/4 +f 85/31/5 84/30/5 83/29/5 86/32/5 +f 88/38/6 87/39/6 82/28/6 81/27/6 +f 89/53/1 90/54/1 91/55/1 92/56/1 +f 93/57/2 94/58/2 95/59/2 96/60/2 +f 96/61/3 89/53/3 92/56/3 93/62/3 +f 90/57/4 95/63/4 94/62/4 91/56/4 +f 93/57/5 92/56/5 91/55/5 94/58/5 +f 96/64/6 95/65/6 90/54/6 89/53/6 +f 97/66/1 98/67/1 99/68/1 100/69/1 +f 101/70/2 102/71/2 103/72/2 104/73/2 +f 104/74/3 97/66/3 100/69/3 101/75/3 +f 98/76/4 103/77/4 102/75/4 99/69/4 +f 101/70/5 100/69/5 99/68/5 102/71/5 +f 104/78/6 103/79/6 98/67/6 97/66/6 +f 105/80/1 106/81/1 107/82/1 108/83/1 +f 109/84/2 110/85/2 111/86/2 112/87/2 +f 112/88/3 105/80/3 108/83/3 109/89/3 +f 106/90/4 111/91/4 110/89/4 107/83/4 +f 109/84/5 108/83/5 107/82/5 110/85/5 +f 112/92/6 111/93/6 106/81/6 105/80/6 +f 113/94/1 114/95/1 115/96/1 116/97/1 +f 117/98/2 118/99/2 119/100/2 120/101/2 +f 120/102/3 113/94/3 116/97/3 117/103/3 +f 114/104/4 119/105/4 118/103/4 115/97/4 +f 117/98/5 116/97/5 115/96/5 118/99/5 +f 120/106/6 119/107/6 114/95/6 113/94/6 +f 121/108/1 122/109/1 123/110/1 124/111/1 +f 125/112/2 126/113/2 127/114/2 128/115/2 +f 128/116/3 121/108/3 124/111/3 125/117/3 +f 122/118/4 127/119/4 126/117/4 123/111/4 +f 125/112/5 124/111/5 123/110/5 126/113/5 +f 128/120/6 127/121/6 122/109/6 121/108/6 +f 129/122/1 130/123/1 131/124/1 132/125/1 +f 133/126/2 134/127/2 135/128/2 136/129/2 +f 136/130/3 129/122/3 132/125/3 133/131/3 +f 130/132/4 135/133/4 134/131/4 131/125/4 +f 133/126/5 132/125/5 131/124/5 134/127/5 +f 136/134/6 135/135/6 130/123/6 129/122/6 +f 137/136/1 138/137/1 139/138/1 140/139/1 +f 141/140/2 142/141/2 143/142/2 144/143/2 +f 144/144/3 137/136/3 140/139/3 141/145/3 +f 138/146/4 143/147/4 142/145/4 139/139/4 +f 141/140/5 140/139/5 139/138/5 142/141/5 +f 144/148/6 143/149/6 138/137/6 137/136/6 +f 145/150/1 146/151/1 147/152/1 148/153/1 +f 149/154/2 150/155/2 151/156/2 152/157/2 +f 152/158/3 145/150/3 148/153/3 149/159/3 +f 146/160/4 151/161/4 150/159/4 147/153/4 +f 149/154/5 148/153/5 147/152/5 150/155/5 +f 152/162/6 151/163/6 146/151/6 145/150/6 +f 153/80/1 154/81/1 155/82/1 156/83/1 +f 157/84/2 158/85/2 159/86/2 160/87/2 +f 160/88/3 153/80/3 156/83/3 157/89/3 +f 154/90/4 159/91/4 158/89/4 155/83/4 +f 157/84/5 156/83/5 155/82/5 158/85/5 +f 160/92/6 159/93/6 154/81/6 153/80/6 +f 161/94/1 162/95/1 163/96/1 164/97/1 +f 165/98/2 166/99/2 167/100/2 168/101/2 +f 168/102/3 161/94/3 164/97/3 165/103/3 +f 162/104/4 167/105/4 166/103/4 163/97/4 +f 165/98/5 164/97/5 163/96/5 166/99/5 +f 168/106/6 167/107/6 162/95/6 161/94/6 +f 169/108/1 170/109/1 171/110/1 172/111/1 +f 173/112/2 174/113/2 175/114/2 176/115/2 +f 176/116/3 169/108/3 172/111/3 173/117/3 +f 170/118/4 175/119/4 174/117/4 171/111/4 +f 173/112/5 172/111/5 171/110/5 174/113/5 +f 176/120/6 175/121/6 170/109/6 169/108/6 +f 177/122/1 178/123/1 179/124/1 180/125/1 +f 181/126/2 182/127/2 183/128/2 184/129/2 +f 184/130/3 177/122/3 180/125/3 181/131/3 +f 178/132/4 183/133/4 182/131/4 179/125/4 +f 181/126/5 180/125/5 179/124/5 182/127/5 +f 184/134/6 183/135/6 178/123/6 177/122/6 +f 185/136/1 186/137/1 187/138/1 188/139/1 +f 189/140/2 190/141/2 191/142/2 192/143/2 +f 192/144/3 185/136/3 188/139/3 189/145/3 +f 186/146/4 191/147/4 190/145/4 187/139/4 +f 189/140/5 188/139/5 187/138/5 190/141/5 +f 192/148/6 191/149/6 186/137/6 185/136/6 +f 193/164/1 194/165/1 195/166/1 196/167/1 +f 197/168/2 198/169/2 199/170/2 200/171/2 +f 200/172/3 193/164/3 196/167/3 197/173/3 +f 194/168/4 199/174/4 198/173/4 195/167/4 +f 197/168/5 196/167/5 195/166/5 198/169/5 +f 200/175/6 199/176/6 194/165/6 193/164/6 +f 201/177/1 202/178/1 203/179/1 204/180/1 +f 205/181/2 206/182/2 207/183/2 208/184/2 +f 208/185/3 201/177/3 204/180/3 205/186/3 +f 202/181/4 207/187/4 206/186/4 203/180/4 +f 205/181/5 204/180/5 203/179/5 206/182/5 +f 208/188/6 207/189/6 202/178/6 201/177/6 +f 209/190/1 210/191/1 211/192/1 212/193/1 +f 213/194/2 214/195/2 215/196/2 216/197/2 +f 216/198/3 209/190/3 212/193/3 213/199/3 +f 210/194/4 215/200/4 214/199/4 211/193/4 +f 213/194/5 212/193/5 211/192/5 214/195/5 +f 216/201/6 215/202/6 210/191/6 209/190/6 +f 217/203/1 218/204/1 219/205/1 220/206/1 +f 221/207/2 222/208/2 223/209/2 224/210/2 +f 224/211/3 217/203/3 220/206/3 221/212/3 +f 218/207/4 223/213/4 222/212/4 219/206/4 +f 221/207/5 220/206/5 219/205/5 222/208/5 +f 224/214/6 223/215/6 218/204/6 217/203/6 +f 225/14/7 226/15/7 227/16/7 228/17/7 +f 229/18/8 230/19/8 231/20/8 232/21/8 +f 232/22/9 225/14/9 228/17/9 229/23/9 +f 226/18/10 231/24/10 230/23/10 227/17/10 +f 229/18/11 228/17/11 227/16/11 230/19/11 +f 232/25/12 231/26/12 226/15/12 225/14/12 +f 233/14/13 234/15/13 235/16/13 236/17/13 +f 237/18/14 238/19/14 239/20/14 240/21/14 +f 240/22/15 233/14/15 236/17/15 237/23/15 +f 234/18/16 239/24/16 238/23/16 235/17/16 +f 237/18/17 236/17/17 235/16/17 238/19/17 +f 240/25/18 239/26/18 234/15/18 233/14/18 +f 241/14/13 242/15/13 243/16/13 244/17/13 +f 245/18/14 246/19/14 247/20/14 248/21/14 +f 248/22/19 241/14/19 244/17/19 245/23/19 +f 242/18/20 247/24/20 246/23/20 243/17/20 +f 245/18/21 244/17/21 243/16/21 246/19/21 +f 248/25/22 247/26/22 242/15/22 241/14/22 +f 249/14/7 250/15/7 251/16/7 252/17/7 +f 253/18/8 254/19/8 255/20/8 256/21/8 +f 256/22/23 249/14/23 252/17/23 253/23/23 +f 250/18/24 255/24/24 254/23/24 251/17/24 +f 253/18/25 252/17/25 251/16/25 254/19/25 +f 256/25/26 255/26/26 250/15/26 249/14/26 +f 257/66/1 258/67/1 259/68/1 260/69/1 +f 261/70/2 262/71/2 263/72/2 264/73/2 +f 264/74/3 257/66/3 260/69/3 261/75/3 +f 258/76/4 263/77/4 262/75/4 259/69/4 +f 261/70/5 260/69/5 259/68/5 262/71/5 +f 264/78/6 263/79/6 258/67/6 257/66/6 +f 265/80/1 266/81/1 267/82/1 268/83/1 +f 269/84/2 270/85/2 271/86/2 272/87/2 +f 272/88/3 265/80/3 268/83/3 269/89/3 +f 266/90/4 271/91/4 270/89/4 267/83/4 +f 269/84/5 268/83/5 267/82/5 270/85/5 +f 272/92/6 271/93/6 266/81/6 265/80/6 +f 273/94/1 274/95/1 275/96/1 276/97/1 +f 277/98/2 278/99/2 279/100/2 280/101/2 +f 280/102/3 273/94/3 276/97/3 277/103/3 +f 274/104/4 279/105/4 278/103/4 275/97/4 +f 277/98/5 276/97/5 275/96/5 278/99/5 +f 280/106/6 279/107/6 274/95/6 273/94/6 +f 281/108/1 282/109/1 283/110/1 284/111/1 +f 285/112/2 286/113/2 287/114/2 288/115/2 +f 288/116/3 281/108/3 284/111/3 285/117/3 +f 282/118/4 287/119/4 286/117/4 283/111/4 +f 285/112/5 284/111/5 283/110/5 286/113/5 +f 288/120/6 287/121/6 282/109/6 281/108/6 +f 289/122/1 290/123/1 291/124/1 292/125/1 +f 293/126/2 294/127/2 295/128/2 296/129/2 +f 296/130/3 289/122/3 292/125/3 293/131/3 +f 290/132/4 295/133/4 294/131/4 291/125/4 +f 293/126/5 292/125/5 291/124/5 294/127/5 +f 296/134/6 295/135/6 290/123/6 289/122/6 +f 297/136/1 298/137/1 299/138/1 300/139/1 +f 301/140/2 302/141/2 303/142/2 304/143/2 +f 304/144/3 297/136/3 300/139/3 301/145/3 +f 298/146/4 303/147/4 302/145/4 299/139/4 +f 301/140/5 300/139/5 299/138/5 302/141/5 +f 304/148/6 303/149/6 298/137/6 297/136/6 +f 305/150/1 306/151/1 307/152/1 308/153/1 +f 309/154/2 310/155/2 311/156/2 312/157/2 +f 312/158/3 305/150/3 308/153/3 309/159/3 +f 306/160/4 311/161/4 310/159/4 307/153/4 +f 309/154/5 308/153/5 307/152/5 310/155/5 +f 312/162/6 311/163/6 306/151/6 305/150/6 +f 313/80/1 314/81/1 315/82/1 316/83/1 +f 317/84/2 318/85/2 319/86/2 320/87/2 +f 320/88/3 313/80/3 316/83/3 317/89/3 +f 314/90/4 319/91/4 318/89/4 315/83/4 +f 317/84/5 316/83/5 315/82/5 318/85/5 +f 320/92/6 319/93/6 314/81/6 313/80/6 +f 321/94/1 322/95/1 323/96/1 324/97/1 +f 325/98/2 326/99/2 327/100/2 328/101/2 +f 328/102/3 321/94/3 324/97/3 325/103/3 +f 322/104/4 327/105/4 326/103/4 323/97/4 +f 325/98/5 324/97/5 323/96/5 326/99/5 +f 328/106/6 327/107/6 322/95/6 321/94/6 +f 329/108/1 330/109/1 331/110/1 332/111/1 +f 333/112/2 334/113/2 335/114/2 336/115/2 +f 336/116/3 329/108/3 332/111/3 333/117/3 +f 330/118/4 335/119/4 334/117/4 331/111/4 +f 333/112/5 332/111/5 331/110/5 334/113/5 +f 336/120/6 335/121/6 330/109/6 329/108/6 +f 337/122/1 338/123/1 339/124/1 340/125/1 +f 341/126/2 342/127/2 343/128/2 344/129/2 +f 344/130/3 337/122/3 340/125/3 341/131/3 +f 338/132/4 343/133/4 342/131/4 339/125/4 +f 341/126/5 340/125/5 339/124/5 342/127/5 +f 344/134/6 343/135/6 338/123/6 337/122/6 +f 345/136/1 346/137/1 347/138/1 348/139/1 +f 349/140/2 350/141/2 351/142/2 352/143/2 +f 352/144/3 345/136/3 348/139/3 349/145/3 +f 346/146/4 351/147/4 350/145/4 347/139/4 +f 349/140/5 348/139/5 347/138/5 350/141/5 +f 352/148/6 351/149/6 346/137/6 345/136/6 +f 353/164/1 354/165/1 355/166/1 356/167/1 +f 357/168/2 358/169/2 359/170/2 360/171/2 +f 360/172/3 353/164/3 356/167/3 357/173/3 +f 354/168/4 359/174/4 358/173/4 355/167/4 +f 357/168/5 356/167/5 355/166/5 358/169/5 +f 360/175/6 359/176/6 354/165/6 353/164/6 +f 361/177/1 362/178/1 363/179/1 364/180/1 +f 365/181/2 366/182/2 367/183/2 368/184/2 +f 368/185/3 361/177/3 364/180/3 365/186/3 +f 362/181/4 367/187/4 366/186/4 363/180/4 +f 365/181/5 364/180/5 363/179/5 366/182/5 +f 368/188/6 367/189/6 362/178/6 361/177/6 +f 369/190/1 370/191/1 371/192/1 372/193/1 +f 373/194/2 374/195/2 375/196/2 376/197/2 +f 376/198/3 369/190/3 372/193/3 373/199/3 +f 370/194/4 375/200/4 374/199/4 371/193/4 +f 373/194/5 372/193/5 371/192/5 374/195/5 +f 376/201/6 375/202/6 370/191/6 369/190/6 +f 377/203/1 378/204/1 379/205/1 380/206/1 +f 381/207/2 382/208/2 383/209/2 384/210/2 +f 384/211/3 377/203/3 380/206/3 381/212/3 +f 378/207/4 383/213/4 382/212/4 379/206/4 +f 381/207/5 380/206/5 379/205/5 382/208/5 +f 384/214/6 383/215/6 378/204/6 377/203/6 +f 385/80/1 386/81/1 387/82/1 388/83/1 +f 389/84/2 390/85/2 391/86/2 392/87/2 +f 392/88/3 385/80/3 388/83/3 389/89/3 +f 386/90/4 391/91/4 390/89/4 387/83/4 +f 389/84/5 388/83/5 387/82/5 390/85/5 +f 392/92/6 391/93/6 386/81/6 385/80/6 +f 393/94/1 394/95/1 395/96/1 396/97/1 +f 397/98/2 398/99/2 399/100/2 400/101/2 +f 400/102/3 393/94/3 396/97/3 397/103/3 +f 394/104/4 399/105/4 398/103/4 395/97/4 +f 397/98/5 396/97/5 395/96/5 398/99/5 +f 400/106/6 399/107/6 394/95/6 393/94/6 +f 401/94/1 402/95/1 403/96/1 404/97/1 +f 405/98/2 406/99/2 407/100/2 408/101/2 +f 408/102/3 401/94/3 404/97/3 405/103/3 +f 402/104/4 407/105/4 406/103/4 403/97/4 +f 405/98/5 404/97/5 403/96/5 406/99/5 +f 408/106/6 407/107/6 402/95/6 401/94/6 +f 409/122/1 410/123/1 411/124/1 412/125/1 +f 413/126/2 414/127/2 415/128/2 416/129/2 +f 416/130/3 409/122/3 412/125/3 413/131/3 +f 410/132/4 415/133/4 414/131/4 411/125/4 +f 413/126/5 412/125/5 411/124/5 414/127/5 +f 416/134/6 415/135/6 410/123/6 409/122/6 +f 417/136/1 418/137/1 419/138/1 420/139/1 +f 421/140/2 422/141/2 423/142/2 424/143/2 +f 424/144/3 417/136/3 420/139/3 421/145/3 +f 418/146/4 423/147/4 422/145/4 419/139/4 +f 421/140/5 420/139/5 419/138/5 422/141/5 +f 424/148/6 423/149/6 418/137/6 417/136/6 +f 425/136/1 426/137/1 427/138/1 428/139/1 +f 429/140/2 430/141/2 431/142/2 432/143/2 +f 432/144/3 425/136/3 428/139/3 429/145/3 +f 426/146/4 431/147/4 430/145/4 427/139/4 +f 429/140/5 428/139/5 427/138/5 430/141/5 +f 432/148/6 431/149/6 426/137/6 425/136/6 +f 433/80/1 434/81/1 435/82/1 436/83/1 +f 437/84/2 438/85/2 439/86/2 440/87/2 +f 440/88/3 433/80/3 436/83/3 437/89/3 +f 434/90/4 439/91/4 438/89/4 435/83/4 +f 437/84/5 436/83/5 435/82/5 438/85/5 +f 440/92/6 439/93/6 434/81/6 433/80/6 +f 441/94/1 442/95/1 443/96/1 444/97/1 +f 445/98/2 446/99/2 447/100/2 448/101/2 +f 448/102/3 441/94/3 444/97/3 445/103/3 +f 442/104/4 447/105/4 446/103/4 443/97/4 +f 445/98/5 444/97/5 443/96/5 446/99/5 +f 448/106/6 447/107/6 442/95/6 441/94/6 +f 449/94/1 450/95/1 451/96/1 452/97/1 +f 453/98/2 454/99/2 455/100/2 456/101/2 +f 456/102/3 449/94/3 452/97/3 453/103/3 +f 450/104/4 455/105/4 454/103/4 451/97/4 +f 453/98/5 452/97/5 451/96/5 454/99/5 +f 456/106/6 455/107/6 450/95/6 449/94/6 +f 457/122/1 458/123/1 459/124/1 460/125/1 +f 461/126/2 462/127/2 463/128/2 464/129/2 +f 464/130/3 457/122/3 460/125/3 461/131/3 +f 458/132/4 463/133/4 462/131/4 459/125/4 +f 461/126/5 460/125/5 459/124/5 462/127/5 +f 464/134/6 463/135/6 458/123/6 457/122/6 +f 465/136/1 466/137/1 467/138/1 468/139/1 +f 469/140/2 470/141/2 471/142/2 472/143/2 +f 472/144/3 465/136/3 468/139/3 469/145/3 +f 466/146/4 471/147/4 470/145/4 467/139/4 +f 469/140/5 468/139/5 467/138/5 470/141/5 +f 472/148/6 471/149/6 466/137/6 465/136/6 +f 473/136/1 474/137/1 475/138/1 476/139/1 +f 477/140/2 478/141/2 479/142/2 480/143/2 +f 480/144/3 473/136/3 476/139/3 477/145/3 +f 474/146/4 479/147/4 478/145/4 475/139/4 +f 477/140/5 476/139/5 475/138/5 478/141/5 +f 480/148/6 479/149/6 474/137/6 473/136/6 +f 481/177/1 482/178/1 483/179/1 484/180/1 +f 485/181/2 486/182/2 487/183/2 488/184/2 +f 488/185/3 481/177/3 484/180/3 485/186/3 +f 482/181/4 487/187/4 486/186/4 483/180/4 +f 485/181/5 484/180/5 483/179/5 486/182/5 +f 488/188/6 487/189/6 482/178/6 481/177/6 +f 489/190/1 490/191/1 491/192/1 492/193/1 +f 493/194/2 494/195/2 495/196/2 496/197/2 +f 496/198/3 489/190/3 492/193/3 493/199/3 +f 490/194/4 495/200/4 494/199/4 491/193/4 +f 493/194/5 492/193/5 491/192/5 494/195/5 +f 496/201/6 495/202/6 490/191/6 489/190/6 +f 497/203/1 498/204/1 499/205/1 500/206/1 +f 501/207/2 502/208/2 503/209/2 504/210/2 +f 504/211/3 497/203/3 500/206/3 501/212/3 +f 498/207/4 503/213/4 502/212/4 499/206/4 +f 501/207/5 500/206/5 499/205/5 502/208/5 +f 504/214/6 503/215/6 498/204/6 497/203/6 +f 505/190/1 506/191/1 507/192/1 508/193/1 +f 509/194/2 510/195/2 511/196/2 512/197/2 +f 512/198/3 505/190/3 508/193/3 509/199/3 +f 506/194/4 511/200/4 510/199/4 507/193/4 +f 509/194/5 508/193/5 507/192/5 510/195/5 +f 512/201/6 511/202/6 506/191/6 505/190/6 +f 513/203/1 514/204/1 515/205/1 516/206/1 +f 517/207/2 518/208/2 519/209/2 520/210/2 +f 520/211/3 513/203/3 516/206/3 517/212/3 +f 514/207/4 519/213/4 518/212/4 515/206/4 +f 517/207/5 516/206/5 515/205/5 518/208/5 +f 520/214/6 519/215/6 514/204/6 513/203/6 +f 521/203/1 522/204/1 523/205/1 524/206/1 +f 525/207/2 526/208/2 527/209/2 528/210/2 +f 528/211/3 521/203/3 524/206/3 525/212/3 +f 522/207/4 527/213/4 526/212/4 523/206/4 +f 525/207/5 524/206/5 523/205/5 526/208/5 +f 528/214/6 527/215/6 522/204/6 521/203/6 diff --git a/src/main/resources/assets/bloodmagic/models/block/blockdimensionalportal.json b/src/main/resources/assets/bloodmagic/models/block/blockdimensionalportal.json new file mode 100644 index 00000000..3c45f9df --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockdimensionalportal.json @@ -0,0 +1,15 @@ +{ + "textures": { + "particle": "bloodmagic:blocks/lifeEssenceFlowing", + "portal": "bloodmagic:blocks/lifeEssenceFlowing" + }, + "elements": [ + { "from": [ 6, 0, 0 ], + "to": [ 10, 16, 16 ], + "faces": { + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#portal" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#portal" } + } + } + ] +} diff --git a/src/main/resources/assets/bloodmagic/models/block/blockdimensionalportalew.json b/src/main/resources/assets/bloodmagic/models/block/blockdimensionalportalew.json new file mode 100644 index 00000000..3c45f9df --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockdimensionalportalew.json @@ -0,0 +1,15 @@ +{ + "textures": { + "particle": "bloodmagic:blocks/lifeEssenceFlowing", + "portal": "bloodmagic:blocks/lifeEssenceFlowing" + }, + "elements": [ + { "from": [ 6, 0, 0 ], + "to": [ 10, 16, 16 ], + "faces": { + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#portal" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#portal" } + } + } + ] +} diff --git a/src/main/resources/assets/bloodmagic/models/block/blockdimensionalportalns.json b/src/main/resources/assets/bloodmagic/models/block/blockdimensionalportalns.json new file mode 100644 index 00000000..6696313f --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockdimensionalportalns.json @@ -0,0 +1,15 @@ +{ + "textures": { + "particle": "bloodmagic:blocks/lifeEssenceFlowing", + "portal": "bloodmagic:blocks/lifeEssenceFlowing" + }, + "elements": [ + { "from": [ 0, 0, 6 ], + "to": [ 16, 16, 10 ], + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#portal" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#portal" } + } + } + ] +} diff --git a/src/main/resources/assets/bloodmagic/models/block/blockhellfireforge.mtl b/src/main/resources/assets/bloodmagic/models/block/blockhellfireforge.mtl new file mode 100644 index 00000000..c4e8b122 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockhellfireforge.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +#Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +#Ks 0.8 0.8 0.8 +d 1 +#illum 2 +map_Kd bloodmagic:models/hellfireforge diff --git a/src/main/resources/assets/bloodmagic/models/block/blockhellfireforge.obj b/src/main/resources/assets/bloodmagic/models/block/blockhellfireforge.obj new file mode 100644 index 00000000..595aa694 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockhellfireforge.obj @@ -0,0 +1,899 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib blockhellfireforge.mtl +o BlockHellfireForge_(5) +v 0.062500 0.125000 0.937500 +v 0.062500 -0.000000 0.937500 +v 0.312500 -0.000000 0.937500 +v 0.312500 0.125000 0.937500 +v 0.312500 0.125000 0.687500 +v 0.312500 -0.000000 0.687500 +v 0.062500 -0.000000 0.687500 +v 0.062500 0.125000 0.687500 +v 0.134319 0.498760 0.861969 +v 0.093200 0.128268 0.902840 +v 0.279569 0.107833 0.905094 +v 0.320688 0.478324 0.864223 +v 0.320688 0.457765 0.677854 +v 0.279569 0.087273 0.718725 +v 0.093200 0.107709 0.716470 +v 0.134319 0.478200 0.675599 +v 0.687500 0.125000 0.312500 +v 0.687500 0.000000 0.312500 +v 0.937500 0.000000 0.312500 +v 0.937500 0.125000 0.312500 +v 0.937500 0.125000 0.062500 +v 0.937500 0.000000 0.062500 +v 0.687500 0.000000 0.062500 +v 0.687500 0.125000 0.062500 +v 0.679311 0.457787 0.322148 +v 0.720430 0.087304 0.281277 +v 0.906798 0.107739 0.283532 +v 0.865679 0.478222 0.324402 +v 0.865679 0.498782 0.138035 +v 0.906798 0.128299 0.097164 +v 0.720430 0.107863 0.094910 +v 0.679311 0.478347 0.135780 +v 0.062500 0.125000 0.312500 +v 0.062500 0.000000 0.312500 +v 0.312500 0.000000 0.312500 +v 0.312500 0.125000 0.312500 +v 0.312500 0.125000 0.062500 +v 0.312500 0.000000 0.062500 +v 0.062500 0.000000 0.062500 +v 0.062500 0.125000 0.062500 +v 0.134319 0.478211 0.324401 +v 0.093200 0.107724 0.283530 +v 0.279569 0.087289 0.281275 +v 0.320688 0.457776 0.322147 +v 0.320688 0.478335 0.135779 +v 0.279569 0.107848 0.094908 +v 0.093200 0.128283 0.097162 +v 0.134319 0.498771 0.138033 +v 0.687500 0.125000 0.937500 +v 0.687500 -0.000000 0.937500 +v 0.937500 -0.000000 0.937500 +v 0.937500 0.125000 0.937500 +v 0.937500 0.125000 0.687500 +v 0.937500 -0.000000 0.687500 +v 0.687500 -0.000000 0.687500 +v 0.687500 0.125000 0.687500 +v 0.679311 0.478335 0.864222 +v 0.720430 0.107848 0.905092 +v 0.906798 0.128284 0.902838 +v 0.865679 0.498771 0.861968 +v 0.865679 0.478212 0.675598 +v 0.906798 0.107724 0.716469 +v 0.720430 0.087289 0.718723 +v 0.679311 0.457776 0.677853 +v 0.125000 0.687500 0.875000 +v 0.125000 0.312500 0.875000 +v 0.875000 0.312500 0.875000 +v 0.875000 0.687500 0.875000 +v 0.875000 0.687500 0.125000 +v 0.875000 0.312500 0.125000 +v 0.125000 0.312500 0.125000 +v 0.125000 0.687500 0.125000 +v 0.406250 0.750000 0.593750 +v 0.406250 0.687500 0.593750 +v 0.593750 0.687500 0.593750 +v 0.593750 0.750000 0.593750 +v 0.593750 0.750000 0.406250 +v 0.593750 0.687500 0.406250 +v 0.406250 0.687500 0.406250 +v 0.406250 0.750000 0.406250 +v 0.406167 0.749949 0.593750 +v 0.317779 0.661561 0.593750 +v 0.361973 0.617367 0.593750 +v 0.450362 0.705755 0.593750 +v 0.450362 0.705755 0.406250 +v 0.361973 0.617367 0.406250 +v 0.317779 0.661561 0.406250 +v 0.406167 0.749949 0.406250 +v 0.549638 0.705755 0.593750 +v 0.638027 0.617367 0.593750 +v 0.682221 0.661561 0.593750 +v 0.593833 0.749949 0.593750 +v 0.593833 0.749949 0.406250 +v 0.682221 0.661561 0.406250 +v 0.638027 0.617367 0.406250 +v 0.549638 0.705755 0.406250 +v 0.406250 0.749949 0.593832 +v 0.406250 0.661561 0.682221 +v 0.593750 0.661561 0.682221 +v 0.593750 0.749949 0.593832 +v 0.593750 0.705755 0.549638 +v 0.593750 0.617367 0.638027 +v 0.406250 0.617367 0.638027 +v 0.406250 0.705755 0.549638 +v 0.406250 0.705755 0.450625 +v 0.406250 0.617367 0.362236 +v 0.593750 0.617367 0.362236 +v 0.593750 0.705755 0.450625 +v 0.593750 0.749949 0.406431 +v 0.593750 0.661561 0.318042 +v 0.406250 0.661561 0.318042 +v 0.406250 0.749949 0.406431 +v 0.750000 0.750000 0.250000 +v 0.750000 0.687500 0.250000 +v 0.875000 0.687500 0.250000 +v 0.875000 0.750000 0.250000 +v 0.875000 0.750000 0.125000 +v 0.875000 0.687500 0.125000 +v 0.750000 0.687500 0.125000 +v 0.750000 0.750000 0.125000 +v 0.750000 0.750000 0.875000 +v 0.750000 0.687500 0.875000 +v 0.875000 0.687500 0.875000 +v 0.875000 0.750000 0.875000 +v 0.875000 0.750000 0.750000 +v 0.875000 0.687500 0.750000 +v 0.750000 0.687500 0.750000 +v 0.750000 0.750000 0.750000 +v 0.125000 0.750000 0.250000 +v 0.125000 0.687500 0.250000 +v 0.250000 0.687500 0.250000 +v 0.250000 0.750000 0.250000 +v 0.250000 0.750000 0.125000 +v 0.250000 0.687500 0.125000 +v 0.125000 0.687500 0.125000 +v 0.125000 0.750000 0.125000 +v 0.125000 0.750000 0.875000 +v 0.125000 0.687500 0.875000 +v 0.250000 0.687500 0.875000 +v 0.250000 0.750000 0.875000 +v 0.250000 0.750000 0.750000 +v 0.250000 0.687500 0.750000 +v 0.125000 0.687500 0.750000 +v 0.125000 0.750000 0.750000 +v 0.125000 0.750000 0.125000 +v 0.125000 0.375000 0.125000 +v 0.875000 0.375000 0.125000 +v 0.875000 0.750000 0.125000 +v 0.875000 0.750000 0.062500 +v 0.875000 0.375000 0.062500 +v 0.125000 0.375000 0.062500 +v 0.125000 0.750000 0.062500 +v 0.125000 0.750000 0.937500 +v 0.125000 0.375000 0.937500 +v 0.875000 0.375000 0.937500 +v 0.875000 0.750000 0.937500 +v 0.875000 0.750000 0.875000 +v 0.875000 0.375000 0.875000 +v 0.125000 0.375000 0.875000 +v 0.125000 0.750000 0.875000 +v 0.062500 0.750000 0.875000 +v 0.062500 0.375000 0.875000 +v 0.125000 0.375000 0.875000 +v 0.125000 0.750000 0.875000 +v 0.125000 0.750000 0.125000 +v 0.125000 0.375000 0.125000 +v 0.062500 0.375000 0.125000 +v 0.062500 0.750000 0.125000 +v 0.875000 0.750000 0.875000 +v 0.875000 0.375000 0.875000 +v 0.937500 0.375000 0.875000 +v 0.937500 0.750000 0.875000 +v 0.937500 0.750000 0.125000 +v 0.937500 0.375000 0.125000 +v 0.875000 0.375000 0.125000 +v 0.875000 0.750000 0.125000 +v 0.875000 0.875000 1.000000 +v 0.875000 0.687500 1.000000 +v 1.000000 0.687500 1.000000 +v 1.000000 0.875000 1.000000 +v 1.000000 0.875000 0.875000 +v 1.000000 0.687500 0.875000 +v 0.875000 0.687500 0.875000 +v 0.875000 0.875000 0.875000 +v 0.937500 0.968750 1.000000 +v 0.937500 0.906250 1.000000 +v 1.000000 0.906250 1.000000 +v 1.000000 0.968750 1.000000 +v 1.000000 0.968750 0.937500 +v 1.000000 0.906250 0.937500 +v 0.937500 0.906250 0.937500 +v 0.937500 0.968750 0.937500 +v 0.875000 0.875000 0.125000 +v 0.875000 0.687500 0.125000 +v 1.000000 0.687500 0.125000 +v 1.000000 0.875000 0.125000 +v 1.000000 0.875000 0.000000 +v 1.000000 0.687500 0.000000 +v 0.875000 0.687500 0.000000 +v 0.875000 0.875000 0.000000 +v 0.937500 0.968750 0.062500 +v 0.937500 0.906250 0.062500 +v 1.000000 0.906250 0.062500 +v 1.000000 0.968750 0.062500 +v 1.000000 0.968750 0.000000 +v 1.000000 0.906250 0.000000 +v 0.937500 0.906250 0.000000 +v 0.937500 0.968750 0.000000 +v 0.000000 0.875000 1.000000 +v 0.000000 0.687500 1.000000 +v 0.125000 0.687500 1.000000 +v 0.125000 0.875000 1.000000 +v 0.125000 0.875000 0.875000 +v 0.125000 0.687500 0.875000 +v 0.000000 0.687500 0.875000 +v 0.000000 0.875000 0.875000 +v 0.000000 0.968750 1.000000 +v 0.000000 0.906250 1.000000 +v 0.062500 0.906250 1.000000 +v 0.062500 0.968750 1.000000 +v 0.062500 0.968750 0.937500 +v 0.062500 0.906250 0.937500 +v 0.000000 0.906250 0.937500 +v 0.000000 0.968750 0.937500 +v 0.000000 0.875000 0.125000 +v 0.000000 0.687500 0.125000 +v 0.125000 0.687500 0.125000 +v 0.125000 0.875000 0.125000 +v 0.125000 0.875000 0.000000 +v 0.125000 0.687500 0.000000 +v 0.000000 0.687500 0.000000 +v 0.000000 0.875000 0.000000 +v 0.000000 0.968750 0.062500 +v 0.000000 0.906250 0.062500 +v 0.062500 0.906250 0.062500 +v 0.062500 0.968750 0.062500 +v 0.062500 0.968750 0.000000 +v 0.062500 0.906250 0.000000 +v 0.000000 0.906250 0.000000 +v 0.000000 0.968750 0.000000 +v 0.134319 0.498760 0.861969 +v 0.093200 0.128268 0.902840 +v 0.279569 0.107833 0.905094 +v 0.320688 0.478324 0.864223 +v 0.320688 0.457765 0.677854 +v 0.279569 0.087273 0.718725 +v 0.093200 0.107709 0.716470 +v 0.134319 0.478200 0.675599 +v 0.679311 0.457787 0.322148 +v 0.720430 0.087304 0.281277 +v 0.906798 0.107739 0.283532 +v 0.865679 0.478222 0.324402 +v 0.865679 0.498782 0.138035 +v 0.906798 0.128299 0.097164 +v 0.720430 0.107863 0.094910 +v 0.679311 0.478347 0.135780 +v 0.134319 0.478211 0.324401 +v 0.093200 0.107724 0.283530 +v 0.279569 0.087289 0.281275 +v 0.320688 0.457776 0.322147 +v 0.320688 0.478335 0.135779 +v 0.279569 0.107848 0.094908 +v 0.093200 0.128283 0.097162 +v 0.134319 0.498771 0.138033 +v 0.679311 0.478335 0.864222 +v 0.720430 0.107848 0.905092 +v 0.906798 0.128284 0.902838 +v 0.865679 0.498771 0.861968 +v 0.865679 0.478212 0.675598 +v 0.906798 0.107724 0.716469 +v 0.720430 0.087289 0.718723 +v 0.679311 0.457776 0.677853 +v 0.406250 0.750000 0.593750 +v 0.406250 0.687500 0.593750 +v 0.593750 0.687500 0.593750 +v 0.593750 0.750000 0.593750 +v 0.593750 0.750000 0.406250 +v 0.593750 0.687500 0.406250 +v 0.406250 0.687500 0.406250 +v 0.406250 0.750000 0.406250 +v 0.406167 0.749949 0.593750 +v 0.317779 0.661561 0.593750 +v 0.361973 0.617367 0.593750 +v 0.450362 0.705755 0.593750 +v 0.450362 0.705755 0.406250 +v 0.361973 0.617367 0.406250 +v 0.317779 0.661561 0.406250 +v 0.406167 0.749949 0.406250 +v 0.549638 0.705755 0.593750 +v 0.638027 0.617367 0.593750 +v 0.682221 0.661561 0.593750 +v 0.593833 0.749949 0.593750 +v 0.593833 0.749949 0.406250 +v 0.682221 0.661561 0.406250 +v 0.638027 0.617367 0.406250 +v 0.549638 0.705755 0.406250 +v 0.406250 0.749949 0.593832 +v 0.406250 0.661561 0.682221 +v 0.593750 0.661561 0.682221 +v 0.593750 0.749949 0.593832 +v 0.593750 0.705755 0.549638 +v 0.593750 0.617367 0.638027 +v 0.406250 0.617367 0.638027 +v 0.406250 0.705755 0.549638 +v 0.406250 0.705755 0.450625 +v 0.406250 0.617367 0.362236 +v 0.593750 0.617367 0.362236 +v 0.593750 0.705755 0.450625 +v 0.593750 0.749949 0.406431 +v 0.593750 0.661561 0.318042 +v 0.406250 0.661561 0.318042 +v 0.406250 0.749949 0.406431 +v 0.750000 0.750000 0.250000 +v 0.750000 0.687500 0.250000 +v 0.875000 0.687500 0.250000 +v 0.875000 0.750000 0.250000 +v 0.875000 0.750000 0.125000 +v 0.875000 0.687500 0.125000 +v 0.750000 0.687500 0.125000 +v 0.750000 0.750000 0.125000 +v 0.750000 0.750000 0.875000 +v 0.750000 0.687500 0.875000 +v 0.875000 0.687500 0.875000 +v 0.875000 0.750000 0.875000 +v 0.875000 0.750000 0.750000 +v 0.875000 0.687500 0.750000 +v 0.750000 0.687500 0.750000 +v 0.750000 0.750000 0.750000 +v 0.125000 0.750000 0.250000 +v 0.125000 0.687500 0.250000 +v 0.250000 0.687500 0.250000 +v 0.250000 0.750000 0.250000 +v 0.250000 0.750000 0.125000 +v 0.250000 0.687500 0.125000 +v 0.125000 0.687500 0.125000 +v 0.125000 0.750000 0.125000 +v 0.125000 0.750000 0.875000 +v 0.125000 0.687500 0.875000 +v 0.250000 0.687500 0.875000 +v 0.250000 0.750000 0.875000 +v 0.250000 0.750000 0.750000 +v 0.250000 0.687500 0.750000 +v 0.125000 0.687500 0.750000 +v 0.125000 0.750000 0.750000 +v 0.406167 0.749949 0.593750 +v 0.317779 0.661561 0.593750 +v 0.361973 0.617367 0.593750 +v 0.450362 0.705755 0.593750 +v 0.450362 0.705755 0.406250 +v 0.361973 0.617367 0.406250 +v 0.317779 0.661561 0.406250 +v 0.406167 0.749949 0.406250 +v 0.549638 0.705755 0.593750 +v 0.638027 0.617367 0.593750 +v 0.682221 0.661561 0.593750 +v 0.593833 0.749949 0.593750 +v 0.593833 0.749949 0.406250 +v 0.682221 0.661561 0.406250 +v 0.638027 0.617367 0.406250 +v 0.549638 0.705755 0.406250 +v 0.406250 0.749949 0.593832 +v 0.406250 0.661561 0.682221 +v 0.593750 0.661561 0.682221 +v 0.593750 0.749949 0.593832 +v 0.593750 0.705755 0.549638 +v 0.593750 0.617367 0.638027 +v 0.406250 0.617367 0.638027 +v 0.406250 0.705755 0.549638 +v 0.406250 0.705755 0.450625 +v 0.406250 0.617367 0.362236 +v 0.593750 0.617367 0.362236 +v 0.593750 0.705755 0.450625 +v 0.593750 0.749949 0.406431 +v 0.593750 0.661561 0.318042 +v 0.406250 0.661561 0.318042 +v 0.406250 0.749949 0.406431 +v 0.937500 0.968750 1.000000 +v 0.937500 0.906250 1.000000 +v 1.000000 0.906250 1.000000 +v 1.000000 0.968750 1.000000 +v 1.000000 0.968750 0.937500 +v 1.000000 0.906250 0.937500 +v 0.937500 0.906250 0.937500 +v 0.937500 0.968750 0.937500 +v 0.937500 0.968750 0.062500 +v 0.937500 0.906250 0.062500 +v 1.000000 0.906250 0.062500 +v 1.000000 0.968750 0.062500 +v 1.000000 0.968750 0.000000 +v 1.000000 0.906250 0.000000 +v 0.937500 0.906250 0.000000 +v 0.937500 0.968750 0.000000 +v 0.000000 0.968750 1.000000 +v 0.000000 0.906250 1.000000 +v 0.062500 0.906250 1.000000 +v 0.062500 0.968750 1.000000 +v 0.062500 0.968750 0.937500 +v 0.062500 0.906250 0.937500 +v 0.000000 0.906250 0.937500 +v 0.000000 0.968750 0.937500 +v 0.000000 0.968750 0.062500 +v 0.000000 0.906250 0.062500 +v 0.062500 0.906250 0.062500 +v 0.062500 0.968750 0.062500 +v 0.062500 0.968750 0.000000 +v 0.062500 0.906250 0.000000 +v 0.000000 0.906250 0.000000 +v 0.000000 0.968750 0.000000 +vt 0.062500 0.937500 +vt 0.062500 0.906250 +vt 0.125000 0.906250 +vt 0.125000 0.937500 +vt 0.187500 0.937500 +vt 0.187500 0.906250 +vt 0.250000 0.906250 +vt 0.250000 0.937500 +vt 0.062500 1.000000 +vt 0.125000 1.000000 +vt 0.187500 1.000000 +vt 0.000000 0.937500 +vt 0.000000 0.906250 +vt 0.046875 0.843750 +vt 0.046875 0.750000 +vt 0.093750 0.750000 +vt 0.093750 0.843750 +vt 0.140625 0.843750 +vt 0.140625 0.750000 +vt 0.187500 0.750000 +vt 0.187500 0.843750 +vt 0.046875 0.890625 +vt 0.093750 0.890625 +vt 0.140625 0.890625 +vt 0.000000 0.843750 +vt 0.000000 0.750000 +vt 0.437500 0.093750 +vt 0.437500 0.000000 +vt 0.625000 0.000000 +vt 0.625000 0.093750 +vt 0.812500 0.093750 +vt 0.812500 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.093750 +vt 0.437500 0.281250 +vt 0.625000 0.281250 +vt 0.812500 0.281250 +vt 0.250000 0.093750 +vt 0.250000 0.000000 +vt 0.046875 0.593750 +vt 0.046875 0.578125 +vt 0.093750 0.578125 +vt 0.093750 0.593750 +vt 0.140625 0.593750 +vt 0.140625 0.578125 +vt 0.187500 0.578125 +vt 0.187500 0.593750 +vt 0.046875 0.640625 +vt 0.093750 0.640625 +vt 0.140625 0.640625 +vt 0.000000 0.593750 +vt 0.000000 0.578125 +vt 0.250000 0.812500 +vt 0.250000 0.781250 +vt 0.265625 0.781250 +vt 0.265625 0.812500 +vt 0.312500 0.812500 +vt 0.312500 0.781250 +vt 0.328125 0.781250 +vt 0.328125 0.812500 +vt 0.250000 0.859375 +vt 0.265625 0.859375 +vt 0.281250 0.812500 +vt 0.281250 0.859375 +vt 0.203125 0.812500 +vt 0.203125 0.781250 +vt 0.218750 0.750000 +vt 0.218750 0.718750 +vt 0.265625 0.718750 +vt 0.265625 0.750000 +vt 0.281250 0.750000 +vt 0.281250 0.718750 +vt 0.328125 0.718750 +vt 0.328125 0.750000 +vt 0.218750 0.765625 +vt 0.265625 0.765625 +vt 0.312500 0.750000 +vt 0.312500 0.765625 +vt 0.203125 0.750000 +vt 0.203125 0.718750 +vt 0.031250 0.531250 +vt 0.031250 0.515625 +vt 0.062500 0.515625 +vt 0.062500 0.531250 +vt 0.093750 0.531250 +vt 0.093750 0.515625 +vt 0.125000 0.515625 +vt 0.125000 0.531250 +vt 0.031250 0.562500 +vt 0.062500 0.562500 +vt 0.093750 0.562500 +vt 0.000000 0.531250 +vt 0.000000 0.515625 +vt 0.281250 0.984375 +vt 0.281250 0.890625 +vt 0.468750 0.890625 +vt 0.468750 0.984375 +vt 0.484375 0.984375 +vt 0.484375 0.890625 +vt 0.671875 0.890625 +vt 0.671875 0.984375 +vt 0.281250 1.000000 +vt 0.468750 1.000000 +vt 0.656250 0.984375 +vt 0.656250 1.000000 +vt 0.265625 0.984375 +vt 0.265625 0.890625 +vt 0.781250 0.812500 +vt 0.781250 0.718750 +vt 0.796875 0.718750 +vt 0.796875 0.812500 +vt 0.984375 0.812500 +vt 0.984375 0.718750 +vt 1.000000 0.718750 +vt 1.000000 0.812500 +vt 0.781250 1.000000 +vt 0.796875 1.000000 +vt 0.812500 0.812500 +vt 0.812500 1.000000 +vt 0.593750 0.812500 +vt 0.593750 0.718750 +vt 0.031250 0.703125 +vt 0.031250 0.656250 +vt 0.062500 0.656250 +vt 0.062500 0.703125 +vt 0.093750 0.703125 +vt 0.093750 0.656250 +vt 0.125000 0.656250 +vt 0.125000 0.703125 +vt 0.031250 0.734375 +vt 0.062500 0.734375 +vt 0.093750 0.734375 +vt 0.000000 0.703125 +vt 0.000000 0.656250 +vt 0.031250 0.687500 +vt 0.046875 0.687500 +vt 0.046875 0.703125 +vt 0.062500 0.687500 +vt 0.078125 0.687500 +vt 0.078125 0.703125 +vt 0.031250 0.718750 +vt 0.046875 0.718750 +vt 0.062500 0.718750 +vt 0.015625 0.703125 +vt 0.015625 0.687500 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.109600 0.994000 +vn 0.000000 -0.109700 -0.994000 +vn 0.109700 0.988000 -0.109000 +vn -0.109700 -0.988000 0.109000 +vn 0.994000 -0.109000 0.012000 +vn -0.994000 0.109000 -0.012000 +vn -0.000000 -0.109700 0.994000 +vn 0.000000 0.109700 -0.994000 +vn -0.109600 0.988000 0.109000 +vn 0.109700 -0.988000 -0.109000 +vn 0.994000 0.109000 0.012000 +vn -0.994000 -0.109000 -0.012000 +vn 0.109700 0.988000 0.109000 +vn -0.109600 -0.988000 -0.109000 +vn 0.994000 -0.109000 -0.012000 +vn -0.994000 0.109000 0.012000 +vn -0.109700 0.988000 -0.109000 +vn 0.109700 -0.988000 0.109000 +vn 0.994000 0.109000 -0.012000 +vn -0.994000 -0.109000 0.012000 +vn 0.707100 0.707100 0.000000 +vn -0.707100 -0.707100 0.000000 +vn 0.707100 -0.707100 0.000000 +vn -0.707100 0.707100 0.000000 +vn 0.000000 0.707100 0.707100 +vn 0.000000 -0.707100 -0.707100 +vn 0.000000 0.707100 -0.707100 +vn 0.000000 -0.707100 0.707100 +usemtl None +#s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 8/9/3 1/1/3 4/4/3 5/10/3 +f 2/5/4 7/11/4 6/10/4 3/4/4 +f 5/5/5 4/4/5 3/3/5 6/6/5 +f 8/12/6 7/13/6 2/2/6 1/1/6 +f 9/14/7 10/15/7 11/16/7 12/17/7 +f 13/18/8 14/19/8 15/20/8 16/21/8 +f 16/22/9 9/14/9 12/17/9 13/23/9 +f 10/18/10 15/24/10 14/23/10 11/17/10 +f 13/18/11 12/17/11 11/16/11 14/19/11 +f 16/25/12 15/26/12 10/15/12 9/14/12 +f 17/1/1 18/2/1 19/3/1 20/4/1 +f 21/5/2 22/6/2 23/7/2 24/8/2 +f 24/9/3 17/1/3 20/4/3 21/10/3 +f 18/5/4 23/11/4 22/10/4 19/4/4 +f 21/5/5 20/4/5 19/3/5 22/6/5 +f 24/12/6 23/13/6 18/2/6 17/1/6 +f 25/14/13 26/15/13 27/16/13 28/17/13 +f 29/18/14 30/19/14 31/20/14 32/21/14 +f 32/22/15 25/14/15 28/17/15 29/23/15 +f 26/18/16 31/24/16 30/23/16 27/17/16 +f 29/18/17 28/17/17 27/16/17 30/19/17 +f 32/25/18 31/26/18 26/15/18 25/14/18 +f 33/1/1 34/2/1 35/3/1 36/4/1 +f 37/5/2 38/6/2 39/7/2 40/8/2 +f 40/9/3 33/1/3 36/4/3 37/10/3 +f 34/5/4 39/11/4 38/10/4 35/4/4 +f 37/5/5 36/4/5 35/3/5 38/6/5 +f 40/12/6 39/13/6 34/2/6 33/1/6 +f 41/14/13 42/15/13 43/16/13 44/17/13 +f 45/18/14 46/19/14 47/20/14 48/21/14 +f 48/22/19 41/14/19 44/17/19 45/23/19 +f 42/18/20 47/24/20 46/23/20 43/17/20 +f 45/18/21 44/17/21 43/16/21 46/19/21 +f 48/25/22 47/26/22 42/15/22 41/14/22 +f 49/1/1 50/2/1 51/3/1 52/4/1 +f 53/5/2 54/6/2 55/7/2 56/8/2 +f 56/9/3 49/1/3 52/4/3 53/10/3 +f 50/5/4 55/11/4 54/10/4 51/4/4 +f 53/5/5 52/4/5 51/3/5 54/6/5 +f 56/12/6 55/13/6 50/2/6 49/1/6 +f 57/14/7 58/15/7 59/16/7 60/17/7 +f 61/18/8 62/19/8 63/20/8 64/21/8 +f 64/22/23 57/14/23 60/17/23 61/23/23 +f 58/18/24 63/24/24 62/23/24 59/17/24 +f 61/18/25 60/17/25 59/16/25 62/19/25 +f 64/25/26 63/26/26 58/15/26 57/14/26 +f 65/27/1 66/28/1 67/29/1 68/30/1 +f 69/31/2 70/32/2 71/33/2 72/34/2 +f 72/35/3 65/27/3 68/30/3 69/36/3 +f 66/31/4 71/37/4 70/36/4 67/30/4 +f 69/31/5 68/30/5 67/29/5 70/32/5 +f 72/38/6 71/39/6 66/28/6 65/27/6 +f 73/40/1 74/41/1 75/42/1 76/43/1 +f 77/44/2 78/45/2 79/46/2 80/47/2 +f 80/48/3 73/40/3 76/43/3 77/49/3 +f 74/44/4 79/50/4 78/49/4 75/43/4 +f 77/44/5 76/43/5 75/42/5 78/45/5 +f 80/51/6 79/52/6 74/41/6 73/40/6 +f 81/53/1 82/54/1 83/55/1 84/56/1 +f 85/57/2 86/58/2 87/59/2 88/60/2 +f 88/61/27 81/53/27 84/56/27 85/62/27 +f 82/63/28 87/64/28 86/62/28 83/56/28 +f 85/57/29 84/56/29 83/55/29 86/58/29 +f 88/65/30 87/66/30 82/54/30 81/53/30 +f 89/53/1 90/54/1 91/55/1 92/56/1 +f 93/57/2 94/58/2 95/59/2 96/60/2 +f 96/61/30 89/53/30 92/56/30 93/62/30 +f 90/63/29 95/64/29 94/62/29 91/56/29 +f 93/57/27 92/56/27 91/55/27 94/58/27 +f 96/65/28 95/66/28 90/54/28 89/53/28 +f 97/67/31 98/68/31 99/69/31 100/70/31 +f 101/71/32 102/72/32 103/73/32 104/74/32 +f 104/75/33 97/67/33 100/70/33 101/76/33 +f 98/77/34 103/78/34 102/76/34 99/70/34 +f 101/71/5 100/70/5 99/69/5 102/72/5 +f 104/79/6 103/80/6 98/68/6 97/67/6 +f 105/67/34 106/68/34 107/69/34 108/70/34 +f 109/71/33 110/72/33 111/73/33 112/74/33 +f 112/75/31 105/67/31 108/70/31 109/76/31 +f 106/77/32 111/78/32 110/76/32 107/70/32 +f 109/71/5 108/70/5 107/69/5 110/72/5 +f 112/79/6 111/80/6 106/68/6 105/67/6 +f 113/81/1 114/82/1 115/83/1 116/84/1 +f 117/85/2 118/86/2 119/87/2 120/88/2 +f 120/89/3 113/81/3 116/84/3 117/90/3 +f 114/85/4 119/91/4 118/90/4 115/84/4 +f 117/85/5 116/84/5 115/83/5 118/86/5 +f 120/92/6 119/93/6 114/82/6 113/81/6 +f 121/81/1 122/82/1 123/83/1 124/84/1 +f 125/85/2 126/86/2 127/87/2 128/88/2 +f 128/89/3 121/81/3 124/84/3 125/90/3 +f 122/85/4 127/91/4 126/90/4 123/84/4 +f 125/85/5 124/84/5 123/83/5 126/86/5 +f 128/92/6 127/93/6 122/82/6 121/81/6 +f 129/81/1 130/82/1 131/83/1 132/84/1 +f 133/85/2 134/86/2 135/87/2 136/88/2 +f 136/89/3 129/81/3 132/84/3 133/90/3 +f 130/85/4 135/91/4 134/90/4 131/84/4 +f 133/85/5 132/84/5 131/83/5 134/86/5 +f 136/92/6 135/93/6 130/82/6 129/81/6 +f 137/81/1 138/82/1 139/83/1 140/84/1 +f 141/85/2 142/86/2 143/87/2 144/88/2 +f 144/89/3 137/81/3 140/84/3 141/90/3 +f 138/85/4 143/91/4 142/90/4 139/84/4 +f 141/85/5 140/84/5 139/83/5 142/86/5 +f 144/92/6 143/93/6 138/82/6 137/81/6 +f 145/94/1 146/95/1 147/96/1 148/97/1 +f 149/98/2 150/99/2 151/100/2 152/101/2 +f 152/102/3 145/94/3 148/97/3 149/103/3 +f 146/104/4 151/105/4 150/103/4 147/97/4 +f 149/98/5 148/97/5 147/96/5 150/99/5 +f 152/106/6 151/107/6 146/95/6 145/94/6 +f 153/94/1 154/95/1 155/96/1 156/97/1 +f 157/98/2 158/99/2 159/100/2 160/101/2 +f 160/102/3 153/94/3 156/97/3 157/103/3 +f 154/104/4 159/105/4 158/103/4 155/97/4 +f 157/98/5 156/97/5 155/96/5 158/99/5 +f 160/106/6 159/107/6 154/95/6 153/94/6 +f 161/108/1 162/109/1 163/110/1 164/111/1 +f 165/112/2 166/113/2 167/114/2 168/115/2 +f 168/116/3 161/108/3 164/111/3 165/117/3 +f 162/118/4 167/119/4 166/117/4 163/111/4 +f 165/112/5 164/111/5 163/110/5 166/113/5 +f 168/120/6 167/121/6 162/109/6 161/108/6 +f 169/108/1 170/109/1 171/110/1 172/111/1 +f 173/112/2 174/113/2 175/114/2 176/115/2 +f 176/116/3 169/108/3 172/111/3 173/117/3 +f 170/118/4 175/119/4 174/117/4 171/111/4 +f 173/112/5 172/111/5 171/110/5 174/113/5 +f 176/120/6 175/121/6 170/109/6 169/108/6 +f 177/122/1 178/123/1 179/124/1 180/125/1 +f 181/126/2 182/127/2 183/128/2 184/129/2 +f 184/130/3 177/122/3 180/125/3 181/131/3 +f 178/126/4 183/132/4 182/131/4 179/125/4 +f 181/126/5 180/125/5 179/124/5 182/127/5 +f 184/133/6 183/134/6 178/123/6 177/122/6 +f 185/122/1 186/135/1 187/136/1 188/137/1 +f 189/125/2 190/138/2 191/139/2 192/140/2 +f 192/141/3 185/122/3 188/137/3 189/142/3 +f 186/125/4 191/143/4 190/142/4 187/137/4 +f 189/125/5 188/137/5 187/136/5 190/138/5 +f 192/144/6 191/145/6 186/135/6 185/122/6 +f 193/122/1 194/123/1 195/124/1 196/125/1 +f 197/126/2 198/127/2 199/128/2 200/129/2 +f 200/130/3 193/122/3 196/125/3 197/131/3 +f 194/126/4 199/132/4 198/131/4 195/125/4 +f 197/126/5 196/125/5 195/124/5 198/127/5 +f 200/133/6 199/134/6 194/123/6 193/122/6 +f 201/122/1 202/135/1 203/136/1 204/137/1 +f 205/125/2 206/138/2 207/139/2 208/140/2 +f 208/141/3 201/122/3 204/137/3 205/142/3 +f 202/125/4 207/143/4 206/142/4 203/137/4 +f 205/125/5 204/137/5 203/136/5 206/138/5 +f 208/144/6 207/145/6 202/135/6 201/122/6 +f 209/122/1 210/123/1 211/124/1 212/125/1 +f 213/126/2 214/127/2 215/128/2 216/129/2 +f 216/130/3 209/122/3 212/125/3 213/131/3 +f 210/126/4 215/132/4 214/131/4 211/125/4 +f 213/126/5 212/125/5 211/124/5 214/127/5 +f 216/133/6 215/134/6 210/123/6 209/122/6 +f 217/122/1 218/135/1 219/136/1 220/137/1 +f 221/125/2 222/138/2 223/139/2 224/140/2 +f 224/141/3 217/122/3 220/137/3 221/142/3 +f 218/125/4 223/143/4 222/142/4 219/137/4 +f 221/125/5 220/137/5 219/136/5 222/138/5 +f 224/144/6 223/145/6 218/135/6 217/122/6 +f 225/122/1 226/123/1 227/124/1 228/125/1 +f 229/126/2 230/127/2 231/128/2 232/129/2 +f 232/130/3 225/122/3 228/125/3 229/131/3 +f 226/126/4 231/132/4 230/131/4 227/125/4 +f 229/126/5 228/125/5 227/124/5 230/127/5 +f 232/133/6 231/134/6 226/123/6 225/122/6 +f 233/122/1 234/135/1 235/136/1 236/137/1 +f 237/125/2 238/138/2 239/139/2 240/140/2 +f 240/141/3 233/122/3 236/137/3 237/142/3 +f 234/125/4 239/143/4 238/142/4 235/137/4 +f 237/125/5 236/137/5 235/136/5 238/138/5 +f 240/144/6 239/145/6 234/135/6 233/122/6 +f 241/14/7 242/15/7 243/16/7 244/17/7 +f 245/18/8 246/19/8 247/20/8 248/21/8 +f 248/22/9 241/14/9 244/17/9 245/23/9 +f 242/18/10 247/24/10 246/23/10 243/17/10 +f 245/18/11 244/17/11 243/16/11 246/19/11 +f 248/25/12 247/26/12 242/15/12 241/14/12 +f 249/14/13 250/15/13 251/16/13 252/17/13 +f 253/18/14 254/19/14 255/20/14 256/21/14 +f 256/22/15 249/14/15 252/17/15 253/23/15 +f 250/18/16 255/24/16 254/23/16 251/17/16 +f 253/18/17 252/17/17 251/16/17 254/19/17 +f 256/25/18 255/26/18 250/15/18 249/14/18 +f 257/14/13 258/15/13 259/16/13 260/17/13 +f 261/18/14 262/19/14 263/20/14 264/21/14 +f 264/22/19 257/14/19 260/17/19 261/23/19 +f 258/18/20 263/24/20 262/23/20 259/17/20 +f 261/18/21 260/17/21 259/16/21 262/19/21 +f 264/25/22 263/26/22 258/15/22 257/14/22 +f 265/14/7 266/15/7 267/16/7 268/17/7 +f 269/18/8 270/19/8 271/20/8 272/21/8 +f 272/22/23 265/14/23 268/17/23 269/23/23 +f 266/18/24 271/24/24 270/23/24 267/17/24 +f 269/18/25 268/17/25 267/16/25 270/19/25 +f 272/25/26 271/26/26 266/15/26 265/14/26 +f 273/40/1 274/41/1 275/42/1 276/43/1 +f 277/44/2 278/45/2 279/46/2 280/47/2 +f 280/48/3 273/40/3 276/43/3 277/49/3 +f 274/44/4 279/50/4 278/49/4 275/43/4 +f 277/44/5 276/43/5 275/42/5 278/45/5 +f 280/51/6 279/52/6 274/41/6 273/40/6 +f 281/53/1 282/54/1 283/55/1 284/56/1 +f 285/57/2 286/58/2 287/59/2 288/60/2 +f 288/61/27 281/53/27 284/56/27 285/62/27 +f 282/63/28 287/64/28 286/62/28 283/56/28 +f 285/57/29 284/56/29 283/55/29 286/58/29 +f 288/65/30 287/66/30 282/54/30 281/53/30 +f 289/53/1 290/54/1 291/55/1 292/56/1 +f 293/57/2 294/58/2 295/59/2 296/60/2 +f 296/61/30 289/53/30 292/56/30 293/62/30 +f 290/63/29 295/64/29 294/62/29 291/56/29 +f 293/57/27 292/56/27 291/55/27 294/58/27 +f 296/65/28 295/66/28 290/54/28 289/53/28 +f 297/67/31 298/68/31 299/69/31 300/70/31 +f 301/71/32 302/72/32 303/73/32 304/74/32 +f 304/75/33 297/67/33 300/70/33 301/76/33 +f 298/77/34 303/78/34 302/76/34 299/70/34 +f 301/71/5 300/70/5 299/69/5 302/72/5 +f 304/79/6 303/80/6 298/68/6 297/67/6 +f 305/67/34 306/68/34 307/69/34 308/70/34 +f 309/71/33 310/72/33 311/73/33 312/74/33 +f 312/75/31 305/67/31 308/70/31 309/76/31 +f 306/77/32 311/78/32 310/76/32 307/70/32 +f 309/71/5 308/70/5 307/69/5 310/72/5 +f 312/79/6 311/80/6 306/68/6 305/67/6 +f 313/81/1 314/82/1 315/83/1 316/84/1 +f 317/85/2 318/86/2 319/87/2 320/88/2 +f 320/89/3 313/81/3 316/84/3 317/90/3 +f 314/85/4 319/91/4 318/90/4 315/84/4 +f 317/85/5 316/84/5 315/83/5 318/86/5 +f 320/92/6 319/93/6 314/82/6 313/81/6 +f 321/81/1 322/82/1 323/83/1 324/84/1 +f 325/85/2 326/86/2 327/87/2 328/88/2 +f 328/89/3 321/81/3 324/84/3 325/90/3 +f 322/85/4 327/91/4 326/90/4 323/84/4 +f 325/85/5 324/84/5 323/83/5 326/86/5 +f 328/92/6 327/93/6 322/82/6 321/81/6 +f 329/81/1 330/82/1 331/83/1 332/84/1 +f 333/85/2 334/86/2 335/87/2 336/88/2 +f 336/89/3 329/81/3 332/84/3 333/90/3 +f 330/85/4 335/91/4 334/90/4 331/84/4 +f 333/85/5 332/84/5 331/83/5 334/86/5 +f 336/92/6 335/93/6 330/82/6 329/81/6 +f 337/81/1 338/82/1 339/83/1 340/84/1 +f 341/85/2 342/86/2 343/87/2 344/88/2 +f 344/89/3 337/81/3 340/84/3 341/90/3 +f 338/85/4 343/91/4 342/90/4 339/84/4 +f 341/85/5 340/84/5 339/83/5 342/86/5 +f 344/92/6 343/93/6 338/82/6 337/81/6 +f 345/53/1 346/54/1 347/55/1 348/56/1 +f 349/57/2 350/58/2 351/59/2 352/60/2 +f 352/61/27 345/53/27 348/56/27 349/62/27 +f 346/63/28 351/64/28 350/62/28 347/56/28 +f 349/57/29 348/56/29 347/55/29 350/58/29 +f 352/65/30 351/66/30 346/54/30 345/53/30 +f 353/53/1 354/54/1 355/55/1 356/56/1 +f 357/57/2 358/58/2 359/59/2 360/60/2 +f 360/61/30 353/53/30 356/56/30 357/62/30 +f 354/63/29 359/64/29 358/62/29 355/56/29 +f 357/57/27 356/56/27 355/55/27 358/58/27 +f 360/65/28 359/66/28 354/54/28 353/53/28 +f 361/67/31 362/68/31 363/69/31 364/70/31 +f 365/71/32 366/72/32 367/73/32 368/74/32 +f 368/75/33 361/67/33 364/70/33 365/76/33 +f 362/77/34 367/78/34 366/76/34 363/70/34 +f 365/71/5 364/70/5 363/69/5 366/72/5 +f 368/79/6 367/80/6 362/68/6 361/67/6 +f 369/67/34 370/68/34 371/69/34 372/70/34 +f 373/71/33 374/72/33 375/73/33 376/74/33 +f 376/75/31 369/67/31 372/70/31 373/76/31 +f 370/77/32 375/78/32 374/76/32 371/70/32 +f 373/71/5 372/70/5 371/69/5 374/72/5 +f 376/79/6 375/80/6 370/68/6 369/67/6 +f 377/122/1 378/135/1 379/136/1 380/137/1 +f 381/125/2 382/138/2 383/139/2 384/140/2 +f 384/141/3 377/122/3 380/137/3 381/142/3 +f 378/125/4 383/143/4 382/142/4 379/137/4 +f 381/125/5 380/137/5 379/136/5 382/138/5 +f 384/144/6 383/145/6 378/135/6 377/122/6 +f 385/122/1 386/135/1 387/136/1 388/137/1 +f 389/125/2 390/138/2 391/139/2 392/140/2 +f 392/141/3 385/122/3 388/137/3 389/142/3 +f 386/125/4 391/143/4 390/142/4 387/137/4 +f 389/125/5 388/137/5 387/136/5 390/138/5 +f 392/144/6 391/145/6 386/135/6 385/122/6 +f 393/122/1 394/135/1 395/136/1 396/137/1 +f 397/125/2 398/138/2 399/139/2 400/140/2 +f 400/141/3 393/122/3 396/137/3 397/142/3 +f 394/125/4 399/143/4 398/142/4 395/137/4 +f 397/125/5 396/137/5 395/136/5 398/138/5 +f 400/144/6 399/145/6 394/135/6 393/122/6 +f 401/122/1 402/135/1 403/136/1 404/137/1 +f 405/125/2 406/138/2 407/139/2 408/140/2 +f 408/141/3 401/122/3 404/137/3 405/142/3 +f 402/125/4 407/143/4 406/142/4 403/137/4 +f 405/125/5 404/137/5 403/136/5 406/138/5 +f 408/144/6 407/145/6 402/135/6 401/122/6 diff --git a/src/main/resources/assets/bloodmagic/models/block/blockincensealtar.mtl b/src/main/resources/assets/bloodmagic/models/block/blockincensealtar.mtl new file mode 100644 index 00000000..754b7d64 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockincensealtar.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +#Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +#Ks 0.8 0.8 0.8 +d 1 +#illum 2 +map_Kd bloodmagic:models/incensealtar diff --git a/src/main/resources/assets/bloodmagic/models/block/blockincensealtar.obj b/src/main/resources/assets/bloodmagic/models/block/blockincensealtar.obj new file mode 100644 index 00000000..3c6790d1 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockincensealtar.obj @@ -0,0 +1,650 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib blockincensealtar.mtl +o BlockIncenseAltar_(1) +v 0.659375 0.159375 0.871875 +v 0.659375 -0.000000 0.871875 +v 0.871875 -0.000000 0.871875 +v 0.871875 0.159375 0.871875 +v 0.871875 0.159375 0.659375 +v 0.871875 -0.000000 0.659375 +v 0.659375 -0.000000 0.659375 +v 0.659375 0.159375 0.659375 +v 0.659375 0.159375 0.340625 +v 0.659375 0.000000 0.340625 +v 0.871875 0.000000 0.340625 +v 0.871875 0.159375 0.340625 +v 0.871875 0.159375 0.128125 +v 0.871875 0.000000 0.128125 +v 0.659375 0.000000 0.128125 +v 0.659375 0.159375 0.128125 +v 0.128125 0.159375 0.871875 +v 0.128125 -0.000000 0.871875 +v 0.340625 -0.000000 0.871875 +v 0.340625 0.159375 0.871875 +v 0.340625 0.159375 0.659375 +v 0.340625 -0.000000 0.659375 +v 0.128125 -0.000000 0.659375 +v 0.128125 0.159375 0.659375 +v 0.128125 0.159375 0.340625 +v 0.128125 0.000000 0.340625 +v 0.340625 0.000000 0.340625 +v 0.340625 0.159375 0.340625 +v 0.340625 0.159375 0.128125 +v 0.340625 0.000000 0.128125 +v 0.128125 0.000000 0.128125 +v 0.128125 0.159375 0.128125 +v 0.128125 0.212500 0.871875 +v 0.128125 0.159375 0.871875 +v 0.871875 0.159375 0.871875 +v 0.871875 0.212500 0.871875 +v 0.871875 0.212500 0.128125 +v 0.871875 0.159375 0.128125 +v 0.128125 0.159375 0.128125 +v 0.128125 0.212500 0.128125 +v 0.314062 0.984629 0.371221 +v 0.314062 0.195516 0.260344 +v 0.685938 0.195516 0.260344 +v 0.685938 0.984629 0.371221 +v 0.685938 0.992021 0.318614 +v 0.685938 0.202908 0.207737 +v 0.314062 0.202908 0.207737 +v 0.314062 0.992021 0.318614 +v 0.628779 0.984629 0.685938 +v 0.739656 0.195516 0.685938 +v 0.792263 0.202908 0.685938 +v 0.681387 0.992021 0.685938 +v 0.681387 0.992021 0.314063 +v 0.792263 0.202908 0.314063 +v 0.739656 0.195516 0.314063 +v 0.628779 0.984629 0.314063 +v 0.318612 0.992017 0.685938 +v 0.207735 0.202893 0.685938 +v 0.260343 0.195502 0.685938 +v 0.371220 0.984625 0.685938 +v 0.371220 0.984626 0.314063 +v 0.260343 0.195502 0.314063 +v 0.207735 0.202893 0.314063 +v 0.318612 0.992017 0.314063 +v 0.314062 0.992017 0.681388 +v 0.314062 0.202893 0.792265 +v 0.685938 0.202893 0.792265 +v 0.685938 0.992017 0.681388 +v 0.685938 0.984625 0.628780 +v 0.685938 0.195502 0.739657 +v 0.314062 0.195502 0.739657 +v 0.314062 0.984625 0.628780 +v 0.576198 0.952884 0.733023 +v 0.687075 0.171447 0.842819 +v 0.844898 0.193406 0.839734 +v 0.734021 0.974844 0.729938 +v 0.734021 0.952669 0.572113 +v 0.844898 0.171232 0.681909 +v 0.687075 0.149272 0.684995 +v 0.576198 0.930709 0.575199 +v 0.576198 0.930713 0.424802 +v 0.687075 0.149287 0.315005 +v 0.844898 0.171246 0.318091 +v 0.734021 0.952673 0.427888 +v 0.734021 0.974849 0.270065 +v 0.844898 0.193422 0.160268 +v 0.687075 0.171463 0.157182 +v 0.576198 0.952889 0.266979 +v 0.265976 0.952668 0.427887 +v 0.155100 0.171231 0.318088 +v 0.312924 0.149272 0.315003 +v 0.423802 0.930709 0.424801 +v 0.423802 0.952884 0.266979 +v 0.312924 0.171448 0.157181 +v 0.155100 0.193407 0.160266 +v 0.265976 0.974844 0.270064 +v 0.265976 0.974840 0.729939 +v 0.155100 0.193391 0.839737 +v 0.312924 0.171432 0.842822 +v 0.423802 0.952880 0.733024 +v 0.423802 0.930704 0.575199 +v 0.312924 0.149257 0.684997 +v 0.155100 0.171216 0.681912 +v 0.265976 0.952664 0.572113 +v 0.181250 1.009375 0.818750 +v 0.181250 0.956250 0.818750 +v 0.340625 0.956250 0.818750 +v 0.340625 1.009375 0.818750 +v 0.340625 1.009375 0.181250 +v 0.340625 0.956250 0.181250 +v 0.181250 0.956250 0.181250 +v 0.181250 1.009375 0.181250 +v 0.659375 1.009375 0.818750 +v 0.659375 0.956250 0.818750 +v 0.659375 0.956250 0.659375 +v 0.659375 1.009375 0.659375 +v 0.340625 1.009375 0.659375 +v 0.340625 0.956250 0.659375 +v 0.340625 0.956250 0.818750 +v 0.340625 1.009375 0.818750 +v 0.659375 1.009375 0.818750 +v 0.659375 0.956250 0.818750 +v 0.818750 0.956250 0.818750 +v 0.818750 1.009375 0.818750 +v 0.818750 1.009375 0.181250 +v 0.818750 0.956250 0.181250 +v 0.659375 0.956250 0.181250 +v 0.659375 1.009375 0.181250 +v 0.659375 1.009375 0.340625 +v 0.659375 0.956250 0.340625 +v 0.659375 0.956250 0.181250 +v 0.659375 1.009375 0.181250 +v 0.340625 1.009375 0.181250 +v 0.340625 0.956250 0.181250 +v 0.340625 0.956250 0.340625 +v 0.340625 1.009375 0.340625 +v 0.739062 1.062500 0.845313 +v 0.739062 1.009375 0.845313 +v 0.845312 1.009375 0.845313 +v 0.845312 1.062500 0.845313 +v 0.845312 1.062500 0.739063 +v 0.845312 1.009375 0.739063 +v 0.739062 1.009375 0.739063 +v 0.739062 1.062500 0.739063 +v 0.792188 1.115625 0.845313 +v 0.792188 1.062500 0.845313 +v 0.845312 1.062500 0.845313 +v 0.845312 1.115625 0.845313 +v 0.845312 1.115625 0.792188 +v 0.845312 1.062500 0.792188 +v 0.792188 1.062500 0.792188 +v 0.792188 1.115625 0.792188 +v 0.154687 1.062500 0.845313 +v 0.154687 1.009375 0.845313 +v 0.260938 1.009375 0.845313 +v 0.260938 1.062500 0.845313 +v 0.260938 1.062500 0.739063 +v 0.260938 1.009375 0.739063 +v 0.154687 1.009375 0.739063 +v 0.154687 1.062500 0.739063 +v 0.154687 1.115625 0.845313 +v 0.154687 1.062500 0.845313 +v 0.207812 1.062500 0.845313 +v 0.207812 1.115625 0.845313 +v 0.207812 1.115625 0.792188 +v 0.207812 1.062500 0.792188 +v 0.154687 1.062500 0.792188 +v 0.154687 1.115625 0.792188 +v 0.739062 1.062500 0.260938 +v 0.739062 1.009375 0.260938 +v 0.845312 1.009375 0.260938 +v 0.845312 1.062500 0.260938 +v 0.845312 1.062500 0.154688 +v 0.845312 1.009375 0.154688 +v 0.739062 1.009375 0.154688 +v 0.739062 1.062500 0.154688 +v 0.792188 1.115625 0.207813 +v 0.792188 1.062500 0.207813 +v 0.845312 1.062500 0.207813 +v 0.845312 1.115625 0.207813 +v 0.845312 1.115625 0.154688 +v 0.845312 1.062500 0.154688 +v 0.792188 1.062500 0.154688 +v 0.792188 1.115625 0.154688 +v 0.154687 1.062500 0.260938 +v 0.154687 1.009375 0.260938 +v 0.260938 1.009375 0.260938 +v 0.260938 1.062500 0.260938 +v 0.260938 1.062500 0.154688 +v 0.260938 1.009375 0.154688 +v 0.154687 1.009375 0.154688 +v 0.154687 1.062500 0.154688 +v 0.154687 1.115625 0.207813 +v 0.154687 1.062500 0.207813 +v 0.207812 1.062500 0.207813 +v 0.207812 1.115625 0.207813 +v 0.207812 1.115625 0.154688 +v 0.207812 1.062500 0.154688 +v 0.154687 1.062500 0.154688 +v 0.154687 1.115625 0.154688 +v 0.367188 0.956250 0.632813 +v 0.367188 0.903125 0.632813 +v 0.632812 0.903125 0.632813 +v 0.632812 0.956250 0.632813 +v 0.632812 0.956250 0.367188 +v 0.632812 0.903125 0.367188 +v 0.367188 0.903125 0.367188 +v 0.367188 0.956250 0.367188 +v 0.314062 0.984629 0.371221 +v 0.314062 0.195516 0.260344 +v 0.685938 0.195516 0.260344 +v 0.685938 0.984629 0.371221 +v 0.685938 0.992021 0.318614 +v 0.685938 0.202908 0.207737 +v 0.314062 0.202908 0.207737 +v 0.314062 0.992021 0.318614 +v 0.628779 0.984629 0.685938 +v 0.739656 0.195516 0.685938 +v 0.792263 0.202908 0.685938 +v 0.681387 0.992021 0.685938 +v 0.681387 0.992021 0.314063 +v 0.792263 0.202908 0.314063 +v 0.739656 0.195516 0.314063 +v 0.628779 0.984629 0.314063 +v 0.318612 0.992017 0.685938 +v 0.207735 0.202893 0.685938 +v 0.260343 0.195502 0.685938 +v 0.371220 0.984625 0.685938 +v 0.371220 0.984626 0.314063 +v 0.260343 0.195502 0.314063 +v 0.207735 0.202893 0.314063 +v 0.318612 0.992017 0.314063 +v 0.314062 0.992017 0.681388 +v 0.314062 0.202893 0.792265 +v 0.685938 0.202893 0.792265 +v 0.685938 0.992017 0.681388 +v 0.685938 0.984625 0.628780 +v 0.685938 0.195502 0.739657 +v 0.314062 0.195502 0.739657 +v 0.314062 0.984625 0.628780 +v 0.792188 1.115625 0.845313 +v 0.792188 1.062500 0.845313 +v 0.845312 1.062500 0.845313 +v 0.845312 1.115625 0.845313 +v 0.845312 1.115625 0.792188 +v 0.845312 1.062500 0.792188 +v 0.792188 1.062500 0.792188 +v 0.792188 1.115625 0.792188 +v 0.154687 1.115625 0.845313 +v 0.154687 1.062500 0.845313 +v 0.207812 1.062500 0.845313 +v 0.207812 1.115625 0.845313 +v 0.207812 1.115625 0.792188 +v 0.207812 1.062500 0.792188 +v 0.154687 1.062500 0.792188 +v 0.154687 1.115625 0.792188 +v 0.792188 1.115625 0.207813 +v 0.792188 1.062500 0.207813 +v 0.845312 1.062500 0.207813 +v 0.845312 1.115625 0.207813 +v 0.845312 1.115625 0.154688 +v 0.845312 1.062500 0.154688 +v 0.792188 1.062500 0.154688 +v 0.792188 1.115625 0.154688 +v 0.154687 1.115625 0.207813 +v 0.154687 1.062500 0.207813 +v 0.207812 1.062500 0.207813 +v 0.207812 1.115625 0.207813 +v 0.207812 1.115625 0.154688 +v 0.207812 1.062500 0.154688 +v 0.154687 1.062500 0.154688 +v 0.154687 1.115625 0.154688 +vt 0.062500 0.937500 +vt 0.062500 0.890625 +vt 0.125000 0.890625 +vt 0.125000 0.937500 +vt 0.187500 0.937500 +vt 0.187500 0.890625 +vt 0.250000 0.890625 +vt 0.250000 0.937500 +vt 0.062500 1.000000 +vt 0.125000 1.000000 +vt 0.187500 1.000000 +vt 0.000000 0.937500 +vt 0.000000 0.890625 +vt 0.265625 0.781250 +vt 0.265625 0.765625 +vt 0.484375 0.765625 +vt 0.484375 0.781250 +vt 0.703125 0.781250 +vt 0.703125 0.765625 +vt 0.921875 0.765625 +vt 0.921875 0.781250 +vt 0.265625 1.000000 +vt 0.484375 1.000000 +vt 0.703125 1.000000 +vt 0.046875 0.781250 +vt 0.046875 0.765625 +vt 0.015625 0.734375 +vt 0.015625 0.500000 +vt 0.125000 0.500000 +vt 0.125000 0.734375 +vt 0.140625 0.734375 +vt 0.140625 0.500000 +vt 0.250000 0.500000 +vt 0.250000 0.734375 +vt 0.015625 0.750000 +vt 0.125000 0.750000 +vt 0.234375 0.734375 +vt 0.234375 0.750000 +vt 0.000000 0.734375 +vt 0.000000 0.500000 +vt 0.375000 0.640625 +vt 0.375000 0.406250 +vt 0.390625 0.406250 +vt 0.390625 0.640625 +vt 0.500000 0.640625 +vt 0.500000 0.406250 +vt 0.515625 0.406250 +vt 0.515625 0.640625 +vt 0.375000 0.750000 +vt 0.390625 0.750000 +vt 0.406250 0.640625 +vt 0.406250 0.750000 +vt 0.265625 0.640625 +vt 0.265625 0.406250 +vt 0.046875 0.437500 +vt 0.046875 0.203125 +vt 0.093750 0.203125 +vt 0.093750 0.437500 +vt 0.140625 0.437500 +vt 0.140625 0.203125 +vt 0.187500 0.203125 +vt 0.187500 0.437500 +vt 0.046875 0.484375 +vt 0.093750 0.484375 +vt 0.140625 0.484375 +vt 0.000000 0.437500 +vt 0.000000 0.203125 +vt 0.203125 0.015625 +vt 0.203125 0.000000 +vt 0.250000 0.000000 +vt 0.250000 0.015625 +vt 0.437500 0.015625 +vt 0.437500 0.000000 +vt 0.484375 0.000000 +vt 0.484375 0.015625 +vt 0.203125 0.203125 +vt 0.250000 0.203125 +vt 0.296875 0.015625 +vt 0.296875 0.203125 +vt 0.015625 0.015625 +vt 0.015625 0.000000 +vt 0.593750 0.015625 +vt 0.593750 0.000000 +vt 0.640625 0.000000 +vt 0.640625 0.015625 +vt 0.734375 0.015625 +vt 0.734375 0.000000 +vt 0.781250 0.000000 +vt 0.781250 0.015625 +vt 0.593750 0.109375 +vt 0.640625 0.109375 +vt 0.687500 0.015625 +vt 0.687500 0.109375 +vt 0.500000 0.015625 +vt 0.500000 0.000000 +vt 0.234375 0.234375 +vt 0.234375 0.218750 +vt 0.265625 0.218750 +vt 0.265625 0.234375 +vt 0.296875 0.234375 +vt 0.296875 0.218750 +vt 0.328125 0.218750 +vt 0.328125 0.234375 +vt 0.234375 0.265625 +vt 0.265625 0.265625 +vt 0.296875 0.265625 +vt 0.203125 0.234375 +vt 0.203125 0.218750 +vt 0.218750 0.250000 +vt 0.218750 0.234375 +vt 0.234375 0.250000 +vt 0.250000 0.250000 +vt 0.250000 0.234375 +vt 0.265625 0.250000 +vt 0.218750 0.265625 +vt 0.250000 0.265625 +vt 0.203125 0.250000 +vt 0.281250 0.312500 +vt 0.281250 0.296875 +vt 0.359375 0.296875 +vt 0.359375 0.312500 +vt 0.437500 0.312500 +vt 0.437500 0.296875 +vt 0.515625 0.296875 +vt 0.515625 0.312500 +vt 0.281250 0.390625 +vt 0.359375 0.390625 +vt 0.437500 0.390625 +vt 0.203125 0.312500 +vt 0.203125 0.296875 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -0.139100 0.990300 +vn 0.000000 0.139100 -0.990300 +vn 0.000000 0.990300 0.139200 +vn 0.000000 -0.990300 -0.139100 +vn -0.139200 0.990300 0.000000 +vn 0.139100 -0.990300 -0.000000 +vn 0.990300 0.139100 0.000000 +vn -0.990300 -0.139100 -0.000000 +vn 0.139100 0.990300 0.000000 +vn -0.139100 -0.990300 -0.000000 +vn 0.990300 -0.139100 -0.000000 +vn -0.990300 0.139100 0.000000 +vn 0.000000 0.139100 0.990300 +vn 0.000000 -0.139100 -0.990300 +vn 0.000000 0.990300 -0.139200 +vn 0.000000 -0.990300 0.139100 +vn -0.139100 0.980600 -0.137800 +vn 0.139100 -0.980600 0.137800 +vn 0.990300 0.137800 -0.019400 +vn -0.990300 -0.137800 0.019400 +vn -0.139100 0.980600 0.137800 +vn 0.139100 -0.980600 -0.137800 +vn 0.990300 0.137800 0.019400 +vn -0.990300 -0.137800 -0.019400 +vn 0.139100 0.980600 0.137800 +vn -0.139100 -0.980600 -0.137800 +vn 0.990300 -0.137800 -0.019400 +vn -0.990300 0.137800 0.019400 +vn 0.139100 0.980600 -0.137800 +vn -0.139100 -0.980600 0.137800 +vn 0.990300 -0.137800 0.019400 +vn -0.990300 0.137800 -0.019400 +usemtl None +#s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 8/9/3 1/1/3 4/4/3 5/10/3 +f 2/5/4 7/11/4 6/10/4 3/4/4 +f 5/5/5 4/4/5 3/3/5 6/6/5 +f 8/12/6 7/13/6 2/2/6 1/1/6 +f 9/1/1 10/2/1 11/3/1 12/4/1 +f 13/5/2 14/6/2 15/7/2 16/8/2 +f 16/9/3 9/1/3 12/4/3 13/10/3 +f 10/5/4 15/11/4 14/10/4 11/4/4 +f 13/5/5 12/4/5 11/3/5 14/6/5 +f 16/12/6 15/13/6 10/2/6 9/1/6 +f 17/1/1 18/2/1 19/3/1 20/4/1 +f 21/5/2 22/6/2 23/7/2 24/8/2 +f 24/9/3 17/1/3 20/4/3 21/10/3 +f 18/5/4 23/11/4 22/10/4 19/4/4 +f 21/5/5 20/4/5 19/3/5 22/6/5 +f 24/12/6 23/13/6 18/2/6 17/1/6 +f 25/1/1 26/2/1 27/3/1 28/4/1 +f 29/5/2 30/6/2 31/7/2 32/8/2 +f 32/9/3 25/1/3 28/4/3 29/10/3 +f 26/5/4 31/11/4 30/10/4 27/4/4 +f 29/5/5 28/4/5 27/3/5 30/6/5 +f 32/12/6 31/13/6 26/2/6 25/1/6 +f 33/14/1 34/15/1 35/16/1 36/17/1 +f 37/18/2 38/19/2 39/20/2 40/21/2 +f 40/22/3 33/14/3 36/17/3 37/23/3 +f 34/18/4 39/24/4 38/23/4 35/17/4 +f 37/18/5 36/17/5 35/16/5 38/19/5 +f 40/25/6 39/26/6 34/15/6 33/14/6 +f 41/27/7 42/28/7 43/29/7 44/30/7 +f 45/31/8 46/32/8 47/33/8 48/34/8 +f 48/35/9 41/27/9 44/30/9 45/36/9 +f 42/37/10 47/38/10 46/36/10 43/30/10 +f 45/31/5 44/30/5 43/29/5 46/32/5 +f 48/39/6 47/40/6 42/28/6 41/27/6 +f 49/41/1 50/42/1 51/43/1 52/44/1 +f 53/45/2 54/46/2 55/47/2 56/48/2 +f 56/49/11 49/41/11 52/44/11 53/50/11 +f 50/51/12 55/52/12 54/50/12 51/44/12 +f 53/45/13 52/44/13 51/43/13 54/46/13 +f 56/53/14 55/54/14 50/42/14 49/41/14 +f 57/41/1 58/42/1 59/43/1 60/44/1 +f 61/45/2 62/46/2 63/47/2 64/48/2 +f 64/49/15 57/41/15 60/44/15 61/50/15 +f 58/51/16 63/52/16 62/50/16 59/44/16 +f 61/45/17 60/44/17 59/43/17 62/46/17 +f 64/53/18 63/54/18 58/42/18 57/41/18 +f 65/27/19 66/28/19 67/29/19 68/30/19 +f 69/31/20 70/32/20 71/33/20 72/34/20 +f 72/35/21 65/27/21 68/30/21 69/36/21 +f 66/37/22 71/38/22 70/36/22 67/30/22 +f 69/31/5 68/30/5 67/29/5 70/32/5 +f 72/39/6 71/40/6 66/28/6 65/27/6 +f 73/55/19 74/56/19 75/57/19 76/58/19 +f 77/59/20 78/60/20 79/61/20 80/62/20 +f 80/63/23 73/55/23 76/58/23 77/64/23 +f 74/59/24 79/65/24 78/64/24 75/58/24 +f 77/59/25 76/58/25 75/57/25 78/60/25 +f 80/66/26 79/67/26 74/56/26 73/55/26 +f 81/55/7 82/56/7 83/57/7 84/58/7 +f 85/59/8 86/60/8 87/61/8 88/62/8 +f 88/63/27 81/55/27 84/58/27 85/64/27 +f 82/59/28 87/65/28 86/64/28 83/58/28 +f 85/59/29 84/58/29 83/57/29 86/60/29 +f 88/66/30 87/67/30 82/56/30 81/55/30 +f 89/55/7 90/56/7 91/57/7 92/58/7 +f 93/59/8 94/60/8 95/61/8 96/62/8 +f 96/63/31 89/55/31 92/58/31 93/64/31 +f 90/59/32 95/65/32 94/64/32 91/58/32 +f 93/59/33 92/58/33 91/57/33 94/60/33 +f 96/66/34 95/67/34 90/56/34 89/55/34 +f 97/55/19 98/56/19 99/57/19 100/58/19 +f 101/59/20 102/60/20 103/61/20 104/62/20 +f 104/63/35 97/55/35 100/58/35 101/64/35 +f 98/59/36 103/65/36 102/64/36 99/58/36 +f 101/59/37 100/58/37 99/57/37 102/60/37 +f 104/66/38 103/67/38 98/56/38 97/55/38 +f 105/68/1 106/69/1 107/70/1 108/71/1 +f 109/72/2 110/73/2 111/74/2 112/75/2 +f 112/76/3 105/68/3 108/71/3 109/77/3 +f 106/78/4 111/79/4 110/77/4 107/71/4 +f 109/72/5 108/71/5 107/70/5 110/73/5 +f 112/80/6 111/81/6 106/69/6 105/68/6 +f 113/82/5 114/83/5 115/84/5 116/85/5 +f 117/86/6 118/87/6 119/88/6 120/89/6 +f 120/90/3 113/82/3 116/85/3 117/91/3 +f 114/92/4 119/93/4 118/91/4 115/85/4 +f 117/86/2 116/85/2 115/84/2 118/87/2 +f 120/94/1 119/95/1 114/83/1 113/82/1 +f 121/68/1 122/69/1 123/70/1 124/71/1 +f 125/72/2 126/73/2 127/74/2 128/75/2 +f 128/76/3 121/68/3 124/71/3 125/77/3 +f 122/78/4 127/79/4 126/77/4 123/71/4 +f 125/72/5 124/71/5 123/70/5 126/73/5 +f 128/80/6 127/81/6 122/69/6 121/68/6 +f 129/82/5 130/83/5 131/84/5 132/85/5 +f 133/86/6 134/87/6 135/88/6 136/89/6 +f 136/90/3 129/82/3 132/85/3 133/91/3 +f 130/92/4 135/93/4 134/91/4 131/85/4 +f 133/86/2 132/85/2 131/84/2 134/87/2 +f 136/94/1 135/95/1 130/83/1 129/82/1 +f 137/96/1 138/97/1 139/98/1 140/99/1 +f 141/100/2 142/101/2 143/102/2 144/103/2 +f 144/104/3 137/96/3 140/99/3 141/105/3 +f 138/100/4 143/106/4 142/105/4 139/99/4 +f 141/100/5 140/99/5 139/98/5 142/101/5 +f 144/107/6 143/108/6 138/97/6 137/96/6 +f 145/109/1 146/110/1 147/96/1 148/111/1 +f 149/112/2 150/113/2 151/99/2 152/114/2 +f 152/115/3 145/109/3 148/111/3 149/104/3 +f 146/112/4 151/116/4 150/104/4 147/111/4 +f 149/112/5 148/111/5 147/96/5 150/113/5 +f 152/117/6 151/107/6 146/110/6 145/109/6 +f 153/96/1 154/97/1 155/98/1 156/99/1 +f 157/100/2 158/101/2 159/102/2 160/103/2 +f 160/104/3 153/96/3 156/99/3 157/105/3 +f 154/100/4 159/106/4 158/105/4 155/99/4 +f 157/100/5 156/99/5 155/98/5 158/101/5 +f 160/107/6 159/108/6 154/97/6 153/96/6 +f 161/109/1 162/110/1 163/96/1 164/111/1 +f 165/112/2 166/113/2 167/99/2 168/114/2 +f 168/115/3 161/109/3 164/111/3 165/104/3 +f 162/112/4 167/116/4 166/104/4 163/111/4 +f 165/112/5 164/111/5 163/96/5 166/113/5 +f 168/117/6 167/107/6 162/110/6 161/109/6 +f 169/96/1 170/97/1 171/98/1 172/99/1 +f 173/100/2 174/101/2 175/102/2 176/103/2 +f 176/104/3 169/96/3 172/99/3 173/105/3 +f 170/100/4 175/106/4 174/105/4 171/99/4 +f 173/100/5 172/99/5 171/98/5 174/101/5 +f 176/107/6 175/108/6 170/97/6 169/96/6 +f 177/109/1 178/110/1 179/96/1 180/111/1 +f 181/112/2 182/113/2 183/99/2 184/114/2 +f 184/115/3 177/109/3 180/111/3 181/104/3 +f 178/112/4 183/116/4 182/104/4 179/111/4 +f 181/112/5 180/111/5 179/96/5 182/113/5 +f 184/117/6 183/107/6 178/110/6 177/109/6 +f 185/96/1 186/97/1 187/98/1 188/99/1 +f 189/100/2 190/101/2 191/102/2 192/103/2 +f 192/104/3 185/96/3 188/99/3 189/105/3 +f 186/100/4 191/106/4 190/105/4 187/99/4 +f 189/100/5 188/99/5 187/98/5 190/101/5 +f 192/107/6 191/108/6 186/97/6 185/96/6 +f 193/109/1 194/110/1 195/96/1 196/111/1 +f 197/112/2 198/113/2 199/99/2 200/114/2 +f 200/115/3 193/109/3 196/111/3 197/104/3 +f 194/112/4 199/116/4 198/104/4 195/111/4 +f 197/112/5 196/111/5 195/96/5 198/113/5 +f 200/117/6 199/107/6 194/110/6 193/109/6 +f 201/118/1 202/119/1 203/120/1 204/121/1 +f 205/122/2 206/123/2 207/124/2 208/125/2 +f 208/126/3 201/118/3 204/121/3 205/127/3 +f 202/122/4 207/128/4 206/127/4 203/121/4 +f 205/122/5 204/121/5 203/120/5 206/123/5 +f 208/129/6 207/130/6 202/119/6 201/118/6 +f 209/27/7 210/28/7 211/29/7 212/30/7 +f 213/31/8 214/32/8 215/33/8 216/34/8 +f 216/35/9 209/27/9 212/30/9 213/36/9 +f 210/37/10 215/38/10 214/36/10 211/30/10 +f 213/31/5 212/30/5 211/29/5 214/32/5 +f 216/39/6 215/40/6 210/28/6 209/27/6 +f 217/41/1 218/42/1 219/43/1 220/44/1 +f 221/45/2 222/46/2 223/47/2 224/48/2 +f 224/49/11 217/41/11 220/44/11 221/50/11 +f 218/51/12 223/52/12 222/50/12 219/44/12 +f 221/45/13 220/44/13 219/43/13 222/46/13 +f 224/53/14 223/54/14 218/42/14 217/41/14 +f 225/41/1 226/42/1 227/43/1 228/44/1 +f 229/45/2 230/46/2 231/47/2 232/48/2 +f 232/49/15 225/41/15 228/44/15 229/50/15 +f 226/51/16 231/52/16 230/50/16 227/44/16 +f 229/45/17 228/44/17 227/43/17 230/46/17 +f 232/53/18 231/54/18 226/42/18 225/41/18 +f 233/27/19 234/28/19 235/29/19 236/30/19 +f 237/31/20 238/32/20 239/33/20 240/34/20 +f 240/35/21 233/27/21 236/30/21 237/36/21 +f 234/37/22 239/38/22 238/36/22 235/30/22 +f 237/31/5 236/30/5 235/29/5 238/32/5 +f 240/39/6 239/40/6 234/28/6 233/27/6 +f 241/109/1 242/110/1 243/96/1 244/111/1 +f 245/112/2 246/113/2 247/99/2 248/114/2 +f 248/115/3 241/109/3 244/111/3 245/104/3 +f 242/112/4 247/116/4 246/104/4 243/111/4 +f 245/112/5 244/111/5 243/96/5 246/113/5 +f 248/117/6 247/107/6 242/110/6 241/109/6 +f 249/109/1 250/110/1 251/96/1 252/111/1 +f 253/112/2 254/113/2 255/99/2 256/114/2 +f 256/115/3 249/109/3 252/111/3 253/104/3 +f 250/112/4 255/116/4 254/104/4 251/111/4 +f 253/112/5 252/111/5 251/96/5 254/113/5 +f 256/117/6 255/107/6 250/110/6 249/109/6 +f 257/109/1 258/110/1 259/96/1 260/111/1 +f 261/112/2 262/113/2 263/99/2 264/114/2 +f 264/115/3 257/109/3 260/111/3 261/104/3 +f 258/112/4 263/116/4 262/104/4 259/111/4 +f 261/112/5 260/111/5 259/96/5 262/113/5 +f 264/117/6 263/107/6 258/110/6 257/109/6 +f 265/109/1 266/110/1 267/96/1 268/111/1 +f 269/112/2 270/113/2 271/99/2 272/114/2 +f 272/115/3 265/109/3 268/111/3 269/104/3 +f 266/112/4 271/116/4 270/104/4 267/111/4 +f 269/112/5 268/111/5 267/96/5 270/113/5 +f 272/117/6 271/107/6 266/110/6 265/109/6 diff --git a/src/main/resources/assets/bloodmagic/models/block/blockinputroutingnode.json b/src/main/resources/assets/bloodmagic/models/block/blockinputroutingnode.json new file mode 100644 index 00000000..18ceed9e --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockinputroutingnode.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "bloodmagic:blocks/InputRoutingNode" + } +} + diff --git a/src/main/resources/assets/bloodmagic/models/block/blockmasterroutingnode.json b/src/main/resources/assets/bloodmagic/models/block/blockmasterroutingnode.json new file mode 100644 index 00000000..947efbf5 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockmasterroutingnode.json @@ -0,0 +1,8 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "bloodmagic:blocks/MasterRoutingNode" + } +} + + diff --git a/src/main/resources/assets/bloodmagic/models/block/blockoutputroutingnode.json b/src/main/resources/assets/bloodmagic/models/block/blockoutputroutingnode.json new file mode 100644 index 00000000..96f86dbf --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockoutputroutingnode.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "bloodmagic:blocks/OutputRoutingNode" + } +} + diff --git a/src/main/resources/assets/bloodmagic/models/block/blockphantom.json b/src/main/resources/assets/bloodmagic/models/block/blockphantom.json new file mode 100644 index 00000000..1a2e871a --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockphantom.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "bloodmagic:blocks/PhantomBlock" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/block/blockpillarcapeast.json b/src/main/resources/assets/bloodmagic/models/block/blockpillarcapeast.json new file mode 100644 index 00000000..babad7d1 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockpillarcapeast.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "up": { "uv": [ 16, 0, 0, 16 ], "texture": "#sideBottom", "rotation": 270 }, + "down": { "uv": [ 16, 0, 0, 16 ], "texture": "#sideBottom", "rotation": 270 }, + "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#sideTop", "rotation": 270 }, + "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#sideBottom", "rotation": 270 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#end" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#end" } + } + } + ] +} + diff --git a/src/main/resources/assets/bloodmagic/models/block/blockpillarcapnorth.json b/src/main/resources/assets/bloodmagic/models/block/blockpillarcapnorth.json new file mode 100644 index 00000000..6e32e554 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockpillarcapnorth.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#sideTop" }, + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#sideBottom" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#end" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#end" }, + "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#sideTop", "rotation": 270 }, + "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#sideBottom", "rotation": 270 } + } + } + ] +} + diff --git a/src/main/resources/assets/bloodmagic/models/block/blockpillarcapsouth.json b/src/main/resources/assets/bloodmagic/models/block/blockpillarcapsouth.json new file mode 100644 index 00000000..073431bb --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockpillarcapsouth.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#sideBottom" }, + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#sideTop" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#end" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#end" }, + "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#sideBottom", "rotation": 270 }, + "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#sideTop", "rotation": 270 } + } + } + ] +} + diff --git a/src/main/resources/assets/bloodmagic/models/block/blockpillarcapwest.json b/src/main/resources/assets/bloodmagic/models/block/blockpillarcapwest.json new file mode 100644 index 00000000..32007d6c --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockpillarcapwest.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "up": { "uv": [ 16, 0, 0, 16 ], "texture": "#sideTop", "rotation": 270 }, + "down": { "uv": [ 16, 0, 0, 16 ], "texture": "#sideTop", "rotation": 270 }, + "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#sideBottom", "rotation": 270 }, + "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#sideTop", "rotation": 270 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#end" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#end" } + } + } + ] +} + diff --git a/src/main/resources/assets/bloodmagic/models/block/blockpillarx.json b/src/main/resources/assets/bloodmagic/models/block/blockpillarx.json new file mode 100644 index 00000000..3ad3a948 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockpillarx.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "up": { "uv": [ 16, 0, 0, 16 ], "texture": "#side", "rotation": 270 }, + "down": { "uv": [ 16, 0, 0, 16 ], "texture": "#side", "rotation": 270 }, + "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#side", "rotation": 270 }, + "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#side", "rotation": 270 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#end" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#end" } + } + } + ] +} + diff --git a/src/main/resources/assets/bloodmagic/models/block/blockpillarz.json b/src/main/resources/assets/bloodmagic/models/block/blockpillarz.json new file mode 100644 index 00000000..a240f4d2 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockpillarz.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" }, + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#end" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#end" }, + "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#side", "rotation": 270 }, + "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#side", "rotation": 270 } + } + } + ] +} + diff --git a/src/main/resources/assets/bloodmagic/models/block/blocksoulforge.json b/src/main/resources/assets/bloodmagic/models/block/blocksoulforge.json new file mode 100644 index 00000000..cd179dad --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blocksoulforge.json @@ -0,0 +1,9 @@ +{ + "parent": "bloodmagic:block/sub/BlockSoulForge", + "textures": { + "base": "minecraft:blocks/iron_block", + "base_bottom": "minecraft:blocks/gold_block", + "glass": "minecraft:blocks/glass", + "attachment": "minecraft:blocks/stone" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/block/blockspectral.json b/src/main/resources/assets/bloodmagic/models/block/blockspectral.json new file mode 100644 index 00000000..5f0a77ba --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/blockspectral.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "bloodmagic:blocks/SpectralBlock" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/block/bloodaltar.json b/src/main/resources/assets/bloodmagic/models/block/bloodaltar.json new file mode 100644 index 00000000..8f1f343e --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/bloodaltar.json @@ -0,0 +1,10 @@ +{ + "parent": "block/block", + "loader": "forge:obj", + "flip-v": true, + "model": "bloodmagic:models/block/blockaltar.obj", + "textures": { + "default": "bloodmagic:models/altar", + "particle": "#default" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal/crystal1.mtl b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal1.mtl new file mode 100644 index 00000000..8312afd8 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal1.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'CrystalEdited.blend' +# Material Count: 1 + +newmtl Material.001 +#Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +#Ks 0.8 0.8 0.8 +d 1 +#illum 2 +map_Kd #crystal \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal/crystal1.obj b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal1.obj new file mode 100644 index 00000000..820c4245 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal1.obj @@ -0,0 +1,30 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib crystal1.mtl +o Crystal1_Cube.002 +v 0.541309 0.522193 0.565775 +v 0.475462 0.818325 0.429288 +v 0.364893 0.461758 0.462174 +v 0.390526 0.258066 0.560703 +v 0.523738 0.510684 0.334361 +v 0.467179 0.253186 0.344289 +v 0.625975 0.304529 0.481768 +v 0.494567 -0.066932 0.498392 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn -0.554600 0.268800 0.787500 +vn -0.644800 0.122900 -0.754400 +vn 0.678500 -0.232200 -0.697000 +vn 0.338600 -0.133400 0.931400 +vn -0.915300 -0.246300 -0.318600 +vn 0.958400 0.272000 -0.086300 +usemtl Material.001 +#s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/1/2 5/2/2 6/3/2 3/4/2 +f 5/1/3 7/2/3 8/3/3 6/4/3 +f 7/1/4 1/2/4 4/3/4 8/4/4 +f 4/1/5 3/2/5 6/3/5 8/4/5 +f 7/1/6 5/2/6 2/3/6 1/4/6 diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal/crystal2.mtl b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal2.mtl new file mode 100644 index 00000000..8312afd8 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal2.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'CrystalEdited.blend' +# Material Count: 1 + +newmtl Material.001 +#Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +#Ks 0.8 0.8 0.8 +d 1 +#illum 2 +map_Kd #crystal \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal/crystal2.obj b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal2.obj new file mode 100644 index 00000000..ef42163c --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal2.obj @@ -0,0 +1,30 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib crystal2.mtl +o Crystal2_Cube.003 +v 0.583418 0.194815 0.355811 +v 0.590795 0.338364 0.208300 +v 0.443486 0.156662 0.275360 +v 0.491321 -0.033342 0.518335 +v 0.739315 0.387694 -0.018903 +v 0.565149 0.127821 0.081910 +v 0.781085 0.191352 0.180536 +v 0.652954 0.018450 0.289613 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn -0.509600 0.627400 0.588800 +vn -0.784400 0.386700 -0.485000 +vn 0.468500 -0.628400 -0.621000 +vn 0.744000 0.043000 0.666800 +vn -0.493000 -0.785700 -0.373600 +vn 0.558900 0.619400 0.551300 +usemtl Material.001 +#s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/1/2 5/2/2 6/3/2 3/4/2 +f 5/1/3 7/2/3 8/3/3 6/4/3 +f 7/1/4 1/2/4 4/3/4 8/4/4 +f 4/1/5 3/2/5 6/3/5 8/4/5 +f 7/1/6 5/2/6 2/3/6 1/4/6 diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal/crystal3.mtl b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal3.mtl new file mode 100644 index 00000000..8312afd8 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal3.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'CrystalEdited.blend' +# Material Count: 1 + +newmtl Material.001 +#Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +#Ks 0.8 0.8 0.8 +d 1 +#illum 2 +map_Kd #crystal \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal/crystal3.obj b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal3.obj new file mode 100644 index 00000000..346e90fb --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal3.obj @@ -0,0 +1,30 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib crystal3.mtl +o Crystal3_Cube.004 +v 0.599699 0.234431 0.715050 +v 0.561549 0.133651 0.487765 +v 0.490610 -0.051382 0.494637 +v 0.573184 0.095593 0.709620 +v 0.705541 0.197807 0.627045 +v 0.617341 0.039525 0.599787 +v 0.814451 0.310805 0.883878 +v 0.698243 0.101404 0.775472 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn -0.952700 0.287100 0.099200 +vn 0.728300 -0.301000 -0.615600 +vn 0.884700 -0.409700 -0.222600 +vn -0.561200 -0.040200 0.826700 +vn 0.026100 -0.886100 0.462800 +vn -0.015500 0.916400 -0.400000 +usemtl Material.001 +#s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/1/2 5/2/2 6/3/2 3/4/2 +f 5/1/3 7/2/3 8/3/3 6/4/3 +f 7/1/4 1/2/4 4/3/4 8/4/4 +f 4/1/5 3/2/5 6/3/5 8/4/5 +f 7/1/6 5/2/6 2/3/6 1/4/6 diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal/crystal4.mtl b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal4.mtl new file mode 100644 index 00000000..8312afd8 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal4.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'CrystalEdited.blend' +# Material Count: 1 + +newmtl Material.001 +#Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +#Ks 0.8 0.8 0.8 +d 1 +#illum 2 +map_Kd #crystal \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal/crystal4.obj b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal4.obj new file mode 100644 index 00000000..a1733ba6 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal4.obj @@ -0,0 +1,30 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib crystal4.mtl +o Crystal4_Cube.005 +v 0.231425 0.272568 0.295285 +v 0.148716 0.421674 0.074512 +v 0.229979 0.123255 0.182833 +v 0.279143 0.056276 0.408796 +v 0.403338 0.307055 0.170708 +v 0.450289 0.076509 0.254075 +v 0.408191 0.195351 0.365302 +v 0.484596 -0.035550 0.505028 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn -0.965600 -0.150500 0.212200 +vn 0.232800 -0.281000 -0.931100 +vn 0.957000 0.284200 0.058600 +vn -0.184300 0.445100 0.876300 +vn -0.177800 -0.931100 -0.318400 +vn 0.187400 0.849200 0.493700 +usemtl Material.001 +#s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/1/2 5/2/2 6/3/2 3/4/2 +f 5/1/3 7/2/3 8/3/3 6/4/3 +f 7/1/4 1/2/4 4/3/4 8/4/4 +f 4/1/5 3/2/5 6/3/5 8/4/5 +f 7/1/6 5/2/6 2/3/6 1/4/6 diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal/crystal5.mtl b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal5.mtl new file mode 100644 index 00000000..8312afd8 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal5.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'CrystalEdited.blend' +# Material Count: 1 + +newmtl Material.001 +#Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +#Ks 0.8 0.8 0.8 +d 1 +#illum 2 +map_Kd #crystal \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal/crystal5.obj b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal5.obj new file mode 100644 index 00000000..cc75d4b8 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal5.obj @@ -0,0 +1,30 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib crystal5.mtl +o Crystal5_Cube.006 +v 0.349231 0.423691 0.937667 +v 0.305391 0.245339 0.724533 +v 0.367605 0.076317 0.717276 +v 0.460587 0.191248 0.826603 +v 0.391454 0.159733 0.568418 +v 0.492172 -0.045920 0.485475 +v 0.470717 0.292579 0.676822 +v 0.542313 0.166856 0.649094 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn -0.594700 -0.452900 0.664200 +vn -0.894900 -0.312500 -0.318500 +vn 0.398800 0.470300 -0.787300 +vn 0.892800 0.342800 0.292300 +vn 0.544200 -0.664400 0.512300 +vn -0.373400 0.733900 -0.567400 +usemtl Material.001 +#s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/1/2 5/2/2 6/3/2 3/4/2 +f 5/1/3 7/2/3 8/3/3 6/4/3 +f 7/1/4 1/2/4 4/3/4 8/4/4 +f 4/1/5 3/2/5 6/3/5 8/4/5 +f 7/1/6 5/2/6 2/3/6 1/4/6 diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal/crystal6.mtl b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal6.mtl new file mode 100644 index 00000000..8312afd8 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal6.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'CrystalEdited.blend' +# Material Count: 1 + +newmtl Material.001 +#Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +#Ks 0.8 0.8 0.8 +d 1 +#illum 2 +map_Kd #crystal \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal/crystal6.obj b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal6.obj new file mode 100644 index 00000000..9206e935 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal6.obj @@ -0,0 +1,30 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib crystal6.mtl +o Crystal6_Cube.007 +v 0.239487 0.278413 0.616538 +v 0.028163 0.346273 0.526362 +v 0.189094 0.113959 0.535716 +v 0.335860 0.041917 0.579906 +v 0.235427 0.257442 0.421622 +v 0.320816 0.037582 0.451232 +v 0.393389 0.239035 0.522345 +v 0.490528 -0.046537 0.496835 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn -0.432900 -0.287300 0.854500 +vn -0.585200 -0.380500 -0.716100 +vn 0.442400 0.152600 -0.883700 +vn 0.524900 0.093900 0.846000 +vn -0.459900 -0.884000 0.083600 +vn 0.279000 0.954200 -0.108500 +usemtl Material.001 +#s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/1/2 5/2/2 6/3/2 3/4/2 +f 5/1/3 7/2/3 8/3/3 6/4/3 +f 7/1/4 1/2/4 4/3/4 8/4/4 +f 4/1/5 3/2/5 6/3/5 8/4/5 +f 7/1/6 5/2/6 2/3/6 1/4/6 diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal/crystal7.mtl b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal7.mtl new file mode 100644 index 00000000..8312afd8 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal7.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'CrystalEdited.blend' +# Material Count: 1 + +newmtl Material.001 +#Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +#Ks 0.8 0.8 0.8 +d 1 +#illum 2 +map_Kd #crystal \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal/crystal7.obj b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal7.obj new file mode 100644 index 00000000..0a2094b6 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal/crystal7.obj @@ -0,0 +1,30 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib crystal7.mtl +o Crystal7_Cube.008 +v 0.679569 0.173016 0.537214 +v 0.753542 0.268537 0.442736 +v 0.647951 0.146157 0.391809 +v 0.483178 -0.044230 0.496270 +v 0.932224 0.344260 0.450676 +v 0.777536 0.161952 0.399277 +v 0.798431 0.176811 0.535512 +v 0.709441 0.067096 0.475384 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn -0.752300 0.657500 0.042100 +vn -0.061900 0.364900 -0.929000 +vn 0.776200 -0.628400 -0.050500 +vn 0.206700 -0.449100 0.869200 +vn 0.198600 -0.634800 -0.746700 +vn -0.189400 0.650900 0.735200 +usemtl Material.001 +#s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/1/2 5/2/2 6/3/2 3/4/2 +f 5/1/3 7/2/3 8/3/3 6/4/3 +f 7/1/4 1/2/4 4/3/4 8/4/4 +f 4/1/5 3/2/5 6/3/5 8/4/5 +f 7/1/6 5/2/6 2/3/6 1/4/6 diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal1.json b/src/main/resources/assets/bloodmagic/models/block/crystal1.json new file mode 100644 index 00000000..41a7581c --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal1.json @@ -0,0 +1,10 @@ +{ + "parent": "block/block", + "loader": "forge:obj", + "flip-v": true, + "model": "bloodmagic:models/block/crystal/crystal1.obj", + "textures": { + "crystal": "bloodmagic:models/defaultcrystal", + "particle": "#crystal" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal2.json b/src/main/resources/assets/bloodmagic/models/block/crystal2.json new file mode 100644 index 00000000..5e50ae32 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal2.json @@ -0,0 +1,10 @@ +{ + "parent": "block/block", + "loader": "forge:obj", + "flip-v": true, + "model": "bloodmagic:models/block/crystal/crystal2.obj", + "textures": { + "crystal": "bloodmagic:models/defaultcrystal", + "particle": "#crystal" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal3.json b/src/main/resources/assets/bloodmagic/models/block/crystal3.json new file mode 100644 index 00000000..592f0dca --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal3.json @@ -0,0 +1,10 @@ +{ + "parent": "block/block", + "loader": "forge:obj", + "flip-v": true, + "model": "bloodmagic:models/block/crystal/crystal3.obj", + "textures": { + "crystal": "bloodmagic:models/defaultcrystal", + "particle": "#crystal" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal4.json b/src/main/resources/assets/bloodmagic/models/block/crystal4.json new file mode 100644 index 00000000..2fa0a75e --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal4.json @@ -0,0 +1,10 @@ +{ + "parent": "block/block", + "loader": "forge:obj", + "flip-v": true, + "model": "bloodmagic:models/block/crystal/crystal4.obj", + "textures": { + "crystal": "bloodmagic:models/defaultcrystal", + "particle": "#crystal" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal5.json b/src/main/resources/assets/bloodmagic/models/block/crystal5.json new file mode 100644 index 00000000..eab5ad29 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal5.json @@ -0,0 +1,10 @@ +{ + "parent": "block/block", + "loader": "forge:obj", + "flip-v": true, + "model": "bloodmagic:models/block/crystal/crystal5.obj", + "textures": { + "crystal": "bloodmagic:models/defaultcrystal", + "particle": "#crystal" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal6.json b/src/main/resources/assets/bloodmagic/models/block/crystal6.json new file mode 100644 index 00000000..f82b438e --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal6.json @@ -0,0 +1,10 @@ +{ + "parent": "block/block", + "loader": "forge:obj", + "flip-v": true, + "model": "bloodmagic:models/block/crystal/crystal6.obj", + "textures": { + "crystal": "bloodmagic:models/defaultcrystal", + "particle": "#crystal" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/crystal7.json b/src/main/resources/assets/bloodmagic/models/block/crystal7.json new file mode 100644 index 00000000..345d1916 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/crystal7.json @@ -0,0 +1,10 @@ +{ + "parent": "block/block", + "loader": "forge:obj", + "flip-v": true, + "model": "bloodmagic:models/block/crystal/crystal7.obj", + "textures": { + "crystal": "bloodmagic:models/defaultcrystal", + "particle": "#crystal" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/demoncrucible.json b/src/main/resources/assets/bloodmagic/models/block/demoncrucible.json new file mode 100644 index 00000000..ca99080f --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/demoncrucible.json @@ -0,0 +1,10 @@ +{ + "parent": "block/block", + "loader": "forge:obj", + "flip-v": true, + "model": "bloodmagic:models/block/blockdemoncrucible.obj", + "textures": { + "default": "bloodmagic:models/demoncrucible", + "particle": "#default" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/demoncrystallizer.json b/src/main/resources/assets/bloodmagic/models/block/demoncrystallizer.json new file mode 100644 index 00000000..0bd7c2bb --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/demoncrystallizer.json @@ -0,0 +1,10 @@ +{ + "parent": "block/block", + "loader": "forge:obj", + "flip-v": true, + "model": "bloodmagic:models/block/blockdemoncrystallizer.obj", + "textures": { + "default": "bloodmagic:models/demoncrystallizer", + "particle": "#default" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/demonpylon.json b/src/main/resources/assets/bloodmagic/models/block/demonpylon.json new file mode 100644 index 00000000..de39d9ab --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/demonpylon.json @@ -0,0 +1,10 @@ +{ + "parent": "block/block", + "loader": "forge:obj", + "flip-v": true, + "model": "bloodmagic:models/block/blockdemonpylon.obj", + "textures": { + "default": "bloodmagic:models/demonpylon", + "particle": "#default" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/ethereal_mimic.json b/src/main/resources/assets/bloodmagic/models/block/ethereal_mimic.json new file mode 100644 index 00000000..3245d768 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/ethereal_mimic.json @@ -0,0 +1,3 @@ +{ + "loader": "bloodmagic:mimicloader_ethereal" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/incensealtar.json b/src/main/resources/assets/bloodmagic/models/block/incensealtar.json new file mode 100644 index 00000000..4f824ef3 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/incensealtar.json @@ -0,0 +1,10 @@ +{ + "parent": "block/block", + "loader": "forge:obj", + "flip-v": true, + "model": "bloodmagic:models/block/blockincensealtar.obj", + "textures": { + "default": "bloodmagic:models/incensealtar", + "particle": "#default" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/modelalchemytable.mtl b/src/main/resources/assets/bloodmagic/models/block/modelalchemytable.mtl new file mode 100644 index 00000000..efa6ee21 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/modelalchemytable.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +#Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +#Ks 0.8 0.8 0.8 +d 1 +#illum 2 +map_Kd bloodmagic:models/alchemytable \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/modelalchemytable.obj b/src/main/resources/assets/bloodmagic/models/block/modelalchemytable.obj new file mode 100644 index 00000000..188da6f7 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/modelalchemytable.obj @@ -0,0 +1,1257 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib modelalchemytable.mtl +o Decanter1 +v -0.125000 0.837500 0.718750 +v -0.306111 0.837500 0.767279 +v -0.306111 1.025000 0.767279 +v -0.125000 1.025000 0.718750 +v -0.257582 0.837500 0.948390 +v -0.076471 0.837500 0.899861 +v -0.076471 1.025000 0.899861 +v -0.257582 1.025000 0.948390 +vt 0.023438 0.000000 +vt 0.046875 0.000000 +vt 0.046875 0.023438 +vt 0.023438 0.023438 +vt 0.070313 0.000000 +vt 0.093750 0.000000 +vt 0.093750 0.023438 +vt 0.070313 0.023438 +vt 0.046875 0.046875 +vt 0.023438 0.046875 +vt 0.070313 0.046875 +vt 0.000000 0.000000 +vt 0.000000 0.023438 +vn -0.258800 0.000000 -0.965900 +vn 0.258800 -0.000000 0.965900 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.965900 0.000000 -0.258800 +vn -0.965900 -0.000000 0.258800 +usemtl None +#s off +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 4/4/3 3/3/3 8/9/3 7/10/3 +f 6/3/4 5/8/4 2/11/4 1/9/4 +f 6/12/5 1/1/5 4/4/5 7/13/5 +f 2/2/6 5/5/6 8/8/6 3/3/6 +o CarpetLow1 +v 1.054228 0.423099 0.250000 +v 0.992678 0.412246 0.250000 +v 0.970972 0.535347 0.250000 +v 1.032522 0.546200 0.250000 +v 0.992678 0.412246 0.750000 +v 1.054228 0.423099 0.750000 +v 1.032522 0.546200 0.750000 +v 0.970972 0.535347 0.750000 +vt 0.843750 0.757813 +vt 0.851563 0.757813 +vt 0.851563 0.773438 +vt 0.843750 0.773438 +vt 0.914063 0.757813 +vt 0.921875 0.757813 +vt 0.921875 0.773438 +vt 0.914063 0.773438 +vt 0.851563 0.835938 +vt 0.843750 0.835938 +vt 0.859375 0.773438 +vt 0.859375 0.835938 +vt 0.781250 0.757813 +vt 0.781250 0.773438 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.173600 0.984800 0.000000 +vn 0.173600 -0.984800 -0.000000 +vn 0.984800 0.173600 0.000000 +vn -0.984800 -0.173600 -0.000000 +usemtl None +#s off +f 9/14/7 10/15/7 11/16/7 12/17/7 +f 13/18/8 14/19/8 15/20/8 16/21/8 +f 12/17/9 11/16/9 16/22/9 15/23/9 +f 14/16/10 13/24/10 10/25/10 9/22/10 +f 14/26/11 9/14/11 12/17/11 15/27/11 +f 10/15/12 13/18/12 16/21/12 11/16/12 +o CarpetLowest2 +v -1.057387 0.301657 0.250000 +v -1.113075 0.330031 0.250000 +v -1.056326 0.441407 0.250000 +v -1.000638 0.413033 0.250000 +v -1.113075 0.330031 0.750000 +v -1.057387 0.301657 0.750000 +v -1.000638 0.413033 0.750000 +v -1.056326 0.441407 0.750000 +vt 0.843750 0.664063 +vt 0.851563 0.664063 +vt 0.851563 0.679688 +vt 0.843750 0.679688 +vt 0.914063 0.664063 +vt 0.921875 0.664063 +vt 0.921875 0.679688 +vt 0.914063 0.679688 +vt 0.851563 0.742188 +vt 0.843750 0.742188 +vt 0.859375 0.679688 +vt 0.859375 0.742188 +vt 0.781250 0.664063 +vt 0.781250 0.679688 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.454000 0.891000 0.000000 +vn -0.454000 -0.891000 -0.000000 +vn 0.891000 -0.454000 -0.000000 +vn -0.891000 0.454000 0.000000 +usemtl None +#s off +f 17/28/13 18/29/13 19/30/13 20/31/13 +f 21/32/14 22/33/14 23/34/14 24/35/14 +f 20/31/15 19/30/15 24/36/15 23/37/15 +f 22/30/16 21/38/16 18/39/16 17/36/16 +f 22/40/17 17/28/17 20/31/17 23/41/17 +f 18/29/18 21/32/18 24/35/18 19/30/18 +o Decanter2 +v -0.185370 1.025000 0.734926 +v -0.366481 1.025000 0.783455 +v -0.366481 1.087500 0.783455 +v -0.185370 1.087500 0.734926 +v -0.317953 1.025000 0.964566 +v -0.136842 1.025000 0.916037 +v -0.136842 1.087500 0.916037 +v -0.317953 1.087500 0.964566 +vt 0.023438 0.062500 +vt 0.046875 0.062500 +vt 0.046875 0.070313 +vt 0.023438 0.070313 +vt 0.070313 0.062500 +vt 0.093750 0.062500 +vt 0.093750 0.070313 +vt 0.070313 0.070313 +vt 0.046875 0.093750 +vt 0.023438 0.093750 +vt 0.070313 0.093750 +vt 0.000000 0.062500 +vt 0.000000 0.070313 +vn -0.258800 0.000000 -0.965900 +vn 0.258800 0.000000 0.965900 +vn 0.000000 1.000000 0.000000 +vn -0.000000 -1.000000 -0.000000 +vn 0.965900 0.000000 -0.258800 +vn -0.965900 0.000000 0.258800 +usemtl None +#s off +f 25/42/19 26/43/19 27/44/19 28/45/19 +f 29/46/20 30/47/20 31/48/20 32/49/20 +f 28/45/21 27/44/21 32/50/21 31/51/21 +f 30/44/22 29/49/22 26/52/22 25/50/22 +f 30/53/23 25/42/23 28/45/23 31/54/23 +f 26/43/24 29/46/24 32/49/24 27/44/24 +o Pipe1 +v -0.373208 1.087147 0.866346 +v -0.548929 1.122100 0.811057 +v -0.536736 1.183399 0.811057 +v -0.361015 1.148446 0.866346 +v -0.567004 1.125696 0.870778 +v -0.391284 1.090743 0.926067 +v -0.379091 1.152042 0.926067 +v -0.554811 1.186995 0.870778 +vt 0.007813 0.132813 +vt 0.031250 0.132813 +vt 0.031250 0.140625 +vt 0.007813 0.140625 +vt 0.039063 0.132813 +vt 0.062500 0.132813 +vt 0.062500 0.140625 +vt 0.039063 0.140625 +vt 0.031250 0.148438 +vt 0.007813 0.148438 +vt 0.054688 0.140625 +vt 0.054688 0.148438 +vt 0.000000 0.132813 +vt 0.000000 0.140625 +vn 0.289200 -0.057500 -0.955500 +vn -0.289200 0.057500 0.955500 +vn 0.195100 0.980800 -0.000000 +vn -0.195100 -0.980800 0.000000 +vn 0.937200 -0.186400 0.294900 +vn -0.937200 0.186400 -0.294900 +usemtl None +#s off +f 33/55/25 34/56/25 35/57/25 36/58/25 +f 37/59/26 38/60/26 39/61/26 40/62/26 +f 36/58/27 35/57/27 40/63/27 39/64/27 +f 38/57/28 37/65/28 34/66/28 33/63/28 +f 38/67/29 33/55/29 36/58/29 39/68/29 +f 34/56/30 37/59/30 40/62/30 35/57/30 +o Base +v 1.000000 0.002500 0.000000 +v -1.000000 0.002500 0.000000 +v -1.000000 0.127500 0.000000 +v 1.000000 0.127500 0.000000 +v -1.000000 0.002500 1.000000 +v 1.000000 0.002500 1.000000 +v 1.000000 0.127500 1.000000 +v -1.000000 0.127500 1.000000 +vt 0.125000 0.859375 +vt 0.375000 0.859375 +vt 0.375000 0.875000 +vt 0.125000 0.875000 +vt 0.500000 0.859375 +vt 0.750000 0.859375 +vt 0.750000 0.875000 +vt 0.500000 0.875000 +vt 0.375000 1.000000 +vt 0.125000 1.000000 +vt 0.625000 0.875000 +vt 0.625000 1.000000 +vt 0.000000 0.859375 +vt 0.000000 0.875000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +usemtl None +#s off +f 41/69/31 42/70/31 43/71/31 44/72/31 +f 45/73/32 46/74/32 47/75/32 48/76/32 +f 44/72/33 43/71/33 48/77/33 47/78/33 +f 46/71/34 45/79/34 42/80/34 41/77/34 +f 46/81/35 41/69/35 44/72/35 47/82/35 +f 42/70/36 45/73/36 48/76/36 43/71/36 +o Pipe2 +v -0.538497 1.119845 0.809794 +v -0.705303 1.166575 0.738041 +v -0.688443 1.226758 0.738041 +v -0.521637 1.180028 0.809794 +v -0.728334 1.173027 0.795784 +v -0.561528 1.126297 0.867537 +v -0.544668 1.186480 0.867537 +v -0.711474 1.233210 0.795784 +vt 0.007813 0.156250 +vt 0.031250 0.156250 +vt 0.031250 0.164063 +vt 0.007813 0.164063 +vt 0.039063 0.156250 +vt 0.062500 0.156250 +vt 0.062500 0.164063 +vt 0.039063 0.164063 +vt 0.031250 0.171875 +vt 0.007813 0.171875 +vt 0.054688 0.164063 +vt 0.054688 0.171875 +vt 0.000000 0.156250 +vt 0.000000 0.164063 +vn 0.368500 -0.103200 -0.923900 +vn -0.368500 0.103200 0.923900 +vn 0.269800 0.962900 0.000000 +vn -0.269800 -0.962900 0.000000 +vn 0.889600 -0.249200 0.382700 +vn -0.889600 0.249200 -0.382700 +usemtl None +#s off +f 49/83/37 50/84/37 51/85/37 52/86/37 +f 53/87/38 54/88/38 55/89/38 56/90/38 +f 52/86/39 51/85/39 56/91/39 55/92/39 +f 54/85/40 53/93/40 50/94/40 49/91/40 +f 54/95/41 49/83/41 52/86/41 55/96/41 +f 50/84/42 53/87/42 56/90/42 51/85/42 +o JarContent1 +v 0.897244 0.868750 0.414703 +v 0.775448 0.868750 0.442822 +v 0.775448 1.056250 0.442822 +v 0.897244 1.056250 0.414703 +v 0.803567 0.868750 0.564619 +v 0.925363 0.868750 0.536500 +v 0.925363 1.056250 0.536500 +v 0.803567 1.056250 0.564619 +vt 0.117188 0.406250 +vt 0.132813 0.406250 +vt 0.132813 0.429688 +vt 0.117188 0.429688 +vt 0.148438 0.406250 +vt 0.164063 0.406250 +vt 0.164063 0.429688 +vt 0.148438 0.429688 +vt 0.132813 0.445313 +vt 0.117188 0.445313 +vt 0.148438 0.445313 +vt 0.101563 0.406250 +vt 0.101563 0.429688 +vn -0.225000 0.000000 -0.974400 +vn 0.225000 -0.000000 0.974400 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.974400 -0.000000 -0.225000 +vn -0.974400 0.000000 0.225000 +usemtl None +#s off +f 57/97/43 58/98/43 59/99/43 60/100/43 +f 61/101/44 62/102/44 63/103/44 64/104/44 +f 60/100/45 59/99/45 64/105/45 63/106/45 +f 62/99/46 61/104/46 58/107/46 57/105/46 +f 62/108/47 57/97/47 60/100/47 63/109/47 +f 58/98/48 61/101/48 64/104/48 59/99/48 +o BeamCasing +v 0.875000 0.275000 0.437500 +v -0.875000 0.275000 0.437500 +v -0.875000 0.400000 0.437500 +v 0.875000 0.400000 0.437500 +v -0.875000 0.275000 0.562500 +v 0.875000 0.275000 0.562500 +v 0.875000 0.400000 0.562500 +v -0.875000 0.400000 0.562500 +vt 0.015625 0.500000 +vt 0.234375 0.500000 +vt 0.234375 0.515625 +vt 0.015625 0.515625 +vt 0.250000 0.500000 +vt 0.468750 0.500000 +vt 0.468750 0.515625 +vt 0.250000 0.515625 +vt 0.234375 0.531250 +vt 0.015625 0.531250 +vt 0.453125 0.515625 +vt 0.453125 0.531250 +vt 0.000000 0.500000 +vt 0.000000 0.515625 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +usemtl None +#s off +f 65/110/49 66/111/49 67/112/49 68/113/49 +f 69/114/50 70/115/50 71/116/50 72/117/50 +f 68/113/51 67/112/51 72/118/51 71/119/51 +f 70/112/52 69/120/52 66/121/52 65/118/52 +f 70/122/53 65/110/53 68/113/53 71/123/53 +f 66/111/54 69/114/54 72/117/54 67/112/54 +o CrucibleLeg2 +v -0.682350 0.837500 0.913320 +v -0.740093 0.837500 0.889403 +v -0.740093 0.962500 0.889403 +v -0.682350 0.962500 0.913320 +v -0.764011 0.837500 0.947145 +v -0.706268 0.837500 0.971063 +v -0.706268 0.962500 0.971063 +v -0.764011 0.962500 0.947145 +vt 0.007813 0.828125 +vt 0.015625 0.828125 +vt 0.015625 0.843750 +vt 0.007813 0.843750 +vt 0.023438 0.828125 +vt 0.031250 0.828125 +vt 0.031250 0.843750 +vt 0.023438 0.843750 +vt 0.015625 0.851563 +vt 0.007813 0.851563 +vt 0.023438 0.851563 +vt 0.000000 0.828125 +vt 0.000000 0.843750 +vn 0.382700 0.000000 -0.923900 +vn -0.382700 0.000000 0.923900 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.923900 0.000000 0.382700 +vn -0.923900 0.000000 -0.382700 +usemtl None +#s off +f 73/124/55 74/125/55 75/126/55 76/127/55 +f 77/128/56 78/129/56 79/130/56 80/131/56 +f 76/127/57 75/126/57 80/132/57 79/133/57 +f 78/126/58 77/131/58 74/134/58 73/132/58 +f 78/135/59 73/124/59 76/127/59 79/136/59 +f 74/125/60 77/128/60 80/131/60 75/126/60 +o Jar2 +v 0.897748 0.837500 0.809359 +v 0.765165 0.837500 0.676777 +v 0.765165 1.150000 0.676777 +v 0.897748 1.150000 0.809359 +v 0.632583 0.837500 0.809359 +v 0.765165 0.837500 0.941942 +v 0.765165 1.150000 0.941942 +v 0.632583 1.150000 0.809359 +vt 0.023438 0.312500 +vt 0.046875 0.312500 +vt 0.046875 0.351563 +vt 0.023438 0.351563 +vt 0.070313 0.312500 +vt 0.093750 0.312500 +vt 0.093750 0.351563 +vt 0.070313 0.351563 +vt 0.046875 0.375000 +vt 0.023438 0.375000 +vt 0.070313 0.375000 +vt 0.000000 0.312500 +vt 0.000000 0.351563 +vn 0.707100 0.000000 -0.707100 +vn -0.707100 -0.000000 0.707100 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.707100 0.000000 0.707100 +vn -0.707100 0.000000 -0.707100 +usemtl None +#s off +f 81/137/61 82/138/61 83/139/61 84/140/61 +f 85/141/62 86/142/62 87/143/62 88/144/62 +f 84/140/63 83/139/63 88/145/63 87/146/63 +f 86/139/64 85/144/64 82/147/64 81/145/64 +f 86/148/65 81/137/65 84/140/65 87/149/65 +f 82/138/66 85/141/66 88/144/66 83/139/66 +o Jar3 +v 0.546330 0.837500 0.810056 +v 0.365219 0.837500 0.761527 +v 0.365219 1.212500 0.761527 +v 0.546330 1.212500 0.810056 +v 0.316691 0.837500 0.942639 +v 0.497802 0.837500 0.991167 +v 0.497802 1.212500 0.991167 +v 0.316691 1.212500 0.942639 +vt 0.023438 0.179688 +vt 0.046875 0.179688 +vt 0.046875 0.226563 +vt 0.023438 0.226563 +vt 0.070313 0.179688 +vt 0.093750 0.179688 +vt 0.093750 0.226563 +vt 0.070313 0.226563 +vt 0.046875 0.250000 +vt 0.023438 0.250000 +vt 0.070313 0.250000 +vt 0.000000 0.179688 +vt 0.000000 0.226563 +vn 0.258800 0.000000 -0.965900 +vn -0.258800 -0.000000 0.965900 +vn -0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.965900 0.000000 0.258800 +vn -0.965900 0.000000 -0.258800 +usemtl None +#s off +f 89/150/67 90/151/67 91/152/67 92/153/67 +f 93/154/68 94/155/68 95/156/68 96/157/68 +f 92/153/69 91/152/69 96/158/69 95/159/69 +f 94/152/70 93/157/70 90/160/70 89/158/70 +f 94/161/71 89/150/71 92/153/71 95/162/71 +f 90/151/72 93/154/72 96/157/72 91/152/72 +o BeamCore +v 0.843750 0.306250 0.468750 +v -0.843750 0.306250 0.468750 +v -0.843750 0.368750 0.468750 +v 0.843750 0.368750 0.468750 +v -0.843750 0.306250 0.531250 +v 0.843750 0.306250 0.531250 +v 0.843750 0.368750 0.531250 +v -0.843750 0.368750 0.531250 +vt 0.007813 0.476563 +vt 0.218750 0.476563 +vt 0.218750 0.484375 +vt 0.007813 0.484375 +vt 0.226563 0.476563 +vt 0.437500 0.476563 +vt 0.437500 0.484375 +vt 0.226563 0.484375 +vt 0.218750 0.492188 +vt 0.007813 0.492188 +vt 0.429688 0.484375 +vt 0.429688 0.492188 +vt 0.000000 0.476563 +vt 0.000000 0.484375 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +usemtl None +#s off +f 97/163/73 98/164/73 99/165/73 100/166/73 +f 101/167/74 102/168/74 103/169/74 104/170/74 +f 100/166/75 99/165/75 104/171/75 103/172/75 +f 102/165/76 101/173/76 98/174/76 97/171/76 +f 102/175/77 97/163/77 100/166/77 103/176/77 +f 98/164/78 101/167/78 104/170/78 99/165/78 +o CrucibleSide1 +v -0.682350 0.962500 0.913320 +v -0.971063 0.962500 0.793732 +v -0.971063 1.025000 0.793732 +v -0.682350 1.025000 0.913320 +v -0.994980 0.962500 0.851474 +v -0.706268 0.962500 0.971063 +v -0.706268 1.025000 0.971063 +v -0.994980 1.025000 0.851474 +vt 0.007813 0.765625 +vt 0.046875 0.765625 +vt 0.046875 0.773438 +vt 0.007813 0.773438 +vt 0.054688 0.765625 +vt 0.093750 0.765625 +vt 0.093750 0.773438 +vt 0.054688 0.773438 +vt 0.046875 0.781250 +vt 0.007813 0.781250 +vt 0.085938 0.773438 +vt 0.085938 0.781250 +vt 0.000000 0.765625 +vt 0.000000 0.773438 +vn 0.382700 0.000000 -0.923900 +vn -0.382700 0.000000 0.923900 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.923900 0.000000 0.382700 +vn -0.923900 0.000000 -0.382700 +usemtl None +#s off +f 105/177/79 106/178/79 107/179/79 108/180/79 +f 109/181/80 110/182/80 111/183/80 112/184/80 +f 108/180/81 107/179/81 112/185/81 111/186/81 +f 110/179/82 109/187/82 106/188/82 105/185/82 +f 110/189/83 105/177/83 108/180/83 111/190/83 +f 106/178/84 109/181/84 112/184/84 107/179/84 +o JarContent3 +v 0.508057 0.868750 0.832153 +v 0.387316 0.868750 0.799801 +v 0.387316 1.181250 0.799801 +v 0.508057 1.181250 0.832153 +v 0.354964 0.868750 0.920541 +v 0.475705 0.868750 0.952894 +v 0.475705 1.181250 0.952894 +v 0.354964 1.181250 0.920541 +vt 0.117188 0.179688 +vt 0.132813 0.179688 +vt 0.132813 0.218750 +vt 0.117188 0.218750 +vt 0.148438 0.179688 +vt 0.164063 0.179688 +vt 0.164063 0.218750 +vt 0.148438 0.218750 +vt 0.132813 0.234375 +vt 0.117188 0.234375 +vt 0.148438 0.234375 +vt 0.101563 0.179688 +vt 0.101563 0.218750 +vn 0.258800 0.000000 -0.965900 +vn -0.258800 -0.000000 0.965900 +vn -0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.965900 0.000000 0.258800 +vn -0.965900 0.000000 -0.258800 +usemtl None +#s off +f 113/191/85 114/192/85 115/193/85 116/194/85 +f 117/195/86 118/196/86 119/197/86 120/198/86 +f 116/194/87 115/193/87 120/199/87 119/200/87 +f 118/193/88 117/198/88 114/201/88 113/199/88 +f 118/202/89 113/191/89 116/194/89 119/203/89 +f 114/192/90 117/195/90 120/198/90 115/193/90 +o CrucibleLeg4 +v -0.817649 0.837500 0.586680 +v -0.875392 0.837500 0.562762 +v -0.875392 0.962500 0.562762 +v -0.817649 0.962500 0.586680 +v -0.899310 0.837500 0.620504 +v -0.841567 0.837500 0.644422 +v -0.841567 0.962500 0.644422 +v -0.899310 0.962500 0.620504 +vt 0.007813 0.828125 +vt 0.015625 0.828125 +vt 0.015625 0.843750 +vt 0.007813 0.843750 +vt 0.023438 0.828125 +vt 0.031250 0.828125 +vt 0.031250 0.843750 +vt 0.023438 0.843750 +vt 0.015625 0.851563 +vt 0.007813 0.851563 +vt 0.023438 0.851563 +vt 0.000000 0.828125 +vt 0.000000 0.843750 +vn 0.382700 0.000000 -0.923900 +vn -0.382700 0.000000 0.923900 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.923900 0.000000 0.382700 +vn -0.923900 0.000000 -0.382700 +usemtl None +#s off +f 121/204/91 122/205/91 123/206/91 124/207/91 +f 125/208/92 126/209/92 127/210/92 128/211/92 +f 124/207/93 123/206/93 128/212/93 127/213/93 +f 126/206/94 125/211/94 122/214/94 121/212/94 +f 126/215/95 121/204/95 124/207/95 127/216/95 +f 122/205/96 125/208/96 128/211/96 123/206/96 +o Carpet2 +v -0.968750 0.524375 0.250000 +v -1.031250 0.524375 0.250000 +v -1.031250 0.836875 0.250000 +v -0.968750 0.836875 0.250000 +v -1.031250 0.524375 0.750000 +v -0.968750 0.524375 0.750000 +v -0.968750 0.836875 0.750000 +v -1.031250 0.836875 0.750000 +vt 0.695313 0.750000 +vt 0.703125 0.750000 +vt 0.703125 0.789063 +vt 0.695313 0.789063 +vt 0.765625 0.750000 +vt 0.773438 0.750000 +vt 0.773438 0.789063 +vt 0.765625 0.789063 +vt 0.703125 0.851563 +vt 0.695313 0.851563 +vt 0.710938 0.789063 +vt 0.710938 0.851563 +vt 0.632813 0.750000 +vt 0.632813 0.789063 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 1.000000 0.000000 0.000000 +vn -1.000000 -0.000000 0.000000 +usemtl None +#s off +f 129/217/97 130/218/97 131/219/97 132/220/97 +f 133/221/98 134/222/98 135/223/98 136/224/98 +f 132/220/99 131/219/99 136/225/99 135/226/99 +f 134/219/100 133/227/100 130/228/100 129/225/100 +f 134/229/101 129/217/101 132/220/101 135/230/101 +f 130/218/102 133/221/102 136/224/102 131/219/102 +o CrucibleLeg1 +v -0.913320 0.837500 0.817650 +v -0.971063 0.837500 0.793732 +v -0.971063 0.962500 0.793732 +v -0.913320 0.962500 0.817650 +v -0.994980 0.837500 0.851474 +v -0.937238 0.837500 0.875392 +v -0.937238 0.962500 0.875392 +v -0.994980 0.962500 0.851474 +vt 0.007813 0.828125 +vt 0.015625 0.828125 +vt 0.015625 0.843750 +vt 0.007813 0.843750 +vt 0.023438 0.828125 +vt 0.031250 0.828125 +vt 0.031250 0.843750 +vt 0.023438 0.843750 +vt 0.015625 0.851563 +vt 0.007813 0.851563 +vt 0.023438 0.851563 +vt 0.000000 0.828125 +vt 0.000000 0.843750 +vn 0.382700 0.000000 -0.923900 +vn -0.382700 0.000000 0.923900 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.923900 0.000000 0.382700 +vn -0.923900 0.000000 -0.382700 +usemtl None +#s off +f 137/231/103 138/232/103 139/233/103 140/234/103 +f 141/235/104 142/236/104 143/237/104 144/238/104 +f 140/234/105 139/233/105 144/239/105 143/240/105 +f 142/233/106 141/238/106 138/241/106 137/239/106 +f 142/242/107 137/231/107 140/234/107 143/243/107 +f 138/232/108 141/235/108 144/238/108 139/233/108 +o Top +v 1.000000 0.587500 0.000000 +v -1.000000 0.587500 0.000000 +v -1.000000 0.837500 0.000000 +v 1.000000 0.837500 0.000000 +v -1.000000 0.587500 1.000000 +v 1.000000 0.587500 1.000000 +v 1.000000 0.837500 1.000000 +v -1.000000 0.837500 1.000000 +vt 0.125000 0.695313 +vt 0.375000 0.695313 +vt 0.375000 0.726563 +vt 0.125000 0.726563 +vt 0.500000 0.695313 +vt 0.750000 0.695313 +vt 0.750000 0.726563 +vt 0.500000 0.726563 +vt 0.375000 0.851563 +vt 0.125000 0.851563 +vt 0.625000 0.726563 +vt 0.625000 0.851563 +vt 0.000000 0.695313 +vt 0.000000 0.726563 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 1.000000 -0.000000 0.000000 +vn -1.000000 -0.000000 0.000000 +usemtl None +#s off +f 145/244/109 146/245/109 147/246/109 148/247/109 +f 149/248/110 150/249/110 151/250/110 152/251/110 +f 148/247/111 147/246/111 152/252/111 151/253/111 +f 150/246/112 149/254/112 146/255/112 145/252/112 +f 150/256/113 145/244/113 148/247/113 151/257/113 +f 146/245/114 149/248/114 152/251/114 147/246/114 +o Pillar2 +v -0.309500 -0.007739 0.312500 +v -0.674888 0.076617 0.312500 +v -0.534294 0.685599 0.312500 +v -0.168905 0.601242 0.312500 +v -0.674888 0.076617 0.687500 +v -0.309500 -0.007739 0.687500 +v -0.168905 0.601242 0.687500 +v -0.534294 0.685599 0.687500 +vt 0.046875 0.562500 +vt 0.093750 0.562500 +vt 0.093750 0.640625 +vt 0.046875 0.640625 +vt 0.140625 0.562500 +vt 0.187500 0.562500 +vt 0.187500 0.640625 +vt 0.140625 0.640625 +vt 0.093750 0.687500 +vt 0.046875 0.687500 +vt 0.140625 0.687500 +vt 0.000000 0.562500 +vt 0.000000 0.640625 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.225000 0.974400 0.000000 +vn -0.224900 -0.974400 -0.000000 +vn 0.974400 -0.225000 -0.000000 +vn -0.974400 0.225000 0.000000 +usemtl None +#s off +f 153/258/115 154/259/115 155/260/115 156/261/115 +f 157/262/116 158/263/116 159/264/116 160/265/116 +f 156/261/117 155/260/117 160/266/117 159/267/117 +f 158/260/118 157/265/118 154/268/118 153/266/118 +f 158/269/119 153/258/119 156/261/119 159/270/119 +f 154/259/120 157/262/120 160/265/120 155/260/120 +o Jar1 +v 0.920663 0.837500 0.377225 +v 0.737969 0.837500 0.419403 +v 0.737969 1.087500 0.419403 +v 0.920663 1.087500 0.377225 +v 0.780147 0.837500 0.602097 +v 0.962842 0.837500 0.559919 +v 0.962842 1.087500 0.559919 +v 0.780147 1.087500 0.602097 +vt 0.023438 0.406250 +vt 0.046875 0.406250 +vt 0.046875 0.437500 +vt 0.023438 0.437500 +vt 0.070313 0.406250 +vt 0.093750 0.406250 +vt 0.093750 0.437500 +vt 0.070313 0.437500 +vt 0.046875 0.460938 +vt 0.023438 0.460938 +vt 0.070313 0.460938 +vt 0.000000 0.406250 +vt 0.000000 0.437500 +vn -0.224900 0.000000 -0.974400 +vn 0.224900 -0.000000 0.974400 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.974400 0.000000 -0.225000 +vn -0.974400 0.000000 0.224900 +usemtl None +#s off +f 161/271/121 162/272/121 163/273/121 164/274/121 +f 165/275/122 166/276/122 167/277/122 168/278/122 +f 164/274/123 163/273/123 168/279/123 167/280/123 +f 166/273/124 165/278/124 162/281/124 161/279/124 +f 166/282/125 161/271/125 164/274/125 167/283/125 +f 162/272/126 165/275/126 168/278/126 163/273/126 +o Carpet1 +v 1.031250 0.524375 0.250000 +v 0.968750 0.524375 0.250000 +v 0.968750 0.836875 0.250000 +v 1.031250 0.836875 0.250000 +v 0.968750 0.524375 0.750000 +v 1.031250 0.524375 0.750000 +v 1.031250 0.836875 0.750000 +v 0.968750 0.836875 0.750000 +vt 0.695313 0.750000 +vt 0.703125 0.750000 +vt 0.703125 0.789063 +vt 0.695313 0.789063 +vt 0.765625 0.750000 +vt 0.773438 0.750000 +vt 0.773438 0.789063 +vt 0.765625 0.789063 +vt 0.703125 0.851563 +vt 0.695313 0.851563 +vt 0.710938 0.789063 +vt 0.710938 0.851563 +vt 0.632813 0.750000 +vt 0.632813 0.789063 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 1.000000 -0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +usemtl None +#s off +f 169/284/127 170/285/127 171/286/127 172/287/127 +f 173/288/128 174/289/128 175/290/128 176/291/128 +f 172/287/129 171/286/129 176/292/129 175/293/129 +f 174/286/130 173/294/130 170/295/130 169/292/130 +f 174/296/131 169/284/131 172/287/131 175/297/131 +f 170/285/132 173/288/132 176/291/132 171/286/132 +o CrucibleJarContent +v -0.709170 0.962500 0.733088 +v -0.824655 0.962500 0.685252 +v -0.824655 1.275000 0.685252 +v -0.709170 1.275000 0.733088 +v -0.872490 0.962500 0.800737 +v -0.757005 0.962500 0.848573 +v -0.757005 1.275000 0.848573 +v -0.872490 1.275000 0.800737 +vt 0.304688 0.179688 +vt 0.320313 0.179688 +vt 0.320313 0.218750 +vt 0.304688 0.218750 +vt 0.335938 0.179688 +vt 0.351563 0.179688 +vt 0.351563 0.218750 +vt 0.335938 0.218750 +vt 0.320313 0.234375 +vt 0.304688 0.234375 +vt 0.335938 0.234375 +vt 0.289063 0.179688 +vt 0.289063 0.218750 +vn 0.382700 0.000000 -0.923900 +vn -0.382700 -0.000000 0.923900 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.923900 0.000000 0.382700 +vn -0.923900 0.000000 -0.382700 +usemtl None +#s off +f 177/298/133 178/299/133 179/300/133 180/301/133 +f 181/302/134 182/303/134 183/304/134 184/305/134 +f 180/301/135 179/300/135 184/306/135 183/307/135 +f 182/300/136 181/305/136 178/308/136 177/306/136 +f 182/309/137 177/298/137 180/301/137 183/310/137 +f 178/299/138 181/302/138 184/305/138 179/300/138 +o CarpetLow2 +v -0.992678 0.412246 0.250000 +v -1.054228 0.423099 0.250000 +v -1.032522 0.546200 0.250000 +v -0.970972 0.535347 0.250000 +v -1.054228 0.423099 0.750000 +v -0.992678 0.412246 0.750000 +v -0.970972 0.535347 0.750000 +v -1.032522 0.546200 0.750000 +vt 0.843750 0.757813 +vt 0.851563 0.757813 +vt 0.851563 0.773438 +vt 0.843750 0.773438 +vt 0.914063 0.757813 +vt 0.921875 0.757813 +vt 0.921875 0.773438 +vt 0.914063 0.773438 +vt 0.851563 0.835938 +vt 0.843750 0.835938 +vt 0.859375 0.773438 +vt 0.859375 0.835938 +vt 0.781250 0.757813 +vt 0.781250 0.773438 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.173600 0.984800 0.000000 +vn -0.173600 -0.984800 -0.000000 +vn 0.984800 -0.173600 -0.000000 +vn -0.984800 0.173600 0.000000 +usemtl None +#s off +f 185/311/139 186/312/139 187/313/139 188/314/139 +f 189/315/140 190/316/140 191/317/140 192/318/140 +f 188/314/141 187/313/141 192/319/141 191/320/141 +f 190/313/142 189/321/142 186/322/142 185/319/142 +f 190/323/143 185/311/143 188/314/143 191/324/143 +f 186/312/144 189/315/144 192/318/144 187/313/144 +o CrucibleJar +v -0.668340 0.925000 0.716175 +v -0.841567 0.925000 0.644422 +v -0.841567 1.300000 0.644422 +v -0.668340 1.300000 0.716175 +v -0.913320 0.925000 0.817650 +v -0.740093 0.925000 0.889403 +v -0.740093 1.300000 0.889403 +v -0.913320 1.300000 0.817650 +vt 0.203125 0.179688 +vt 0.226563 0.179688 +vt 0.226563 0.226563 +vt 0.203125 0.226563 +vt 0.250000 0.179688 +vt 0.273438 0.179688 +vt 0.273438 0.226563 +vt 0.250000 0.226563 +vt 0.226563 0.250000 +vt 0.203125 0.250000 +vt 0.250000 0.250000 +vt 0.179688 0.179688 +vt 0.179688 0.226563 +vn 0.382700 0.000000 -0.923900 +vn -0.382700 -0.000000 0.923900 +vn 0.000000 1.000000 -0.000000 +vn -0.000000 -1.000000 0.000000 +vn 0.923900 -0.000000 0.382700 +vn -0.923900 0.000000 -0.382700 +usemtl None +#s off +f 193/325/145 194/326/145 195/327/145 196/328/145 +f 197/329/146 198/330/146 199/331/146 200/332/146 +f 196/328/147 195/327/147 200/333/147 199/334/147 +f 198/327/148 197/332/148 194/335/148 193/333/148 +f 198/336/149 193/325/149 196/328/149 199/337/149 +f 194/326/150 197/329/150 200/332/150 195/327/150 +o DecanterContent +v -0.147097 0.868750 0.757023 +v -0.267838 0.868750 0.789376 +v -0.267838 0.993750 0.789376 +v -0.147097 0.993750 0.757023 +v -0.235485 0.868750 0.910116 +v -0.114745 0.868750 0.877764 +v -0.114745 0.993750 0.877764 +v -0.235485 0.993750 0.910116 +vt 0.117188 0.015625 +vt 0.132813 0.015625 +vt 0.132813 0.031250 +vt 0.117188 0.031250 +vt 0.148438 0.015625 +vt 0.164063 0.015625 +vt 0.164063 0.031250 +vt 0.148438 0.031250 +vt 0.132813 0.046875 +vt 0.117188 0.046875 +vt 0.148438 0.046875 +vt 0.101563 0.015625 +vt 0.101563 0.031250 +vn -0.258800 0.000000 -0.965900 +vn 0.258800 0.000000 0.965900 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.965900 0.000000 -0.258800 +vn -0.965900 0.000000 0.258800 +usemtl None +#s off +f 201/338/151 202/339/151 203/340/151 204/341/151 +f 205/342/152 206/343/152 207/344/152 208/345/152 +f 204/341/153 203/340/153 208/346/153 207/347/153 +f 206/340/154 205/345/154 202/348/154 201/346/154 +f 206/349/155 201/338/155 204/341/155 207/350/155 +f 202/339/156 205/342/156 208/345/156 203/340/156 +o Pillar1 +v 0.674888 0.076617 0.312500 +v 0.309499 -0.007739 0.312500 +v 0.168905 0.601242 0.312500 +v 0.534294 0.685598 0.312500 +v 0.309499 -0.007739 0.687500 +v 0.674888 0.076617 0.687500 +v 0.534294 0.685598 0.687500 +v 0.168905 0.601242 0.687500 +vt 0.046875 0.562500 +vt 0.093750 0.562500 +vt 0.093750 0.640625 +vt 0.046875 0.640625 +vt 0.140625 0.562500 +vt 0.187500 0.562500 +vt 0.187500 0.640625 +vt 0.140625 0.640625 +vt 0.093750 0.687500 +vt 0.046875 0.687500 +vt 0.140625 0.687500 +vt 0.000000 0.562500 +vt 0.000000 0.640625 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.224900 0.974400 0.000000 +vn 0.224900 -0.974400 -0.000000 +vn 0.974400 0.225000 0.000000 +vn -0.974400 -0.225000 -0.000000 +usemtl None +#s off +f 209/351/157 210/352/157 211/353/157 212/354/157 +f 213/355/158 214/356/158 215/357/158 216/358/158 +f 212/354/159 211/353/159 216/359/159 215/360/159 +f 214/353/160 213/358/160 210/361/160 209/359/160 +f 214/362/161 209/351/161 212/354/161 215/363/161 +f 210/352/162 213/355/162 216/358/162 211/353/162 +o CrucibleSide4 +v -0.841567 0.962500 0.644422 +v -0.899310 0.962500 0.620504 +v -0.899310 1.025000 0.620504 +v -0.841567 1.025000 0.644422 +v -0.971063 0.962500 0.793732 +v -0.913320 0.962500 0.817650 +v -0.913320 1.025000 0.817650 +v -0.971063 1.025000 0.793732 +vt 0.078125 0.796875 +vt 0.085938 0.796875 +vt 0.085938 0.804688 +vt 0.078125 0.804688 +vt 0.109375 0.796875 +vt 0.117188 0.796875 +vt 0.117188 0.804688 +vt 0.109375 0.804688 +vt 0.085938 0.828125 +vt 0.078125 0.828125 +vt 0.093750 0.804688 +vt 0.093750 0.828125 +vt 0.054688 0.796875 +vt 0.054688 0.804688 +vn 0.382700 0.000000 -0.923900 +vn -0.382700 -0.000000 0.923900 +vn 0.000000 1.000000 -0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.923900 0.000000 0.382700 +vn -0.923900 0.000000 -0.382700 +usemtl None +#s off +f 217/364/163 218/365/163 219/366/163 220/367/163 +f 221/368/164 222/369/164 223/370/164 224/371/164 +f 220/367/165 219/366/165 224/372/165 223/373/165 +f 222/366/166 221/374/166 218/375/166 217/372/166 +f 222/376/167 217/364/167 220/367/167 223/377/167 +f 218/365/168 221/368/168 224/371/168 219/366/168 +o JarContent2 +v 0.853553 0.868750 0.809359 +v 0.765165 0.868750 0.720971 +v 0.765165 1.118750 0.720971 +v 0.853553 1.118750 0.809359 +v 0.676777 0.868750 0.809359 +v 0.765165 0.868750 0.897748 +v 0.765165 1.118750 0.897748 +v 0.676777 1.118750 0.809359 +vt 0.117188 0.312500 +vt 0.132813 0.312500 +vt 0.132813 0.343750 +vt 0.117188 0.343750 +vt 0.148438 0.312500 +vt 0.164063 0.312500 +vt 0.164063 0.343750 +vt 0.148438 0.343750 +vt 0.132813 0.359375 +vt 0.117188 0.359375 +vt 0.148438 0.359375 +vt 0.101563 0.312500 +vt 0.101563 0.343750 +vn 0.707100 0.000000 -0.707100 +vn -0.707100 0.000000 0.707100 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.707100 0.000000 0.707100 +vn -0.707100 0.000000 -0.707100 +usemtl None +#s off +f 225/378/169 226/379/169 227/380/169 228/381/169 +f 229/382/170 230/383/170 231/384/170 232/385/170 +f 228/381/171 227/380/171 232/386/171 231/387/171 +f 230/380/172 229/385/172 226/388/172 225/386/172 +f 230/389/173 225/378/173 228/381/173 231/390/173 +f 226/379/174 229/382/174 232/385/174 227/380/174 +o CarpetLowest1 +v 1.113075 0.330031 0.250000 +v 1.057387 0.301657 0.250000 +v 1.000638 0.413033 0.250000 +v 1.056326 0.441407 0.250000 +v 1.057387 0.301657 0.750000 +v 1.113075 0.330031 0.750000 +v 1.056326 0.441407 0.750000 +v 1.000638 0.413033 0.750000 +vt 0.843750 0.664063 +vt 0.851563 0.664063 +vt 0.851563 0.679688 +vt 0.843750 0.679688 +vt 0.914063 0.664063 +vt 0.921875 0.664063 +vt 0.921875 0.679688 +vt 0.914063 0.679688 +vt 0.851563 0.742188 +vt 0.843750 0.742188 +vt 0.859375 0.679688 +vt 0.859375 0.742188 +vt 0.781250 0.664063 +vt 0.781250 0.679688 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.454000 0.891000 0.000000 +vn 0.454000 -0.891000 -0.000000 +vn 0.891000 0.454000 0.000000 +vn -0.891000 -0.454000 -0.000000 +usemtl None +#s off +f 233/391/175 234/392/175 235/393/175 236/394/175 +f 237/395/176 238/396/176 239/397/176 240/398/176 +f 236/394/177 235/393/177 240/399/177 239/400/177 +f 238/393/178 237/401/178 234/402/178 233/399/178 +f 238/403/179 233/391/179 236/394/179 239/404/179 +f 234/392/180 237/395/180 240/398/180 235/393/180 +o Decanter3 +v -0.220741 1.087500 0.813602 +v -0.401852 1.087500 0.862131 +v -0.401852 1.150000 0.862131 +v -0.220741 1.150000 0.813602 +v -0.385676 1.087500 0.922501 +v -0.204564 1.087500 0.873973 +v -0.204564 1.150000 0.873973 +v -0.385676 1.150000 0.922501 +vt 0.007813 0.109375 +vt 0.031250 0.109375 +vt 0.031250 0.117188 +vt 0.007813 0.117188 +vt 0.039063 0.109375 +vt 0.062500 0.109375 +vt 0.062500 0.117188 +vt 0.039063 0.117188 +vt 0.031250 0.125000 +vt 0.007813 0.125000 +vt 0.054688 0.117188 +vt 0.054688 0.125000 +vt 0.000000 0.109375 +vt 0.000000 0.117188 +vn -0.258800 0.000000 -0.965900 +vn 0.258800 0.000000 0.965900 +vn 0.000000 1.000000 0.000000 +vn -0.000000 -1.000000 -0.000000 +vn 0.965900 0.000000 -0.258800 +vn -0.965900 0.000000 0.258800 +usemtl None +#s off +f 241/405/181 242/406/181 243/407/181 244/408/181 +f 245/409/182 246/410/182 247/411/182 248/412/182 +f 244/408/183 243/407/183 248/413/183 247/414/183 +f 246/407/184 245/415/184 242/416/184 241/413/184 +f 246/417/185 241/405/185 244/408/185 247/418/185 +f 242/406/186 245/409/186 248/412/186 243/407/186 +o CrucibleSide3 +v -0.610597 0.962500 0.740093 +v -0.668340 0.962500 0.716175 +v -0.668340 1.025000 0.716175 +v -0.610597 1.025000 0.740093 +v -0.740093 0.962500 0.889403 +v -0.682350 0.962500 0.913320 +v -0.682350 1.025000 0.913320 +v -0.740093 1.025000 0.889403 +vt 0.078125 0.796875 +vt 0.085938 0.796875 +vt 0.085938 0.804688 +vt 0.078125 0.804688 +vt 0.109375 0.796875 +vt 0.117188 0.796875 +vt 0.117188 0.804688 +vt 0.109375 0.804688 +vt 0.085938 0.828125 +vt 0.078125 0.828125 +vt 0.093750 0.804688 +vt 0.093750 0.828125 +vt 0.054688 0.796875 +vt 0.054688 0.804688 +vn 0.382700 0.000000 -0.923900 +vn -0.382700 -0.000000 0.923900 +vn -0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.923900 0.000000 0.382700 +vn -0.923900 0.000000 -0.382700 +usemtl None +#s off +f 249/419/187 250/420/187 251/421/187 252/422/187 +f 253/423/188 254/424/188 255/425/188 256/426/188 +f 252/422/189 251/421/189 256/427/189 255/428/189 +f 254/421/190 253/429/190 250/430/190 249/427/190 +f 254/431/191 249/419/191 252/422/191 255/432/191 +f 250/420/192 253/423/192 256/426/192 251/421/192 +o Recipe +v 0.746155 0.846250 0.501083 +v 0.490214 0.846250 0.775162 +v 0.216135 0.846250 0.519221 +v 0.472076 0.846250 0.245142 +vt 0.046875 0.953125 +vt 0.093750 0.953125 +vt 0.093750 1.000000 +vt 0.046875 1.000000 +vn 0.000000 1.000000 -0.000000 +usemtl None +#s off +f 260/433/193 259/434/193 258/435/193 257/436/193 +o CrucibleSide2 +v -0.586680 0.962500 0.682350 +v -0.875392 0.962500 0.562762 +v -0.875392 1.025000 0.562762 +v -0.586680 1.025000 0.682350 +v -0.899310 0.962500 0.620504 +v -0.610597 0.962500 0.740093 +v -0.610597 1.025000 0.740093 +v -0.899310 1.025000 0.620504 +vt 0.007813 0.765625 +vt 0.046875 0.765625 +vt 0.046875 0.773438 +vt 0.007813 0.773438 +vt 0.054688 0.765625 +vt 0.093750 0.765625 +vt 0.093750 0.773438 +vt 0.054688 0.773438 +vt 0.046875 0.781250 +vt 0.007813 0.781250 +vt 0.085938 0.773438 +vt 0.085938 0.781250 +vt 0.000000 0.765625 +vt 0.000000 0.773438 +vn 0.382700 0.000000 -0.923900 +vn -0.382700 0.000000 0.923900 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.923900 0.000000 0.382700 +vn -0.923900 0.000000 -0.382700 +usemtl None +#s off +f 261/437/194 262/438/194 263/439/194 264/440/194 +f 265/441/195 266/442/195 267/443/195 268/444/195 +f 264/440/196 263/439/196 268/445/196 267/446/196 +f 266/439/197 265/447/197 262/448/197 261/445/197 +f 266/449/198 261/437/198 264/440/198 267/450/198 +f 262/438/199 265/441/199 268/444/199 263/439/199 +o CrucibleLeg3 +v -0.586680 0.837500 0.682350 +v -0.644422 0.837500 0.658433 +v -0.644422 0.962500 0.658433 +v -0.586680 0.962500 0.682350 +v -0.668340 0.837500 0.716175 +v -0.610597 0.837500 0.740093 +v -0.610597 0.962500 0.740093 +v -0.668340 0.962500 0.716175 +vt 0.007813 0.828125 +vt 0.015625 0.828125 +vt 0.015625 0.843750 +vt 0.007813 0.843750 +vt 0.023438 0.828125 +vt 0.031250 0.828125 +vt 0.031250 0.843750 +vt 0.023438 0.843750 +vt 0.015625 0.851563 +vt 0.007813 0.851563 +vt 0.023438 0.851563 +vt 0.000000 0.828125 +vt 0.000000 0.843750 +vn 0.382700 0.000000 -0.923900 +vn -0.382700 -0.000000 0.923900 +vn -0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.923900 -0.000000 0.382700 +vn -0.923900 0.000000 -0.382700 +usemtl None +#s off +f 269/451/200 270/452/200 271/453/200 272/454/200 +f 273/455/201 274/456/201 275/457/201 276/458/201 +f 272/454/202 271/453/202 276/459/202 275/460/202 +f 274/453/203 273/458/203 270/461/203 269/459/203 +f 274/462/204 269/451/204 272/454/204 275/463/204 +f 270/452/205 273/455/205 276/458/205 271/453/205 diff --git a/src/main/resources/assets/bloodmagic/models/block/nothing.json b/src/main/resources/assets/bloodmagic/models/block/nothing.json new file mode 100644 index 00000000..0e0dcd23 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/nothing.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/opaquemimic.json b/src/main/resources/assets/bloodmagic/models/block/opaquemimic.json new file mode 100644 index 00000000..2b819ba0 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/opaquemimic.json @@ -0,0 +1,3 @@ +{ + "loader": "bloodmagic:mimicloader" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/pillar_bottom.json b/src/main/resources/assets/bloodmagic/models/block/pillar_bottom.json new file mode 100644 index 00000000..ffe9b20e --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/pillar_bottom.json @@ -0,0 +1,184 @@ +{ +"textures": { + "texture": "models/pillar_base_d" +}, +"elements": [ +{ + "__comment": "Base1", + "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 8, 8 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 8, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture", "cullface": "east" } + } +}, +{ + "__comment": "Base2", + "from": [ 1, 2, 1 ], + "to": [ 15, 3, 15 ], + "faces": { + "north": { "uv": [ 0, 8.5, 7.5, 9 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8.5, 7.5, 9 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8.5, 7.5, 9 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8.5, 7.5, 9 ], "texture": "#texture" } + } +}, +{ + "__comment": "Base3", + "from": [ 0, 3, 0 ], + "to": [ 16, 5, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 8, 8 ], "texture": "#texture" }, + "up": { "uv": [ 8, 8, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 8, 1 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 0, 8, 1 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 0, 8, 1 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 0, 8, 1 ], "texture": "#texture", "cullface": "east" } + } +}, +{ + "__comment": "Rim1", + "from": [ 3, 5, 13 ], + "to": [ 13, 6, 15 ], + "faces": { + "up": { "uv": [ 1.5, 7, 6.5, 8 ], "texture": "#texture" }, + "north": { "uv": [ 1.5, 7, 6.5, 7.5 ], "texture": "#texture" }, + "south": { "uv": [ 1.5, 7.5, 6.5, 8 ], "texture": "#texture" } + } +}, +{ + "__comment": "Rim2", + "from": [ 1, 5, 3 ], + "to": [ 3, 6, 13 ], + "faces": { + "up": { "uv": [ 0, 1.5, 1, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 1.5, 7.5, 6.5, 8 ], "texture": "#texture" }, + "east": { "uv": [ 1.5, 7, 6.5, 7.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Nook1", + "from": [ -1, -0.5, -1 ], + "to": [ 1, 2.5, 1 ], + "faces": { + "down": { "uv": [ 11.5, 0, 12.5, 1 ], "texture": "#texture", "cullface": "west" }, + "up": { "uv": [ 10, 0, 11, 1 ], "texture": "#texture", "cullface": "west" }, + "north": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture", "cullface": "west" }, + "south": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture", "cullface": "west" }, + "west": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture", "cullface": "west" } + } +}, +{ + "__comment": "Rim4", + "from": [ 3, 5, 1 ], + "to": [ 13, 6, 3 ], + "faces": { + "up": { "uv": [ 1.5, 0, 6.5, 1 ], "texture": "#texture" }, + "north": { "uv": [ 1.5, 7.5, 6.5, 8 ], "texture": "#texture" }, + "south": { "uv": [ 1.5, 7, 6.5, 7.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Rim4", + "from": [ 13, 5, 3 ], + "to": [ 15, 6, 13 ], + "faces": { + "up": { "uv": [ 7, 1.5, 8, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 1.5, 7, 6.5, 7.5 ], "texture": "#texture" }, + "east": { "uv": [ 1.5, 7.5, 6.5, 8 ], "texture": "#texture" } + } +}, +{ + "__comment": "Nook5", + "from": [ 1, 5, 13 ], + "to": [ 3, 8, 15 ], + "faces": { + "up": { "uv": [ 10, 0, 11, 1 ], "texture": "#texture" }, + "north": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture" }, + "south": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture" }, + "west": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture" }, + "east": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Nook6", + "from": [ 13, 5, 13 ], + "to": [ 15, 8, 15 ], + "faces": { + "up": { "uv": [ 10, 0, 11, 1 ], "texture": "#texture" }, + "north": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture" }, + "south": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture" }, + "west": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture" }, + "east": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Nook7", + "from": [ 13, 5, 1 ], + "to": [ 15, 8, 3 ], + "faces": { + "up": { "uv": [ 10, 0, 11, 1 ], "texture": "#texture" }, + "north": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture" }, + "south": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture" }, + "west": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture" }, + "east": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Nook8", + "from": [ 1, 5, 1 ], + "to": [ 3, 8, 3 ], + "faces": { + "up": { "uv": [ 10, 0, 11, 1 ], "texture": "#texture" }, + "north": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture" }, + "south": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture" }, + "west": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture" }, + "east": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Nook2", + "from": [ 15, -0.5, -1 ], + "to": [ 17, 2.5, 1 ], + "faces": { + "down": { "uv": [ 11.5, 0, 12.5, 1 ], "texture": "#texture", "cullface": "east" }, + "up": { "uv": [ 10, 0, 11, 1 ], "texture": "#texture", "cullface": "east" }, + "north": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture", "cullface": "east" }, + "south": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture", "cullface": "east" }, + "west": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture", "cullface": "east" }, + "east": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture", "cullface": "east" } + } +}, +{ + "__comment": "Nook3", + "from": [ 15, -0.5, 15 ], + "to": [ 17, 2.5, 17 ], + "faces": { + "down": { "uv": [ 11.5, 0, 12.5, 1 ], "texture": "#texture", "cullface": "east" }, + "up": { "uv": [ 10, 0, 11, 1 ], "texture": "#texture", "cullface": "east" }, + "north": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture", "cullface": "east" }, + "south": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture", "cullface": "east" }, + "west": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture", "cullface": "east" }, + "east": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture", "cullface": "east" } + } +}, +{ + "__comment": "Nook4", + "from": [ -1, -0.5, 15 ], + "to": [ 1, 2.5, 17 ], + "faces": { + "down": { "uv": [ 11.5, 0, 12.5, 1 ], "texture": "#texture", "cullface": "west" }, + "up": { "uv": [ 10, 0, 11, 1 ], "texture": "#texture", "cullface": "west" }, + "north": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture", "cullface": "west" }, + "south": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture", "cullface": "west" }, + "west": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 8.5, 0, 9.5, 1.5 ], "texture": "#texture", "cullface": "west" } + } +} +] +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/pillar_mid.json b/src/main/resources/assets/bloodmagic/models/block/pillar_mid.json new file mode 100644 index 00000000..98c53eac --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/pillar_mid.json @@ -0,0 +1,294 @@ +{ +"textures": { + "texture": "models/pillar_mid_d" +}, +"elements": [ +{ + "__comment": "Base1", + "from": [ 2, -7, 2 ], + "to": [ 14, -3, 14 ], + "faces": { + "down": { "uv": [ 8, 8, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 8, 8, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 6.5, 6, 8.5 ], "texture": "#texture" }, + "south": { "uv": [ 0, 6.5, 6, 8.5 ], "texture": "#texture" }, + "west": { "uv": [ 0, 6.5, 6, 8.5 ], "texture": "#texture" }, + "east": { "uv": [ 0, 6.5, 6, 8.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Rim1", + "from": [ 5, -3, 11 ], + "to": [ 11, 1, 14 ], + "faces": { + "up": { "uv": [ 5, 2.5, 8, 4 ], "texture": "#texture" }, + "north": { "uv": [ 1.5, 4.5, 4.5, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 1.5, 4.5, 4.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 8, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 8, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Rim2", + "from": [ 2, -3, 5 ], + "to": [ 5, 1, 11 ], + "faces": { + "up": { "uv": [ 5, 2.5, 8, 4 ], "rotation": 90, "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 8, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 8, 2 ], "texture": "#texture" }, + "west": { "uv": [ 1.5, 4.5, 4.5, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 1.5, 4.5, 4.5, 6.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Rim3", + "from": [ 5, -3, 2 ], + "to": [ 11, 1, 5 ], + "faces": { + "up": { "uv": [ 5, 2.5, 8, 4 ], "rotation": 180, "texture": "#texture" }, + "north": { "uv": [ 1.5, 4.5, 4.5, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 1.5, 4.5, 4.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 8, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 8, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Rim4", + "from": [ 11, -3, 5 ], + "to": [ 14, 1, 11 ], + "faces": { + "up": { "uv": [ 5, 2.5, 8, 4 ], "rotation": 270, "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 8, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 8, 2 ], "texture": "#texture" }, + "west": { "uv": [ 1.5, 4.5, 4.5, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 1.5, 4.5, 4.5, 6.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Mid1", + "from": [ 5, 1, 5 ], + "to": [ 11, 5, 11 ], + "faces": { + "down": { "uv": [ 10.5, 10.5, 13.5, 13.5 ], "texture": "#texture" }, + "up": { "uv": [ 10.5, 10.5, 13.5, 13.5 ], "texture": "#texture" }, + "north": { "uv": [ 8.5, 5, 11.5, 7 ], "texture": "#texture" }, + "south": { "uv": [ 8.5, 5, 11.5, 7 ], "texture": "#texture" }, + "west": { "uv": [ 8.5, 5, 11.5, 7 ], "texture": "#texture" }, + "east": { "uv": [ 8.5, 5, 11.5, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Nook", + "from": [ 11, -4, 11 ], + "to": [ 13, -1, 13 ], + "faces": { + "down": { "uv": [ 3, 9, 4, 10 ], "texture": "#texture" }, + "up": { "uv": [ 1.5, 9, 2.5, 10 ], "texture": "#texture" }, + "north": { "uv": [ 0, 9, 1, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 0, 9, 1, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 0, 9, 1, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 0, 9, 1, 10.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Nook2", + "from": [ 3, -4, 11 ], + "to": [ 5, -1, 13 ], + "faces": { + "down": { "uv": [ 3, 9, 4, 10 ], "texture": "#texture" }, + "up": { "uv": [ 1.5, 9, 2.5, 10 ], "texture": "#texture" }, + "north": { "uv": [ 0, 9, 1, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 0, 9, 1, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 0, 9, 1, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 0, 9, 1, 10.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Nook3", + "from": [ 3, -4, 3 ], + "to": [ 5, -1, 5 ], + "faces": { + "down": { "uv": [ 3, 9, 4, 10 ], "texture": "#texture" }, + "up": { "uv": [ 1.5, 9, 2.5, 10 ], "texture": "#texture" }, + "north": { "uv": [ 0, 9, 1, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 0, 9, 1, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 0, 9, 1, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 0, 9, 1, 10.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Nook4", + "from": [ 11, -4, 3 ], + "to": [ 13, -1, 5 ], + "faces": { + "down": { "uv": [ 3, 9, 4, 10 ], "texture": "#texture" }, + "up": { "uv": [ 1.5, 9, 2.5, 10 ], "texture": "#texture" }, + "north": { "uv": [ 0, 9, 1, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 0, 9, 1, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 0, 9, 1, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 0, 9, 1, 10.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Mid3", + "from": [ 5, 6, 5 ], + "to": [ 11, 10, 11 ], + "faces": { + "down": { "uv": [ 10.5, 10.5, 13.5, 13.5 ], "texture": "#texture", "cullface": "up" }, + "up": { "uv": [ 10.5, 10.5, 13.5, 13.5 ], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [ 8.5, 2.5, 11.5, 4.5 ], "texture": "#texture", "cullface": "up" }, + "south": { "uv": [ 8.5, 2.5, 11.5, 4.5 ], "texture": "#texture", "cullface": "up" }, + "west": { "uv": [ 8.5, 2.5, 11.5, 4.5 ], "texture": "#texture", "cullface": "up" }, + "east": { "uv": [ 8.5, 2.5, 11.5, 4.5 ], "texture": "#texture", "cullface": "up" } + } +}, +{ + "__comment": "Mid5", + "from": [ 5, 11, 5 ], + "to": [ 11, 15, 11 ], + "faces": { + "down": { "uv": [ 10.5, 10.5, 13.5, 13.5 ], "texture": "#texture", "cullface": "up" }, + "up": { "uv": [ 10.5, 10.5, 13.5, 13.5 ], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [ 8.5, 0, 11.5, 2 ], "texture": "#texture", "cullface": "up" }, + "south": { "uv": [ 8.5, 0, 11.5, 2 ], "texture": "#texture", "cullface": "up" }, + "west": { "uv": [ 8.5, 0, 11.5, 2 ], "texture": "#texture", "cullface": "up" }, + "east": { "uv": [ 8.5, 0, 11.5, 2 ], "texture": "#texture", "cullface": "up" } + } +}, +{ + "__comment": "Mid2", + "from": [ 5.5, 5, 5.5 ], + "to": [ 10.5, 6, 10.5 ], + "faces": { + "north": { "uv": [ 12, 2, 14.5, 2.5 ], "texture": "#texture" }, + "south": { "uv": [ 12, 2, 14.5, 2.5 ], "texture": "#texture" }, + "west": { "uv": [ 12, 2, 14.5, 2.5 ], "texture": "#texture" }, + "east": { "uv": [ 12, 2, 14.5, 2.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Mid4", + "from": [ 5.5, 10, 5.5 ], + "to": [ 10.5, 11, 10.5 ], + "faces": { + "north": { "uv": [ 12, 2, 14.5, 2.5 ], "texture": "#texture", "cullface": "up" }, + "south": { "uv": [ 12, 2, 14.5, 2.5 ], "texture": "#texture", "cullface": "up" }, + "west": { "uv": [ 12, 2, 14.5, 2.5 ], "texture": "#texture", "cullface": "up" }, + "east": { "uv": [ 12, 2, 14.5, 2.5 ], "texture": "#texture", "cullface": "up" } + } +}, +{ + "__comment": "Rim5", + "from": [ 5, 15, 11 ], + "to": [ 11, 19, 14 ], + "faces": { + "down": { "uv": [ 5, 2.5, 8, 4 ], "rotation": 180, "texture": "#texture", "cullface": "up" }, + "north": { "uv": [ 1.5, 2, 4.5, 4 ], "texture": "#texture", "cullface": "up" }, + "south": { "uv": [ 1.5, 2, 4.5, 4 ], "texture": "#texture", "cullface": "up" }, + "west": { "uv": [ 6.5, 0, 8, 2 ], "texture": "#texture", "cullface": "up" }, + "east": { "uv": [ 6.5, 0, 8, 2 ], "texture": "#texture", "cullface": "up" } + } +}, +{ + "__comment": "Rim6", + "from": [ 11, 15, 5 ], + "to": [ 14, 19, 11 ], + "faces": { + "down": { "uv": [ 5, 2.5, 8, 4 ], "rotation": 270, "texture": "#texture", "cullface": "up" }, + "north": { "uv": [ 6.5, 0, 8, 2 ], "texture": "#texture", "cullface": "up" }, + "south": { "uv": [ 6.5, 0, 8, 2 ], "texture": "#texture", "cullface": "up" }, + "west": { "uv": [ 1.5, 2, 4.5, 4 ], "texture": "#texture", "cullface": "up" }, + "east": { "uv": [ 1.5, 2, 4.5, 4 ], "texture": "#texture", "cullface": "up" } + } +}, +{ + "__comment": "Rim7", + "from": [ 2, 15, 5 ], + "to": [ 5, 19, 11 ], + "faces": { + "down": { "uv": [ 5, 2.5, 8, 4 ], "rotation": 90, "texture": "#texture", "cullface": "up" }, + "north": { "uv": [ 6.5, 0, 8, 2 ], "texture": "#texture", "cullface": "up" }, + "south": { "uv": [ 6.5, 0, 8, 2 ], "texture": "#texture", "cullface": "up" }, + "west": { "uv": [ 1.5, 2, 4.5, 4 ], "texture": "#texture", "cullface": "up" }, + "east": { "uv": [ 1.5, 2, 4.5, 4 ], "texture": "#texture", "cullface": "up" } + } +}, +{ + "__comment": "Rim8", + "from": [ 5, 15, 2 ], + "to": [ 11, 19, 5 ], + "faces": { + "down": { "uv": [ 5, 2.5, 8, 4 ], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [ 1.5, 2, 4.5, 4 ], "texture": "#texture", "cullface": "up" }, + "south": { "uv": [ 1.5, 2, 4.5, 4 ], "texture": "#texture", "cullface": "up" }, + "west": { "uv": [ 6.5, 0, 8, 2 ], "texture": "#texture", "cullface": "up" }, + "east": { "uv": [ 6.5, 0, 8, 2 ], "texture": "#texture", "cullface": "up" } + } +}, +{ + "__comment": "Base2", + "from": [ 2, 19, 2 ], + "to": [ 14, 23, 14 ], + "faces": { + "down": { "uv": [ 8, 8, 16, 16 ], "texture": "#texture", "cullface": "up" }, + "up": { "uv": [ 8, 8, 16, 16 ], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [ 0, 0, 6, 2 ], "texture": "#texture", "cullface": "up" }, + "south": { "uv": [ 0, 0, 6, 2 ], "texture": "#texture", "cullface": "up" }, + "west": { "uv": [ 0, 0, 6, 2 ], "texture": "#texture", "cullface": "up" }, + "east": { "uv": [ 0, 0, 6, 2 ], "texture": "#texture", "cullface": "up" } + } +}, +{ + "__comment": "Nook5", + "from": [ 11, 17, 11 ], + "to": [ 13, 20, 13 ], + "faces": { + "down": { "uv": [ 1.5, 9, 2.5, 10 ], "texture": "#texture", "cullface": "up" }, + "up": { "uv": [ 3, 9, 4, 10 ], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [ 0, 10.5, 1, 9 ], "texture": "#texture", "cullface": "up" }, + "south": { "uv": [ 0, 10.5, 1, 9 ], "texture": "#texture", "cullface": "up" }, + "west": { "uv": [ 0, 10.5, 1, 9 ], "texture": "#texture", "cullface": "up" }, + "east": { "uv": [ 0, 10.5, 1, 9 ], "texture": "#texture", "cullface": "up" } + } +}, +{ + "__comment": "Nook7", + "from": [ 3, 17, 11.5 ], + "to": [ 5, 20, 13.5 ], + "faces": { + "down": { "uv": [ 1.5, 9, 2.5, 10 ], "texture": "#texture", "cullface": "up" }, + "up": { "uv": [ 3, 9, 4, 10 ], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [ 0, 10.5, 1, 9 ], "texture": "#texture", "cullface": "up" }, + "south": { "uv": [ 0, 10.5, 1, 9 ], "texture": "#texture", "cullface": "up" }, + "west": { "uv": [ 0, 10.5, 1, 9 ], "texture": "#texture", "cullface": "up" }, + "east": { "uv": [ 0, 10.5, 1, 9 ], "texture": "#texture", "cullface": "up" } + } +}, +{ + "__comment": "Nook8", + "from": [ 3, 17, 3 ], + "to": [ 5, 20, 5 ], + "faces": { + "down": { "uv": [ 1.5, 9, 2.5, 10 ], "texture": "#texture", "cullface": "up" }, + "up": { "uv": [ 3, 9, 4, 10 ], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [ 0, 10.5, 1, 9 ], "texture": "#texture", "cullface": "up" }, + "south": { "uv": [ 0, 10.5, 1, 9 ], "texture": "#texture", "cullface": "up" }, + "west": { "uv": [ 0, 10.5, 1, 9 ], "texture": "#texture", "cullface": "up" }, + "east": { "uv": [ 0, 10.5, 1, 9 ], "texture": "#texture", "cullface": "up" } + } +}, +{ + "__comment": "Nook6", + "from": [ 11, 17, 3 ], + "to": [ 13, 20, 5 ], + "faces": { + "down": { "uv": [ 1.5, 9, 2.5, 10 ], "texture": "#texture", "cullface": "up" }, + "up": { "uv": [ 3, 9, 4, 10 ], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [ 0, 10.5, 1, 9 ], "texture": "#texture", "cullface": "up" }, + "south": { "uv": [ 0, 10.5, 1, 9 ], "texture": "#texture", "cullface": "up" }, + "west": { "uv": [ 0, 10.5, 1, 9 ], "texture": "#texture", "cullface": "up" }, + "east": { "uv": [ 0, 10.5, 1, 9 ], "texture": "#texture", "cullface": "up" } + } +} +] +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/pillar_top.json b/src/main/resources/assets/bloodmagic/models/block/pillar_top.json new file mode 100644 index 00000000..a18f8199 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/pillar_top.json @@ -0,0 +1,184 @@ +{ +"textures": { + "texture": "models/pillar_base_d" +}, +"elements": [ +{ + "__comment": "Base1", + "from": [ 0, 14, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 8, 8 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 8, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 7, 8, 8 ], "rotation": 180, "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 7, 8, 8 ], "rotation": 180, "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 7, 8, 8 ], "rotation": 180, "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 7, 8, 8 ], "rotation": 180, "texture": "#texture", "cullface": "east" } + } +}, +{ + "__comment": "Base2", + "from": [ 1, 13, 1 ], + "to": [ 15, 14, 15 ], + "faces": { + "north": { "uv": [ 0, 8.5, 7.5, 9 ], "rotation": 180, "texture": "#texture" }, + "south": { "uv": [ 0, 8.5, 7.5, 9 ], "rotation": 180, "texture": "#texture" }, + "west": { "uv": [ 0, 8.5, 7.5, 9 ], "rotation": 180, "texture": "#texture" }, + "east": { "uv": [ 0, 8.5, 7.5, 9 ], "rotation": 180, "texture": "#texture" } + } +}, +{ + "__comment": "Base3", + "from": [ 0, 11, 0 ], + "to": [ 16, 13, 16 ], + "faces": { + "down": { "uv": [ 8, 8, 16, 16 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 8, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 8, 1 ], "rotation": 180, "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 0, 8, 1 ], "rotation": 180, "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 0, 8, 1 ], "rotation": 180, "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 0, 8, 1 ], "rotation": 180, "texture": "#texture", "cullface": "east" } + } +}, +{ + "__comment": "Rim1", + "from": [ 3, 10, 1 ], + "to": [ 13, 11, 3 ], + "faces": { + "down": { "uv": [ 1.5, 7, 6.5, 8 ], "texture": "#texture" }, + "north": { "uv": [ 1.5, 7.5, 6.5, 8 ], "rotation": 180, "texture": "#texture" }, + "south": { "uv": [ 1.5, 7, 6.5, 7.5 ], "rotation": 180, "texture": "#texture" } + } +}, +{ + "__comment": "Rim2", + "from": [ 1, 10, 3 ], + "to": [ 3, 11, 13 ], + "faces": { + "down": { "uv": [ 0, 1.5, 1, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 1.5, 7.5, 6.5, 8 ], "rotation": 180, "texture": "#texture" }, + "east": { "uv": [ 1.5, 7, 6.5, 7.5 ], "rotation": 180, "texture": "#texture" } + } +}, +{ + "__comment": "Nook1", + "from": [ -1, 13.5, 15 ], + "to": [ 1, 16.5, 17 ], + "faces": { + "down": { "uv": [ 10, 0, 11, 1 ], "texture": "#texture", "cullface": "west" }, + "up": { "uv": [ 11.5, 0, 12.5, 1 ], "texture": "#texture", "cullface": "west" }, + "north": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture", "cullface": "west" }, + "south": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture", "cullface": "west" }, + "west": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture", "cullface": "west" } + } +}, +{ + "__comment": "Rim4", + "from": [ 3, 10, 13 ], + "to": [ 13, 11, 15 ], + "faces": { + "down": { "uv": [ 1.5, 0, 6.5, 1 ], "texture": "#texture" }, + "north": { "uv": [ 1.5, 7, 6.5, 7.5 ], "rotation": 180, "texture": "#texture" }, + "south": { "uv": [ 1.5, 7.5, 6.5, 8 ], "rotation": 180, "texture": "#texture" } + } +}, +{ + "__comment": "Rim4", + "from": [ 13, 10, 3 ], + "to": [ 15, 11, 13 ], + "faces": { + "down": { "uv": [ 7, 1.5, 8, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 1.5, 7, 6.5, 7.5 ], "rotation": 180, "texture": "#texture" }, + "east": { "uv": [ 1.5, 7.5, 6.5, 8 ], "rotation": 180, "texture": "#texture" } + } +}, +{ + "__comment": "Nook5", + "from": [ 1, 8, 1 ], + "to": [ 3, 11, 3 ], + "faces": { + "down": { "uv": [ 10, 0, 11, 1 ], "texture": "#texture" }, + "north": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture" }, + "south": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture" }, + "west": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture" }, + "east": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture" } + } +}, +{ + "__comment": "Nook6", + "from": [ 13, 8, 1 ], + "to": [ 15, 11, 3 ], + "faces": { + "down": { "uv": [ 10, 0, 11, 1 ], "texture": "#texture" }, + "north": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture" }, + "south": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture" }, + "west": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture" }, + "east": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture" } + } +}, +{ + "__comment": "Nook7", + "from": [ 13, 8, 13 ], + "to": [ 15, 11, 15 ], + "faces": { + "down": { "uv": [ 10, 0, 11, 1 ], "texture": "#texture" }, + "north": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture" }, + "south": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture" }, + "west": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture" }, + "east": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture" } + } +}, +{ + "__comment": "Nook8", + "from": [ 1, 8, 13 ], + "to": [ 3, 11, 15 ], + "faces": { + "down": { "uv": [ 10, 0, 11, 1 ], "texture": "#texture" }, + "north": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture" }, + "south": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture" }, + "west": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture" }, + "east": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture" } + } +}, +{ + "__comment": "Nook2", + "from": [ 15, 13.5, 15 ], + "to": [ 17, 16.5, 17 ], + "faces": { + "down": { "uv": [ 10, 0, 11, 1 ], "texture": "#texture", "cullface": "east" }, + "up": { "uv": [ 11.5, 0, 12.5, 1 ], "texture": "#texture", "cullface": "east" }, + "north": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture", "cullface": "east" }, + "south": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture", "cullface": "east" }, + "west": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture", "cullface": "east" }, + "east": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture", "cullface": "east" } + } +}, +{ + "__comment": "Nook3", + "from": [ 15, 13.5, -1 ], + "to": [ 17, 16.5, 1 ], + "faces": { + "down": { "uv": [ 10, 0, 11, 1 ], "texture": "#texture", "cullface": "east" }, + "up": { "uv": [ 11.5, 0, 12.5, 1 ], "texture": "#texture", "cullface": "east" }, + "north": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture", "cullface": "east" }, + "south": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture", "cullface": "east" }, + "west": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture", "cullface": "east" }, + "east": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture", "cullface": "east" } + } +}, +{ + "__comment": "Nook4", + "from": [ -1, 13.5, -1 ], + "to": [ 1, 16.5, 1 ], + "faces": { + "down": { "uv": [ 10, 0, 11, 1 ], "texture": "#texture", "cullface": "west" }, + "up": { "uv": [ 11.5, 0, 12.5, 1 ], "texture": "#texture", "cullface": "west" }, + "north": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture", "cullface": "west" }, + "south": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture", "cullface": "west" }, + "west": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 8.5, 0, 9.5, 1.5 ], "rotation": 180, "texture": "#texture", "cullface": "west" } + } +} +] +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/routing/modelmasterroutingnodebase.mtl b/src/main/resources/assets/bloodmagic/models/block/routing/modelmasterroutingnodebase.mtl new file mode 100644 index 00000000..d58e8ad1 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/routing/modelmasterroutingnodebase.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +#Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +#Ks 0.8 0.8 0.8 +d 1 +#illum 2 +map_Kd bloodmagic:models/ModelMasterRoutingNode \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/routing/modelmasterroutingnodebase.obj b/src/main/resources/assets/bloodmagic/models/block/routing/modelmasterroutingnodebase.obj new file mode 100644 index 00000000..14d04104 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/routing/modelmasterroutingnodebase.obj @@ -0,0 +1,360 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib ModelMasterRoutingNodeBase.mtl +o ModelMasterRoutingNodeBase +v 0.250000 0.062500 0.750000 +v 0.250000 -0.000000 0.750000 +v 0.750000 -0.000000 0.750000 +v 0.750000 0.062500 0.750000 +v 0.750000 0.062500 0.250000 +v 0.750000 0.000000 0.250000 +v 0.250000 0.000000 0.250000 +v 0.250000 0.062500 0.250000 +v 0.362465 0.389996 0.531250 +v 0.278129 0.024602 0.531250 +v 0.339027 0.010546 0.531250 +v 0.423364 0.375940 0.531250 +v 0.423364 0.375940 0.468750 +v 0.339027 0.010546 0.468750 +v 0.278129 0.024602 0.468750 +v 0.362465 0.389996 0.468750 +v 0.468750 0.375964 0.423360 +v 0.468750 0.010578 0.339023 +v 0.531250 0.010578 0.339023 +v 0.531250 0.375964 0.423360 +v 0.531250 0.390020 0.362462 +v 0.531250 0.024634 0.278126 +v 0.468750 0.024634 0.278126 +v 0.468750 0.390020 0.362462 +v 0.468750 0.389996 0.637535 +v 0.468750 0.024602 0.721871 +v 0.531250 0.024602 0.721871 +v 0.531250 0.389996 0.637535 +v 0.531250 0.375940 0.576636 +v 0.531250 0.010546 0.660972 +v 0.468750 0.010546 0.660972 +v 0.468750 0.375940 0.576636 +v 0.576640 0.375964 0.531250 +v 0.660976 0.010578 0.531250 +v 0.721874 0.024634 0.531250 +v 0.637538 0.390020 0.531250 +v 0.637538 0.390020 0.468750 +v 0.721874 0.024634 0.468750 +v 0.660976 0.010578 0.468750 +v 0.576640 0.375964 0.468750 +v 0.375000 0.156250 0.625000 +v 0.375000 0.031250 0.625000 +v 0.625000 0.031250 0.625000 +v 0.625000 0.156250 0.625000 +v 0.625000 0.156250 0.375000 +v 0.625000 0.031250 0.375000 +v 0.375000 0.031250 0.375000 +v 0.375000 0.156250 0.375000 +v 0.437500 0.250000 0.562500 +v 0.437500 0.125000 0.562500 +v 0.562500 0.125000 0.562500 +v 0.562500 0.250000 0.562500 +v 0.562500 0.250000 0.437500 +v 0.562500 0.125000 0.437500 +v 0.437500 0.125000 0.437500 +v 0.437500 0.250000 0.437500 +v 0.468750 0.343750 0.531250 +v 0.468750 0.218750 0.531250 +v 0.531250 0.218750 0.531250 +v 0.531250 0.343750 0.531250 +v 0.531250 0.343750 0.468750 +v 0.531250 0.218750 0.468750 +v 0.468750 0.218750 0.468750 +v 0.468750 0.343750 0.468750 +v 0.362465 0.389996 0.531250 +v 0.278129 0.024602 0.531250 +v 0.339027 0.010546 0.531250 +v 0.423364 0.375940 0.531250 +v 0.423364 0.375940 0.468750 +v 0.339027 0.010546 0.468750 +v 0.278129 0.024602 0.468750 +v 0.362465 0.389996 0.468750 +v 0.468750 0.375964 0.423360 +v 0.468750 0.010578 0.339023 +v 0.531250 0.010578 0.339023 +v 0.531250 0.375964 0.423360 +v 0.531250 0.390020 0.362462 +v 0.531250 0.024634 0.278126 +v 0.468750 0.024634 0.278126 +v 0.468750 0.390020 0.362462 +v 0.468750 0.389996 0.637535 +v 0.468750 0.024602 0.721871 +v 0.531250 0.024602 0.721871 +v 0.531250 0.389996 0.637535 +v 0.531250 0.375940 0.576636 +v 0.531250 0.010546 0.660972 +v 0.468750 0.010546 0.660972 +v 0.468750 0.375940 0.576636 +v 0.576640 0.375964 0.531250 +v 0.660976 0.010578 0.531250 +v 0.721874 0.024634 0.531250 +v 0.637538 0.390020 0.531250 +v 0.637538 0.390020 0.468750 +v 0.721874 0.024634 0.468750 +v 0.660976 0.010578 0.468750 +v 0.576640 0.375964 0.468750 +v 0.375000 0.156250 0.625000 +v 0.375000 0.031250 0.625000 +v 0.625000 0.031250 0.625000 +v 0.625000 0.156250 0.625000 +v 0.625000 0.156250 0.375000 +v 0.625000 0.031250 0.375000 +v 0.375000 0.031250 0.375000 +v 0.375000 0.156250 0.375000 +v 0.437500 0.250000 0.562500 +v 0.437500 0.125000 0.562500 +v 0.562500 0.125000 0.562500 +v 0.562500 0.250000 0.562500 +v 0.562500 0.250000 0.437500 +v 0.562500 0.125000 0.437500 +v 0.437500 0.125000 0.437500 +v 0.437500 0.250000 0.437500 +v 0.468750 0.343750 0.531250 +v 0.468750 0.218750 0.531250 +v 0.531250 0.218750 0.531250 +v 0.531250 0.343750 0.531250 +v 0.531250 0.343750 0.468750 +v 0.531250 0.218750 0.468750 +v 0.468750 0.218750 0.468750 +v 0.468750 0.343750 0.468750 +v 0.437500 0.250000 0.562500 +v 0.437500 0.125000 0.562500 +v 0.562500 0.125000 0.562500 +v 0.562500 0.250000 0.562500 +v 0.562500 0.250000 0.437500 +v 0.562500 0.125000 0.437500 +v 0.437500 0.125000 0.437500 +v 0.437500 0.250000 0.437500 +v 0.468750 0.343750 0.531250 +v 0.468750 0.218750 0.531250 +v 0.531250 0.218750 0.531250 +v 0.531250 0.343750 0.531250 +v 0.531250 0.343750 0.468750 +v 0.531250 0.218750 0.468750 +v 0.468750 0.218750 0.468750 +v 0.468750 0.343750 0.468750 +v 0.468750 0.343750 0.531250 +v 0.468750 0.218750 0.531250 +v 0.531250 0.218750 0.531250 +v 0.531250 0.343750 0.531250 +v 0.531250 0.343750 0.468750 +v 0.531250 0.218750 0.468750 +v 0.468750 0.218750 0.468750 +v 0.468750 0.343750 0.468750 +vt 0.140625 0.515625 +vt 0.140625 0.500000 +vt 0.265625 0.500000 +vt 0.265625 0.515625 +vt 0.390625 0.515625 +vt 0.390625 0.500000 +vt 0.515625 0.500000 +vt 0.515625 0.515625 +vt 0.140625 0.640625 +vt 0.265625 0.640625 +vt 0.390625 0.640625 +vt 0.015625 0.515625 +vt 0.015625 0.500000 +vt 0.093750 0.625000 +vt 0.093750 0.531250 +vt 0.109375 0.531250 +vt 0.109375 0.625000 +vt 0.125000 0.625000 +vt 0.125000 0.531250 +vt 0.140625 0.531250 +vt 0.140625 0.625000 +vt 0.093750 0.640625 +vt 0.109375 0.640625 +vt 0.125000 0.640625 +vt 0.078125 0.625000 +vt 0.078125 0.531250 +vt 0.046875 0.625000 +vt 0.046875 0.531250 +vt 0.062500 0.531250 +vt 0.062500 0.625000 +vt 0.046875 0.640625 +vt 0.062500 0.640625 +vt 0.078125 0.640625 +vt 0.031250 0.625000 +vt 0.031250 0.531250 +vt 0.015625 0.625000 +vt 0.015625 0.531250 +vt 0.015625 0.640625 +vt 0.031250 0.640625 +vt 0.000000 0.625000 +vt 0.000000 0.531250 +vt 0.593750 0.531250 +vt 0.593750 0.500000 +vt 0.656250 0.500000 +vt 0.656250 0.531250 +vt 0.718750 0.531250 +vt 0.718750 0.500000 +vt 0.781250 0.500000 +vt 0.781250 0.531250 +vt 0.593750 0.593750 +vt 0.656250 0.593750 +vt 0.718750 0.593750 +vt 0.531250 0.531250 +vt 0.531250 0.500000 +vt 0.828125 0.531250 +vt 0.828125 0.500000 +vt 0.859375 0.500000 +vt 0.859375 0.531250 +vt 0.890625 0.531250 +vt 0.890625 0.500000 +vt 0.921875 0.500000 +vt 0.921875 0.531250 +vt 0.828125 0.562500 +vt 0.859375 0.562500 +vt 0.890625 0.562500 +vt 0.796875 0.531250 +vt 0.796875 0.500000 +vt 0.953125 0.531250 +vt 0.953125 0.500000 +vt 0.968750 0.500000 +vt 0.968750 0.531250 +vt 0.984375 0.531250 +vt 0.984375 0.500000 +vt 1.000000 0.500000 +vt 1.000000 0.531250 +vt 0.953125 0.546875 +vt 0.968750 0.546875 +vt 0.984375 0.546875 +vt 0.937500 0.531250 +vt 0.937500 0.500000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.224900 0.974400 0.000000 +vn -0.224900 -0.974400 -0.000000 +vn 0.974400 -0.224900 0.000000 +vn -0.974400 0.224900 0.000000 +vn 0.000000 -0.224900 0.974400 +vn 0.000000 0.224900 -0.974400 +vn 0.000000 0.974400 0.224900 +vn 0.000000 -0.974400 -0.224900 +vn 0.000000 0.224900 0.974400 +vn 0.000000 -0.224900 -0.974400 +vn 0.000000 0.974400 -0.224900 +vn 0.000000 -0.974400 0.224900 +vn -0.224900 0.974400 0.000000 +vn 0.224900 -0.974400 -0.000000 +vn 0.974400 0.224900 0.000000 +vn -0.974400 -0.224900 0.000000 +usemtl None +#s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 8/9/3 1/1/3 4/4/3 5/10/3 +f 2/5/4 7/11/4 6/10/4 3/4/4 +f 5/5/5 4/4/5 3/3/5 6/6/5 +f 8/12/6 7/13/6 2/2/6 1/1/6 +f 9/14/1 10/15/1 11/16/1 12/17/1 +f 13/18/2 14/19/2 15/20/2 16/21/2 +f 16/22/7 9/14/7 12/17/7 13/23/7 +f 10/18/8 15/24/8 14/23/8 11/17/8 +f 13/18/9 12/17/9 11/16/9 14/19/9 +f 16/25/10 15/26/10 10/15/10 9/14/10 +f 17/27/11 18/28/11 19/29/11 20/30/11 +f 21/25/12 22/26/12 23/15/12 24/14/12 +f 24/31/13 17/27/13 20/30/13 21/32/13 +f 18/25/14 23/33/14 22/32/14 19/30/14 +f 21/25/5 20/30/5 19/29/5 22/26/5 +f 24/34/6 23/35/6 18/28/6 17/27/6 +f 25/36/15 26/37/15 27/35/15 28/34/15 +f 29/27/16 30/28/16 31/29/16 32/30/16 +f 32/38/17 25/36/17 28/34/17 29/39/17 +f 26/27/18 31/31/18 30/39/18 27/34/18 +f 29/27/5 28/34/5 27/35/5 30/28/5 +f 32/40/6 31/41/6 26/37/6 25/36/6 +f 33/30/1 34/29/1 35/26/1 36/25/1 +f 37/14/2 38/15/2 39/16/2 40/17/2 +f 40/32/19 33/30/19 36/25/19 37/33/19 +f 34/14/20 39/22/20 38/33/20 35/25/20 +f 37/14/21 36/25/21 35/26/21 38/15/21 +f 40/27/22 39/28/22 34/29/22 33/30/22 +f 41/42/1 42/43/1 43/44/1 44/45/1 +f 45/46/2 46/47/2 47/48/2 48/49/2 +f 48/50/3 41/42/3 44/45/3 45/51/3 +f 42/46/4 47/52/4 46/51/4 43/45/4 +f 45/46/5 44/45/5 43/44/5 46/47/5 +f 48/53/6 47/54/6 42/43/6 41/42/6 +f 49/55/1 50/56/1 51/57/1 52/58/1 +f 53/59/2 54/60/2 55/61/2 56/62/2 +f 56/63/3 49/55/3 52/58/3 53/64/3 +f 50/59/4 55/65/4 54/64/4 51/58/4 +f 53/59/5 52/58/5 51/57/5 54/60/5 +f 56/66/6 55/67/6 50/56/6 49/55/6 +f 57/68/1 58/69/1 59/70/1 60/71/1 +f 61/72/2 62/73/2 63/74/2 64/75/2 +f 64/76/3 57/68/3 60/71/3 61/77/3 +f 58/72/4 63/78/4 62/77/4 59/71/4 +f 61/72/5 60/71/5 59/70/5 62/73/5 +f 64/79/6 63/80/6 58/69/6 57/68/6 +f 65/14/1 66/15/1 67/16/1 68/17/1 +f 69/18/2 70/19/2 71/20/2 72/21/2 +f 72/22/7 65/14/7 68/17/7 69/23/7 +f 66/18/8 71/24/8 70/23/8 67/17/8 +f 69/18/9 68/17/9 67/16/9 70/19/9 +f 72/25/10 71/26/10 66/15/10 65/14/10 +f 73/27/11 74/28/11 75/29/11 76/30/11 +f 77/25/12 78/26/12 79/15/12 80/14/12 +f 80/31/13 73/27/13 76/30/13 77/32/13 +f 74/25/14 79/33/14 78/32/14 75/30/14 +f 77/25/5 76/30/5 75/29/5 78/26/5 +f 80/34/6 79/35/6 74/28/6 73/27/6 +f 81/36/15 82/37/15 83/35/15 84/34/15 +f 85/27/16 86/28/16 87/29/16 88/30/16 +f 88/38/17 81/36/17 84/34/17 85/39/17 +f 82/27/18 87/31/18 86/39/18 83/34/18 +f 85/27/5 84/34/5 83/35/5 86/28/5 +f 88/40/6 87/41/6 82/37/6 81/36/6 +f 89/30/1 90/29/1 91/26/1 92/25/1 +f 93/14/2 94/15/2 95/16/2 96/17/2 +f 96/32/19 89/30/19 92/25/19 93/33/19 +f 90/14/20 95/22/20 94/33/20 91/25/20 +f 93/14/21 92/25/21 91/26/21 94/15/21 +f 96/27/22 95/28/22 90/29/22 89/30/22 +f 97/42/1 98/43/1 99/44/1 100/45/1 +f 101/46/2 102/47/2 103/48/2 104/49/2 +f 104/50/3 97/42/3 100/45/3 101/51/3 +f 98/46/4 103/52/4 102/51/4 99/45/4 +f 101/46/5 100/45/5 99/44/5 102/47/5 +f 104/53/6 103/54/6 98/43/6 97/42/6 +f 105/55/1 106/56/1 107/57/1 108/58/1 +f 109/59/2 110/60/2 111/61/2 112/62/2 +f 112/63/3 105/55/3 108/58/3 109/64/3 +f 106/59/4 111/65/4 110/64/4 107/58/4 +f 109/59/5 108/58/5 107/57/5 110/60/5 +f 112/66/6 111/67/6 106/56/6 105/55/6 +f 113/68/1 114/69/1 115/70/1 116/71/1 +f 117/72/2 118/73/2 119/74/2 120/75/2 +f 120/76/3 113/68/3 116/71/3 117/77/3 +f 114/72/4 119/78/4 118/77/4 115/71/4 +f 117/72/5 116/71/5 115/70/5 118/73/5 +f 120/79/6 119/80/6 114/69/6 113/68/6 +f 121/55/1 122/56/1 123/57/1 124/58/1 +f 125/59/2 126/60/2 127/61/2 128/62/2 +f 128/63/3 121/55/3 124/58/3 125/64/3 +f 122/59/4 127/65/4 126/64/4 123/58/4 +f 125/59/5 124/58/5 123/57/5 126/60/5 +f 128/66/6 127/67/6 122/56/6 121/55/6 +f 129/68/1 130/69/1 131/70/1 132/71/1 +f 133/72/2 134/73/2 135/74/2 136/75/2 +f 136/76/3 129/68/3 132/71/3 133/77/3 +f 130/72/4 135/78/4 134/77/4 131/71/4 +f 133/72/5 132/71/5 131/70/5 134/73/5 +f 136/79/6 135/80/6 130/69/6 129/68/6 +f 137/68/1 138/69/1 139/70/1 140/71/1 +f 141/72/2 142/73/2 143/74/2 144/75/2 +f 144/76/3 137/68/3 140/71/3 141/77/3 +f 138/72/4 143/78/4 142/77/4 139/71/4 +f 141/72/5 140/71/5 139/70/5 142/73/5 +f 144/79/6 143/80/6 138/69/6 137/68/6 diff --git a/src/main/resources/assets/bloodmagic/models/block/routing/modelmasterroutingnodecore.mtl b/src/main/resources/assets/bloodmagic/models/block/routing/modelmasterroutingnodecore.mtl new file mode 100644 index 00000000..d58e8ad1 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/routing/modelmasterroutingnodecore.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +#Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +#Ks 0.8 0.8 0.8 +d 1 +#illum 2 +map_Kd bloodmagic:models/ModelMasterRoutingNode \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/routing/modelmasterroutingnodecore.obj b/src/main/resources/assets/bloodmagic/models/block/routing/modelmasterroutingnodecore.obj new file mode 100644 index 00000000..3a13a61e --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/routing/modelmasterroutingnodecore.obj @@ -0,0 +1,66 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib ModelMasterRoutingNodeCore.mtl +o ModelMasterRoutingNodeCore +v 0.343750 0.656250 0.656250 +v 0.343750 0.343750 0.656250 +v 0.656250 0.343750 0.656250 +v 0.656250 0.656250 0.656250 +v 0.656250 0.656250 0.343750 +v 0.656250 0.343750 0.343750 +v 0.343750 0.343750 0.343750 +v 0.343750 0.656250 0.343750 +v 0.406250 0.593750 0.593750 +v 0.406250 0.406250 0.593750 +v 0.593750 0.406250 0.593750 +v 0.593750 0.593750 0.593750 +v 0.593750 0.593750 0.406250 +v 0.593750 0.406250 0.406250 +v 0.406250 0.406250 0.406250 +v 0.406250 0.593750 0.406250 +vt 0.078125 0.921875 +vt 0.078125 0.843750 +vt 0.156250 0.843750 +vt 0.156250 0.921875 +vt 0.234375 0.921875 +vt 0.234375 0.843750 +vt 0.312500 0.843750 +vt 0.312500 0.921875 +vt 0.078125 1.000000 +vt 0.156250 1.000000 +vt 0.234375 1.000000 +vt 0.000000 0.921875 +vt 0.000000 0.843750 +vt 0.046875 0.781250 +vt 0.046875 0.734375 +vt 0.093750 0.734375 +vt 0.093750 0.781250 +vt 0.140625 0.781250 +vt 0.140625 0.734375 +vt 0.187500 0.734375 +vt 0.187500 0.781250 +vt 0.046875 0.828125 +vt 0.093750 0.828125 +vt 0.140625 0.828125 +vt 0.000000 0.781250 +vt 0.000000 0.734375 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +usemtl None +#s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 8/9/3 1/1/3 4/4/3 5/10/3 +f 2/5/4 7/11/4 6/10/4 3/4/4 +f 5/5/5 4/4/5 3/3/5 6/6/5 +f 8/12/6 7/13/6 2/2/6 1/1/6 +f 9/14/1 10/15/1 11/16/1 12/17/1 +f 13/18/2 14/19/2 15/20/2 16/21/2 +f 16/22/3 9/14/3 12/17/3 13/23/3 +f 10/18/4 15/24/4 14/23/4 11/17/4 +f 13/18/5 12/17/5 11/16/5 14/19/5 +f 16/25/6 15/26/6 10/15/6 9/14/6 diff --git a/src/main/resources/assets/bloodmagic/models/block/routing/modelroutingnodebase.mtl b/src/main/resources/assets/bloodmagic/models/block/routing/modelroutingnodebase.mtl new file mode 100644 index 00000000..70541b14 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/routing/modelroutingnodebase.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +#Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +#Ks 0.8 0.8 0.8 +d 1 +#illum 2 +map_Kd node \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/routing/modelroutingnodebase.obj b/src/main/resources/assets/bloodmagic/models/block/routing/modelroutingnodebase.obj new file mode 100644 index 00000000..ff7b3e20 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/routing/modelroutingnodebase.obj @@ -0,0 +1,444 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib ModelRoutingNodeBase.mtl +o ModelRoutingNode +v 0.312500 0.062500 0.687500 +v 0.312500 -0.000000 0.687500 +v 0.687500 -0.000000 0.687500 +v 0.687500 0.062500 0.687500 +v 0.687500 0.062500 0.312500 +v 0.687500 0.000000 0.312500 +v 0.312500 0.000000 0.312500 +v 0.312500 0.062500 0.312500 +v 0.389168 0.422318 0.531250 +v 0.304832 0.056925 0.531250 +v 0.365731 0.042869 0.531250 +v 0.450067 0.408262 0.531250 +v 0.450067 0.408262 0.468750 +v 0.365731 0.042869 0.468750 +v 0.304832 0.056925 0.468750 +v 0.389168 0.422318 0.468750 +v 0.468750 0.408285 0.450063 +v 0.468750 0.042900 0.365726 +v 0.531250 0.042900 0.365726 +v 0.531250 0.408285 0.450063 +v 0.531250 0.422341 0.389165 +v 0.531250 0.056956 0.304829 +v 0.468750 0.056956 0.304829 +v 0.468750 0.422341 0.389165 +v 0.468750 0.422318 0.610832 +v 0.468750 0.056925 0.695168 +v 0.531250 0.056925 0.695168 +v 0.531250 0.422318 0.610832 +v 0.531250 0.408262 0.549933 +v 0.531250 0.042869 0.634269 +v 0.468750 0.042869 0.634269 +v 0.468750 0.408262 0.549933 +v 0.549937 0.408285 0.531250 +v 0.634273 0.042900 0.531250 +v 0.695171 0.056956 0.531250 +v 0.610835 0.422341 0.531250 +v 0.610835 0.422341 0.468750 +v 0.695171 0.056956 0.468750 +v 0.634273 0.042900 0.468750 +v 0.549937 0.408285 0.468750 +v 0.437500 0.125000 0.562500 +v 0.437500 0.062500 0.562500 +v 0.562500 0.062500 0.562500 +v 0.562500 0.125000 0.562500 +v 0.562500 0.125000 0.437500 +v 0.562500 0.062500 0.437500 +v 0.437500 0.062500 0.437500 +v 0.437500 0.125000 0.437500 +v 0.468750 0.187500 0.531250 +v 0.468750 0.125000 0.531250 +v 0.531250 0.125000 0.531250 +v 0.531250 0.187500 0.531250 +v 0.531250 0.187500 0.468750 +v 0.531250 0.125000 0.468750 +v 0.468750 0.125000 0.468750 +v 0.468750 0.187500 0.468750 +v 0.437500 0.062500 0.312500 +v 0.437500 0.000000 0.312500 +v 0.562500 0.000000 0.312500 +v 0.562500 0.062500 0.312500 +v 0.562500 0.062500 0.250000 +v 0.562500 0.000000 0.250000 +v 0.437500 0.000000 0.250000 +v 0.437500 0.062500 0.250000 +v 0.687500 0.062500 0.562500 +v 0.687500 -0.000000 0.562500 +v 0.750000 -0.000000 0.562500 +v 0.750000 0.062500 0.562500 +v 0.750000 0.062500 0.437500 +v 0.750000 0.000000 0.437500 +v 0.687500 0.000000 0.437500 +v 0.687500 0.062500 0.437500 +v 0.437500 0.062500 0.750000 +v 0.437500 -0.000000 0.750000 +v 0.562500 -0.000000 0.750000 +v 0.562500 0.062500 0.750000 +v 0.562500 0.062500 0.687500 +v 0.562500 -0.000000 0.687500 +v 0.437500 -0.000000 0.687500 +v 0.437500 0.062500 0.687500 +v 0.250000 0.062500 0.562500 +v 0.250000 -0.000000 0.562500 +v 0.312500 -0.000000 0.562500 +v 0.312500 0.062500 0.562500 +v 0.312500 0.062500 0.437500 +v 0.312500 0.000000 0.437500 +v 0.250000 0.000000 0.437500 +v 0.250000 0.062500 0.437500 +v 0.389168 0.422318 0.531250 +v 0.304832 0.056925 0.531250 +v 0.365731 0.042869 0.531250 +v 0.450067 0.408262 0.531250 +v 0.450067 0.408262 0.468750 +v 0.365731 0.042869 0.468750 +v 0.304832 0.056925 0.468750 +v 0.389168 0.422318 0.468750 +v 0.468750 0.408285 0.450063 +v 0.468750 0.042900 0.365726 +v 0.531250 0.042900 0.365726 +v 0.531250 0.408285 0.450063 +v 0.531250 0.422341 0.389165 +v 0.531250 0.056956 0.304829 +v 0.468750 0.056956 0.304829 +v 0.468750 0.422341 0.389165 +v 0.468750 0.422318 0.610832 +v 0.468750 0.056925 0.695168 +v 0.531250 0.056925 0.695168 +v 0.531250 0.422318 0.610832 +v 0.531250 0.408262 0.549933 +v 0.531250 0.042869 0.634269 +v 0.468750 0.042869 0.634269 +v 0.468750 0.408262 0.549933 +v 0.549937 0.408285 0.531250 +v 0.634273 0.042900 0.531250 +v 0.695171 0.056956 0.531250 +v 0.610835 0.422341 0.531250 +v 0.610835 0.422341 0.468750 +v 0.695171 0.056956 0.468750 +v 0.634273 0.042900 0.468750 +v 0.549937 0.408285 0.468750 +v 0.437500 0.125000 0.562500 +v 0.437500 0.062500 0.562500 +v 0.562500 0.062500 0.562500 +v 0.562500 0.125000 0.562500 +v 0.562500 0.125000 0.437500 +v 0.562500 0.062500 0.437500 +v 0.437500 0.062500 0.437500 +v 0.437500 0.125000 0.437500 +v 0.468750 0.187500 0.531250 +v 0.468750 0.125000 0.531250 +v 0.531250 0.125000 0.531250 +v 0.531250 0.187500 0.531250 +v 0.531250 0.187500 0.468750 +v 0.531250 0.125000 0.468750 +v 0.468750 0.125000 0.468750 +v 0.468750 0.187500 0.468750 +v 0.437500 0.062500 0.312500 +v 0.437500 0.000000 0.312500 +v 0.562500 0.000000 0.312500 +v 0.562500 0.062500 0.312500 +v 0.562500 0.062500 0.250000 +v 0.562500 0.000000 0.250000 +v 0.437500 0.000000 0.250000 +v 0.437500 0.062500 0.250000 +v 0.687500 0.062500 0.562500 +v 0.687500 -0.000000 0.562500 +v 0.750000 -0.000000 0.562500 +v 0.750000 0.062500 0.562500 +v 0.750000 0.062500 0.437500 +v 0.750000 0.000000 0.437500 +v 0.687500 0.000000 0.437500 +v 0.687500 0.062500 0.437500 +v 0.437500 0.062500 0.750000 +v 0.437500 -0.000000 0.750000 +v 0.562500 -0.000000 0.750000 +v 0.562500 0.062500 0.750000 +v 0.562500 0.062500 0.687500 +v 0.562500 -0.000000 0.687500 +v 0.437500 -0.000000 0.687500 +v 0.437500 0.062500 0.687500 +v 0.250000 0.062500 0.562500 +v 0.250000 -0.000000 0.562500 +v 0.312500 -0.000000 0.562500 +v 0.312500 0.062500 0.562500 +v 0.312500 0.062500 0.437500 +v 0.312500 0.000000 0.437500 +v 0.250000 0.000000 0.437500 +v 0.250000 0.062500 0.437500 +v 0.468750 0.187500 0.531250 +v 0.468750 0.125000 0.531250 +v 0.531250 0.125000 0.531250 +v 0.531250 0.187500 0.531250 +v 0.531250 0.187500 0.468750 +v 0.531250 0.125000 0.468750 +v 0.468750 0.125000 0.468750 +v 0.468750 0.187500 0.468750 +vt 0.093750 0.515625 +vt 0.093750 0.500000 +vt 0.187500 0.500000 +vt 0.187500 0.515625 +vt 0.281250 0.515625 +vt 0.281250 0.500000 +vt 0.375000 0.500000 +vt 0.375000 0.515625 +vt 0.093750 0.609375 +vt 0.187500 0.609375 +vt 0.281250 0.609375 +vt 0.000000 0.515625 +vt 0.000000 0.500000 +vt 0.015625 0.625000 +vt 0.015625 0.531250 +vt 0.031250 0.531250 +vt 0.031250 0.625000 +vt 0.046875 0.625000 +vt 0.046875 0.531250 +vt 0.062500 0.531250 +vt 0.062500 0.625000 +vt 0.015625 0.640625 +vt 0.031250 0.640625 +vt 0.046875 0.640625 +vt 0.000000 0.625000 +vt 0.000000 0.531250 +vt 0.421875 0.515625 +vt 0.421875 0.500000 +vt 0.453125 0.500000 +vt 0.453125 0.515625 +vt 0.484375 0.515625 +vt 0.484375 0.500000 +vt 0.515625 0.500000 +vt 0.515625 0.515625 +vt 0.421875 0.546875 +vt 0.453125 0.546875 +vt 0.484375 0.546875 +vt 0.390625 0.515625 +vt 0.390625 0.500000 +vt 0.546875 0.515625 +vt 0.546875 0.500000 +vt 0.562500 0.500000 +vt 0.562500 0.515625 +vt 0.578125 0.515625 +vt 0.578125 0.500000 +vt 0.593750 0.500000 +vt 0.593750 0.515625 +vt 0.546875 0.531250 +vt 0.562500 0.531250 +vt 0.578125 0.531250 +vt 0.531250 0.515625 +vt 0.531250 0.500000 +vt 0.625000 0.515625 +vt 0.625000 0.500000 +vt 0.656250 0.500000 +vt 0.656250 0.515625 +vt 0.671875 0.515625 +vt 0.671875 0.500000 +vt 0.703125 0.500000 +vt 0.703125 0.515625 +vt 0.625000 0.531250 +vt 0.656250 0.531250 +vt 0.687500 0.515625 +vt 0.687500 0.531250 +vt 0.609375 0.515625 +vt 0.609375 0.500000 +vt 0.750000 0.515625 +vt 0.750000 0.500000 +vt 0.765625 0.500000 +vt 0.765625 0.515625 +vt 0.796875 0.515625 +vt 0.796875 0.500000 +vt 0.812500 0.500000 +vt 0.812500 0.515625 +vt 0.750000 0.546875 +vt 0.765625 0.546875 +vt 0.781250 0.515625 +vt 0.781250 0.546875 +vt 0.718750 0.515625 +vt 0.718750 0.500000 +vt 0.625000 0.562500 +vt 0.625000 0.546875 +vt 0.656250 0.546875 +vt 0.656250 0.562500 +vt 0.671875 0.562500 +vt 0.671875 0.546875 +vt 0.703125 0.546875 +vt 0.703125 0.562500 +vt 0.625000 0.578125 +vt 0.656250 0.578125 +vt 0.687500 0.562500 +vt 0.687500 0.578125 +vt 0.609375 0.562500 +vt 0.609375 0.546875 +vt 0.750000 0.578125 +vt 0.750000 0.562500 +vt 0.765625 0.562500 +vt 0.765625 0.578125 +vt 0.796875 0.578125 +vt 0.796875 0.562500 +vt 0.812500 0.562500 +vt 0.812500 0.578125 +vt 0.750000 0.609375 +vt 0.765625 0.609375 +vt 0.781250 0.578125 +vt 0.781250 0.609375 +vt 0.718750 0.578125 +vt 0.718750 0.562500 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.224900 0.974400 0.000000 +vn -0.224900 -0.974400 -0.000000 +vn 0.974400 -0.224900 0.000000 +vn -0.974400 0.224900 0.000000 +vn 0.000000 -0.224900 0.974400 +vn 0.000000 0.224900 -0.974400 +vn 0.000000 0.974400 0.224900 +vn 0.000000 -0.974400 -0.224900 +vn 0.000000 0.224900 0.974400 +vn 0.000000 -0.224900 -0.974400 +vn 0.000000 0.974400 -0.224900 +vn 0.000000 -0.974400 0.224900 +vn -0.224900 0.974400 0.000000 +vn 0.224900 -0.974400 -0.000000 +vn 0.974400 0.224900 0.000000 +vn -0.974400 -0.224900 0.000000 +usemtl None +#s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 8/9/3 1/1/3 4/4/3 5/10/3 +f 2/5/4 7/11/4 6/10/4 3/4/4 +f 5/5/5 4/4/5 3/3/5 6/6/5 +f 8/12/6 7/13/6 2/2/6 1/1/6 +f 9/14/1 10/15/1 11/16/1 12/17/1 +f 13/18/2 14/19/2 15/20/2 16/21/2 +f 16/22/7 9/14/7 12/17/7 13/23/7 +f 10/18/8 15/24/8 14/23/8 11/17/8 +f 13/18/9 12/17/9 11/16/9 14/19/9 +f 16/25/10 15/26/10 10/15/10 9/14/10 +f 17/14/11 18/15/11 19/16/11 20/17/11 +f 21/18/12 22/19/12 23/20/12 24/21/12 +f 24/22/13 17/14/13 20/17/13 21/23/13 +f 18/18/14 23/24/14 22/23/14 19/17/14 +f 21/18/5 20/17/5 19/16/5 22/19/5 +f 24/25/6 23/26/6 18/15/6 17/14/6 +f 25/14/15 26/15/15 27/16/15 28/17/15 +f 29/18/16 30/19/16 31/20/16 32/21/16 +f 32/22/17 25/14/17 28/17/17 29/23/17 +f 26/18/18 31/24/18 30/23/18 27/17/18 +f 29/18/5 28/17/5 27/16/5 30/19/5 +f 32/25/6 31/26/6 26/15/6 25/14/6 +f 33/14/1 34/15/1 35/16/1 36/17/1 +f 37/18/2 38/19/2 39/20/2 40/21/2 +f 40/22/19 33/14/19 36/17/19 37/23/19 +f 34/18/20 39/24/20 38/23/20 35/17/20 +f 37/18/21 36/17/21 35/16/21 38/19/21 +f 40/25/22 39/26/22 34/15/22 33/14/22 +f 41/27/1 42/28/1 43/29/1 44/30/1 +f 45/31/2 46/32/2 47/33/2 48/34/2 +f 48/35/3 41/27/3 44/30/3 45/36/3 +f 42/31/4 47/37/4 46/36/4 43/30/4 +f 45/31/5 44/30/5 43/29/5 46/32/5 +f 48/38/6 47/39/6 42/28/6 41/27/6 +f 49/40/1 50/41/1 51/42/1 52/43/1 +f 53/44/2 54/45/2 55/46/2 56/47/2 +f 56/48/3 49/40/3 52/43/3 53/49/3 +f 50/44/4 55/50/4 54/49/4 51/43/4 +f 53/44/5 52/43/5 51/42/5 54/45/5 +f 56/51/6 55/52/6 50/41/6 49/40/6 +f 57/53/1 58/54/1 59/55/1 60/56/1 +f 61/57/2 62/58/2 63/59/2 64/60/2 +f 64/61/3 57/53/3 60/56/3 61/62/3 +f 58/63/4 63/64/4 62/62/4 59/56/4 +f 61/57/5 60/56/5 59/55/5 62/58/5 +f 64/65/6 63/66/6 58/54/6 57/53/6 +f 65/67/1 66/68/1 67/69/1 68/70/1 +f 69/71/2 70/72/2 71/73/2 72/74/2 +f 72/75/3 65/67/3 68/70/3 69/76/3 +f 66/77/4 71/78/4 70/76/4 67/70/4 +f 69/71/5 68/70/5 67/69/5 70/72/5 +f 72/79/6 71/80/6 66/68/6 65/67/6 +f 73/81/1 74/82/1 75/83/1 76/84/1 +f 77/85/2 78/86/2 79/87/2 80/88/2 +f 80/89/3 73/81/3 76/84/3 77/90/3 +f 74/91/4 79/92/4 78/90/4 75/84/4 +f 77/85/5 76/84/5 75/83/5 78/86/5 +f 80/93/6 79/94/6 74/82/6 73/81/6 +f 81/95/1 82/96/1 83/97/1 84/98/1 +f 85/99/2 86/100/2 87/101/2 88/102/2 +f 88/103/3 81/95/3 84/98/3 85/104/3 +f 82/105/4 87/106/4 86/104/4 83/98/4 +f 85/99/5 84/98/5 83/97/5 86/100/5 +f 88/107/6 87/108/6 82/96/6 81/95/6 +f 89/14/1 90/15/1 91/16/1 92/17/1 +f 93/18/2 94/19/2 95/20/2 96/21/2 +f 96/22/7 89/14/7 92/17/7 93/23/7 +f 90/18/8 95/24/8 94/23/8 91/17/8 +f 93/18/9 92/17/9 91/16/9 94/19/9 +f 96/25/10 95/26/10 90/15/10 89/14/10 +f 97/14/11 98/15/11 99/16/11 100/17/11 +f 101/18/12 102/19/12 103/20/12 104/21/12 +f 104/22/13 97/14/13 100/17/13 101/23/13 +f 98/18/14 103/24/14 102/23/14 99/17/14 +f 101/18/5 100/17/5 99/16/5 102/19/5 +f 104/25/6 103/26/6 98/15/6 97/14/6 +f 105/14/15 106/15/15 107/16/15 108/17/15 +f 109/18/16 110/19/16 111/20/16 112/21/16 +f 112/22/17 105/14/17 108/17/17 109/23/17 +f 106/18/18 111/24/18 110/23/18 107/17/18 +f 109/18/5 108/17/5 107/16/5 110/19/5 +f 112/25/6 111/26/6 106/15/6 105/14/6 +f 113/14/1 114/15/1 115/16/1 116/17/1 +f 117/18/2 118/19/2 119/20/2 120/21/2 +f 120/22/19 113/14/19 116/17/19 117/23/19 +f 114/18/20 119/24/20 118/23/20 115/17/20 +f 117/18/21 116/17/21 115/16/21 118/19/21 +f 120/25/22 119/26/22 114/15/22 113/14/22 +f 121/27/1 122/28/1 123/29/1 124/30/1 +f 125/31/2 126/32/2 127/33/2 128/34/2 +f 128/35/3 121/27/3 124/30/3 125/36/3 +f 122/31/4 127/37/4 126/36/4 123/30/4 +f 125/31/5 124/30/5 123/29/5 126/32/5 +f 128/38/6 127/39/6 122/28/6 121/27/6 +f 129/40/1 130/41/1 131/42/1 132/43/1 +f 133/44/2 134/45/2 135/46/2 136/47/2 +f 136/48/3 129/40/3 132/43/3 133/49/3 +f 130/44/4 135/50/4 134/49/4 131/43/4 +f 133/44/5 132/43/5 131/42/5 134/45/5 +f 136/51/6 135/52/6 130/41/6 129/40/6 +f 137/53/1 138/54/1 139/55/1 140/56/1 +f 141/57/2 142/58/2 143/59/2 144/60/2 +f 144/61/3 137/53/3 140/56/3 141/62/3 +f 138/63/4 143/64/4 142/62/4 139/56/4 +f 141/57/5 140/56/5 139/55/5 142/58/5 +f 144/65/6 143/66/6 138/54/6 137/53/6 +f 145/67/1 146/68/1 147/69/1 148/70/1 +f 149/71/2 150/72/2 151/73/2 152/74/2 +f 152/75/3 145/67/3 148/70/3 149/76/3 +f 146/77/4 151/78/4 150/76/4 147/70/4 +f 149/71/5 148/70/5 147/69/5 150/72/5 +f 152/79/6 151/80/6 146/68/6 145/67/6 +f 153/81/1 154/82/1 155/83/1 156/84/1 +f 157/85/2 158/86/2 159/87/2 160/88/2 +f 160/89/3 153/81/3 156/84/3 157/90/3 +f 154/91/4 159/92/4 158/90/4 155/84/4 +f 157/85/5 156/84/5 155/83/5 158/86/5 +f 160/93/6 159/94/6 154/82/6 153/81/6 +f 161/95/1 162/96/1 163/97/1 164/98/1 +f 165/99/2 166/100/2 167/101/2 168/102/2 +f 168/103/3 161/95/3 164/98/3 165/104/3 +f 162/105/4 167/106/4 166/104/4 163/98/4 +f 165/99/5 164/98/5 163/97/5 166/100/5 +f 168/107/6 167/108/6 162/96/6 161/95/6 +f 169/40/1 170/41/1 171/42/1 172/43/1 +f 173/44/2 174/45/2 175/46/2 176/47/2 +f 176/48/3 169/40/3 172/43/3 173/49/3 +f 170/44/4 175/50/4 174/49/4 171/43/4 +f 173/44/5 172/43/5 171/42/5 174/45/5 +f 176/51/6 175/52/6 170/41/6 169/40/6 diff --git a/src/main/resources/assets/bloodmagic/models/block/routing/modelroutingnodecore.mtl b/src/main/resources/assets/bloodmagic/models/block/routing/modelroutingnodecore.mtl new file mode 100644 index 00000000..70541b14 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/routing/modelroutingnodecore.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +#Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +#Ks 0.8 0.8 0.8 +d 1 +#illum 2 +map_Kd node \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/routing/modelroutingnodecore.obj b/src/main/resources/assets/bloodmagic/models/block/routing/modelroutingnodecore.obj new file mode 100644 index 00000000..36886c98 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/routing/modelroutingnodecore.obj @@ -0,0 +1,66 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib ModelRoutingNodeCore.mtl +o ModelRoutingNodeCore +v 0.375000 0.625000 0.625000 +v 0.375000 0.375000 0.625000 +v 0.625000 0.375000 0.625000 +v 0.625000 0.625000 0.625000 +v 0.625000 0.625000 0.375000 +v 0.625000 0.375000 0.375000 +v 0.375000 0.375000 0.375000 +v 0.375000 0.625000 0.375000 +v 0.437500 0.562500 0.562500 +v 0.437500 0.437500 0.562500 +v 0.562500 0.437500 0.562500 +v 0.562500 0.562500 0.562500 +v 0.562500 0.562500 0.437500 +v 0.562500 0.437500 0.437500 +v 0.437500 0.437500 0.437500 +v 0.437500 0.562500 0.437500 +vt 0.062500 0.937500 +vt 0.062500 0.875000 +vt 0.125000 0.875000 +vt 0.125000 0.937500 +vt 0.187500 0.937500 +vt 0.187500 0.875000 +vt 0.250000 0.875000 +vt 0.250000 0.937500 +vt 0.062500 1.000000 +vt 0.125000 1.000000 +vt 0.187500 1.000000 +vt 0.000000 0.937500 +vt 0.000000 0.875000 +vt 0.031250 0.796875 +vt 0.031250 0.765625 +vt 0.062500 0.765625 +vt 0.062500 0.796875 +vt 0.093750 0.796875 +vt 0.093750 0.765625 +vt 0.125000 0.765625 +vt 0.125000 0.796875 +vt 0.031250 0.828125 +vt 0.062500 0.828125 +vt 0.093750 0.828125 +vt 0.000000 0.796875 +vt 0.000000 0.765625 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +usemtl None +#s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 8/9/3 1/1/3 4/4/3 5/10/3 +f 2/5/4 7/11/4 6/10/4 3/4/4 +f 5/5/5 4/4/5 3/3/5 6/6/5 +f 8/12/6 7/13/6 2/2/6 1/1/6 +f 9/14/1 10/15/1 11/16/1 12/17/1 +f 13/18/2 14/19/2 15/20/2 16/21/2 +f 16/22/3 9/14/3 12/17/3 13/23/3 +f 10/18/4 15/24/4 14/23/4 11/17/4 +f 13/18/5 12/17/5 11/16/5 14/19/5 +f 16/25/6 15/26/6 10/15/6 9/14/6 diff --git a/src/main/resources/assets/bloodmagic/models/block/routing/outputroutingnodecore.json b/src/main/resources/assets/bloodmagic/models/block/routing/outputroutingnodecore.json new file mode 100644 index 00000000..d14b3c32 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/routing/outputroutingnodecore.json @@ -0,0 +1,20 @@ +{ + "textures": { + "particle": "#core" + }, + "elements": [ + { + "from": [ 6, 6, 6 ], + "to": [ 10, 10, 10 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#core" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#core" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#core" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#core" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#core" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#core" } + }, + "__comment": "core" + } + ] +} diff --git a/src/main/resources/assets/bloodmagic/models/block/routing/routingnodebase.json b/src/main/resources/assets/bloodmagic/models/block/routing/routingnodebase.json new file mode 100644 index 00000000..ccae6aa6 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/routing/routingnodebase.json @@ -0,0 +1,33 @@ +{ + "textures": { + "particle": "#core" + }, + "elements": [ + { + "from": [ 4, 4, 0 ], + "to": [ 12, 12, 2 ], + "faces": { + "down": { "uv": [ 4, 11, 5, 16 ], "texture": "#attachment" }, + "up": { "uv": [ 4, 0, 5, 5 ], "texture": "#attachment" }, + "north": { "uv": [ 11, 6, 12, 12 ], "texture": "#attachment" }, + "west": { "uv": [ 0, 6, 5, 12 ], "texture": "#attachment" }, + "east": { "uv": [ 11, 6, 16, 12 ], "texture": "#attachment" }, + "south": { "uv": [ 4, 6, 5, 12 ], "texture": "#attachment" } + }, + "__comment": "part 1" + }, + { + "from": [ 6, 6, 2 ], + "to": [ 10, 10, 4 ], + "faces": { + "down": { "uv": [ 4, 11, 5, 16 ], "texture": "#attachment" }, + "up": { "uv": [ 4, 0, 5, 5 ], "texture": "#attachment" }, + "north": { "uv": [ 11, 6, 12, 12 ], "texture": "#attachment" }, + "west": { "uv": [ 0, 6, 5, 12 ], "texture": "#attachment" }, + "east": { "uv": [ 11, 6, 16, 12 ], "texture": "#attachment" }, + "south": { "uv": [ 4, 6, 5, 12 ], "texture": "#attachment" } + }, + "__comment": "part 2" + } + ] +} diff --git a/src/main/resources/assets/bloodmagic/models/block/soulforge.json b/src/main/resources/assets/bloodmagic/models/block/soulforge.json new file mode 100644 index 00000000..6aa32fd9 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/soulforge.json @@ -0,0 +1,10 @@ +{ + "parent": "block/block", + "loader": "forge:obj", + "flip-v": true, + "model": "bloodmagic:models/block/blockhellfireforge.obj", + "textures": { + "default": "bloodmagic:models/hellfireforge", + "particle": "#default" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/sub/blockaltar.mtl b/src/main/resources/assets/bloodmagic/models/block/sub/blockaltar.mtl new file mode 100644 index 00000000..4eeb1eac --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/sub/blockaltar.mtl @@ -0,0 +1,12 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl Material__46 +Ns 96.078431 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.000000 +d 1.000000 +illum 2 diff --git a/src/main/resources/assets/bloodmagic/models/block/sub/blockaltar.obj b/src/main/resources/assets/bloodmagic/models/block/sub/blockaltar.obj new file mode 100644 index 00000000..c782d043 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/sub/blockaltar.obj @@ -0,0 +1,238 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib BlockAltar.mtl +o headusOBJexport002 +v 0.050000 -0.000030 1.200000 +v 0.950000 -0.000030 1.200000 +v 0.901720 0.800000 1.124830 +v 0.098280 0.800000 1.124830 +v 1.193790 -0.000030 0.949940 +v 1.201990 -0.000030 0.050020 +v 1.126000 0.800000 0.098230 +v 1.118680 0.800000 0.901590 +v 0.098280 0.800000 -0.124960 +v 0.901720 0.800000 -0.124960 +v 0.950000 -0.000030 -0.200000 +v 0.050000 -0.000030 -0.200000 +v -0.124890 0.800000 0.901650 +v -0.124890 0.800000 0.093780 +v -0.200000 -0.000030 0.045030 +v -0.200000 -0.000030 0.950000 +v -0.064370 -0.000030 -0.272190 +v -0.269830 -0.000030 -0.070820 +v -0.199670 0.800000 -0.025280 +v -0.019270 0.800000 -0.202100 +v -0.020020 0.800000 1.200790 +v -0.200860 0.800000 1.019960 +v -0.271020 -0.000030 1.065120 +v -0.065130 -0.000030 1.271010 +v 1.065130 -0.000030 1.271010 +v 1.271020 -0.000030 1.065120 +v 1.200860 0.800000 1.019960 +v 1.020020 0.800000 1.200790 +v 1.271020 -0.000030 -0.065130 +v 1.065130 -0.000030 -0.271020 +v 1.020030 0.800000 -0.200920 +v 1.200860 0.800000 -0.020090 +v 0.679120 0.800000 0.828170 +v 0.320900 0.800000 0.828170 +v 0.828570 0.800000 0.320500 +v 0.828570 0.800000 0.678720 +v 0.320940 0.800000 0.171030 +v 0.679120 0.800000 0.171050 +v 0.171450 0.800000 0.678720 +v 0.171470 0.800000 0.318530 +v 0.371550 0.650000 0.705900 +v 0.371110 0.650000 0.293320 +v 0.293740 0.650000 0.369670 +v 0.293730 0.650000 0.628080 +v 0.628460 0.650000 0.705900 +v 0.706290 0.650000 0.628080 +v 0.706290 0.650000 0.371150 +v 0.628470 0.650000 0.293330 +vt -0.000000 0.265600 +vt 0.203100 0.265600 +vt 0.203100 0.500000 +vt 0.000000 0.500000 +vt 0.390600 0.265600 +vt 0.593800 0.265600 +vt 0.593800 0.500000 +vt 0.390600 0.500000 +vt 0.203100 0.234400 +vt -0.000000 0.234400 +vt -0.000000 0.000000 +vt 0.203100 0.000000 +vt 0.593800 0.234400 +vt 0.390600 0.234400 +vt 0.390600 -0.000000 +vt 0.593800 0.000000 +vt 0.250000 0.000000 +vt 0.343800 0.000000 +vt 0.343800 0.234400 +vt 0.250000 0.234400 +vt 0.734400 0.234400 +vt 0.640600 0.234400 +vt 0.640600 0.000000 +vt 0.734400 -0.000000 +vt 0.250000 0.265600 +vt 0.343800 0.265600 +vt 0.343800 0.500000 +vt 0.265600 0.500000 +vt 0.640600 0.265600 +vt 0.734400 0.265600 +vt 0.734400 0.500000 +vt 0.640600 0.500000 +vt 0.093800 0.578100 +vt 0.031300 0.640600 +vt 0.000000 0.609400 +vt 0.062500 0.546900 +vt 0.031300 0.906300 +vt 0.093800 0.968800 +vt 0.062500 1.000000 +vt 0.000000 0.937500 +vt 0.375000 0.968800 +vt 0.437500 0.906300 +vt 0.468800 0.937500 +vt 0.406300 1.000000 +vt 0.437500 0.640600 +vt 0.375000 0.578100 +vt 0.406300 0.546900 +vt 0.468800 0.609400 +vt 0.909700 0.627000 +vt 0.852200 0.704200 +vt 0.759300 0.704500 +vt 0.701200 0.627800 +vt 0.968900 0.893100 +vt 0.891500 0.835700 +vt 0.891100 0.742800 +vt 0.966200 0.684700 +vt 0.702500 0.952000 +vt 0.760000 0.875000 +vt 0.852900 0.874700 +vt 0.910900 0.951200 +vt 0.643600 0.685900 +vt 0.720700 0.743500 +vt 0.721000 0.836900 +vt 0.644400 0.895500 +vt 0.988400 0.923700 +vt 0.941700 0.970800 +vt 0.781300 0.265600 +vt 0.781300 0.500000 +vt 0.672100 0.972200 +vt 0.625100 0.926500 +vt 0.623700 0.655300 +vt 0.670500 0.608200 +vt 0.781300 -0.000000 +vt 0.781300 0.234400 +vt 0.940300 0.607200 +vt 0.987400 0.653900 +vt 0.772500 0.736200 +vt 0.772800 0.843200 +vt 0.752700 0.823500 +vt 0.752400 0.756500 +vt 0.839200 0.736000 +vt 0.859500 0.756100 +vt 0.859700 0.822700 +vt 0.839600 0.843000 +vn 0.000000 0.093500 0.995600 +vn 0.995500 0.094000 0.009100 +vn 0.000000 0.093400 -0.995600 +vn -0.995600 0.093500 0.000000 +vn -0.101800 -0.554900 -0.825700 +vn -0.823200 -0.555100 -0.118900 +vn -0.990700 0.094300 -0.098300 +vn -0.076900 0.091300 -0.992800 +vn -0.088200 0.093800 0.991700 +vn -0.991900 0.091900 0.087200 +vn -0.824800 -0.554700 0.109900 +vn -0.110600 -0.555300 0.824300 +vn 0.109900 -0.554700 0.824800 +vn 0.827400 -0.553300 0.096000 +vn 0.993300 0.092700 0.069000 +vn 0.087200 0.092000 0.991900 +vn 0.823800 -0.555200 -0.114500 +vn 0.110600 -0.555300 -0.824300 +vn 0.088200 0.093700 -0.991700 +vn 0.991600 0.092100 -0.090800 +vn 0.223200 -0.908300 -0.353700 +vn -0.359200 -0.907600 0.217500 +vn -0.356900 -0.907800 -0.220200 +vn 0.220600 -0.908000 0.356100 +vn -0.220100 -0.907800 0.356900 +vn 0.343700 -0.910100 -0.231300 +vn 0.361700 -0.906700 0.216800 +vn -0.220600 -0.908000 -0.356100 +vn -0.000000 1.000000 0.000000 +vn -0.538100 0.043900 0.841700 +vn 0.546500 0.042800 -0.836400 +vn -0.841700 0.043800 -0.538100 +vn -0.539700 0.046300 -0.840600 +vn 0.845600 0.044700 0.531900 +vn -0.845900 0.047000 0.531300 +vn 0.539700 0.046400 0.840600 +vn 0.187200 0.872200 -0.452000 +vn 0.185600 0.872300 0.452300 +vn 0.451600 0.872000 0.188800 +vn 0.452000 0.872200 -0.187200 +vn -0.187200 0.872200 -0.452000 +vn 0.287000 0.661600 -0.692800 +vn -0.287000 0.661600 -0.692800 +vn -0.451900 0.872200 -0.187200 +vn -0.692800 0.661600 -0.286900 +vn -0.451900 0.872200 0.187200 +vn -0.692800 0.661600 0.286900 +vn -0.187200 0.872200 0.451900 +vn -0.287000 0.661600 0.692700 +vn 0.284800 0.661100 0.694100 +vn 0.691400 0.662100 0.289100 +vn 0.692800 0.661600 -0.286900 +vn 0.820700 0.042600 -0.569800 +usemtl Material__46 +#s off +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 9/9/3 10/10/3 11/11/3 12/12/3 +f 13/13/4 14/14/4 15/15/4 16/16/4 +#s 1 +f 17/17/5 18/18/6 19/19/7 20/20/8 +f 21/21/9 22/22/10 23/23/11 24/24/12 +f 25/25/13 26/26/14 27/27/15 28/28/16 +f 29/29/17 30/30/18 31/31/19 32/32/20 +f 12/33/21 15/34/22 18/35/6 17/36/5 +f 16/37/23 1/38/24 24/39/12 23/40/11 +f 2/41/25 5/42/26 26/43/14 25/44/13 +f 6/45/27 11/46/28 30/47/18 29/48/17 +f 3/49/29 33/50/29 34/51/29 4/52/29 +f 7/53/29 35/54/29 36/55/29 8/56/29 +f 9/57/29 37/58/29 38/59/29 10/60/29 +f 13/61/29 39/62/29 40/63/29 14/64/29 +f 9/57/29 14/64/29 40/63/29 37/58/29 +f 4/52/29 34/51/29 39/62/29 13/61/29 +f 8/56/29 36/55/29 33/50/29 3/49/29 +f 10/60/29 38/59/29 35/54/29 7/53/29 +f 25/25/13 28/28/16 3/3/30 2/2/25 +f 10/60/29 7/53/29 32/65/29 31/66/29 +f 17/17/5 20/20/8 9/9/31 12/12/21 +f 23/23/11 22/22/10 13/13/32 16/16/23 +f 11/67/28 10/68/33 31/31/19 30/30/18 +f 29/29/17 32/32/20 7/7/34 6/6/27 +f 14/64/29 9/57/29 20/69/29 19/70/29 +f 15/15/22 14/14/35 19/19/7 18/18/6 +f 4/52/29 13/61/29 22/71/29 21/72/29 +f 1/73/24 4/74/36 21/21/9 24/24/12 +f 8/56/29 3/49/29 28/75/29 27/76/29 +f 41/77/37 42/78/38 43/79/39 44/80/40 +f 45/81/41 41/77/37 34/51/42 33/50/43 +f 46/82/44 45/81/41 33/50/43 36/55/45 +f 47/83/46 46/82/44 36/55/45 35/54/47 +f 48/84/48 47/83/46 35/54/47 38/59/49 +f 42/78/38 48/84/48 38/59/49 37/58/50 +f 43/79/39 42/78/38 37/58/50 40/63/51 +f 44/80/40 43/79/39 40/63/51 39/62/52 +f 41/77/37 44/80/40 39/62/52 34/51/42 +f 48/84/48 45/81/41 46/82/44 47/83/46 +f 45/81/41 48/84/48 42/78/38 41/77/37 +f 16/37/23 15/34/22 12/33/21 1/38/24 +f 2/41/25 11/46/28 6/45/27 5/42/26 +f 11/46/28 2/41/25 1/38/24 12/33/21 +f 5/5/26 8/8/53 27/27/15 26/26/14 diff --git a/src/main/resources/assets/bloodmagic/models/block/sub/blocksoulforge.json b/src/main/resources/assets/bloodmagic/models/block/sub/blocksoulforge.json new file mode 100644 index 00000000..6d674e78 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/sub/blocksoulforge.json @@ -0,0 +1,160 @@ +{ + "textures": { + "particle": "#base" + }, + "elements": [ + { + "from": [ 2, 0, 2 ], + "to": [ 6, 3, 6 ], + "faces": { + "down": { "uv": [ 3, 0, 4.5, 1.5 ], "texture": "#base" }, + "up": { "uv": [ 1.5, 0, 3, 1.5 ], "texture": "#base" }, + "north": { "uv": [ 1.5, 1.5, 3, 3 ], "texture": "#base" }, + "south": { "uv": [ 4.5, 1.5, 6, 3 ], "texture": "#base" }, + "west": { "uv": [ 3, 1.5, 4.5, 3 ], "texture": "#base" }, + "east": { "uv": [ 0, 1.5, 1.5, 3 ], "texture": "#base" } + }, + "__comment": "These are the feet of the model" + }, + { + "from": [ 10, 0, 10 ], + "to": [ 14, 3, 14 ], + "faces": { + "down": { "uv": [ 3, 0, 4.5, 1.5 ], "texture": "#base" }, + "up": { "uv": [ 1.5, 0, 3, 1.5 ], "texture": "#base" }, + "north": { "uv": [ 1.5, 1.5, 3, 3 ], "texture": "#base" }, + "south": { "uv": [ 4.5, 1.5, 6, 3 ], "texture": "#base" }, + "west": { "uv": [ 3, 1.5, 4.5, 3 ], "texture": "#base" }, + "east": { "uv": [ 0, 1.5, 1.5, 3 ], "texture": "#base" } + } + }, + { + "from": [ 2, 0, 10 ], + "to": [ 6, 3, 14 ], + "faces": { + "down": { "uv": [ 3, 0, 4.5, 1.5 ], "texture": "#base" }, + "up": { "uv": [ 1.5, 0, 3, 1.5 ], "texture": "#base" }, + "north": { "uv": [ 1.5, 1.5, 3, 3 ], "texture": "#base" }, + "south": { "uv": [ 4.5, 1.5, 6, 3 ], "texture": "#base" }, + "west": { "uv": [ 3, 1.5, 4.5, 3 ], "texture": "#base" }, + "east": { "uv": [ 0, 1.5, 1.5, 3 ], "texture": "#base" } + } + }, + { + "from": [ 10, 0, 2 ], + "to": [ 14, 3, 6 ], + "faces": { + "down": { "uv": [ 3, 0, 4.5, 1.5 ], "texture": "#base" }, + "up": { "uv": [ 1.5, 0, 3, 1.5 ], "texture": "#base" }, + "north": { "uv": [ 1.5, 1.5, 3, 3 ], "texture": "#base" }, + "south": { "uv": [ 4.5, 1.5, 6, 3 ], "texture": "#base" }, + "west": { "uv": [ 3, 1.5, 4.5, 3 ], "texture": "#base" }, + "east": { "uv": [ 0, 1.5, 1.5, 3 ], "texture": "#base" } + } + }, + { + "from": [ 3, 3, 3 ], + "to": [ 13, 5, 13 ], + "faces": { + "down": { "uv": [ 3, 0, 4.5, 1.5 ], "texture": "#base" }, + "up": { "uv": [ 1.5, 0, 3, 1.5 ], "texture": "#base" }, + "north": { "uv": [ 1.5, 1.5, 3, 3 ], "texture": "#base" }, + "south": { "uv": [ 4.5, 1.5, 6, 3 ], "texture": "#base" }, + "west": { "uv": [ 3, 1.5, 4.5, 3 ], "texture": "#base" }, + "east": { "uv": [ 0, 1.5, 1.5, 3 ], "texture": "#base" } + }, + "__comment": "Base of the model" + }, + { + "from": [ 1, 5, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "uv": [ 3, 0, 4.5, 1.5 ], "texture": "#base" }, + "up": { "uv": [ 1.5, 0, 3, 1.5 ], "texture": "#base" }, + "north": { "uv": [ 1.5, 1.5, 3, 3 ], "texture": "#base" }, + "south": { "uv": [ 4.5, 1.5, 6, 3 ], "texture": "#base" }, + "west": { "uv": [ 3, 1.5, 4.5, 3 ], "texture": "#base" }, + "east": { "uv": [ 0, 1.5, 1.5, 3 ], "texture": "#base" } + }, + "__comment": "Base of the model" + }, + { + "from": [ 0, 8, 0 ], + "to": [ 16, 10, 16 ], + "faces": { + "down": { "uv": [ 3, 0, 4.5, 1.5 ], "texture": "#base" }, + "up": { "uv": [ 1.5, 0, 3, 1.5 ], "texture": "#base" }, + "north": { "uv": [ 1.5, 1.5, 3, 3 ], "texture": "#base" }, + "south": { "uv": [ 4.5, 1.5, 6, 3 ], "texture": "#base" }, + "west": { "uv": [ 3, 1.5, 4.5, 3 ], "texture": "#base" }, + "east": { "uv": [ 0, 1.5, 1.5, 3 ], "texture": "#base" } + }, + "__comment": "Base of the model" + }, + { + "from": [ 0, 10, 0 ], + "to": [ 4, 12, 4 ], + "faces": { + "down": { "uv": [ 3, 0, 4.5, 1.5 ], "texture": "#base" }, + "up": { "uv": [ 1.5, 0, 3, 1.5 ], "texture": "#base" }, + "north": { "uv": [ 1.5, 1.5, 3, 3 ], "texture": "#base" }, + "south": { "uv": [ 4.5, 1.5, 6, 3 ], "texture": "#base" }, + "west": { "uv": [ 3, 1.5, 4.5, 3 ], "texture": "#base" }, + "east": { "uv": [ 0, 1.5, 1.5, 3 ], "texture": "#base" } + }, + "__comment": "Space for the item" + }, + { + "from": [ 12, 10, 12 ], + "to": [ 16, 12, 16 ], + "faces": { + "down": { "uv": [ 3, 0, 4.5, 1.5 ], "texture": "#base" }, + "up": { "uv": [ 1.5, 0, 3, 1.5 ], "texture": "#base" }, + "north": { "uv": [ 1.5, 1.5, 3, 3 ], "texture": "#base" }, + "south": { "uv": [ 4.5, 1.5, 6, 3 ], "texture": "#base" }, + "west": { "uv": [ 3, 1.5, 4.5, 3 ], "texture": "#base" }, + "east": { "uv": [ 0, 1.5, 1.5, 3 ], "texture": "#base" } + }, + "__comment": "Space for the item" + }, + { + "from": [ 0, 10, 12 ], + "to": [ 4, 12, 16 ], + "faces": { + "down": { "uv": [ 3, 0, 4.5, 1.5 ], "texture": "#base" }, + "up": { "uv": [ 1.5, 0, 3, 1.5 ], "texture": "#base" }, + "north": { "uv": [ 1.5, 1.5, 3, 3 ], "texture": "#base" }, + "south": { "uv": [ 4.5, 1.5, 6, 3 ], "texture": "#base" }, + "west": { "uv": [ 3, 1.5, 4.5, 3 ], "texture": "#base" }, + "east": { "uv": [ 0, 1.5, 1.5, 3 ], "texture": "#base" } + }, + "__comment": "Space for the item" + }, + { + "from": [ 12, 10, 0 ], + "to": [ 16, 12, 4 ], + "faces": { + "down": { "uv": [ 3, 0, 4.5, 1.5 ], "texture": "#base" }, + "up": { "uv": [ 1.5, 0, 3, 1.5 ], "texture": "#base" }, + "north": { "uv": [ 1.5, 1.5, 3, 3 ], "texture": "#base" }, + "south": { "uv": [ 4.5, 1.5, 6, 3 ], "texture": "#base" }, + "west": { "uv": [ 3, 1.5, 4.5, 3 ], "texture": "#base" }, + "east": { "uv": [ 0, 1.5, 1.5, 3 ], "texture": "#base" } + }, + "__comment": "Space for the item" + }, + { + "from": [ 4, 10, 4 ], + "to": [ 12, 11, 12 ], + "faces": { + "down": { "uv": [ 3, 0, 4.5, 1.5 ], "texture": "#base_bottom" }, + "up": { "uv": [ 1.5, 0, 3, 1.5 ], "texture": "#base_bottom" }, + "north": { "uv": [ 1.5, 1.5, 3, 3 ], "texture": "#base_bottom" }, + "south": { "uv": [ 4.5, 1.5, 6, 3 ], "texture": "#base_bottom" }, + "west": { "uv": [ 3, 1.5, 4.5, 3 ], "texture": "#base_bottom" }, + "east": { "uv": [ 0, 1.5, 1.5, 3 ], "texture": "#base_bottom" } + }, + "__comment": "Space for the item" + } + ] +} diff --git a/src/main/resources/assets/bloodmagic/models/block/sub/blockspellmodifiercore.json b/src/main/resources/assets/bloodmagic/models/block/sub/blockspellmodifiercore.json new file mode 100644 index 00000000..53852b6a --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/sub/blockspellmodifiercore.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "#model" + }, + "elements": [ + { "from": [ 5, 5, 5 ], + "to": [ 11, 11, 11 ], + "faces": { + "down": { "uv": [ 3, 0, 4.5, 1.5 ], "texture": "#model" }, + "up": { "uv": [ 1.5, 0, 3, 1.5 ], "texture": "#model" }, + "north": { "uv": [ 1.5, 1.5, 3, 3 ], "texture": "#model" }, + "south": { "uv": [ 4.5, 1.5, 6, 3 ], "texture": "#model" }, + "west": { "uv": [ 3, 1.5, 4.5, 3 ], "texture": "#model" }, + "east": { "uv": [ 0, 1.5, 1.5, 3 ], "texture": "#model" } + }, + "__comment": "This is the core of the model" + } + ] +} diff --git a/src/main/resources/assets/bloodmagic/models/block/sub/blockspellmodifierinput.json b/src/main/resources/assets/bloodmagic/models/block/sub/blockspellmodifierinput.json new file mode 100644 index 00000000..c632c397 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/sub/blockspellmodifierinput.json @@ -0,0 +1,176 @@ +{ + "textures": { + "particle": "#model" + }, + "elements": [ + { + "from": [ 6, 13, 6 ], + "to": [ 10, 14, 10 ], + "faces": { + "down": { "uv": [ 5.75, 9, 6.75, 8 ], "texture": "#model" }, + "up": { "uv": [ 4.75, 8, 5.75, 9 ], "texture": "#model" }, + "north": { "uv": [ 6.75, 9, 7.75, 9.25 ], "texture": "#model" }, + "south": { "uv": [ 4.75, 9, 5.75, 9.25 ], "texture": "#model" }, + "west": { "uv": [ 3.75, 9, 4.75, 9.25 ], "texture": "#model" }, + "east": { "uv": [ 5.75, 9, 6.75, 9.25 ], "texture": "#model" } + }, + "__comment": "Top symbol" + }, + { + "from": [ 6, 2, 6 ], + "to": [ 10, 3, 10 ], + "faces": { + "down": { "uv": [ 5.75, 10.75, 6.75, 9.75 ], "texture": "#model" }, + "up": { "uv": [ 4.75, 9.75, 5.75, 10.75 ], "texture": "#model" }, + "north": { "uv": [ 6.75, 10.75, 7.75, 11 ], "texture": "#model" }, + "south": { "uv": [ 4.75, 10.75, 5.75, 11 ], "texture": "#model" }, + "west": { "uv": [ 3.75, 10.75, 4.75, 11 ], "texture": "#model" }, + "east": { "uv": [ 5.75, 10.75, 6.75, 11 ], "texture": "#model" } + }, + "__comment": "Bottom symbol" + }, + { + "from": [ 2, 6, 6 ], + "to": [ 3, 10, 10 ], + "faces": { + "down": { "uv": [ 4.5, 12.5, 4.75, 11.5 ], "texture": "#model" }, + "up": { "uv": [ 4.25, 11.5, 4.5, 12.5 ], "texture": "#model" }, + "north": { "uv": [ 5.5, 12.5, 5.75, 13.5 ], "texture": "#model" }, + "south": { "uv": [ 4.25, 12.5, 4.5, 13.5 ], "texture": "#model" }, + "west": { "uv": [ 3.25, 12.5, 4.25, 13.5 ], "texture": "#model" }, + "east": { "uv": [ 4.5, 12.5, 5.5, 13.5 ], "texture": "#model" } + }, + "__comment": "Left symbol" + }, + { + "from": [ 13, 6, 6 ], + "to": [ 14, 10, 10 ], + "faces": { + "down": { "uv": [ 4.5, 15, 4.75, 14 ], "texture": "#model" }, + "up": { "uv": [ 4.25, 14, 4.5, 15 ], "texture": "#model" }, + "north": { "uv": [ 5.5, 15, 5.75, 16 ], "texture": "#model" }, + "south": { "uv": [ 4.25, 15, 4.5, 16 ], "texture": "#model" }, + "west": { "uv": [ 3.25, 15, 4.25, 16 ], "texture": "#model" }, + "east": { "uv": [ 4.5, 15, 5.5, 16 ], "texture": "#model" } + }, + "__comment": "Right symbol" + }, + { + "from": [ 7, 13, 10 ], + "to": [ 9, 14, 15 ], + "faces": { + "down": { "uv": [ 1.75, 9.25, 2.25, 8 ], "texture": "#model" }, + "up": { "uv": [ 1.25, 8, 1.75, 9.25 ], "texture": "#model" }, + "north": { "uv": [ 3, 9.25, 3.5, 9.5 ], "texture": "#model" }, + "south": { "uv": [ 1.25, 9.25, 1.75, 9.5 ], "texture": "#model" }, + "west": { "uv": [ 0, 9.25, 1.25, 9.5 ], "texture": "#model" }, + "east": { "uv": [ 1.75, 9.25, 3, 9.5 ], "texture": "#model" } + }, + "__comment": "Top holding bar" + }, + { + "from": [ 7, 2, 10 ], + "to": [ 9, 3, 15 ], + "faces": { + "down": { "uv": [ 1.75, 11, 2.25, 9.75 ], "texture": "#model" }, + "up": { "uv": [ 1.25, 9.75, 1.75, 11 ], "texture": "#model" }, + "north": { "uv": [ 3, 11, 3.5, 11.25 ], "texture": "#model" }, + "south": { "uv": [ 1.25, 11, 1.75, 11.25 ], "texture": "#model" }, + "west": { "uv": [ 0, 11, 1.25, 11.25 ], "texture": "#model" }, + "east": { "uv": [ 1.75, 11, 3, 11.25 ], "texture": "#model" } + }, + "__comment": "Bottom holding bar" + }, + { + "from": [ 2, 7, 10 ], + "to": [ 3, 9, 15 ], + "faces": { + "down": { "uv": [ 1.5, 15.25, 1.75, 14 ], "texture": "#model" }, + "up": { "uv": [ 1.25, 14, 1.5, 15.25 ], "texture": "#model" }, + "north": { "uv": [ 2.75, 15.25, 3, 15.75 ], "texture": "#model" }, + "south": { "uv": [ 1.25, 15.25, 1.5, 15.75 ], "texture": "#model" }, + "west": { "uv": [ 0, 15.25, 1.25, 15.75 ], "texture": "#model" }, + "east": { "uv": [ 1.5, 15.25, 2.75, 15.75 ], "texture": "#model" } + }, + "__comment": "Left holding bar" + }, + { + "from": [ 13, 7, 10 ], + "to": [ 14, 9, 15 ], + "faces": { + "down": { "uv": [ 1.5, 12.75, 1.75, 11.5 ], "texture": "#model" }, + "up": { "uv": [ 1.25, 11.5, 1.5, 12.75 ], "texture": "#model" }, + "north": { "uv": [ 2.75, 12.75, 3, 13.25 ], "texture": "#model" }, + "south": { "uv": [ 1.25, 12.75, 1.5, 13.25 ], "texture": "#model" }, + "west": { "uv": [ 0, 12.75, 1.25, 13.25 ], "texture": "#model" }, + "east": { "uv": [ 1.5, 12.75, 2.75, 13.25 ], "texture": "#model" } + }, + "__comment": "Right holding bar" + }, + { + "from": [ 6, 6, 15 ], + "to": [ 10, 10, 16 ], + "faces": { + "down": { "uv": [ 7.5, 4.75, 8.5, 4.5 ], "texture": "#model" }, + "up": { "uv": [ 6.5, 4.5, 7.5, 4.75 ], "texture": "#model" }, + "north": { "uv": [ 7.75, 4.75, 8.75, 5.75 ], "texture": "#model" }, + "south": { "uv": [ 6.5, 4.75, 7.5, 5.75 ], "texture": "#model" }, + "west": { "uv": [ 6.25, 4.75, 6.5, 5.75 ], "texture": "#model" }, + "east": { "uv": [ 7.5, 4.75, 7.75, 5.75 ], "texture": "#model" } + }, + "__comment": "Central point" + }, + { + "from": [ 3, 11, 14 ], + "to": [ 13, 13, 16 ], + "faces": { + "down": { "uv": [ 3, 3.75, 5.5, 3.25 ], "texture": "#model" }, + "up": { "uv": [ 0.5, 3.25, 3, 3.75 ], "texture": "#model" }, + "north": { "uv": [ 3.5, 3.75, 6, 4.25 ], "texture": "#model" }, + "south": { "uv": [ 0.5, 3.75, 3, 4.25 ], "texture": "#model" }, + "west": { "uv": [ 0, 3.75, 0.5, 4.25 ], "texture": "#model" }, + "east": { "uv": [ 3, 3.75, 3.5, 4.25 ], "texture": "#model" } + }, + "__comment": "Top main brace" + }, + { + "from": [ 3, 3, 14 ], + "to": [ 13, 5, 16 ], + "faces": { + "down": { "uv": [ 3, 7.25, 5.5, 6.75 ], "texture": "#model" }, + "up": { "uv": [ 0.5, 6.75, 3, 7.25 ], "texture": "#model" }, + "north": { "uv": [ 3.5, 7.25, 6, 7.75 ], "texture": "#model" }, + "south": { "uv": [ 0.5, 7.25, 3, 7.75 ], "texture": "#model" }, + "west": { "uv": [ 0, 7.25, 0.5, 7.75 ], "texture": "#model" }, + "east": { "uv": [ 3, 7.25, 3.5, 7.75 ], "texture": "#model" } + }, + "__comment": "Bottom main brace" + }, + { + "from": [ 3, 5, 14 ], + "to": [ 5, 11, 16 ], + "faces": { + "down": { "uv": [ 1, 5, 1.5, 4.5 ], "texture": "#model" }, + "up": { "uv": [ 0.5, 4.5, 1, 5 ], "texture": "#model" }, + "north": { "uv": [ 1.5, 5, 2, 6.5 ], "texture": "#model" }, + "south": { "uv": [ 0.5, 5, 1, 6.5 ], "texture": "#model" }, + "west": { "uv": [ 0, 5, 0.5, 6.5 ], "texture": "#model" }, + "east": { "uv": [ 1, 5, 1.5, 6.5 ], "texture": "#model" } + }, + "__comment": "Left main brace" + }, + { + "from": [ 11, 5, 14 ], + "to": [ 13, 11, 16 ], + "faces": { + "down": { "uv": [ 5, 5, 5.5, 4.5 ], "texture": "#model" }, + "up": { "uv": [ 4.5, 4.5, 5, 5 ], "texture": "#model" }, + "north": { "uv": [ 5.5, 5, 6, 6.5 ], "texture": "#model" }, + "south": { "uv": [ 4.5, 5, 5, 6.5 ], "texture": "#model" }, + "west": { "uv": [ 4, 5, 4.5, 6.5 ], "texture": "#model" }, + "east": { "uv": [ 5, 5, 5.5, 6.5 ], "texture": "#model" } + }, + "__comment": "Right main brace" + } + ] +} diff --git a/src/main/resources/assets/bloodmagic/models/block/sub/blockspellmodifieroutput.json b/src/main/resources/assets/bloodmagic/models/block/sub/blockspellmodifieroutput.json new file mode 100644 index 00000000..b08bbd47 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/sub/blockspellmodifieroutput.json @@ -0,0 +1,67 @@ +{ + "textures": { + "particle": "#model" + }, + "elements": [ + { + "from": [ 15, 6, 6 ], + "to": [ 16, 10, 10 ], + "faces": { + "down": { "uv": [ 14, 5.75, 14.25, 6.75 ], "texture": "#model" }, + "up": { "uv": [ 13.75, 5.75, 14, 6.75 ], "texture": "#model" }, + "north": { "uv": [ 15, 6.75, 15.25, 7.75 ], "texture": "#model" }, + "south": { "uv": [ 13.75, 6.75, 14, 7.75 ], "texture": "#model" }, + "west": { "uv": [ 12.75, 6.75, 13.75, 7.75 ], "texture": "#model" }, + "east": { "uv": [ 14, 6.75, 15, 7.75 ], "texture": "#model" } + } + }, + { + "from": [ 13, 3, 3 ], + "to": [ 16, 5, 5 ], + "faces": { + "down": { "uv": [ 14, 4.5, 14.75, 5 ], "texture": "#model" }, + "up": { "uv": [ 13.25, 4.5, 14, 5 ], "texture": "#model" }, + "north": { "uv": [ 14.5, 5, 15.25, 5.5 ], "texture": "#model" }, + "south": { "uv": [ 13.25, 5, 14, 5.5 ], "texture": "#model" }, + "west": { "uv": [ 12.75, 5, 13.25, 5.5 ], "texture": "#model" }, + "east": { "uv": [ 14, 5, 14.5, 5.5 ], "texture": "#model" } + } + }, + { + "from": [ 13, 11, 3 ], + "to": [ 16, 13, 5 ], + "faces": { + "down": { "uv": [ 14, 4.5, 14.75, 5 ], "texture": "#model" }, + "up": { "uv": [ 13.25, 4.5, 14, 5 ], "texture": "#model" }, + "north": { "uv": [ 14.5, 5, 15.25, 5.5 ], "texture": "#model" }, + "south": { "uv": [ 13.25, 5, 14, 5.5 ], "texture": "#model" }, + "west": { "uv": [ 12.75, 5, 13.25, 5.5 ], "texture": "#model" }, + "east": { "uv": [ 14, 5, 14.5, 5.5 ], "texture": "#model" } + } + }, + { + "from": [ 13, 3, 11 ], + "to": [ 16, 5, 13 ], + "faces": { + "down": { "uv": [ 14, 4.5, 14.75, 5 ], "texture": "#model" }, + "up": { "uv": [ 13.25, 4.5, 14, 5 ], "texture": "#model" }, + "north": { "uv": [ 14.5, 5, 15.25, 5.5 ], "texture": "#model" }, + "south": { "uv": [ 13.25, 5, 14, 5.5 ], "texture": "#model" }, + "west": { "uv": [ 12.75, 5, 13.25, 5.5 ], "texture": "#model" }, + "east": { "uv": [ 14, 5, 14.5, 5.5 ], "texture": "#model" } + } + }, + { + "from": [ 13, 11, 11 ], + "to": [ 16, 13, 13 ], + "faces": { + "down": { "uv": [ 14, 4.5, 14.75, 5 ], "texture": "#model" }, + "up": { "uv": [ 13.25, 4.5, 14, 5 ], "texture": "#model" }, + "north": { "uv": [ 14.5, 5, 15.25, 5.5 ], "texture": "#model" }, + "south": { "uv": [ 13.25, 5, 14, 5.5 ], "texture": "#model" }, + "west": { "uv": [ 12.75, 5, 13.25, 5.5 ], "texture": "#model" }, + "east": { "uv": [ 14, 5, 14.5, 5.5 ], "texture": "#model" } + } + } + ] +} diff --git a/src/main/resources/assets/bloodmagic/models/block/sub/shaped_charge.json b/src/main/resources/assets/bloodmagic/models/block/sub/shaped_charge.json new file mode 100644 index 00000000..28ae6a06 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/sub/shaped_charge.json @@ -0,0 +1,136 @@ +{ + "parent": "block/block", + "credit": "Made with Blockbench", + "textures": { + "1": "dungeon_tile", + "3": "dungeon_stone", + "4": "blankrune", + "5": "largebloodstonebrick", + "6": "defaultcrystal", + "particle": "dungeon_stone" + }, + "elements": [ + { + "name": "base", + "from": [2, 0, 2], + "to": [14, 2, 14], + "faces": { + "north": {"uv": [0, 6, 10, 8], "texture": "#3"}, + "east": {"uv": [0, 6, 10, 8], "texture": "#3"}, + "south": {"uv": [0, 6, 10, 8], "texture": "#3"}, + "west": {"uv": [6, 14, 16, 16], "texture": "#3"}, + "up": {"uv": [10, 10, 0, 0], "texture": "#3"}, + "down": {"uv": [10, 0, 0, 10], "texture": "#3"} + } + }, + { + "name": "core", + "from": [4, 2, 4], + "to": [12, 5, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [12, 9, 13]}, + "faces": { + "north": {"uv": [4, 5, 12, 8], "texture": "#6"}, + "east": {"uv": [4, 5, 12, 8], "texture": "#6"}, + "south": {"uv": [4, 5, 12, 8], "texture": "#6"}, + "west": {"uv": [4, 5, 12, 8], "texture": "#6"}, + "up": {"uv": [4, 4, 12, 12], "texture": "#6"}, + "down": {"uv": [0, 0, 8, 8], "texture": "#6"} + } + }, + { + "name": "casing1", + "from": [7, 2, 3], + "to": [9, 6, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 10, 11]}, + "faces": { + "north": {"uv": [0, 0, 2, 4], "texture": "#5"}, + "east": {"uv": [0, 0, 10, 4], "texture": "#5"}, + "south": {"uv": [0, 0, 2, 4], "texture": "#5"}, + "west": {"uv": [0, 0, 10, 4], "texture": "#5"}, + "up": {"uv": [0, 0, 2, 10], "texture": "#5"}, + "down": {"uv": [0, 0, 2, 10], "texture": "#5"} + } + }, + { + "name": "casing2", + "from": [3, 2, 7], + "to": [13, 6, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [11, 10, 15]}, + "faces": { + "north": {"uv": [0, 0, 10, 4], "texture": "#5"}, + "east": {"uv": [0, 0, 2, 4], "texture": "#5"}, + "south": {"uv": [0, 0, 10, 4], "texture": "#5"}, + "west": {"uv": [0, 0, 2, 4], "texture": "#5"}, + "up": {"uv": [0, 0, 10, 2], "texture": "#5"}, + "down": {"uv": [0, 0, 10, 2], "texture": "#5"} + } + }, + { + "from": [6, 5, 6], + "to": [10, 7, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 13, 14]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#4"}, + "east": {"uv": [0, 0, 4, 2], "texture": "#4"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#4"}, + "west": {"uv": [0, 0, 4, 2], "texture": "#4"}, + "up": {"uv": [0, 0, 4, 4], "texture": "#4"}, + "down": {"uv": [0, 0, 4, 4], "texture": "#4"} + } + }, + { + "name": "edge1", + "from": [3, 2, 3], + "to": [6, 3, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 8, 9]}, + "faces": { + "north": {"uv": [5, 7, 8, 8], "texture": "#1"}, + "east": {"uv": [5, 7, 8, 8], "texture": "#1"}, + "south": {"uv": [5, 7, 8, 8], "texture": "#1"}, + "west": {"uv": [5, 7, 8, 8], "texture": "#1"}, + "up": {"uv": [5, 5, 8, 8], "rotation": 180, "texture": "#1"}, + "down": {"uv": [5, 5, 8, 8], "rotation": 180, "texture": "#1"} + } + }, + { + "name": "edge2", + "from": [3, 2, 10], + "to": [6, 3, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 8, 16]}, + "faces": { + "north": {"uv": [5, 7, 8, 8], "texture": "#1"}, + "east": {"uv": [5, 7, 8, 8], "texture": "#1"}, + "south": {"uv": [5, 7, 8, 8], "texture": "#1"}, + "west": {"uv": [5, 7, 8, 8], "texture": "#1"}, + "up": {"uv": [5, 5, 8, 8], "rotation": 90, "texture": "#1"}, + "down": {"uv": [5, 5, 8, 8], "rotation": 90, "texture": "#1"} + } + }, + { + "name": "edge3", + "from": [10, 2, 3], + "to": [13, 3, 6], + "faces": { + "north": {"uv": [5, 7, 8, 8], "texture": "#1"}, + "east": {"uv": [5, 7, 8, 8], "texture": "#1"}, + "south": {"uv": [5, 7, 8, 8], "texture": "#1"}, + "west": {"uv": [5, 7, 8, 8], "texture": "#1"}, + "up": {"uv": [5, 5, 8, 8], "rotation": 270, "texture": "#1"}, + "down": {"uv": [5, 5, 8, 8], "rotation": 270, "texture": "#1"} + } + }, + { + "name": "edge4", + "from": [10, 2, 10], + "to": [13, 3, 13], + "faces": { + "north": {"uv": [5, 7, 8, 8], "texture": "#1"}, + "east": {"uv": [5, 7, 8, 8], "texture": "#1"}, + "south": {"uv": [5, 7, 8, 8], "texture": "#1"}, + "west": {"uv": [5, 7, 8, 8], "texture": "#1"}, + "up": {"uv": [5, 5, 8, 8], "texture": "#1"}, + "down": {"uv": [5, 6, 8, 9], "texture": "#1"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/alchemicalwizardry/models/bloodaltar-fixeUV.obj b/src/main/resources/assets/bloodmagic/models/bloodaltar-fixeuv.obj similarity index 100% rename from src/main/resources/assets/alchemicalwizardry/models/bloodaltar-fixeUV.obj rename to src/main/resources/assets/bloodmagic/models/bloodaltar-fixeuv.obj diff --git a/src/main/resources/assets/alchemicalwizardry/models/bloodaltar.obj b/src/main/resources/assets/bloodmagic/models/bloodaltar.obj similarity index 100% rename from src/main/resources/assets/alchemicalwizardry/models/bloodaltar.obj rename to src/main/resources/assets/bloodmagic/models/bloodaltar.obj diff --git a/src/main/resources/assets/bloodmagic/models/item/alchemytable.json b/src/main/resources/assets/bloodmagic/models/item/alchemytable.json new file mode 100644 index 00000000..53bc252a --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/alchemytable.json @@ -0,0 +1,10 @@ +{ + "parent": "bloodmagic:block/alchemytable", + "display": { + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ -2.5, -1, 0 ], + "scale":[ 0.4, 0.4, 0.4 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/altar.json b/src/main/resources/assets/bloodmagic/models/item/altar.json new file mode 100644 index 00000000..945aff81 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/altar.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/bloodaltar" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/book.json b/src/main/resources/assets/bloodmagic/models/item/book.json new file mode 100644 index 00000000..11cfc959 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/book.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/sanguine_scientiem_guide_book" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_corrosive.json b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_corrosive.json new file mode 100644 index 00000000..0f5ae214 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_corrosive.json @@ -0,0 +1,28 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "bloodmagic:items/SentientBow_corrosive" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_corrosive_pulling_0.json b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_corrosive_pulling_0.json new file mode 100644 index 00000000..e271c35f --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_corrosive_pulling_0.json @@ -0,0 +1,28 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "bloodmagic:items/SentientBow_corrosive_pulling_0" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_corrosive_pulling_1.json b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_corrosive_pulling_1.json new file mode 100644 index 00000000..10c92cc6 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_corrosive_pulling_1.json @@ -0,0 +1,28 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "bloodmagic:items/SentientBow_corrosive_pulling_1" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_corrosive_pulling_2.json b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_corrosive_pulling_2.json new file mode 100644 index 00000000..b8599446 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_corrosive_pulling_2.json @@ -0,0 +1,29 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "bloodmagic:items/SentientBow_corrosive_pulling_2" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} + diff --git a/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_destructive.json b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_destructive.json new file mode 100644 index 00000000..e9b94f1b --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_destructive.json @@ -0,0 +1,28 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "bloodmagic:items/SentientBow_destructive" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_destructive_pulling_0.json b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_destructive_pulling_0.json new file mode 100644 index 00000000..06f33bc6 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_destructive_pulling_0.json @@ -0,0 +1,28 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "bloodmagic:items/SentientBow_destructive_pulling_0" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_destructive_pulling_1.json b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_destructive_pulling_1.json new file mode 100644 index 00000000..ef5cb818 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_destructive_pulling_1.json @@ -0,0 +1,28 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "bloodmagic:items/SentientBow_destructive_pulling_1" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_destructive_pulling_2.json b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_destructive_pulling_2.json new file mode 100644 index 00000000..0ce0bb52 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_destructive_pulling_2.json @@ -0,0 +1,29 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "bloodmagic:items/SentientBow_destructive_pulling_2" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} + diff --git a/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_pulling_0.json b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_pulling_0.json new file mode 100644 index 00000000..b6704fe2 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_pulling_0.json @@ -0,0 +1,28 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "bloodmagic:items/SentientBow_pulling_0" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_pulling_1.json b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_pulling_1.json new file mode 100644 index 00000000..74d75dfd --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_pulling_1.json @@ -0,0 +1,28 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "bloodmagic:items/SentientBow_pulling_1" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_pulling_2.json b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_pulling_2.json new file mode 100644 index 00000000..42dc030c --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_pulling_2.json @@ -0,0 +1,28 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "bloodmagic:items/SentientBow_pulling_2" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_steadfast.json b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_steadfast.json new file mode 100644 index 00000000..7cd37a46 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_steadfast.json @@ -0,0 +1,28 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "bloodmagic:items/SentientBow_steadfast" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_steadfast_pulling_0.json b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_steadfast_pulling_0.json new file mode 100644 index 00000000..03ac3941 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_steadfast_pulling_0.json @@ -0,0 +1,28 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "bloodmagic:items/SentientBow_steadfast_pulling_0" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_steadfast_pulling_1.json b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_steadfast_pulling_1.json new file mode 100644 index 00000000..fad82f89 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_steadfast_pulling_1.json @@ -0,0 +1,28 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "bloodmagic:items/SentientBow_steadfast_pulling_1" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_steadfast_pulling_2.json b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_steadfast_pulling_2.json new file mode 100644 index 00000000..53cd4281 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_steadfast_pulling_2.json @@ -0,0 +1,29 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "bloodmagic:items/SentientBow_steadfast_pulling_2" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} + diff --git a/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_vengeful.json b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_vengeful.json new file mode 100644 index 00000000..4d9876eb --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_vengeful.json @@ -0,0 +1,28 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "bloodmagic:items/SentientBow_vengeful" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_vengeful_pulling_0.json b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_vengeful_pulling_0.json new file mode 100644 index 00000000..de5f6833 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_vengeful_pulling_0.json @@ -0,0 +1,28 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "bloodmagic:items/SentientBow_vengeful_pulling_0" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_vengeful_pulling_1.json b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_vengeful_pulling_1.json new file mode 100644 index 00000000..f77b1508 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_vengeful_pulling_1.json @@ -0,0 +1,28 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "bloodmagic:items/SentientBow_vengeful_pulling_1" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_vengeful_pulling_2.json b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_vengeful_pulling_2.json new file mode 100644 index 00000000..618b904d --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_vengeful_pulling_2.json @@ -0,0 +1,29 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "bloodmagic:items/SentientBow_vengeful_pulling_2" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} + diff --git a/src/main/resources/assets/bloodmagic/models/item/demoncrucible.json b/src/main/resources/assets/bloodmagic/models/item/demoncrucible.json new file mode 100644 index 00000000..00ca898b --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/demoncrucible.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/demoncrucible" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/demoncrystallizer.json b/src/main/resources/assets/bloodmagic/models/item/demoncrystallizer.json new file mode 100644 index 00000000..e10f069e --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/demoncrystallizer.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/demoncrystallizer" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/demonpylon.json b/src/main/resources/assets/bloodmagic/models/item/demonpylon.json new file mode 100644 index 00000000..7a67ce9b --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/demonpylon.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/demonpylon" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/doubt_bucket.json b/src/main/resources/assets/bloodmagic/models/item/doubt_bucket.json new file mode 100644 index 00000000..7988cf44 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/doubt_bucket.json @@ -0,0 +1,5 @@ +{ + "parent": "forge:item/bucket_drip", + "loader": "forge:bucket", + "fluid": "bloodmagic:test_fluid" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/incensealtar.json b/src/main/resources/assets/bloodmagic/models/item/incensealtar.json new file mode 100644 index 00000000..2ae61ae6 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/incensealtar.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/incensealtar" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/life_essence_bucket.json b/src/main/resources/assets/bloodmagic/models/item/life_essence_bucket.json new file mode 100644 index 00000000..7988cf44 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/life_essence_bucket.json @@ -0,0 +1,5 @@ +{ + "parent": "forge:item/bucket_drip", + "loader": "forge:bucket", + "fluid": "bloodmagic:test_fluid" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/ritual_dismantler.json b/src/main/resources/assets/bloodmagic/models/item/ritual_dismantler.json new file mode 100644 index 00000000..dc88c182 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/ritual_dismantler.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "bloodmagic:items/ritual_dismantler" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/sentient_bow.json b/src/main/resources/assets/bloodmagic/models/item/sentient_bow.json new file mode 100644 index 00000000..94066618 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/sentient_bow.json @@ -0,0 +1,169 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "bloodmagic:items/SentientBow" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + }, + "overrides": [ + { + "predicate": { + "type": 1 + }, + "model": "bloodmagic:item/bow/ItemSentientBow_corrosive" + }, + { + "predicate": { + "type": 2 + }, + "model": "bloodmagic:item/bow/ItemSentientBow_destructive" + }, + { + "predicate": { + "type": 3 + }, + "model": "bloodmagic:item/bow/ItemSentientBow_vengeful" + }, + { + "predicate": { + "type": 4 + }, + "model": "bloodmagic:item/bow/ItemSentientBow_steadfast" + }, + { + "predicate": { + "type": 0, + "pulling": 1 + }, + "model": "bloodmagic:item/bow/ItemSentientBow_pulling_0" + }, + { + "predicate": { + "type": 1, + "pulling": 1 + }, + "model": "bloodmagic:item/bow/ItemSentientBow_corrosive_pulling_0" + }, + { + "predicate": { + "type": 2, + "pulling": 1 + }, + "model": "bloodmagic:item/bow/ItemSentientBow_destructive_pulling_0" + }, + { + "predicate": { + "type": 3, + "pulling": 1 + }, + "model": "bloodmagic:item/bow/ItemSentientBow_vengeful_pulling_0" + }, + { + "predicate": { + "type": 4, + "pulling": 1 + }, + "model": "bloodmagic:item/bow/ItemSentientBow_steadfast_pulling_0" + }, + { + "predicate": { + "type": 0, + "pulling": 1, + "pull": 0.65 + }, + "model": "bloodmagic:item/bow/ItemSentientBow_pulling_1" + }, + { + "predicate": { + "type": 1, + "pulling": 1, + "pull": 0.65 + }, + "model": "bloodmagic:item/bow/ItemSentientBow_corrosive_pulling_1" + }, + { + "predicate": { + "type": 2, + "pulling": 1, + "pull": 0.65 + }, + "model": "bloodmagic:item/bow/ItemSentientBow_destructive_pulling_1" + }, + { + "predicate": { + "type": 3, + "pulling": 1, + "pull": 0.65 + }, + "model": "bloodmagic:item/bow/ItemSentientBow_vengeful_pulling_1" + }, + { + "predicate": { + "type": 4, + "pulling": 1, + "pull": 0.65 + }, + "model": "bloodmagic:item/bow/ItemSentientBow_steadfast_pulling_1" + }, + { + "predicate": { + "type": 0, + "pulling": 1, + "pull": 0.9 + }, + "model": "bloodmagic:item/bow/ItemSentientBow_pulling_2" + }, + { + "predicate": { + "type": 1, + "pulling": 1, + "pull": 0.9 + }, + "model": "bloodmagic:item/bow/ItemSentientBow_corrosive_pulling_2" + }, + { + "predicate": { + "type": 2, + "pulling": 1, + "pull": 0.9 + }, + "model": "bloodmagic:item/bow/ItemSentientBow_destructive_pulling_2" + }, + { + "predicate": { + "type": 3, + "pulling": 1, + "pull": 0.9 + }, + "model": "bloodmagic:item/bow/ItemSentientBow_vengeful_pulling_2" + }, + { + "predicate": { + "type": 4, + "pulling": 1, + "pull": 0.9 + }, + "model": "bloodmagic:item/bow/ItemSentientBow_steadfast_pulling_2" + } + ] +} diff --git a/src/main/resources/assets/bloodmagic/models/item/soulforge.json b/src/main/resources/assets/bloodmagic/models/item/soulforge.json new file mode 100644 index 00000000..3b715b5e --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/soulforge.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/soulforge" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/schematics/four_way_corridor.json b/src/main/resources/assets/bloodmagic/schematics/four_way_corridor.json new file mode 100644 index 00000000..6e3e792f --- /dev/null +++ b/src/main/resources/assets/bloodmagic/schematics/four_way_corridor.json @@ -0,0 +1,56 @@ +{ + "dungeonWeight": 2, + "structureMap": { + "bloodmagic:four_way_corridor": { + "x": 0, + "y": 0, + "z": 0 + } + }, + "doorMap": { + "north": [ + { + "x": 5, + "y": 0, + "z": 0 + } + ], + "south": [ + { + "x": 5, + "y": 0, + "z": 10 + } + ], + "west": [ + { + "x": 0, + "y": 0, + "z": 5 + } + ], + "east": [ + { + "x": 10, + "y": 0, + "z": 5 + } + ] + }, + "descriptorList": [ + { + "minimumOffset": { + "x": 0, + "y": 0, + "z": 0 + }, + "maximumOffset": { + "x": 11, + "y": 6, + "z": 11 + }, + "blockPosCache": [], + "cache": true + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/schematics/four_way_corridor_loot.json b/src/main/resources/assets/bloodmagic/schematics/four_way_corridor_loot.json new file mode 100644 index 00000000..6ceff35d --- /dev/null +++ b/src/main/resources/assets/bloodmagic/schematics/four_way_corridor_loot.json @@ -0,0 +1,56 @@ +{ + "dungeonWeight": 1, + "structureMap": { + "bloodmagic:four_way_corridor_loot": { + "x": 0, + "y": 0, + "z": 0 + } + }, + "doorMap": { + "north": [ + { + "x": 5, + "y": 5, + "z": 0 + } + ], + "south": [ + { + "x": 5, + "y": 5, + "z": 10 + } + ], + "west": [ + { + "x": 0, + "y": 5, + "z": 5 + } + ], + "east": [ + { + "x": 10, + "y": 5, + "z": 5 + } + ] + }, + "descriptorList": [ + { + "minimumOffset": { + "x": 0, + "y": 0, + "z": 0 + }, + "maximumOffset": { + "x": 11, + "y": 11, + "z": 11 + }, + "blockPosCache": [], + "cache": true + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/schematics/ore_hold_1.json b/src/main/resources/assets/bloodmagic/schematics/ore_hold_1.json new file mode 100644 index 00000000..ec51994a --- /dev/null +++ b/src/main/resources/assets/bloodmagic/schematics/ore_hold_1.json @@ -0,0 +1,69 @@ +{ + "dungeonWeight": 4, + "structureMap": { + "bloodmagic:ore_hold_1": { + "x": 0, + "y": 0, + "z": 0 + } + }, + "doorMap": { + "north": [ + { + "x": 5, + "y": 0, + "z": 0 + }, + { + "x": 2, + "y": 5, + "z": 0 + }, + { + "x": 12, + "y": 5, + "z": 0 + } + ], + "south": [ + { + "x": 5, + "y": 0, + "z": 14 + }, + { + "x": 2, + "y": 5, + "z": 14 + }, + { + "x": 12, + "y": 5, + "z": 14 + } + ], + "west": [ + { + "x": 0, + "y": 5, + "z": 7 + } + ] + }, + "descriptorList": [ + { + "minimumOffset": { + "x": 0, + "y": 0, + "z": 0 + }, + "maximumOffset": { + "x": 15, + "y": 12, + "z": 15 + }, + "blockPosCache": [], + "cache": true + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/schematics/overlapped_corridor.json b/src/main/resources/assets/bloodmagic/schematics/overlapped_corridor.json new file mode 100644 index 00000000..dfbd5e4a --- /dev/null +++ b/src/main/resources/assets/bloodmagic/schematics/overlapped_corridor.json @@ -0,0 +1,70 @@ +{ + "dungeonWeight": 2, + "structureMap": { + "bloodmagic:overlapped_corridor": { + "x": 0, + "y": 0, + "z": 0 + } + }, + "doorMap": { + "north": [ + { + "x": 5, + "y": 0, + "z": 0 + } + ], + "south": [ + { + "x": 5, + "y": 0, + "z": 10 + } + ], + "west": [ + { + "x": 0, + "y": 4, + "z": 5 + } + ], + "east": [ + { + "x": 10, + "y": 4, + "z": 5 + } + ] + }, + "descriptorList": [ + { + "minimumOffset": { + "x": 3, + "y": 0, + "z": 0 + }, + "maximumOffset": { + "x": 8, + "y": 5, + "z": 11 + }, + "blockPosCache": [], + "cache": true + }, + { + "minimumOffset": { + "x": 0, + "y": 4, + "z": 3 + }, + "maximumOffset": { + "x": 11, + "y": 9, + "z": 8 + }, + "blockPosCache": [], + "cache": true + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/schematics/schematics.json b/src/main/resources/assets/bloodmagic/schematics/schematics.json new file mode 100644 index 00000000..a1915c05 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/schematics/schematics.json @@ -0,0 +1,7 @@ +[ + "bloodmagic:t_corridor", + "bloodmagic:four_way_corridor_loot", + "bloodmagic:four_way_corridor", + "bloodmagic:ore_hold_1", + "bloodmagic:straight_corridor" +] \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/schematics/spiral_staircase.json b/src/main/resources/assets/bloodmagic/schematics/spiral_staircase.json new file mode 100644 index 00000000..31eda76a --- /dev/null +++ b/src/main/resources/assets/bloodmagic/schematics/spiral_staircase.json @@ -0,0 +1,81 @@ +{ + "dungeonWeight": 4, + "structureMap": { + "bloodmagic:spiral_staircase": { + "x": 0, + "y": 0, + "z": 0 + } + }, + "doorMap": { + "north": [ + { + "x": 5, + "y": 0, + "z": 0 + }, + { + "x": 5, + "y": 12, + "z": 0 + } + ], + "south": [ + { + "x": 5, + "y": 0, + "z": 14 + }, + { + "x": 5, + "y": 12, + "z": 10 + } + ], + "west": [ + { + "x": 0, + "y": 0, + "z": 5 + }, + { + "x": 0, + "y": 12, + "z": 5 + } + ], + "east": [ + { + "x": 10, + "y": 0, + "z": 5 + }, + { + "x": 10, + "y": 6, + "z": 5 + }, + { + "x": 10, + "y": 12, + "z": 5 + } + ] + }, + "descriptorList": [ + { + "minimumOffset": { + "x": 0, + "y": 0, + "z": 0 + }, + "maximumOffset": { + "x": 11, + "y": 18, + "z": 11 + }, + "blockPosCache": [], + "cache": true + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/schematics/straight_corridor.json b/src/main/resources/assets/bloodmagic/schematics/straight_corridor.json new file mode 100644 index 00000000..537eee82 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/schematics/straight_corridor.json @@ -0,0 +1,42 @@ +{ + "dungeonWeight": 2, + "structureMap": { + "bloodmagic:straight_corridor": { + "x": 0, + "y": 0, + "z": 0 + } + }, + "doorMap": { + "west": [ + { + "x": 0, + "y": 0, + "z": 2 + } + ], + "east": [ + { + "x": 10, + "y": 0, + "z": 2 + } + ] + }, + "descriptorList": [ + { + "minimumOffset": { + "x": 0, + "y": 0, + "z": 0 + }, + "maximumOffset": { + "x": 11, + "y": 5, + "z": 5 + }, + "blockPosCache": [], + "cache": true + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/schematics/t_corridor.json b/src/main/resources/assets/bloodmagic/schematics/t_corridor.json new file mode 100644 index 00000000..6bc5f643 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/schematics/t_corridor.json @@ -0,0 +1,49 @@ +{ + "dungeonWeight": 2, + "structureMap": { + "bloodmagic:t_corridor": { + "x": 0, + "y": 0, + "z": 0 + } + }, + "doorMap": { + "north": [ + { + "x": 5, + "y": 0, + "z": 0 + } + ], + "west": [ + { + "x": 0, + "y": 0, + "z": 5 + } + ], + "east": [ + { + "x": 10, + "y": 0, + "z": 5 + } + ] + }, + "descriptorList": [ + { + "minimumOffset": { + "x": 0, + "y": 0, + "z": 0 + }, + "maximumOffset": { + "x": 11, + "y": 5, + "z": 8 + }, + "blockPosCache": [], + "cache": true + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/textures/block/accelerationrune.png b/src/main/resources/assets/bloodmagic/textures/block/accelerationrune.png new file mode 100644 index 00000000..2b56f7fa Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/accelerationrune.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/airritualstone.png b/src/main/resources/assets/bloodmagic/textures/block/airritualstone.png new file mode 100644 index 00000000..7dfa2296 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/airritualstone.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/altarcapacityrune.png b/src/main/resources/assets/bloodmagic/textures/block/altarcapacityrune.png new file mode 100644 index 00000000..03d2effb Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/altarcapacityrune.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/arc_bottom.png b/src/main/resources/assets/bloodmagic/textures/block/arc_bottom.png new file mode 100644 index 00000000..2ab0e120 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/arc_bottom.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/arc_front.png b/src/main/resources/assets/bloodmagic/textures/block/arc_front.png new file mode 100644 index 00000000..7b6cffb4 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/arc_front.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/arc_side.png b/src/main/resources/assets/bloodmagic/textures/block/arc_side.png new file mode 100644 index 00000000..ec176079 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/arc_side.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/arc_top.png b/src/main/resources/assets/bloodmagic/textures/block/arc_top.png new file mode 100644 index 00000000..8baa7de3 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/arc_top.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/bettercapacityrune.png b/src/main/resources/assets/bloodmagic/textures/block/bettercapacityrune.png new file mode 100644 index 00000000..29a2335e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/bettercapacityrune.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/blankrune.png b/src/main/resources/assets/bloodmagic/textures/block/blankrune.png new file mode 100644 index 00000000..df6232a2 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/blankrune.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/bloodlight.png b/src/main/resources/assets/bloodmagic/textures/block/bloodlight.png new file mode 100644 index 00000000..4935a71f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/bloodlight.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/bloodsocket.png b/src/main/resources/assets/bloodmagic/textures/block/bloodsocket.png new file mode 100644 index 00000000..fe7219a8 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/bloodsocket.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/bloodstonebrick.png b/src/main/resources/assets/bloodmagic/textures/block/bloodstonebrick.png new file mode 100644 index 00000000..5cd9c44b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/bloodstonebrick.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/bloodtank.png b/src/main/resources/assets/bloodmagic/textures/block/bloodtank.png new file mode 100644 index 00000000..053e8280 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/bloodtank.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/chargingrune.png b/src/main/resources/assets/bloodmagic/textures/block/chargingrune.png new file mode 100644 index 00000000..26772fc6 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/chargingrune.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_1.png b/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_1.png new file mode 100644 index 00000000..a6005e5a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_1.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_2.png b/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_2.png new file mode 100644 index 00000000..cf6e8cf0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_2.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_3.png b/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_3.png new file mode 100644 index 00000000..b0bc850b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_3.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_4.png b/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_4.png new file mode 100644 index 00000000..ad7ba3bb Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_4.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_5.png b/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_5.png new file mode 100644 index 00000000..78631666 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_5.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_6.png b/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_6.png new file mode 100644 index 00000000..6dc36ae0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_6.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_7.png b/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_7.png new file mode 100644 index 00000000..ee33cede Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_7.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_8.png b/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_8.png new file mode 100644 index 00000000..0ca1b657 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/creeping_doubt_8.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dislocationrune.png b/src/main/resources/assets/bloodmagic/textures/block/dislocationrune.png new file mode 100644 index 00000000..4f3378e1 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dislocationrune.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick1.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick1.png new file mode 100644 index 00000000..dbf9ae1b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick1.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick1_c.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick1_c.png new file mode 100644 index 00000000..61e3af1b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick1_c.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick1_d.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick1_d.png new file mode 100644 index 00000000..72216cbb Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick1_d.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick1_s.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick1_s.png new file mode 100644 index 00000000..c77595ab Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick1_s.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick1_v.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick1_v.png new file mode 100644 index 00000000..80cee2c6 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick1_v.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick2.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick2.png new file mode 100644 index 00000000..639abe9f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick2.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick2_c.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick2_c.png new file mode 100644 index 00000000..d1396bb7 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick2_c.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick2_d.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick2_d.png new file mode 100644 index 00000000..9d3910af Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick2_d.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick2_s.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick2_s.png new file mode 100644 index 00000000..382b3c2c Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick2_s.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick2_v.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick2_v.png new file mode 100644 index 00000000..e2bca470 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick2_v.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick3.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick3.png new file mode 100644 index 00000000..97d4d69c Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick3.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick3_c.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick3_c.png new file mode 100644 index 00000000..438c4860 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick3_c.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick3_d.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick3_d.png new file mode 100644 index 00000000..35e7b73a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick3_d.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick3_s.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick3_s.png new file mode 100644 index 00000000..73039131 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick3_s.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick3_v.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick3_v.png new file mode 100644 index 00000000..4f957050 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_brick3_v.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_eye.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_eye.png new file mode 100644 index 00000000..124008a1 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_eye.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_eye_c.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_eye_c.png new file mode 100644 index 00000000..fd95417e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_eye_c.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_eye_d.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_eye_d.png new file mode 100644 index 00000000..3d2b425d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_eye_d.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_eye_s.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_eye_s.png new file mode 100644 index 00000000..773f654b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_eye_s.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_eye_v.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_eye_v.png new file mode 100644 index 00000000..4178eeaa Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_eye_v.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_metal.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_metal.png new file mode 100644 index 00000000..d44547cd Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_metal.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_metal_c.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_metal_c.png new file mode 100644 index 00000000..f8ce429d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_metal_c.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_metal_d.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_metal_d.png new file mode 100644 index 00000000..774c0e21 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_metal_d.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_metal_s.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_metal_s.png new file mode 100644 index 00000000..d6d52598 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_metal_s.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_metal_v.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_metal_v.png new file mode 100644 index 00000000..6ca45881 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_metal_v.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_ore.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_ore.png new file mode 100644 index 00000000..3771f3a2 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_ore.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillar.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillar.png new file mode 100644 index 00000000..d61143c4 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillar.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillar_c.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillar_c.png new file mode 100644 index 00000000..cb3f2127 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillar_c.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillar_d.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillar_d.png new file mode 100644 index 00000000..40a5cf1d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillar_d.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillar_s.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillar_s.png new file mode 100644 index 00000000..1dfce490 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillar_s.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillar_v.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillar_v.png new file mode 100644 index 00000000..32f84555 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillar_v.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarbottom.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarbottom.png new file mode 100644 index 00000000..18f98781 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarbottom.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarbottom_c.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarbottom_c.png new file mode 100644 index 00000000..cbc085de Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarbottom_c.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarbottom_d.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarbottom_d.png new file mode 100644 index 00000000..f1c88198 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarbottom_d.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarbottom_s.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarbottom_s.png new file mode 100644 index 00000000..5e0b35ab Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarbottom_s.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarbottom_v.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarbottom_v.png new file mode 100644 index 00000000..b8029b29 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarbottom_v.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarheart.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarheart.png new file mode 100644 index 00000000..9834c97f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarheart.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarheart_c.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarheart_c.png new file mode 100644 index 00000000..011a3f37 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarheart_c.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarheart_d.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarheart_d.png new file mode 100644 index 00000000..27ae650a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarheart_d.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarheart_s.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarheart_s.png new file mode 100644 index 00000000..1852fa16 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarheart_s.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarheart_v.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarheart_v.png new file mode 100644 index 00000000..4bac30c6 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarheart_v.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarspecial.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarspecial.png new file mode 100644 index 00000000..4d1323c8 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarspecial.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarspecial_c.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarspecial_c.png new file mode 100644 index 00000000..56cbce1e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarspecial_c.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarspecial_d.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarspecial_d.png new file mode 100644 index 00000000..40166ef0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarspecial_d.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarspecial_s.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarspecial_s.png new file mode 100644 index 00000000..b88c7dd2 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarspecial_s.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarspecial_v.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarspecial_v.png new file mode 100644 index 00000000..763dab9f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillarspecial_v.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillartop.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillartop.png new file mode 100644 index 00000000..fbc0dfdf Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillartop.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillartop_c.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillartop_c.png new file mode 100644 index 00000000..6c5d093a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillartop_c.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillartop_d.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillartop_d.png new file mode 100644 index 00000000..fc53b255 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillartop_d.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillartop_s.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillartop_s.png new file mode 100644 index 00000000..4b7b564b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillartop_s.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillartop_v.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillartop_v.png new file mode 100644 index 00000000..eaf8e04c Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_pillartop_v.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_polished.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_polished.png new file mode 100644 index 00000000..92e883c2 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_polished.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_polished_c.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_polished_c.png new file mode 100644 index 00000000..6c0fbd75 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_polished_c.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_polished_d.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_polished_d.png new file mode 100644 index 00000000..b7d5bfa3 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_polished_d.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_polished_s.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_polished_s.png new file mode 100644 index 00000000..efcb4675 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_polished_s.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_polished_v.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_polished_v.png new file mode 100644 index 00000000..0cc3043f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_polished_v.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_smallbrick.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_smallbrick.png new file mode 100644 index 00000000..b7bef500 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_smallbrick.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_smallbrick_c.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_smallbrick_c.png new file mode 100644 index 00000000..d902c598 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_smallbrick_c.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_smallbrick_d.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_smallbrick_d.png new file mode 100644 index 00000000..2e94a993 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_smallbrick_d.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_smallbrick_s.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_smallbrick_s.png new file mode 100644 index 00000000..87bfde01 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_smallbrick_s.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_smallbrick_v.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_smallbrick_v.png new file mode 100644 index 00000000..2ec343f2 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_smallbrick_v.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_stone.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_stone.png new file mode 100644 index 00000000..f6d6a2c9 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_stone.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_stone_c.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_stone_c.png new file mode 100644 index 00000000..fc8b2617 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_stone_c.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_stone_d.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_stone_d.png new file mode 100644 index 00000000..a82386bc Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_stone_d.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_stone_s.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_stone_s.png new file mode 100644 index 00000000..32774562 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_stone_s.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_stone_v.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_stone_v.png new file mode 100644 index 00000000..fc51f0f0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_stone_v.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tile.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tile.png new file mode 100644 index 00000000..9a3c34c5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tile.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tile_c.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tile_c.png new file mode 100644 index 00000000..d6c7a208 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tile_c.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tile_d.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tile_d.png new file mode 100644 index 00000000..d84cc7fd Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tile_d.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tile_s.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tile_s.png new file mode 100644 index 00000000..579f4ed6 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tile_s.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tile_v.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tile_v.png new file mode 100644 index 00000000..a505e477 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tile_v.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tilespecial.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tilespecial.png new file mode 100644 index 00000000..465e98c3 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tilespecial.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tilespecial_c.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tilespecial_c.png new file mode 100644 index 00000000..364b014d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tilespecial_c.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tilespecial_d.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tilespecial_d.png new file mode 100644 index 00000000..f39da4ec Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tilespecial_d.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tilespecial_s.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tilespecial_s.png new file mode 100644 index 00000000..35ffd353 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tilespecial_s.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tilespecial_v.png b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tilespecial_v.png new file mode 100644 index 00000000..94ff2d3b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/dungeon/dungeon_tilespecial_v.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/duskritualstone.png b/src/main/resources/assets/bloodmagic/textures/block/duskritualstone.png new file mode 100644 index 00000000..3bc12099 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/duskritualstone.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/earthritualstone.png b/src/main/resources/assets/bloodmagic/textures/block/earthritualstone.png new file mode 100644 index 00000000..7fc0b3b4 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/earthritualstone.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/efficiencyrune.png b/src/main/resources/assets/bloodmagic/textures/block/efficiencyrune.png new file mode 100644 index 00000000..52e9f6c7 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/efficiencyrune.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/empty.png b/src/main/resources/assets/bloodmagic/textures/block/empty.png new file mode 100644 index 00000000..5ac03397 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/empty.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/emptysocket.png b/src/main/resources/assets/bloodmagic/textures/block/emptysocket.png new file mode 100644 index 00000000..4e536eee Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/emptysocket.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/etherealopaquemimic.png b/src/main/resources/assets/bloodmagic/textures/block/etherealopaquemimic.png new file mode 100644 index 00000000..b5b0f000 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/etherealopaquemimic.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/fireritualstone.png b/src/main/resources/assets/bloodmagic/textures/block/fireritualstone.png new file mode 100644 index 00000000..69fe25c6 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/fireritualstone.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/imperfectritualstone.png b/src/main/resources/assets/bloodmagic/textures/block/imperfectritualstone.png new file mode 100644 index 00000000..528cc375 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/imperfectritualstone.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/largebloodstonebrick.png b/src/main/resources/assets/bloodmagic/textures/block/largebloodstonebrick.png new file mode 100644 index 00000000..4935a71f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/largebloodstonebrick.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/lifeessenceflowing.png b/src/main/resources/assets/bloodmagic/textures/block/lifeessenceflowing.png new file mode 100644 index 00000000..b8d61d24 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/lifeessenceflowing.png differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/lifeEssenceFlowing.png.mcmeta b/src/main/resources/assets/bloodmagic/textures/block/lifeessenceflowing.png.mcmeta similarity index 100% rename from src/main/resources/assets/alchemicalwizardry/textures/blocks/lifeEssenceFlowing.png.mcmeta rename to src/main/resources/assets/bloodmagic/textures/block/lifeessenceflowing.png.mcmeta diff --git a/src/main/resources/assets/bloodmagic/textures/block/lifeessencestill.png b/src/main/resources/assets/bloodmagic/textures/block/lifeessencestill.png new file mode 100644 index 00000000..add7bf54 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/lifeessencestill.png differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/lifeEssenceStill.png.mcmeta b/src/main/resources/assets/bloodmagic/textures/block/lifeessencestill.png.mcmeta similarity index 100% rename from src/main/resources/assets/alchemicalwizardry/textures/blocks/lifeEssenceStill.png.mcmeta rename to src/main/resources/assets/bloodmagic/textures/block/lifeessencestill.png.mcmeta diff --git a/src/main/resources/assets/bloodmagic/textures/block/lightritualstone.png b/src/main/resources/assets/bloodmagic/textures/block/lightritualstone.png new file mode 100644 index 00000000..b8415523 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/lightritualstone.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/liquid_doubt_flowing.png b/src/main/resources/assets/bloodmagic/textures/block/liquid_doubt_flowing.png new file mode 100644 index 00000000..3eaa219e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/liquid_doubt_flowing.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/liquid_doubt_flowing.png.mcmeta b/src/main/resources/assets/bloodmagic/textures/block/liquid_doubt_flowing.png.mcmeta new file mode 100644 index 00000000..8e55e43b --- /dev/null +++ b/src/main/resources/assets/bloodmagic/textures/block/liquid_doubt_flowing.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 3 + } +} diff --git a/src/main/resources/assets/bloodmagic/textures/block/liquid_doubt_still.png b/src/main/resources/assets/bloodmagic/textures/block/liquid_doubt_still.png new file mode 100644 index 00000000..b9c8daf0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/liquid_doubt_still.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/liquid_doubt_still.png.mcmeta b/src/main/resources/assets/bloodmagic/textures/block/liquid_doubt_still.png.mcmeta new file mode 100644 index 00000000..7ceb3639 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/textures/block/liquid_doubt_still.png.mcmeta @@ -0,0 +1,45 @@ +{ + "animation": { + "frametime": 2, + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 18, + 17, + 16, + 15, + 14, + 13, + 12, + 11, + 10, + 9, + 8, + 7, + 6, + 5, + 4, + 3, + 2, + 1 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/textures/block/masterritualstone.png b/src/main/resources/assets/bloodmagic/textures/block/masterritualstone.png new file mode 100644 index 00000000..a2776cfe Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/masterritualstone.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/masterritualstone_inverted.png b/src/main/resources/assets/bloodmagic/textures/block/masterritualstone_inverted.png new file mode 100644 index 00000000..9ba93d8b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/masterritualstone_inverted.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/nether_soil.png b/src/main/resources/assets/bloodmagic/textures/block/nether_soil.png new file mode 100644 index 00000000..4241d53f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/nether_soil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/nether_soil.png.mcmeta b/src/main/resources/assets/bloodmagic/textures/block/nether_soil.png.mcmeta new file mode 100644 index 00000000..7ceb3639 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/textures/block/nether_soil.png.mcmeta @@ -0,0 +1,45 @@ +{ + "animation": { + "frametime": 2, + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 18, + 17, + 16, + 15, + 14, + 13, + 12, + 11, + 10, + 9, + 8, + 7, + 6, + 5, + 4, + 3, + 2, + 1 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/textures/block/obsidianbrickpath.png b/src/main/resources/assets/bloodmagic/textures/block/obsidianbrickpath.png new file mode 100644 index 00000000..f06a218e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/obsidianbrickpath.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/obsidiantilepath.png b/src/main/resources/assets/bloodmagic/textures/block/obsidiantilepath.png new file mode 100644 index 00000000..0a5c2ebf Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/obsidiantilepath.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/orbcapacityrune.png b/src/main/resources/assets/bloodmagic/textures/block/orbcapacityrune.png new file mode 100644 index 00000000..ec6f34ca Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/orbcapacityrune.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/phantomblock.png b/src/main/resources/assets/bloodmagic/textures/block/phantomblock.png new file mode 100644 index 00000000..81c4f64c Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/phantomblock.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/ritualstone.png b/src/main/resources/assets/bloodmagic/textures/block/ritualstone.png new file mode 100644 index 00000000..1001bb27 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/ritualstone.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/sacrificerune.png b/src/main/resources/assets/bloodmagic/textures/block/sacrificerune.png new file mode 100644 index 00000000..d762f0e3 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/sacrificerune.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/selfsacrificerune.png b/src/main/resources/assets/bloodmagic/textures/block/selfsacrificerune.png new file mode 100644 index 00000000..e9152f33 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/selfsacrificerune.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/sentientmimic.png b/src/main/resources/assets/bloodmagic/textures/block/sentientmimic.png new file mode 100644 index 00000000..b2393417 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/sentientmimic.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/shardcluster.png b/src/main/resources/assets/bloodmagic/textures/block/shardcluster.png new file mode 100644 index 00000000..6a1cfa3e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/shardcluster.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/shardclusterbrick.png b/src/main/resources/assets/bloodmagic/textures/block/shardclusterbrick.png new file mode 100644 index 00000000..a2510fe0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/shardclusterbrick.png differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/SimpleTransCircle.png b/src/main/resources/assets/bloodmagic/textures/block/simpletranscircle.png similarity index 100% rename from src/main/resources/assets/alchemicalwizardry/textures/blocks/SimpleTransCircle.png rename to src/main/resources/assets/bloodmagic/textures/block/simpletranscircle.png diff --git a/src/main/resources/assets/bloodmagic/textures/block/solidclearmimic.png b/src/main/resources/assets/bloodmagic/textures/block/solidclearmimic.png new file mode 100644 index 00000000..8c571249 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/solidclearmimic.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/solidlightmimic.png b/src/main/resources/assets/bloodmagic/textures/block/solidlightmimic.png new file mode 100644 index 00000000..9d020edd Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/solidlightmimic.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/solidopaquemimic.png b/src/main/resources/assets/bloodmagic/textures/block/solidopaquemimic.png new file mode 100644 index 00000000..567f230c Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/solidopaquemimic.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/soul_forge.png b/src/main/resources/assets/bloodmagic/textures/block/soul_forge.png new file mode 100644 index 00000000..1001bb27 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/soul_forge.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/soulforge.png b/src/main/resources/assets/bloodmagic/textures/block/soulforge.png new file mode 100644 index 00000000..88c185db Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/soulforge.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/spectralblock.png b/src/main/resources/assets/bloodmagic/textures/block/spectralblock.png new file mode 100644 index 00000000..996fc22a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/spectralblock.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/speedrune.png b/src/main/resources/assets/bloodmagic/textures/block/speedrune.png new file mode 100644 index 00000000..e60fa0b0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/speedrune.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/stonebrickpath.png b/src/main/resources/assets/bloodmagic/textures/block/stonebrickpath.png new file mode 100644 index 00000000..c470ec95 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/stonebrickpath.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/stonetilepath.png b/src/main/resources/assets/bloodmagic/textures/block/stonetilepath.png new file mode 100644 index 00000000..1432c7ca Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/stonetilepath.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/teleposer_side.png b/src/main/resources/assets/bloodmagic/textures/block/teleposer_side.png new file mode 100644 index 00000000..2aa2cfdd Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/teleposer_side.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/teleposer_top.png b/src/main/resources/assets/bloodmagic/textures/block/teleposer_top.png new file mode 100644 index 00000000..6e419697 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/teleposer_top.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/waterritualstone.png b/src/main/resources/assets/bloodmagic/textures/block/waterritualstone.png new file mode 100644 index 00000000..a0b3a91f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/waterritualstone.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/woodbrickpath.png b/src/main/resources/assets/bloodmagic/textures/block/woodbrickpath.png new file mode 100644 index 00000000..003fd2b3 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/woodbrickpath.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/woodtilepath.png b/src/main/resources/assets/bloodmagic/textures/block/woodtilepath.png new file mode 100644 index 00000000..18aa0477 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/woodtilepath.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/wornstonebrickpath.png b/src/main/resources/assets/bloodmagic/textures/block/wornstonebrickpath.png new file mode 100644 index 00000000..d2774c79 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/wornstonebrickpath.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/block/wornstonetilepath.png b/src/main/resources/assets/bloodmagic/textures/block/wornstonetilepath.png new file mode 100644 index 00000000..0df77da0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/block/wornstonetilepath.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/bloodelytra.png b/src/main/resources/assets/bloodmagic/textures/entities/bloodelytra.png new file mode 100644 index 00000000..681994c4 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/entities/bloodelytra.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/defaultcrystallayer.png b/src/main/resources/assets/bloodmagic/textures/entities/defaultcrystallayer.png new file mode 100644 index 00000000..5f2cc19c Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/entities/defaultcrystallayer.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/energyblastprojectile.png b/src/main/resources/assets/bloodmagic/textures/entities/energyblastprojectile.png new file mode 100644 index 00000000..a2e8c7f7 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/entities/energyblastprojectile.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/explosionprojectile.png b/src/main/resources/assets/bloodmagic/textures/entities/explosionprojectile.png new file mode 100644 index 00000000..94323bc4 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/entities/explosionprojectile.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/fireprojectile.png b/src/main/resources/assets/bloodmagic/textures/entities/fireprojectile.png new file mode 100644 index 00000000..ca9d61e0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/entities/fireprojectile.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/holyprojectile.png b/src/main/resources/assets/bloodmagic/textures/entities/holyprojectile.png new file mode 100644 index 00000000..52fb9ad3 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/entities/holyprojectile.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/iceprojectile.png b/src/main/resources/assets/bloodmagic/textures/entities/iceprojectile.png new file mode 100644 index 00000000..5a09b07a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/entities/iceprojectile.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/lightningprojectile.png b/src/main/resources/assets/bloodmagic/textures/entities/lightningprojectile.png new file mode 100644 index 00000000..1ede4513 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/entities/lightningprojectile.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/mudprojectile.png b/src/main/resources/assets/bloodmagic/textures/entities/mudprojectile.png new file mode 100644 index 00000000..097cd22b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/entities/mudprojectile.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/nodebeam.png b/src/main/resources/assets/bloodmagic/textures/entities/nodebeam.png new file mode 100644 index 00000000..67545b45 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/entities/nodebeam.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/overlay/overlay_raw.png b/src/main/resources/assets/bloodmagic/textures/entities/overlay/overlay_raw.png new file mode 100644 index 00000000..c2f9110e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/entities/overlay/overlay_raw.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/soularrow.png b/src/main/resources/assets/bloodmagic/textures/entities/soularrow.png new file mode 100644 index 00000000..10830442 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/entities/soularrow.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/soularrow_corrosive.png b/src/main/resources/assets/bloodmagic/textures/entities/soularrow_corrosive.png new file mode 100644 index 00000000..b636b2a3 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/entities/soularrow_corrosive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/soularrow_destructive.png b/src/main/resources/assets/bloodmagic/textures/entities/soularrow_destructive.png new file mode 100644 index 00000000..42a19c2a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/entities/soularrow_destructive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/soularrow_steadfast.png b/src/main/resources/assets/bloodmagic/textures/entities/soularrow_steadfast.png new file mode 100644 index 00000000..9e234d87 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/entities/soularrow_steadfast.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/soularrow_vengeful.png b/src/main/resources/assets/bloodmagic/textures/entities/soularrow_vengeful.png new file mode 100644 index 00000000..15682ce2 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/entities/soularrow_vengeful.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/specter.png b/src/main/resources/assets/bloodmagic/textures/entities/specter.png new file mode 100644 index 00000000..283ca154 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/entities/specter.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/waterprojectile.png b/src/main/resources/assets/bloodmagic/textures/entities/waterprojectile.png new file mode 100644 index 00000000..3950a85a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/entities/waterprojectile.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/windgustprojectile.png b/src/main/resources/assets/bloodmagic/textures/entities/windgustprojectile.png new file mode 100644 index 00000000..fab71f51 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/entities/windgustprojectile.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/zombie_raw.png b/src/main/resources/assets/bloodmagic/textures/entities/zombie_raw.png new file mode 100644 index 00000000..4e9c7723 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/entities/zombie_raw.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/gui/alchemytable.png b/src/main/resources/assets/bloodmagic/textures/gui/alchemytable.png new file mode 100644 index 00000000..a92eac01 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/gui/alchemytable.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/gui/arc_gui.png b/src/main/resources/assets/bloodmagic/textures/gui/arc_gui.png new file mode 100644 index 00000000..5bd03fae Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/gui/arc_gui.png differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/gui/bookcrafting.png b/src/main/resources/assets/bloodmagic/textures/gui/bookcrafting.png similarity index 100% rename from src/main/resources/assets/alchemicalwizardry/textures/gui/bookcrafting.png rename to src/main/resources/assets/bloodmagic/textures/gui/bookcrafting.png diff --git a/src/main/resources/assets/alchemicalwizardry/textures/gui/bookfurnace.png b/src/main/resources/assets/bloodmagic/textures/gui/bookfurnace.png similarity index 100% rename from src/main/resources/assets/alchemicalwizardry/textures/gui/bookfurnace.png rename to src/main/resources/assets/bloodmagic/textures/gui/bookfurnace.png diff --git a/src/main/resources/assets/alchemicalwizardry/textures/gui/bookleft.png b/src/main/resources/assets/bloodmagic/textures/gui/bookleft.png similarity index 100% rename from src/main/resources/assets/alchemicalwizardry/textures/gui/bookleft.png rename to src/main/resources/assets/bloodmagic/textures/gui/bookleft.png diff --git a/src/main/resources/assets/alchemicalwizardry/textures/gui/bookright.png b/src/main/resources/assets/bloodmagic/textures/gui/bookright.png similarity index 100% rename from src/main/resources/assets/alchemicalwizardry/textures/gui/bookright.png rename to src/main/resources/assets/bloodmagic/textures/gui/bookright.png diff --git a/src/main/resources/assets/bloodmagic/textures/gui/buttons_compat.png b/src/main/resources/assets/bloodmagic/textures/gui/buttons_compat.png new file mode 100644 index 00000000..811f7ac1 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/gui/buttons_compat.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/gui/crucible.png b/src/main/resources/assets/bloodmagic/textures/gui/crucible.png new file mode 100644 index 00000000..c321fcef Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/gui/crucible.png differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/gui/GuiTrap.png b/src/main/resources/assets/bloodmagic/textures/gui/guitrap.png similarity index 100% rename from src/main/resources/assets/alchemicalwizardry/textures/gui/GuiTrap.png rename to src/main/resources/assets/bloodmagic/textures/gui/guitrap.png diff --git a/src/main/resources/assets/bloodmagic/textures/gui/masterroutingnode.png b/src/main/resources/assets/bloodmagic/textures/gui/masterroutingnode.png new file mode 100644 index 00000000..4039c1c4 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/gui/masterroutingnode.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/gui/patchouli_book/crafting.png b/src/main/resources/assets/bloodmagic/textures/gui/patchouli_book/crafting.png new file mode 100644 index 00000000..15f1ffd5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/gui/patchouli_book/crafting.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/gui/patchouli_book/page_filler.png b/src/main/resources/assets/bloodmagic/textures/gui/patchouli_book/page_filler.png new file mode 100644 index 00000000..c26fdf41 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/gui/patchouli_book/page_filler.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/gui/routingnode.png b/src/main/resources/assets/bloodmagic/textures/gui/routingnode.png new file mode 100644 index 00000000..70caad83 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/gui/routingnode.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/gui/soulforge.png b/src/main/resources/assets/bloodmagic/textures/gui/soulforge.png new file mode 100644 index 00000000..641d2cf6 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/gui/soulforge.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/gui/teleposer.png b/src/main/resources/assets/bloodmagic/textures/gui/teleposer.png new file mode 100644 index 00000000..7be6c0e3 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/gui/teleposer.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/gui/thaumcraft/gui_research_back.jpg b/src/main/resources/assets/bloodmagic/textures/gui/thaumcraft/gui_research_back.jpg new file mode 100644 index 00000000..ec52a850 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/gui/thaumcraft/gui_research_back.jpg differ diff --git a/src/main/resources/assets/bloodmagic/textures/gui/thaumcraft/gui_research_back_over.png b/src/main/resources/assets/bloodmagic/textures/gui/thaumcraft/gui_research_back_over.png new file mode 100644 index 00000000..e69de29b diff --git a/src/main/resources/assets/bloodmagic/textures/gui/widgets.png b/src/main/resources/assets/bloodmagic/textures/gui/widgets.png new file mode 100644 index 00000000..4c80a03c Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/gui/widgets.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/hud/bars.png b/src/main/resources/assets/bloodmagic/textures/hud/bars.png new file mode 100644 index 00000000..e4e0e784 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/hud/bars.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/activationcrystalawakened.png b/src/main/resources/assets/bloodmagic/textures/item/activationcrystalawakened.png new file mode 100644 index 00000000..ef212c7f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/activationcrystalawakened.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/activationcrystalcreative.png b/src/main/resources/assets/bloodmagic/textures/item/activationcrystalcreative.png new file mode 100644 index 00000000..dc65e113 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/activationcrystalcreative.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/activationcrystalweak.png b/src/main/resources/assets/bloodmagic/textures/item/activationcrystalweak.png new file mode 100644 index 00000000..895ad35f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/activationcrystalweak.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/airscribetool.png b/src/main/resources/assets/bloodmagic/textures/item/airscribetool.png new file mode 100644 index 00000000..7bf1b9fe Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/airscribetool.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/airsigil.png b/src/main/resources/assets/bloodmagic/textures/item/airsigil.png new file mode 100644 index 00000000..045dda77 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/airsigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/alchemic_liquid.png b/src/main/resources/assets/bloodmagic/textures/item/alchemic_liquid.png new file mode 100644 index 00000000..4930364f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/alchemic_liquid.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/alchemic_ribbon.png b/src/main/resources/assets/bloodmagic/textures/item/alchemic_ribbon.png new file mode 100644 index 00000000..7a497e46 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/alchemic_ribbon.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/alchemic_ribbon_will.png b/src/main/resources/assets/bloodmagic/textures/item/alchemic_ribbon_will.png new file mode 100644 index 00000000..d6fbc202 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/alchemic_ribbon_will.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/alchemic_vial.png b/src/main/resources/assets/bloodmagic/textures/item/alchemic_vial.png new file mode 100644 index 00000000..3062b21d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/alchemic_vial.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/alchemic_vial_will.png b/src/main/resources/assets/bloodmagic/textures/item/alchemic_vial_will.png new file mode 100644 index 00000000..d087b452 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/alchemic_vial_will.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/altarmaker.png b/src/main/resources/assets/bloodmagic/textures/item/altarmaker.png new file mode 100644 index 00000000..5e383522 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/altarmaker.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/ampouleempty.png b/src/main/resources/assets/bloodmagic/textures/item/ampouleempty.png new file mode 100644 index 00000000..cb47e288 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/ampouleempty.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/ampoulefull.png b/src/main/resources/assets/bloodmagic/textures/item/ampoulefull.png new file mode 100644 index 00000000..049b2d75 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/ampoulefull.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/antiseptic.png b/src/main/resources/assets/bloodmagic/textures/item/antiseptic.png new file mode 100644 index 00000000..e86f4711 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/antiseptic.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/apprenticebloodorb.png b/src/main/resources/assets/bloodmagic/textures/item/apprenticebloodorb.png new file mode 100644 index 00000000..d8200188 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/apprenticebloodorb.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/arcaneashes.png b/src/main/resources/assets/bloodmagic/textures/item/arcaneashes.png new file mode 100644 index 00000000..43025e28 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/arcaneashes.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/archmagebloodorb.png b/src/main/resources/assets/bloodmagic/textures/item/archmagebloodorb.png new file mode 100644 index 00000000..542c2d17 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/archmagebloodorb.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/basemonstersoul.png b/src/main/resources/assets/bloodmagic/textures/item/basemonstersoul.png new file mode 100644 index 00000000..63ebca42 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/basemonstersoul.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/basemonstersoul_corrosive.png b/src/main/resources/assets/bloodmagic/textures/item/basemonstersoul_corrosive.png new file mode 100644 index 00000000..7fa94bb5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/basemonstersoul_corrosive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/basemonstersoul_destructive.png b/src/main/resources/assets/bloodmagic/textures/item/basemonstersoul_destructive.png new file mode 100644 index 00000000..6b2973ed Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/basemonstersoul_destructive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/basemonstersoul_steadfast.png b/src/main/resources/assets/bloodmagic/textures/item/basemonstersoul_steadfast.png new file mode 100644 index 00000000..729f4fb8 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/basemonstersoul_steadfast.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/basemonstersoul_vengeful.png b/src/main/resources/assets/bloodmagic/textures/item/basemonstersoul_vengeful.png new file mode 100644 index 00000000..d4f1683b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/basemonstersoul_vengeful.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/basiccuttingfluid.png b/src/main/resources/assets/bloodmagic/textures/item/basiccuttingfluid.png new file mode 100644 index 00000000..3c39b9a1 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/basiccuttingfluid.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/blackpudding.png b/src/main/resources/assets/bloodmagic/textures/item/blackpudding.png new file mode 100644 index 00000000..eab4ccdd Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/blackpudding.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/blanksigil.png b/src/main/resources/assets/bloodmagic/textures/item/blanksigil.png new file mode 100644 index 00000000..c4d5b80a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/blanksigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/blankslate.png b/src/main/resources/assets/bloodmagic/textures/item/blankslate.png new file mode 100644 index 00000000..6777a985 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/blankslate.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/bloodlightsigil.png b/src/main/resources/assets/bloodmagic/textures/item/bloodlightsigil.png new file mode 100644 index 00000000..2c62fc0a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/bloodlightsigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/bloodpack.png b/src/main/resources/assets/bloodmagic/textures/item/bloodpack.png new file mode 100644 index 00000000..a3c2b114 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/bloodpack.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/bouncesigil_activated.png b/src/main/resources/assets/bloodmagic/textures/item/bouncesigil_activated.png new file mode 100644 index 00000000..649f337b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/bouncesigil_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/bouncesigil_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/bouncesigil_deactivated.png new file mode 100644 index 00000000..8b3ceb94 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/bouncesigil_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/boundaxe_activated.png b/src/main/resources/assets/bloodmagic/textures/item/boundaxe_activated.png new file mode 100644 index 00000000..b51a565b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/boundaxe_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/boundpickaxe_activated.png b/src/main/resources/assets/bloodmagic/textures/item/boundpickaxe_activated.png new file mode 100644 index 00000000..54c2a6ea Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/boundpickaxe_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/boundshovel_activated.png b/src/main/resources/assets/bloodmagic/textures/item/boundshovel_activated.png new file mode 100644 index 00000000..05be9eff Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/boundshovel_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/boundsword_activated.png b/src/main/resources/assets/bloodmagic/textures/item/boundsword_activated.png new file mode 100644 index 00000000..e47e75d7 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/boundsword_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/boundtool.png b/src/main/resources/assets/bloodmagic/textures/item/boundtool.png new file mode 100644 index 00000000..3901bc01 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/boundtool.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/bridgesigil_activated.png b/src/main/resources/assets/bloodmagic/textures/item/bridgesigil_activated.png new file mode 100644 index 00000000..057c64bd Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/bridgesigil_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/bridgesigil_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/bridgesigil_deactivated.png new file mode 100644 index 00000000..15f46a2c Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/bridgesigil_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/clawsigil_activated.png b/src/main/resources/assets/bloodmagic/textures/item/clawsigil_activated.png new file mode 100644 index 00000000..72a9254b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/clawsigil_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/clawsigil_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/clawsigil_deactivated.png new file mode 100644 index 00000000..e849c542 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/clawsigil_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/coagulant.png b/src/main/resources/assets/bloodmagic/textures/item/coagulant.png new file mode 100644 index 00000000..23bda1b1 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/coagulant.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/coalsand.png b/src/main/resources/assets/bloodmagic/textures/item/coalsand.png new file mode 100644 index 00000000..b41ff836 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/coalsand.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/componentframeparts.png b/src/main/resources/assets/bloodmagic/textures/item/componentframeparts.png new file mode 100644 index 00000000..3995a1f8 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/componentframeparts.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/compressionsigil_activated.png b/src/main/resources/assets/bloodmagic/textures/item/compressionsigil_activated.png new file mode 100644 index 00000000..cef30337 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/compressionsigil_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/compressionsigil_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/compressionsigil_deactivated.png new file mode 100644 index 00000000..985bffc5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/compressionsigil_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/copperfragment.png b/src/main/resources/assets/bloodmagic/textures/item/copperfragment.png new file mode 100644 index 00000000..b668f31a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/copperfragment.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/coppergravel.png b/src/main/resources/assets/bloodmagic/textures/item/coppergravel.png new file mode 100644 index 00000000..7a5b958a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/coppergravel.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/coppersand.png b/src/main/resources/assets/bloodmagic/textures/item/coppersand.png new file mode 100644 index 00000000..586ec8d6 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/coppersand.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/corrosivecrystal.png b/src/main/resources/assets/bloodmagic/textures/item/corrosivecrystal.png new file mode 100644 index 00000000..7df793aa Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/corrosivecrystal.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/corrupted_dust.png b/src/main/resources/assets/bloodmagic/textures/item/corrupted_dust.png new file mode 100644 index 00000000..78d4bf16 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/corrupted_dust.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/corrupted_tinydust.png b/src/main/resources/assets/bloodmagic/textures/item/corrupted_tinydust.png new file mode 100644 index 00000000..8d2caac1 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/corrupted_tinydust.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/crucibleupgrade.png b/src/main/resources/assets/bloodmagic/textures/item/crucibleupgrade.png new file mode 100644 index 00000000..a9e20b5e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/crucibleupgrade.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/crystalline_resonator.png b/src/main/resources/assets/bloodmagic/textures/item/crystalline_resonator.png new file mode 100644 index 00000000..4c1f0282 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/crystalline_resonator.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/daggerofsacrifice.png b/src/main/resources/assets/bloodmagic/textures/item/daggerofsacrifice.png new file mode 100644 index 00000000..9cc2efe6 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/daggerofsacrifice.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/dawnscribetool.png b/src/main/resources/assets/bloodmagic/textures/item/dawnscribetool.png new file mode 100644 index 00000000..4a9ad4e4 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/dawnscribetool.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/defaultcrystal.png b/src/main/resources/assets/bloodmagic/textures/item/defaultcrystal.png new file mode 100644 index 00000000..a1e5c773 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/defaultcrystal.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/demonbloodshard.png b/src/main/resources/assets/bloodmagic/textures/item/demonbloodshard.png new file mode 100644 index 00000000..58fd68af Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/demonbloodshard.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/demonicteleposerfocus.png b/src/main/resources/assets/bloodmagic/textures/item/demonicteleposerfocus.png new file mode 100644 index 00000000..a9814d3d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/demonicteleposerfocus.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/demonslate.png b/src/main/resources/assets/bloodmagic/textures/item/demonslate.png new file mode 100644 index 00000000..9c0c1d5b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/demonslate.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/demonwillgauge.png b/src/main/resources/assets/bloodmagic/textures/item/demonwillgauge.png new file mode 100644 index 00000000..9b2fcb9b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/demonwillgauge.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/destructivecrystal.png b/src/main/resources/assets/bloodmagic/textures/item/destructivecrystal.png new file mode 100644 index 00000000..9c9535c1 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/destructivecrystal.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/divinationsigil.png b/src/main/resources/assets/bloodmagic/textures/item/divinationsigil.png new file mode 100644 index 00000000..b8a7fa34 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/divinationsigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/dungeon_tester.png b/src/main/resources/assets/bloodmagic/textures/item/dungeon_tester.png new file mode 100644 index 00000000..8a46b4d1 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/dungeon_tester.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/duskscribetool.png b/src/main/resources/assets/bloodmagic/textures/item/duskscribetool.png new file mode 100644 index 00000000..30f3034b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/duskscribetool.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/earthscribetool.png b/src/main/resources/assets/bloodmagic/textures/item/earthscribetool.png new file mode 100644 index 00000000..619db4c9 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/earthscribetool.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/elementalsigil_activated.png b/src/main/resources/assets/bloodmagic/textures/item/elementalsigil_activated.png new file mode 100644 index 00000000..3ab8b9f6 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/elementalsigil_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/elementalsigil_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/elementalsigil_deactivated.png new file mode 100644 index 00000000..dee96edf Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/elementalsigil_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/enhancedteleposerfocus.png b/src/main/resources/assets/bloodmagic/textures/item/enhancedteleposerfocus.png new file mode 100644 index 00000000..714a63f6 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/enhancedteleposerfocus.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/etherealslate.png b/src/main/resources/assets/bloodmagic/textures/item/etherealslate.png new file mode 100644 index 00000000..1986a7ef Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/etherealslate.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/experiencebook.png b/src/main/resources/assets/bloodmagic/textures/item/experiencebook.png new file mode 100644 index 00000000..4b76970f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/experiencebook.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/explosivepowder.png b/src/main/resources/assets/bloodmagic/textures/item/explosivepowder.png new file mode 100644 index 00000000..635b2a36 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/explosivepowder.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/firescribetool.png b/src/main/resources/assets/bloodmagic/textures/item/firescribetool.png new file mode 100644 index 00000000..4ac43b4d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/firescribetool.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/fluidrouterfilterexact.png b/src/main/resources/assets/bloodmagic/textures/item/fluidrouterfilterexact.png new file mode 100644 index 00000000..5de1391d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/fluidrouterfilterexact.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/fragment_netherite_scrap.png b/src/main/resources/assets/bloodmagic/textures/item/fragment_netherite_scrap.png new file mode 100644 index 00000000..eb3371df Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/fragment_netherite_scrap.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/furnacecell_primitive.png b/src/main/resources/assets/bloodmagic/textures/item/furnacecell_primitive.png new file mode 100644 index 00000000..8df342d5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/furnacecell_primitive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/goldfragment.png b/src/main/resources/assets/bloodmagic/textures/item/goldfragment.png new file mode 100644 index 00000000..24d21b30 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/goldfragment.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/goldgravel.png b/src/main/resources/assets/bloodmagic/textures/item/goldgravel.png new file mode 100644 index 00000000..142a993a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/goldgravel.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/goldsand.png b/src/main/resources/assets/bloodmagic/textures/item/goldsand.png new file mode 100644 index 00000000..83d37677 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/goldsand.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/gravel_netherite_scrap.png b/src/main/resources/assets/bloodmagic/textures/item/gravel_netherite_scrap.png new file mode 100644 index 00000000..1ccb1dd1 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/gravel_netherite_scrap.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/growthsigil_activated.png b/src/main/resources/assets/bloodmagic/textures/item/growthsigil_activated.png new file mode 100644 index 00000000..b401e8e7 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/growthsigil_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/growthsigil_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/growthsigil_deactivated.png new file mode 100644 index 00000000..a8021625 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/growthsigil_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/harvestgoddesssigil_activated.png b/src/main/resources/assets/bloodmagic/textures/item/harvestgoddesssigil_activated.png new file mode 100644 index 00000000..50b02bcf Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/harvestgoddesssigil_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/harvestgoddesssigil_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/harvestgoddesssigil_deactivated.png new file mode 100644 index 00000000..7601b998 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/harvestgoddesssigil_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/hastesigil_activated.png b/src/main/resources/assets/bloodmagic/textures/item/hastesigil_activated.png new file mode 100644 index 00000000..e972be2b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/hastesigil_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/hastesigil_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/hastesigil_deactivated.png new file mode 100644 index 00000000..e87d23d1 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/hastesigil_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/icarusscroll_activated.png b/src/main/resources/assets/bloodmagic/textures/item/icarusscroll_activated.png new file mode 100644 index 00000000..767852ce Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/icarusscroll_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/icarusscroll_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/icarusscroll_deactivated.png new file mode 100644 index 00000000..d16e87e0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/icarusscroll_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/icesigil_activated.png b/src/main/resources/assets/bloodmagic/textures/item/icesigil_activated.png new file mode 100644 index 00000000..c816a470 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/icesigil_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/icesigil_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/icesigil_deactivated.png new file mode 100644 index 00000000..3855383f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/icesigil_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/information.png b/src/main/resources/assets/bloodmagic/textures/item/information.png new file mode 100644 index 00000000..934511d2 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/information.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/infusedslate.png b/src/main/resources/assets/bloodmagic/textures/item/infusedslate.png new file mode 100644 index 00000000..8c01d913 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/infusedslate.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/ingot_hellforged.png b/src/main/resources/assets/bloodmagic/textures/item/ingot_hellforged.png new file mode 100644 index 00000000..0f58d71e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/ingot_hellforged.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/inputroutingfocus.png b/src/main/resources/assets/bloodmagic/textures/item/inputroutingfocus.png new file mode 100644 index 00000000..68d0ef62 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/inputroutingfocus.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/ironfragment.png b/src/main/resources/assets/bloodmagic/textures/item/ironfragment.png new file mode 100644 index 00000000..dd381fb5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/ironfragment.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/irongravel.png b/src/main/resources/assets/bloodmagic/textures/item/irongravel.png new file mode 100644 index 00000000..ee1a7b0a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/irongravel.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/ironsand.png b/src/main/resources/assets/bloodmagic/textures/item/ironsand.png new file mode 100644 index 00000000..97421c10 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/ironsand.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/item_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/item_deactivated.png new file mode 100644 index 00000000..d085eddd Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/item_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/itemrouterfilterexact.png b/src/main/resources/assets/bloodmagic/textures/item/itemrouterfilterexact.png new file mode 100644 index 00000000..c39fe022 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/itemrouterfilterexact.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/itemrouterfilterignorenbt.png b/src/main/resources/assets/bloodmagic/textures/item/itemrouterfilterignorenbt.png new file mode 100644 index 00000000..d8952e5f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/itemrouterfilterignorenbt.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/itemrouterfiltermoditems.png b/src/main/resources/assets/bloodmagic/textures/item/itemrouterfiltermoditems.png new file mode 100644 index 00000000..01a6f0b8 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/itemrouterfiltermoditems.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/itemrouterfilteroredict.png b/src/main/resources/assets/bloodmagic/textures/item/itemrouterfilteroredict.png new file mode 100644 index 00000000..253b0399 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/itemrouterfilteroredict.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/lavacrystal.png b/src/main/resources/assets/bloodmagic/textures/item/lavacrystal.png new file mode 100644 index 00000000..a9be5d26 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/lavacrystal.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/lavasigil.png b/src/main/resources/assets/bloodmagic/textures/item/lavasigil.png new file mode 100644 index 00000000..756c77b8 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/lavasigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/lifebucket.png b/src/main/resources/assets/bloodmagic/textures/item/lifebucket.png new file mode 100644 index 00000000..97a2999e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/lifebucket.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/livingboots.png b/src/main/resources/assets/bloodmagic/textures/item/livingboots.png new file mode 100644 index 00000000..dc16c03c Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/livingboots.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/livinghelmet.png b/src/main/resources/assets/bloodmagic/textures/item/livinghelmet.png new file mode 100644 index 00000000..b646445c Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/livinghelmet.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/livingleggings.png b/src/main/resources/assets/bloodmagic/textures/item/livingleggings.png new file mode 100644 index 00000000..a650c529 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/livingleggings.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/livingplate.png b/src/main/resources/assets/bloodmagic/textures/item/livingplate.png new file mode 100644 index 00000000..132a7498 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/livingplate.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/magicianbloodorb.png b/src/main/resources/assets/bloodmagic/textures/item/magicianbloodorb.png new file mode 100644 index 00000000..5949b7f5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/magicianbloodorb.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/mailorder.png b/src/main/resources/assets/bloodmagic/textures/item/mailorder.png new file mode 100644 index 00000000..2d224d82 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/mailorder.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/masterbloodorb.png b/src/main/resources/assets/bloodmagic/textures/item/masterbloodorb.png new file mode 100644 index 00000000..0824e4c3 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/masterbloodorb.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/melee_anointment.png b/src/main/resources/assets/bloodmagic/textures/item/melee_anointment.png new file mode 100644 index 00000000..049b2d75 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/melee_anointment.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/miningsigil_activated.png b/src/main/resources/assets/bloodmagic/textures/item/miningsigil_activated.png new file mode 100644 index 00000000..6d2fe734 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/miningsigil_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/miningsigil_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/miningsigil_deactivated.png new file mode 100644 index 00000000..a116ac92 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/miningsigil_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/mundanelengtheningcatalyst.png b/src/main/resources/assets/bloodmagic/textures/item/mundanelengtheningcatalyst.png new file mode 100644 index 00000000..6162e225 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/mundanelengtheningcatalyst.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/mundanepowercatalyst.png b/src/main/resources/assets/bloodmagic/textures/item/mundanepowercatalyst.png new file mode 100644 index 00000000..80590eac Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/mundanepowercatalyst.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/neurotoxin.png b/src/main/resources/assets/bloodmagic/textures/item/neurotoxin.png new file mode 100644 index 00000000..765cf5bd Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/neurotoxin.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/noderouter.png b/src/main/resources/assets/bloodmagic/textures/item/noderouter.png new file mode 100644 index 00000000..776c5fc9 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/noderouter.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/plantfibres.png b/src/main/resources/assets/bloodmagic/textures/item/plantfibres.png new file mode 100644 index 00000000..3829df0f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/plantfibres.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/plantoil.png b/src/main/resources/assets/bloodmagic/textures/item/plantoil.png new file mode 100644 index 00000000..967c6064 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/plantoil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/potionflask_outline.png b/src/main/resources/assets/bloodmagic/textures/item/potionflask_outline.png new file mode 100644 index 00000000..44c23e26 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/potionflask_outline.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/potionflask_overlay.png b/src/main/resources/assets/bloodmagic/textures/item/potionflask_overlay.png new file mode 100644 index 00000000..2d969bfb Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/potionflask_overlay.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/potionflask_underlay.png b/src/main/resources/assets/bloodmagic/textures/item/potionflask_underlay.png new file mode 100644 index 00000000..27f29198 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/potionflask_underlay.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/primitive_crystalline_resonator.png b/src/main/resources/assets/bloodmagic/textures/item/primitive_crystalline_resonator.png new file mode 100644 index 00000000..542a89fe Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/primitive_crystalline_resonator.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/primitive_explosive_cell.png b/src/main/resources/assets/bloodmagic/textures/item/primitive_explosive_cell.png new file mode 100644 index 00000000..def67745 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/primitive_explosive_cell.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/primitive_hydration_cell.png b/src/main/resources/assets/bloodmagic/textures/item/primitive_hydration_cell.png new file mode 100644 index 00000000..5b6c29ae Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/primitive_hydration_cell.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentaffinity.png b/src/main/resources/assets/bloodmagic/textures/item/reagentaffinity.png new file mode 100644 index 00000000..4ad926ee Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentaffinity.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentair.png b/src/main/resources/assets/bloodmagic/textures/item/reagentair.png new file mode 100644 index 00000000..c4213d4e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentair.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentbinding.png b/src/main/resources/assets/bloodmagic/textures/item/reagentbinding.png new file mode 100644 index 00000000..30273557 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentbinding.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentbloodlight.png b/src/main/resources/assets/bloodmagic/textures/item/reagentbloodlight.png new file mode 100644 index 00000000..b1801cc5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentbloodlight.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentbounce.png b/src/main/resources/assets/bloodmagic/textures/item/reagentbounce.png new file mode 100644 index 00000000..9bb11b72 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentbounce.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentbridge.png b/src/main/resources/assets/bloodmagic/textures/item/reagentbridge.png new file mode 100644 index 00000000..17df28c6 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentbridge.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentclaw.png b/src/main/resources/assets/bloodmagic/textures/item/reagentclaw.png new file mode 100644 index 00000000..7343b4b0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentclaw.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentcompression.png b/src/main/resources/assets/bloodmagic/textures/item/reagentcompression.png new file mode 100644 index 00000000..7b183305 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentcompression.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentfastminer.png b/src/main/resources/assets/bloodmagic/textures/item/reagentfastminer.png new file mode 100644 index 00000000..5808d389 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentfastminer.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentfrost.png b/src/main/resources/assets/bloodmagic/textures/item/reagentfrost.png new file mode 100644 index 00000000..c4213d4e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentfrost.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentgrowth.png b/src/main/resources/assets/bloodmagic/textures/item/reagentgrowth.png new file mode 100644 index 00000000..ec1b8f74 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentgrowth.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagenthaste.png b/src/main/resources/assets/bloodmagic/textures/item/reagenthaste.png new file mode 100644 index 00000000..f6530434 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagenthaste.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentholding.png b/src/main/resources/assets/bloodmagic/textures/item/reagentholding.png new file mode 100644 index 00000000..f6530434 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentholding.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentlava.png b/src/main/resources/assets/bloodmagic/textures/item/reagentlava.png new file mode 100644 index 00000000..9dbc6600 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentlava.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentmagnetism.png b/src/main/resources/assets/bloodmagic/textures/item/reagentmagnetism.png new file mode 100644 index 00000000..9bb11b72 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentmagnetism.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentseverance.png b/src/main/resources/assets/bloodmagic/textures/item/reagentseverance.png new file mode 100644 index 00000000..ccf83f68 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentseverance.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentsight.png b/src/main/resources/assets/bloodmagic/textures/item/reagentsight.png new file mode 100644 index 00000000..8e1cab2a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentsight.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentsuppression.png b/src/main/resources/assets/bloodmagic/textures/item/reagentsuppression.png new file mode 100644 index 00000000..5cf01d09 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentsuppression.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentteleposition.png b/src/main/resources/assets/bloodmagic/textures/item/reagentteleposition.png new file mode 100644 index 00000000..7cf96b3c Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentteleposition.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagenttransposition.png b/src/main/resources/assets/bloodmagic/textures/item/reagenttransposition.png new file mode 100644 index 00000000..556a63b6 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagenttransposition.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentvoid.png b/src/main/resources/assets/bloodmagic/textures/item/reagentvoid.png new file mode 100644 index 00000000..4f090836 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentvoid.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentwater.png b/src/main/resources/assets/bloodmagic/textures/item/reagentwater.png new file mode 100644 index 00000000..7343b4b0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentwater.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reagentwind.png b/src/main/resources/assets/bloodmagic/textures/item/reagentwind.png new file mode 100644 index 00000000..74863eb3 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reagentwind.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reinforcedslate.png b/src/main/resources/assets/bloodmagic/textures/item/reinforcedslate.png new file mode 100644 index 00000000..77761a5a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reinforcedslate.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/reinforcedteleposerfocus.png b/src/main/resources/assets/bloodmagic/textures/item/reinforcedteleposerfocus.png new file mode 100644 index 00000000..80c548df Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/reinforcedteleposerfocus.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/ritual_dismantler.png b/src/main/resources/assets/bloodmagic/textures/item/ritual_dismantler.png new file mode 100644 index 00000000..4451a808 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/ritual_dismantler.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/ritualdiviner.png b/src/main/resources/assets/bloodmagic/textures/item/ritualdiviner.png new file mode 100644 index 00000000..e06871c7 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/ritualdiviner.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/ritualdivinerdawn.png b/src/main/resources/assets/bloodmagic/textures/item/ritualdivinerdawn.png new file mode 100644 index 00000000..e06871c7 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/ritualdivinerdawn.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/ritualdivinerdusk.png b/src/main/resources/assets/bloodmagic/textures/item/ritualdivinerdusk.png new file mode 100644 index 00000000..e06871c7 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/ritualdivinerdusk.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/ritualtinkerer.png b/src/main/resources/assets/bloodmagic/textures/item/ritualtinkerer.png new file mode 100644 index 00000000..37baf9ee Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/ritualtinkerer.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sacrificeplate.png b/src/main/resources/assets/bloodmagic/textures/item/sacrificeplate.png new file mode 100644 index 00000000..04a7d531 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sacrificeplate.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sacrificialdagger.png b/src/main/resources/assets/bloodmagic/textures/item/sacrificialdagger.png new file mode 100644 index 00000000..e727f173 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sacrificialdagger.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sacrificialdagger_ceremonial.png b/src/main/resources/assets/bloodmagic/textures/item/sacrificialdagger_ceremonial.png new file mode 100644 index 00000000..e457a67f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sacrificialdagger_ceremonial.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/saltpeter.png b/src/main/resources/assets/bloodmagic/textures/item/saltpeter.png new file mode 100644 index 00000000..f1cf832f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/saltpeter.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sand_hellforged.png b/src/main/resources/assets/bloodmagic/textures/item/sand_hellforged.png new file mode 100644 index 00000000..ad1fe281 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sand_hellforged.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sand_netherite.png b/src/main/resources/assets/bloodmagic/textures/item/sand_netherite.png new file mode 100644 index 00000000..e6420a5c Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sand_netherite.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sanguine_scientiem_guide_book.png b/src/main/resources/assets/bloodmagic/textures/item/sanguine_scientiem_guide_book.png new file mode 100644 index 00000000..c7b9026b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sanguine_scientiem_guide_book.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sanguinebook.png b/src/main/resources/assets/bloodmagic/textures/item/sanguinebook.png new file mode 100644 index 00000000..b2f07bf0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sanguinebook.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sanguinereverter.png b/src/main/resources/assets/bloodmagic/textures/item/sanguinereverter.png new file mode 100644 index 00000000..729c693f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sanguinereverter.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/seersigil.png b/src/main/resources/assets/bloodmagic/textures/item/seersigil.png new file mode 100644 index 00000000..ff99c09a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/seersigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/selfsacrificeplate.png b/src/main/resources/assets/bloodmagic/textures/item/selfsacrificeplate.png new file mode 100644 index 00000000..098aca58 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/selfsacrificeplate.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_activated.png b/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_activated.png new file mode 100644 index 00000000..1728e89e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_corrosive_activated.png b/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_corrosive_activated.png new file mode 100644 index 00000000..acfb68fa Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_corrosive_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_corrosive_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_corrosive_deactivated.png new file mode 100644 index 00000000..8beb0cb5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_corrosive_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_deactivated.png new file mode 100644 index 00000000..04180841 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_destructive_activated.png b/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_destructive_activated.png new file mode 100644 index 00000000..2b3ccd50 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_destructive_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_destructive_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_destructive_deactivated.png new file mode 100644 index 00000000..b8c33e02 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_destructive_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_steadfast_activated.png b/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_steadfast_activated.png new file mode 100644 index 00000000..358cb3cf Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_steadfast_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_steadfast_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_steadfast_deactivated.png new file mode 100644 index 00000000..b29a3b7c Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_steadfast_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_vengeful_activated.png b/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_vengeful_activated.png new file mode 100644 index 00000000..e1e8f4a7 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_vengeful_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_vengeful_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_vengeful_deactivated.png new file mode 100644 index 00000000..3064d35f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientarmourgem_vengeful_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientarrow.png b/src/main/resources/assets/bloodmagic/textures/item/sentientarrow.png new file mode 100644 index 00000000..77bcf9ae Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientarrow.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientboots.png b/src/main/resources/assets/bloodmagic/textures/item/sentientboots.png new file mode 100644 index 00000000..2095b81b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientboots.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientboots_corrosive.png b/src/main/resources/assets/bloodmagic/textures/item/sentientboots_corrosive.png new file mode 100644 index 00000000..9d445592 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientboots_corrosive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientboots_destructive.png b/src/main/resources/assets/bloodmagic/textures/item/sentientboots_destructive.png new file mode 100644 index 00000000..33e1315e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientboots_destructive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientboots_steadfast.png b/src/main/resources/assets/bloodmagic/textures/item/sentientboots_steadfast.png new file mode 100644 index 00000000..cd5720af Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientboots_steadfast.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientboots_vengeful.png b/src/main/resources/assets/bloodmagic/textures/item/sentientboots_vengeful.png new file mode 100644 index 00000000..8eacc9fc Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientboots_vengeful.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientbow.png b/src/main/resources/assets/bloodmagic/textures/item/sentientbow.png new file mode 100644 index 00000000..2d0b94b1 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientbow.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientbow_corrosive.png b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_corrosive.png new file mode 100644 index 00000000..8b500190 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_corrosive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientbow_corrosive_pulling_0.png b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_corrosive_pulling_0.png new file mode 100644 index 00000000..7227a2c4 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_corrosive_pulling_0.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientbow_corrosive_pulling_1.png b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_corrosive_pulling_1.png new file mode 100644 index 00000000..04584366 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_corrosive_pulling_1.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientbow_corrosive_pulling_2.png b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_corrosive_pulling_2.png new file mode 100644 index 00000000..cbf2afdb Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_corrosive_pulling_2.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientbow_destructive.png b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_destructive.png new file mode 100644 index 00000000..cc59eaaa Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_destructive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientbow_destructive_pulling_0.png b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_destructive_pulling_0.png new file mode 100644 index 00000000..a73cdcd8 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_destructive_pulling_0.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientbow_destructive_pulling_1.png b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_destructive_pulling_1.png new file mode 100644 index 00000000..b8fca1de Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_destructive_pulling_1.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientbow_destructive_pulling_2.png b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_destructive_pulling_2.png new file mode 100644 index 00000000..7c9880e9 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_destructive_pulling_2.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientbow_pulling_0.png b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_pulling_0.png new file mode 100644 index 00000000..ff44e383 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_pulling_0.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientbow_pulling_1.png b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_pulling_1.png new file mode 100644 index 00000000..89e04f1e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_pulling_1.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientbow_pulling_2.png b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_pulling_2.png new file mode 100644 index 00000000..d22fa81f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_pulling_2.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientbow_steadfast.png b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_steadfast.png new file mode 100644 index 00000000..cb5bcd48 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_steadfast.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientbow_steadfast_pulling_0.png b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_steadfast_pulling_0.png new file mode 100644 index 00000000..df81a646 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_steadfast_pulling_0.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientbow_steadfast_pulling_1.png b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_steadfast_pulling_1.png new file mode 100644 index 00000000..e38c3cc5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_steadfast_pulling_1.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientbow_steadfast_pulling_2.png b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_steadfast_pulling_2.png new file mode 100644 index 00000000..93697924 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_steadfast_pulling_2.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientbow_vengeful.png b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_vengeful.png new file mode 100644 index 00000000..d42f1d75 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_vengeful.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientbow_vengeful_pulling_0.png b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_vengeful_pulling_0.png new file mode 100644 index 00000000..082aa7fe Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_vengeful_pulling_0.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientbow_vengeful_pulling_1.png b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_vengeful_pulling_1.png new file mode 100644 index 00000000..42c7c9cd Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_vengeful_pulling_1.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientbow_vengeful_pulling_2.png b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_vengeful_pulling_2.png new file mode 100644 index 00000000..067e5505 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientbow_vengeful_pulling_2.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentienthelmet.png b/src/main/resources/assets/bloodmagic/textures/item/sentienthelmet.png new file mode 100644 index 00000000..f467f2e2 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentienthelmet.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentienthelmet_corrosive.png b/src/main/resources/assets/bloodmagic/textures/item/sentienthelmet_corrosive.png new file mode 100644 index 00000000..a52612ff Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentienthelmet_corrosive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentienthelmet_destructive.png b/src/main/resources/assets/bloodmagic/textures/item/sentienthelmet_destructive.png new file mode 100644 index 00000000..b7fac684 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentienthelmet_destructive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentienthelmet_steadfast.png b/src/main/resources/assets/bloodmagic/textures/item/sentienthelmet_steadfast.png new file mode 100644 index 00000000..30a9fec8 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentienthelmet_steadfast.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentienthelmet_vengeful.png b/src/main/resources/assets/bloodmagic/textures/item/sentienthelmet_vengeful.png new file mode 100644 index 00000000..6ecbf405 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentienthelmet_vengeful.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientleggings.png b/src/main/resources/assets/bloodmagic/textures/item/sentientleggings.png new file mode 100644 index 00000000..1d8fbcc5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientleggings.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientleggings_corrosive.png b/src/main/resources/assets/bloodmagic/textures/item/sentientleggings_corrosive.png new file mode 100644 index 00000000..ab2b9393 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientleggings_corrosive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientleggings_destructive.png b/src/main/resources/assets/bloodmagic/textures/item/sentientleggings_destructive.png new file mode 100644 index 00000000..17d9d34a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientleggings_destructive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientleggings_steadfast.png b/src/main/resources/assets/bloodmagic/textures/item/sentientleggings_steadfast.png new file mode 100644 index 00000000..ba85024a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientleggings_steadfast.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientleggings_vengeful.png b/src/main/resources/assets/bloodmagic/textures/item/sentientleggings_vengeful.png new file mode 100644 index 00000000..4f0c4022 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientleggings_vengeful.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientplate.png b/src/main/resources/assets/bloodmagic/textures/item/sentientplate.png new file mode 100644 index 00000000..d61fdaa5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientplate.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientplate_corrosive.png b/src/main/resources/assets/bloodmagic/textures/item/sentientplate_corrosive.png new file mode 100644 index 00000000..f94aa59f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientplate_corrosive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientplate_destructive.png b/src/main/resources/assets/bloodmagic/textures/item/sentientplate_destructive.png new file mode 100644 index 00000000..dde01e16 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientplate_destructive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientplate_steadfast.png b/src/main/resources/assets/bloodmagic/textures/item/sentientplate_steadfast.png new file mode 100644 index 00000000..2d047285 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientplate_steadfast.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sentientplate_vengeful.png b/src/main/resources/assets/bloodmagic/textures/item/sentientplate_vengeful.png new file mode 100644 index 00000000..6a7781f2 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sentientplate_vengeful.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/set_area.png b/src/main/resources/assets/bloodmagic/textures/item/set_area.png new file mode 100644 index 00000000..f43368b6 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/set_area.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/set_will_types.png b/src/main/resources/assets/bloodmagic/textures/item/set_will_types.png new file mode 100644 index 00000000..b50ff47d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/set_will_types.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sheatheditem.png b/src/main/resources/assets/bloodmagic/textures/item/sheatheditem.png new file mode 100644 index 00000000..b12e6d87 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sheatheditem.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sigilofholding.png b/src/main/resources/assets/bloodmagic/textures/item/sigilofholding.png new file mode 100644 index 00000000..55056c4b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sigilofholding.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sigilofmagnetism_activated.png b/src/main/resources/assets/bloodmagic/textures/item/sigilofmagnetism_activated.png new file mode 100644 index 00000000..cbc1dbd1 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sigilofmagnetism_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sigilofmagnetism_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/sigilofmagnetism_deactivated.png new file mode 100644 index 00000000..d54bdcf2 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sigilofmagnetism_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sigilofseverance_activated.png b/src/main/resources/assets/bloodmagic/textures/item/sigilofseverance_activated.png new file mode 100644 index 00000000..828bda85 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sigilofseverance_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sigilofseverance_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/sigilofseverance_deactivated.png new file mode 100644 index 00000000..21e74f95 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sigilofseverance_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sigilofsuppression_activated.png b/src/main/resources/assets/bloodmagic/textures/item/sigilofsuppression_activated.png new file mode 100644 index 00000000..5ec26fa5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sigilofsuppression_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sigilofsuppression_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/sigilofsuppression_deactivated.png new file mode 100644 index 00000000..6760ffc2 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sigilofsuppression_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sigiloverlay.png b/src/main/resources/assets/bloodmagic/textures/item/sigiloverlay.png new file mode 100644 index 00000000..9cf1de51 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sigiloverlay.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/slate_ampoule.png b/src/main/resources/assets/bloodmagic/textures/item/slate_ampoule.png new file mode 100644 index 00000000..c40f1b5d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/slate_ampoule.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulaxe.png b/src/main/resources/assets/bloodmagic/textures/item/soulaxe.png new file mode 100644 index 00000000..9de970d9 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulaxe.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulaxe_corrosive.png b/src/main/resources/assets/bloodmagic/textures/item/soulaxe_corrosive.png new file mode 100644 index 00000000..2a0dd394 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulaxe_corrosive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulaxe_destructive.png b/src/main/resources/assets/bloodmagic/textures/item/soulaxe_destructive.png new file mode 100644 index 00000000..5b8c8d2c Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulaxe_destructive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulaxe_steadfast.png b/src/main/resources/assets/bloodmagic/textures/item/soulaxe_steadfast.png new file mode 100644 index 00000000..b4c5ebf9 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulaxe_steadfast.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulaxe_vengeful.png b/src/main/resources/assets/bloodmagic/textures/item/soulaxe_vengeful.png new file mode 100644 index 00000000..d7299c6c Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulaxe_vengeful.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgemcommon.png b/src/main/resources/assets/bloodmagic/textures/item/soulgemcommon.png new file mode 100644 index 00000000..01b03fee Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgemcommon.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgemcommon_corrosive.png b/src/main/resources/assets/bloodmagic/textures/item/soulgemcommon_corrosive.png new file mode 100644 index 00000000..406bba2a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgemcommon_corrosive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgemcommon_destructive.png b/src/main/resources/assets/bloodmagic/textures/item/soulgemcommon_destructive.png new file mode 100644 index 00000000..1f9cc266 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgemcommon_destructive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgemcommon_steadfast.png b/src/main/resources/assets/bloodmagic/textures/item/soulgemcommon_steadfast.png new file mode 100644 index 00000000..47803fec Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgemcommon_steadfast.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgemcommon_vengeful.png b/src/main/resources/assets/bloodmagic/textures/item/soulgemcommon_vengeful.png new file mode 100644 index 00000000..43789d75 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgemcommon_vengeful.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgemgrand.png b/src/main/resources/assets/bloodmagic/textures/item/soulgemgrand.png new file mode 100644 index 00000000..fbb41c8d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgemgrand.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgemgrand_corrosive.png b/src/main/resources/assets/bloodmagic/textures/item/soulgemgrand_corrosive.png new file mode 100644 index 00000000..5886e18b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgemgrand_corrosive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgemgrand_destructive.png b/src/main/resources/assets/bloodmagic/textures/item/soulgemgrand_destructive.png new file mode 100644 index 00000000..aad55d4b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgemgrand_destructive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgemgrand_steadfast.png b/src/main/resources/assets/bloodmagic/textures/item/soulgemgrand_steadfast.png new file mode 100644 index 00000000..a5b0d374 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgemgrand_steadfast.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgemgrand_vengeful.png b/src/main/resources/assets/bloodmagic/textures/item/soulgemgrand_vengeful.png new file mode 100644 index 00000000..97d38990 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgemgrand_vengeful.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgemgreater.png b/src/main/resources/assets/bloodmagic/textures/item/soulgemgreater.png new file mode 100644 index 00000000..28ae2f0d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgemgreater.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgemgreater_corrosive.png b/src/main/resources/assets/bloodmagic/textures/item/soulgemgreater_corrosive.png new file mode 100644 index 00000000..9213631a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgemgreater_corrosive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgemgreater_destructive.png b/src/main/resources/assets/bloodmagic/textures/item/soulgemgreater_destructive.png new file mode 100644 index 00000000..2ade6647 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgemgreater_destructive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgemgreater_steadfast.png b/src/main/resources/assets/bloodmagic/textures/item/soulgemgreater_steadfast.png new file mode 100644 index 00000000..1415d67f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgemgreater_steadfast.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgemgreater_vengeful.png b/src/main/resources/assets/bloodmagic/textures/item/soulgemgreater_vengeful.png new file mode 100644 index 00000000..a96ba1b1 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgemgreater_vengeful.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgemlesser.png b/src/main/resources/assets/bloodmagic/textures/item/soulgemlesser.png new file mode 100644 index 00000000..060fca67 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgemlesser.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgemlesser_corrosive.png b/src/main/resources/assets/bloodmagic/textures/item/soulgemlesser_corrosive.png new file mode 100644 index 00000000..16fc1e6d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgemlesser_corrosive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgemlesser_destructive.png b/src/main/resources/assets/bloodmagic/textures/item/soulgemlesser_destructive.png new file mode 100644 index 00000000..02b5f0a5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgemlesser_destructive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgemlesser_steadfast.png b/src/main/resources/assets/bloodmagic/textures/item/soulgemlesser_steadfast.png new file mode 100644 index 00000000..19e16a83 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgemlesser_steadfast.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgemlesser_vengeful.png b/src/main/resources/assets/bloodmagic/textures/item/soulgemlesser_vengeful.png new file mode 100644 index 00000000..703888ad Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgemlesser_vengeful.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgempetty.png b/src/main/resources/assets/bloodmagic/textures/item/soulgempetty.png new file mode 100644 index 00000000..06c8e124 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgempetty.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgempetty_corrosive.png b/src/main/resources/assets/bloodmagic/textures/item/soulgempetty_corrosive.png new file mode 100644 index 00000000..e792af92 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgempetty_corrosive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgempetty_destructive.png b/src/main/resources/assets/bloodmagic/textures/item/soulgempetty_destructive.png new file mode 100644 index 00000000..b0d48dd6 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgempetty_destructive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgempetty_steadfast.png b/src/main/resources/assets/bloodmagic/textures/item/soulgempetty_steadfast.png new file mode 100644 index 00000000..c4b55877 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgempetty_steadfast.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulgempetty_vengeful.png b/src/main/resources/assets/bloodmagic/textures/item/soulgempetty_vengeful.png new file mode 100644 index 00000000..222bda3f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulgempetty_vengeful.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulpickaxe.png b/src/main/resources/assets/bloodmagic/textures/item/soulpickaxe.png new file mode 100644 index 00000000..74a39b34 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulpickaxe.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulpickaxe_corrosive.png b/src/main/resources/assets/bloodmagic/textures/item/soulpickaxe_corrosive.png new file mode 100644 index 00000000..a70bbe96 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulpickaxe_corrosive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulpickaxe_destructive.png b/src/main/resources/assets/bloodmagic/textures/item/soulpickaxe_destructive.png new file mode 100644 index 00000000..573e6b19 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulpickaxe_destructive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulpickaxe_steadfast.png b/src/main/resources/assets/bloodmagic/textures/item/soulpickaxe_steadfast.png new file mode 100644 index 00000000..065fc4fc Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulpickaxe_steadfast.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulpickaxe_vengeful.png b/src/main/resources/assets/bloodmagic/textures/item/soulpickaxe_vengeful.png new file mode 100644 index 00000000..6be3b218 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulpickaxe_vengeful.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulscythe.png b/src/main/resources/assets/bloodmagic/textures/item/soulscythe.png new file mode 100644 index 00000000..2adb8ae5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulscythe.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulscythe_corrosive.png b/src/main/resources/assets/bloodmagic/textures/item/soulscythe_corrosive.png new file mode 100644 index 00000000..79328204 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulscythe_corrosive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulscythe_destructive.png b/src/main/resources/assets/bloodmagic/textures/item/soulscythe_destructive.png new file mode 100644 index 00000000..adeb8589 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulscythe_destructive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulscythe_steadfast.png b/src/main/resources/assets/bloodmagic/textures/item/soulscythe_steadfast.png new file mode 100644 index 00000000..bdac5fbf Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulscythe_steadfast.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulscythe_vengeful.png b/src/main/resources/assets/bloodmagic/textures/item/soulscythe_vengeful.png new file mode 100644 index 00000000..9c3c04f5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulscythe_vengeful.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulshovel.png b/src/main/resources/assets/bloodmagic/textures/item/soulshovel.png new file mode 100644 index 00000000..e3fd8d62 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulshovel.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulshovel_corrosive.png b/src/main/resources/assets/bloodmagic/textures/item/soulshovel_corrosive.png new file mode 100644 index 00000000..f5b51e26 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulshovel_corrosive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulshovel_destructive.png b/src/main/resources/assets/bloodmagic/textures/item/soulshovel_destructive.png new file mode 100644 index 00000000..42c62019 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulshovel_destructive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulshovel_steadfast.png b/src/main/resources/assets/bloodmagic/textures/item/soulshovel_steadfast.png new file mode 100644 index 00000000..da2e7f16 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulshovel_steadfast.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulshovel_vengeful.png b/src/main/resources/assets/bloodmagic/textures/item/soulshovel_vengeful.png new file mode 100644 index 00000000..11c5263a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulshovel_vengeful.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulsnare.png b/src/main/resources/assets/bloodmagic/textures/item/soulsnare.png new file mode 100644 index 00000000..37de2c13 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulsnare.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulsnare_corrosive.png b/src/main/resources/assets/bloodmagic/textures/item/soulsnare_corrosive.png new file mode 100644 index 00000000..a279a8f0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulsnare_corrosive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulsnare_destructive.png b/src/main/resources/assets/bloodmagic/textures/item/soulsnare_destructive.png new file mode 100644 index 00000000..ba6bff2f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulsnare_destructive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulsnare_steadfast.png b/src/main/resources/assets/bloodmagic/textures/item/soulsnare_steadfast.png new file mode 100644 index 00000000..89c7a870 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulsnare_steadfast.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulsnare_vengeful.png b/src/main/resources/assets/bloodmagic/textures/item/soulsnare_vengeful.png new file mode 100644 index 00000000..251d1850 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulsnare_vengeful.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulsword_activated.png b/src/main/resources/assets/bloodmagic/textures/item/soulsword_activated.png new file mode 100644 index 00000000..02b5bd57 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulsword_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulsword_corrosive_activated.png b/src/main/resources/assets/bloodmagic/textures/item/soulsword_corrosive_activated.png new file mode 100644 index 00000000..21d5375d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulsword_corrosive_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulsword_corrosive_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/soulsword_corrosive_deactivated.png new file mode 100644 index 00000000..e0bd985f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulsword_corrosive_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulsword_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/soulsword_deactivated.png new file mode 100644 index 00000000..0bcaf3d9 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulsword_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulsword_destructive_activated.png b/src/main/resources/assets/bloodmagic/textures/item/soulsword_destructive_activated.png new file mode 100644 index 00000000..f522b905 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulsword_destructive_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulsword_destructive_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/soulsword_destructive_deactivated.png new file mode 100644 index 00000000..d1f84dc5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulsword_destructive_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulsword_steadfast_activated.png b/src/main/resources/assets/bloodmagic/textures/item/soulsword_steadfast_activated.png new file mode 100644 index 00000000..465921dc Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulsword_steadfast_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulsword_steadfast_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/soulsword_steadfast_deactivated.png new file mode 100644 index 00000000..ade2c703 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulsword_steadfast_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulsword_vengeful_activated.png b/src/main/resources/assets/bloodmagic/textures/item/soulsword_vengeful_activated.png new file mode 100644 index 00000000..0bd8bf57 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulsword_vengeful_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/soulsword_vengeful_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/soulsword_vengeful_deactivated.png new file mode 100644 index 00000000..cb85742d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/soulsword_vengeful_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/steadfastcrystal.png b/src/main/resources/assets/bloodmagic/textures/item/steadfastcrystal.png new file mode 100644 index 00000000..84733588 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/steadfastcrystal.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sulfur.png b/src/main/resources/assets/bloodmagic/textures/item/sulfur.png new file mode 100644 index 00000000..46f1cc46 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sulfur.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/teleposerfocus.png b/src/main/resources/assets/bloodmagic/textures/item/teleposerfocus.png new file mode 100644 index 00000000..d66e2d67 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/teleposerfocus.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/telepositionsigil.png b/src/main/resources/assets/bloodmagic/textures/item/telepositionsigil.png new file mode 100644 index 00000000..f399a031 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/telepositionsigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/throwing_dagger.png b/src/main/resources/assets/bloodmagic/textures/item/throwing_dagger.png new file mode 100644 index 00000000..c73953b4 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/throwing_dagger.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/throwing_dagger_letter.png b/src/main/resources/assets/bloodmagic/textures/item/throwing_dagger_letter.png new file mode 100644 index 00000000..50051eed Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/throwing_dagger_letter.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/throwing_dagger_syringe.png b/src/main/resources/assets/bloodmagic/textures/item/throwing_dagger_syringe.png new file mode 100644 index 00000000..501b6360 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/throwing_dagger_syringe.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/transcendentbloodorb.png b/src/main/resources/assets/bloodmagic/textures/item/transcendentbloodorb.png new file mode 100644 index 00000000..eebdd050 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/transcendentbloodorb.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/transpositionsigil.png b/src/main/resources/assets/bloodmagic/textures/item/transpositionsigil.png new file mode 100644 index 00000000..e637b0c4 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/transpositionsigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/upgradetome.png b/src/main/resources/assets/bloodmagic/textures/item/upgradetome.png new file mode 100644 index 00000000..2d224d82 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/upgradetome.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/upgradetrainer.png b/src/main/resources/assets/bloodmagic/textures/item/upgradetrainer.png new file mode 100644 index 00000000..77a489be Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/upgradetrainer.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/vengefulcrystal.png b/src/main/resources/assets/bloodmagic/textures/item/vengefulcrystal.png new file mode 100644 index 00000000..f7e615b6 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/vengefulcrystal.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/voidsigil.png b/src/main/resources/assets/bloodmagic/textures/item/voidsigil.png new file mode 100644 index 00000000..c25365e6 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/voidsigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/warriorsigil_activated.png b/src/main/resources/assets/bloodmagic/textures/item/warriorsigil_activated.png new file mode 100644 index 00000000..2c031b41 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/warriorsigil_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/warriorsigil_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/warriorsigil_deactivated.png new file mode 100644 index 00000000..adcc645f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/warriorsigil_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/waterscribetool.png b/src/main/resources/assets/bloodmagic/textures/item/waterscribetool.png new file mode 100644 index 00000000..1b6bb1ed Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/waterscribetool.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/watersigil.png b/src/main/resources/assets/bloodmagic/textures/item/watersigil.png new file mode 100644 index 00000000..7732d0bc Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/watersigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/weakbloodorb.png b/src/main/resources/assets/bloodmagic/textures/item/weakbloodorb.png new file mode 100644 index 00000000..c5e494d6 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/weakbloodorb.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/weakbloodshard.png b/src/main/resources/assets/bloodmagic/textures/item/weakbloodshard.png new file mode 100644 index 00000000..0bd62181 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/weakbloodshard.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/windsigil_activated.png b/src/main/resources/assets/bloodmagic/textures/item/windsigil_activated.png new file mode 100644 index 00000000..843684ce Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/windsigil_activated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/windsigil_deactivated.png b/src/main/resources/assets/bloodmagic/textures/item/windsigil_deactivated.png new file mode 100644 index 00000000..7ebc6476 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/windsigil_deactivated.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/beam2.png b/src/main/resources/assets/bloodmagic/textures/misc/beam2.png new file mode 100644 index 00000000..aa338d92 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/beam2.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/potions.png b/src/main/resources/assets/bloodmagic/textures/misc/potions.png new file mode 100644 index 00000000..f2892812 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/potions.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t1.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t1.png new file mode 100644 index 00000000..fa546bfb Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t1.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t2.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t2.png new file mode 100644 index 00000000..896d122d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t2.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t3.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t3.png new file mode 100644 index 00000000..319f42fe Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t3.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t4.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t4.png new file mode 100644 index 00000000..245186e8 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t4.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t5.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t5.png new file mode 100644 index 00000000..ee7da23f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t5.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t6.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t6.png new file mode 100644 index 00000000..09382a54 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t6.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/demons/ring1.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/demons/ring1.png new file mode 100644 index 00000000..8c4f9c87 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/demons/ring1.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/demons/ring2.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/demons/ring2.png new file mode 100644 index 00000000..9a2a82a9 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/demons/ring2.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/alchemy.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/alchemy.png new file mode 100644 index 00000000..3ece0e52 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/alchemy.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/animalgrowth.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/animalgrowth.png new file mode 100644 index 00000000..4923dcc7 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/animalgrowth.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/beatinganvil.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/beatinganvil.png new file mode 100644 index 00000000..4f33c651 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/beatinganvil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/binding.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/binding.png new file mode 100644 index 00000000..f9491698 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/binding.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/containment.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/containment.png new file mode 100644 index 00000000..ead4ad6b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/containment.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/convocation.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/convocation.png new file mode 100644 index 00000000..c2283d2e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/convocation.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/crusher.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/crusher.png new file mode 100644 index 00000000..67d0e505 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/crusher.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/dome.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/dome.png new file mode 100644 index 00000000..9a033208 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/dome.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/ellipsoid.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/ellipsoid.png new file mode 100644 index 00000000..139bf181 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/ellipsoid.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/eternalsoul.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/eternalsoul.png new file mode 100644 index 00000000..af6e9dc5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/eternalsoul.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/evaporation.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/evaporation.png new file mode 100644 index 00000000..041ace21 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/evaporation.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/expulsion.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/expulsion.png new file mode 100644 index 00000000..c85964fc Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/expulsion.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/featheredearth.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/featheredearth.png new file mode 100644 index 00000000..26bff791 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/featheredearth.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/featheredknife.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/featheredknife.png new file mode 100644 index 00000000..89a0e261 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/featheredknife.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/flight.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/flight.png new file mode 100644 index 00000000..cf298475 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/flight.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/gaia.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/gaia.png new file mode 100644 index 00000000..3efc61be Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/gaia.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/greengrove.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/greengrove.png new file mode 100644 index 00000000..7a0e8adf Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/greengrove.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/harvest.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/harvest.png new file mode 100644 index 00000000..81b3415b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/harvest.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/interdiction.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/interdiction.png new file mode 100644 index 00000000..e0a48ce5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/interdiction.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/jump.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/jump.png new file mode 100644 index 00000000..117643c7 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/jump.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/lava.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/lava.png new file mode 100644 index 00000000..98eec256 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/lava.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/magnetism.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/magnetism.png new file mode 100644 index 00000000..1c864edc Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/magnetism.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/meteor.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/meteor.png new file mode 100644 index 00000000..a27e6fac Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/meteor.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/phantomhands.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/phantomhands.png new file mode 100644 index 00000000..2044d3e4 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/phantomhands.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/regeneration.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/regeneration.png new file mode 100644 index 00000000..3df4b616 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/regeneration.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/sacrosanctity.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/sacrosanctity.png new file mode 100644 index 00000000..569467d0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/sacrosanctity.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/speed.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/speed.png new file mode 100644 index 00000000..b5e0595e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/speed.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/stallingomega.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/stallingomega.png new file mode 100644 index 00000000..76ead6fa Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/stallingomega.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/stomach.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/stomach.png new file mode 100644 index 00000000..5a30fc8a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/stomach.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/symmetryomega.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/symmetryomega.png new file mode 100644 index 00000000..700df856 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/symmetryomega.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/unbinding.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/unbinding.png new file mode 100644 index 00000000..5219bca4 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/unbinding.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/veilofevil.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/veilofevil.png new file mode 100644 index 00000000..7b1b51b5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/veilofevil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/water.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/water.png new file mode 100644 index 00000000..cc1b8798 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/water.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/wellofsuffering.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/wellofsuffering.png new file mode 100644 index 00000000..b19e996b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/wellofsuffering.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/zephyr.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/zephyr.png new file mode 100644 index 00000000..5a3b097d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/zephyr.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/conduit.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/conduit.png new file mode 100644 index 00000000..bfc678c1 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/conduit.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/effect.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/effect.png new file mode 100644 index 00000000..631bbbd7 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/effect.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/enhancement.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/enhancement.png new file mode 100644 index 00000000..9fb4852b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/enhancement.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/modifier.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/modifier.png new file mode 100644 index 00000000..86c886d9 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/modifier.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/paradigm.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/paradigm.png new file mode 100644 index 00000000..4a4835c7 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/paradigm.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/simplespelltable.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/simplespelltable.png new file mode 100644 index 00000000..1113ee1d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/simplespelltable.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/airsigil.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/airsigil.png new file mode 100644 index 00000000..323362d8 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/airsigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/basearray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/basearray.png new file mode 100644 index 00000000..1d3709be Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/basearray.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/bindingarray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/bindingarray.png new file mode 100644 index 00000000..7309f9f8 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/bindingarray.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/bindinglightningarray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/bindinglightningarray.png new file mode 100644 index 00000000..529d6cf0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/bindinglightningarray.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/bouncearray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/bouncearray.png new file mode 100644 index 00000000..96bd0087 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/bouncearray.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/divinationsigil.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/divinationsigil.png new file mode 100644 index 00000000..598c297b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/divinationsigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/elementalaffinitysigil.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/elementalaffinitysigil.png new file mode 100644 index 00000000..c643d430 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/elementalaffinitysigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/fastminersigil.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/fastminersigil.png new file mode 100644 index 00000000..76d20b23 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/fastminersigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/furnacearray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/furnacearray.png new file mode 100644 index 00000000..5639657d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/furnacearray.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/growthsigil.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/growthsigil.png new file mode 100644 index 00000000..dfcf86c0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/growthsigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/hastesigil.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/hastesigil.png new file mode 100644 index 00000000..8654f74f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/hastesigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/lavasigil.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/lavasigil.png new file mode 100644 index 00000000..be12b5a5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/lavasigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/lightsigil.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/lightsigil.png new file mode 100644 index 00000000..61efcd2e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/lightsigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/magnetismsigil.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/magnetismsigil.png new file mode 100644 index 00000000..63fa80c2 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/magnetismsigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/mobsacrifice.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/mobsacrifice.png new file mode 100644 index 00000000..71701844 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/mobsacrifice.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/moonarray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/moonarray.png new file mode 100644 index 00000000..ef620b91 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/moonarray.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/moonarrayinside.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/moonarrayinside.png new file mode 100644 index 00000000..16cfc50d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/moonarrayinside.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/moonarrayoutside.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/moonarrayoutside.png new file mode 100644 index 00000000..d6c7dd9d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/moonarrayoutside.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/moonarraysymbols.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/moonarraysymbols.png new file mode 100644 index 00000000..438c9a11 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/moonarraysymbols.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/movementarray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/movementarray.png new file mode 100644 index 00000000..8149c383 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/movementarray.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/shardoflaputa.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/shardoflaputa.png new file mode 100644 index 00000000..2ae4fd52 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/shardoflaputa.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/sightsigil.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/sightsigil.png new file mode 100644 index 00000000..ea384ead Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/sightsigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/skeletonturret1.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/skeletonturret1.png new file mode 100644 index 00000000..81bfb1b8 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/skeletonturret1.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/skeletonturret2.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/skeletonturret2.png new file mode 100644 index 00000000..115aad73 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/skeletonturret2.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/spikearray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/spikearray.png new file mode 100644 index 00000000..7e312f51 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/spikearray.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/stupidarray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/stupidarray.png new file mode 100644 index 00000000..9a962b8a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/stupidarray.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/sunarray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/sunarray.png new file mode 100644 index 00000000..edd7d778 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/sunarray.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/sunarraycircle.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/sunarraycircle.png new file mode 100644 index 00000000..5b882d6e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/sunarraycircle.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/sunarrayspikes.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/sunarrayspikes.png new file mode 100644 index 00000000..172e248d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/sunarrayspikes.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/suppressionsigil.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/suppressionsigil.png new file mode 100644 index 00000000..2ec3163a Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/suppressionsigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/teleportation.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/teleportation.png new file mode 100644 index 00000000..de03c724 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/teleportation.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/teleportationarray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/teleportationarray.png new file mode 100644 index 00000000..988113d3 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/teleportationarray.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/updraftarray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/updraftarray.png new file mode 100644 index 00000000..7f5b6184 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/updraftarray.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/voidsigil.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/voidsigil.png new file mode 100644 index 00000000..3e05776d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/voidsigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/watersigil.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/watersigil.png new file mode 100644 index 00000000..2a8e511d Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/watersigil.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/wiparray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/wiparray.png new file mode 100644 index 00000000..11297382 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/wiparray.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/zombiebeacon.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/zombiebeacon.png new file mode 100644 index 00000000..52f57df6 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/zombiebeacon.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemytable.png b/src/main/resources/assets/bloodmagic/textures/models/alchemytable.png new file mode 100644 index 00000000..95bc51ef Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/alchemytable.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/altar.png b/src/main/resources/assets/bloodmagic/textures/models/altar.png new file mode 100644 index 00000000..100d63b0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/altar.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/corrosivecrystal.png b/src/main/resources/assets/bloodmagic/textures/models/corrosivecrystal.png new file mode 100644 index 00000000..27f6c52b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/corrosivecrystal.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/defaultcrystal.png b/src/main/resources/assets/bloodmagic/textures/models/defaultcrystal.png new file mode 100644 index 00000000..cbdab181 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/defaultcrystal.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/demoncrucible.png b/src/main/resources/assets/bloodmagic/textures/models/demoncrucible.png new file mode 100644 index 00000000..dda871ad Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/demoncrucible.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/demoncrystallizer.png b/src/main/resources/assets/bloodmagic/textures/models/demoncrystallizer.png new file mode 100644 index 00000000..370a1f77 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/demoncrystallizer.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/demonpylon.png b/src/main/resources/assets/bloodmagic/textures/models/demonpylon.png new file mode 100644 index 00000000..af5ad2bd Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/demonpylon.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/destructivecrystal.png b/src/main/resources/assets/bloodmagic/textures/models/destructivecrystal.png new file mode 100644 index 00000000..f526b6a2 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/destructivecrystal.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/energybazookamainprojectile.png b/src/main/resources/assets/bloodmagic/textures/models/energybazookamainprojectile.png new file mode 100644 index 00000000..8a7e86aa Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/energybazookamainprojectile.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/hellfireforge.png b/src/main/resources/assets/bloodmagic/textures/models/hellfireforge.png new file mode 100644 index 00000000..081ab182 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/hellfireforge.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/incensealtar.png b/src/main/resources/assets/bloodmagic/textures/models/incensealtar.png new file mode 100644 index 00000000..68db9263 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/incensealtar.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/meteor.png b/src/main/resources/assets/bloodmagic/textures/models/meteor.png new file mode 100644 index 00000000..e6926d12 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/meteor.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/mobsacrificeswirl.png b/src/main/resources/assets/bloodmagic/textures/models/mobsacrificeswirl.png new file mode 100644 index 00000000..023cf956 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/mobsacrificeswirl.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/modelinputroutingnode.png b/src/main/resources/assets/bloodmagic/textures/models/modelinputroutingnode.png new file mode 100644 index 00000000..1d756a47 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/modelinputroutingnode.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/modelmasterroutingnode.png b/src/main/resources/assets/bloodmagic/textures/models/modelmasterroutingnode.png new file mode 100644 index 00000000..b861ffad Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/modelmasterroutingnode.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/modeloutputroutingnode.png b/src/main/resources/assets/bloodmagic/textures/models/modeloutputroutingnode.png new file mode 100644 index 00000000..cdb5bd95 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/modeloutputroutingnode.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/modelroutingnode.png b/src/main/resources/assets/bloodmagic/textures/models/modelroutingnode.png new file mode 100644 index 00000000..e51bb211 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/modelroutingnode.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/pedestal.png b/src/main/resources/assets/bloodmagic/textures/models/pedestal.png new file mode 100644 index 00000000..1ca87111 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/pedestal.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/pillar_base.png b/src/main/resources/assets/bloodmagic/textures/models/pillar_base.png new file mode 100644 index 00000000..61b2c875 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/pillar_base.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/pillar_base_c.png b/src/main/resources/assets/bloodmagic/textures/models/pillar_base_c.png new file mode 100644 index 00000000..aa76e68c Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/pillar_base_c.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/pillar_base_d.png b/src/main/resources/assets/bloodmagic/textures/models/pillar_base_d.png new file mode 100644 index 00000000..dc8ef737 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/pillar_base_d.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/pillar_base_s.png b/src/main/resources/assets/bloodmagic/textures/models/pillar_base_s.png new file mode 100644 index 00000000..1c6a0cc0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/pillar_base_s.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/pillar_base_v.png b/src/main/resources/assets/bloodmagic/textures/models/pillar_base_v.png new file mode 100644 index 00000000..963acab1 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/pillar_base_v.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/pillar_mid.png b/src/main/resources/assets/bloodmagic/textures/models/pillar_mid.png new file mode 100644 index 00000000..2e16a4b2 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/pillar_mid.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/pillar_mid_c.png b/src/main/resources/assets/bloodmagic/textures/models/pillar_mid_c.png new file mode 100644 index 00000000..604fb8b5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/pillar_mid_c.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/pillar_mid_d.png b/src/main/resources/assets/bloodmagic/textures/models/pillar_mid_d.png new file mode 100644 index 00000000..a2962ef4 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/pillar_mid_d.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/pillar_mid_s.png b/src/main/resources/assets/bloodmagic/textures/models/pillar_mid_s.png new file mode 100644 index 00000000..3ebb670c Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/pillar_mid_s.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/pillar_mid_v.png b/src/main/resources/assets/bloodmagic/textures/models/pillar_mid_v.png new file mode 100644 index 00000000..c778eede Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/pillar_mid_v.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/plinth.png b/src/main/resources/assets/bloodmagic/textures/models/plinth.png new file mode 100644 index 00000000..e6ecd340 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/plinth.png differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/Reagent.png b/src/main/resources/assets/bloodmagic/textures/models/reagent.png similarity index 100% rename from src/main/resources/assets/alchemicalwizardry/textures/models/Reagent.png rename to src/main/resources/assets/bloodmagic/textures/models/reagent.png diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/SimpleTransCircle.png b/src/main/resources/assets/bloodmagic/textures/models/simpletranscircle.png similarity index 100% rename from src/main/resources/assets/alchemicalwizardry/textures/models/SimpleTransCircle.png rename to src/main/resources/assets/bloodmagic/textures/models/simpletranscircle.png diff --git a/src/main/resources/assets/bloodmagic/textures/models/steadfastcrystal.png b/src/main/resources/assets/bloodmagic/textures/models/steadfastcrystal.png new file mode 100644 index 00000000..7f93d339 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/steadfastcrystal.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/vengefulcrystal.png b/src/main/resources/assets/bloodmagic/textures/models/vengefulcrystal.png new file mode 100644 index 00000000..5f707825 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/vengefulcrystal.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/models/writingtable.png b/src/main/resources/assets/bloodmagic/textures/models/writingtable.png new file mode 100644 index 00000000..73ed7ddd Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/writingtable.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/potions/boost.png b/src/main/resources/assets/bloodmagic/textures/potions/boost.png new file mode 100644 index 00000000..27f6c52b Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/potions/boost.png differ diff --git a/src/main/resources/data/bloodmagic/anointment/bow_power.json b/src/main/resources/data/bloodmagic/anointment/bow_power.json new file mode 100644 index 00000000..602a88c4 --- /dev/null +++ b/src/main/resources/data/bloodmagic/anointment/bow_power.json @@ -0,0 +1,10 @@ +{ + "id": "bloodmagic:bow_power", + "bonuses": { + "damage": [ + 1.25, + 1.5, + 1.75 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/anointment/hidden_knowledge.json b/src/main/resources/data/bloodmagic/anointment/hidden_knowledge.json new file mode 100644 index 00000000..b7e2a2d6 --- /dev/null +++ b/src/main/resources/data/bloodmagic/anointment/hidden_knowledge.json @@ -0,0 +1,10 @@ +{ + "id": "bloodmagic:hidden_knowledge", + "bonuses": { + "exp": [ + 2, + 4, + 6 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/anointment/holy_water.json b/src/main/resources/data/bloodmagic/anointment/holy_water.json new file mode 100644 index 00000000..58a29778 --- /dev/null +++ b/src/main/resources/data/bloodmagic/anointment/holy_water.json @@ -0,0 +1,10 @@ +{ + "id": "bloodmagic:holy_water", + "bonuses": { + "damage": [ + 5, + 10, + 15 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/anointment/melee_damage.json b/src/main/resources/data/bloodmagic/anointment/melee_damage.json new file mode 100644 index 00000000..e0a0f500 --- /dev/null +++ b/src/main/resources/data/bloodmagic/anointment/melee_damage.json @@ -0,0 +1,10 @@ +{ + "id": "bloodmagic:melee_damage", + "bonuses": { + "damage": [ + 3, + 6, + 9 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/anointment/quick_draw.json b/src/main/resources/data/bloodmagic/anointment/quick_draw.json new file mode 100644 index 00000000..6f9f3685 --- /dev/null +++ b/src/main/resources/data/bloodmagic/anointment/quick_draw.json @@ -0,0 +1,10 @@ +{ + "id": "bloodmagic:quick_draw", + "bonuses": { + "speed": [ + 0.5, + 1, + 1.5 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/living_armor/arrow_protect.json b/src/main/resources/data/bloodmagic/living_armor/arrow_protect.json new file mode 100644 index 00000000..ae1ea715 --- /dev/null +++ b/src/main/resources/data/bloodmagic/living_armor/arrow_protect.json @@ -0,0 +1,29 @@ +{ + "id": "bloodmagic:arrow_protect", + "levels": [ + { "xp": 30, "cost": 4 }, + { "xp": 200, "cost": 9 }, + { "xp": 400, "cost": 16 }, + { "xp": 800, "cost": 30 }, + { "xp": 1500, "cost": 60 }, + { "xp": 2500, "cost": 90 }, + { "xp": 3500, "cost": 125 }, + { "xp": 5000, "cost": 165 }, + { "xp": 7000, "cost": 210 }, + { "xp": 15000, "cost": 250 } + ], + "bonuses": { + "protection": [ + 0.1, + 0.3, + 0.4, + 0.6, + 0.7, + 0.75, + 0.77, + 0.8, + 0.83, + 0.85 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/living_armor/arrow_shot.json b/src/main/resources/data/bloodmagic/living_armor/arrow_shot.json new file mode 100644 index 00000000..009585b7 --- /dev/null +++ b/src/main/resources/data/bloodmagic/living_armor/arrow_shot.json @@ -0,0 +1,10 @@ +{ + "id": "bloodmagic:arrow_shot", + "levels": [ + { "xp": 50, "cost": 20 }, + { "xp": 200, "cost": 50 }, + { "xp": 700, "cost": 90 }, + { "xp": 1500, "cost": 160 }, + { "xp": 3000, "cost": 290 } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/living_armor/critical_strike.json b/src/main/resources/data/bloodmagic/living_armor/critical_strike.json new file mode 100644 index 00000000..6089c9be --- /dev/null +++ b/src/main/resources/data/bloodmagic/living_armor/critical_strike.json @@ -0,0 +1,19 @@ +{ + "id": "bloodmagic:critical_strike", + "levels": [ + { "xp": 200, "cost": 5 }, + { "xp": 800, "cost": 12 }, + { "xp": 1300, "cost": 22 }, + { "xp": 2500, "cost": 35 }, + { "xp": 3000, "cost": 49 } + ], + "bonuses": { + "damage_boost": [ + 0.1, + 0.2, + 0.3, + 0.4, + 0.5 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/living_armor/digging.json b/src/main/resources/data/bloodmagic/living_armor/digging.json new file mode 100644 index 00000000..96a24ecb --- /dev/null +++ b/src/main/resources/data/bloodmagic/living_armor/digging.json @@ -0,0 +1,53 @@ +{ + "id": "bloodmagic:digging", + "levels": [ + { "xp": 128, "cost": 5 }, + { "xp": 512, "cost": 10 }, + { "xp": 1024, "cost": 18 }, + { "xp": 2048, "cost": 32 }, + { "xp": 8192, "cost": 60 }, + { "xp": 16000, "cost": 90 }, + { "xp": 32000, "cost": 140 }, + { "xp": 50000, "cost": 180 }, + { "xp": 80000, "cost": 240 }, + { "xp": 150000, "cost": 300 } + ], + "bonuses": { + "speed_time": [ + 0, + 50, + 60, + 100, + 100, + 100, + 100, + 150, + 150, + 150 + ], + "speed_level": [ + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 2, + 2 + ], + "speed_modifier": [ + 0.1, + 0.2, + 0.3, + 0.4, + 0.5, + 0.6, + 0.8, + 1, + 1.2, + 1.5 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/living_armor/experienced.json b/src/main/resources/data/bloodmagic/living_armor/experienced.json new file mode 100644 index 00000000..304dd659 --- /dev/null +++ b/src/main/resources/data/bloodmagic/living_armor/experienced.json @@ -0,0 +1,29 @@ +{ + "id": "bloodmagic:experienced", + "levels": [ + { "xp": 100, "cost": 7 }, + { "xp": 400, "cost": 13 }, + { "xp": 1000, "cost": 22 }, + { "xp": 1600, "cost": 40 }, + { "xp": 3200, "cost": 65 }, + { "xp": 5000, "cost": 90 }, + { "xp": 7000, "cost": 130 }, + { "xp": 9200, "cost": 180 }, + { "xp": 11500, "cost": 250 }, + { "xp": 14000, "cost": 350 } + ], + "bonuses": { + "exp": [ + 0.15, + 0.3, + 0.45, + 0.6, + 0.75, + 0.9, + 1.05, + 1.2, + 1.35, + 1.5 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/living_armor/fall_protect.json b/src/main/resources/data/bloodmagic/living_armor/fall_protect.json new file mode 100644 index 00000000..2e30bafa --- /dev/null +++ b/src/main/resources/data/bloodmagic/living_armor/fall_protect.json @@ -0,0 +1,19 @@ +{ + "id": "bloodmagic:fall_protect", + "levels": [ + { "xp": 30, "cost": 2 }, + { "xp": 200, "cost": 5 }, + { "xp": 400, "cost": 9 }, + { "xp": 800, "cost": 15 }, + { "xp": 1500, "cost": 25 } + ], + "bonuses": { + "protection": [ + 0.2, + 0.4, + 0.6, + 0.8, + 1 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/living_armor/fire_resist.json b/src/main/resources/data/bloodmagic/living_armor/fire_resist.json new file mode 100644 index 00000000..6266703d --- /dev/null +++ b/src/main/resources/data/bloodmagic/living_armor/fire_resist.json @@ -0,0 +1,26 @@ +{ + "id": "bloodmagic:fire_resist", + "levels": [ + { "xp": 1200, "cost": 2 }, + { "xp": 3600, "cost": 6 }, + { "xp": 12000, "cost": 14 }, + { "xp": 24000, "cost": 25 }, + { "xp": 30000, "cost": 40 } + ], + "bonuses": { + "cooldown_time": [ + 6000, + 4800, + 4800, + 3600, + 2400 + ], + "resist_duration": [ + 600, + 600, + 800, + 1000, + 1200 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/living_armor/grave_digger.json b/src/main/resources/data/bloodmagic/living_armor/grave_digger.json new file mode 100644 index 00000000..38152a35 --- /dev/null +++ b/src/main/resources/data/bloodmagic/living_armor/grave_digger.json @@ -0,0 +1,29 @@ +{ + "id": "bloodmagic:grave_digger", + "levels": [ + { "xp": 200, "cost": 5 }, + { "xp": 800, "cost": 12 }, + { "xp": 1300, "cost": 20 }, + { "xp": 2500, "cost": 35 }, + { "xp": 3800, "cost": 49 }, + { "xp": 5000, "cost": 78 }, + { "xp": 7000, "cost": 110 }, + { "xp": 9200, "cost": 160 }, + { "xp": 11500, "cost": 215 }, + { "xp": 14000, "cost": 320 } + ], + "bonuses": { + "damage": [ + 1 + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/living_armor/health.json b/src/main/resources/data/bloodmagic/living_armor/health.json new file mode 100644 index 00000000..46debd74 --- /dev/null +++ b/src/main/resources/data/bloodmagic/living_armor/health.json @@ -0,0 +1,29 @@ +{ + "id": "bloodmagic:health", + "levels": [ + { "xp": 80, "cost": 5 }, + { "xp": 200, "cost": 12 }, + { "xp": 340, "cost": 20 }, + { "xp": 540, "cost": 35 }, + { "xp": 800, "cost": 49 }, + { "xp": 1600, "cost": 78 }, + { "xp": 2800, "cost": 110 }, + { "xp": 5000, "cost": 160 }, + { "xp": 7600, "cost": 215 }, + { "xp": 10000, "cost": 320 } + ], + "bonuses": { + "hp": [ + 4, + 8, + 12, + 16, + 20, + 26, + 32, + 38, + 44, + 50 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/living_armor/jump.json b/src/main/resources/data/bloodmagic/living_armor/jump.json new file mode 100644 index 00000000..3bfe6019 --- /dev/null +++ b/src/main/resources/data/bloodmagic/living_armor/jump.json @@ -0,0 +1,41 @@ +{ + "id": "bloodmagic:jump", + "levels": [ + { "xp": 30, "cost": 3 }, + { "xp": 200, "cost": 6 }, + { "xp": 400, "cost": 11 }, + { "xp": 700, "cost": 23 }, + { "xp": 1100, "cost": 37 }, + { "xp": 1500, "cost": 50 }, + { "xp": 2000, "cost": 70 }, + { "xp": 2800, "cost": 100 }, + { "xp": 3600, "cost": 140 }, + { "xp": 5000, "cost": 200 } + ], + "bonuses": { + "jump": [ + 0.1, + 0.2, + 0.3, + 0.4, + 0.5, + 0.7, + 0.75, + 0.9, + 1.1, + 1.3 + ], + "fall": [ + 0.33, + 0.4, + 0.45, + 0.5, + 0.55, + 0.60, + 0.65, + 0.75, + 0.85, + 0.95 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/living_armor/knockback_resist.json b/src/main/resources/data/bloodmagic/living_armor/knockback_resist.json new file mode 100644 index 00000000..e74626ea --- /dev/null +++ b/src/main/resources/data/bloodmagic/living_armor/knockback_resist.json @@ -0,0 +1,26 @@ +{ + "id": "bloodmagic:knockback_resist", + "levels": [ + { "xp": 100, "cost": 3 }, + { "xp": 200, "cost": 7 }, + { "xp": 300, "cost": 13 }, + { "xp": 500, "cost": 26 }, + { "xp": 1000, "cost": 42 } + ], + "bonuses": { + "kb": [ + 0.2, + 0.4, + 0.6, + 0.8, + 1.0 + ], + "hp": [ + 0, + 0, + 0, + 4, + 10 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/living_armor/melee_damage.json b/src/main/resources/data/bloodmagic/living_armor/melee_damage.json new file mode 100644 index 00000000..963cc11c --- /dev/null +++ b/src/main/resources/data/bloodmagic/living_armor/melee_damage.json @@ -0,0 +1,29 @@ +{ + "id": "bloodmagic:melee_damage", + "levels": [ + { "xp": 200, "cost": 5 }, + { "xp": 800, "cost": 12 }, + { "xp": 1300, "cost": 20 }, + { "xp": 2500, "cost": 35 }, + { "xp": 3800, "cost": 49 }, + { "xp": 5000, "cost": 78 }, + { "xp": 7000, "cost": 110 }, + { "xp": 9200, "cost": 160 }, + { "xp": 11500, "cost": 215 }, + { "xp": 14000, "cost": 320 } + ], + "bonuses": { + "damage": [ + 0.5, + 1, + 1.5, + 2, + 2.5, + 3, + 4, + 5, + 6, + 7 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/living_armor/physical_protect.json b/src/main/resources/data/bloodmagic/living_armor/physical_protect.json new file mode 100644 index 00000000..bfb72198 --- /dev/null +++ b/src/main/resources/data/bloodmagic/living_armor/physical_protect.json @@ -0,0 +1,29 @@ +{ + "id": "bloodmagic:physical_protect", + "levels": [ + { "xp": 30, "cost": 5 }, + { "xp": 200, "cost": 10 }, + { "xp": 400, "cost": 18 }, + { "xp": 800, "cost": 35 }, + { "xp": 1500, "cost": 65 }, + { "xp": 2500, "cost": 100 }, + { "xp": 3500, "cost": 140 }, + { "xp": 5000, "cost": 190 }, + { "xp": 7000, "cost": 250 }, + { "xp": 15000, "cost": 300 } + ], + "bonuses": { + "protection": [ + 0.1, + 0.3, + 0.4, + 0.6, + 0.7, + 0.75, + 0.77, + 0.8, + 0.83, + 0.85 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/living_armor/poison_resist.json b/src/main/resources/data/bloodmagic/living_armor/poison_resist.json new file mode 100644 index 00000000..42312197 --- /dev/null +++ b/src/main/resources/data/bloodmagic/living_armor/poison_resist.json @@ -0,0 +1,26 @@ +{ + "id": "bloodmagic:poison_resist", + "levels": [ + { "xp": 1200, "cost": 2 }, + { "xp": 3600, "cost": 6 }, + { "xp": 12000, "cost": 14 }, + { "xp": 24000, "cost": 25 }, + { "xp": 30000, "cost": 40 } + ], + "bonuses": { + "cooldown": [ + 1200, + 800, + 600, + 300, + 100 + ], + "max_cure": [ + 0, + 1, + 2, + 2, + 3 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/living_armor/self_sacrifice.json b/src/main/resources/data/bloodmagic/living_armor/self_sacrifice.json new file mode 100644 index 00000000..08ba85f7 --- /dev/null +++ b/src/main/resources/data/bloodmagic/living_armor/self_sacrifice.json @@ -0,0 +1,29 @@ +{ + "id": "bloodmagic:self_sacrifice", + "levels": [ + { "xp": 30, "cost": 7 }, + { "xp": 200, "cost": 13 }, + { "xp": 400, "cost": 22 }, + { "xp": 700, "cost": 40 }, + { "xp": 1100, "cost": 65 }, + { "xp": 1500, "cost": 90 }, + { "xp": 2000, "cost": 130 }, + { "xp": 2800, "cost": 180 }, + { "xp": 3600, "cost": 250 }, + { "xp": 5000, "cost": 350 } + ], + "bonuses": { + "self_mod": [ + 0.15, + 0.3, + 0.45, + 0.6, + 0.75, + 0.9, + 1.05, + 1.2, + 1.35, + 1.5 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/living_armor/speed.json b/src/main/resources/data/bloodmagic/living_armor/speed.json new file mode 100644 index 00000000..717abf5b --- /dev/null +++ b/src/main/resources/data/bloodmagic/living_armor/speed.json @@ -0,0 +1,53 @@ +{ + "id": "bloodmagic:speed", + "levels": [ + { "xp": 200, "cost": 3 }, + { "xp": 1000, "cost": 7 }, + { "xp": 2000, "cost": 13 }, + { "xp": 4000, "cost": 26 }, + { "xp": 7000, "cost": 42 }, + { "xp": 15000, "cost": 60 }, + { "xp": 25000, "cost": 90 }, + { "xp": 35000, "cost": 130 }, + { "xp": 50000, "cost": 180 }, + { "xp": 70000, "cost": 250 } + ], + "bonuses": { + "speed_time": [ + 0, + 0, + 0, + 0, + 0, + 20, + 60, + 60, + 100, + 200 + ], + "speed_level": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 2 + ], + "speed_modifier": [ + 0.1, + 0.2, + 0.3, + 0.4, + 0.5, + 0.7, + 0.9, + 1.1, + 1.3, + 1.5 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/living_armor/sprint_attack.json b/src/main/resources/data/bloodmagic/living_armor/sprint_attack.json new file mode 100644 index 00000000..f9c7166c --- /dev/null +++ b/src/main/resources/data/bloodmagic/living_armor/sprint_attack.json @@ -0,0 +1,26 @@ +{ + "id": "bloodmagic:sprint_attack", + "levels": [ + { "xp": 200, "cost": 3 }, + { "xp": 800, "cost": 7 }, + { "xp": 1300, "cost": 15 }, + { "xp": 2500, "cost": 25 }, + { "xp": 3800, "cost": 40 } + ], + "bonuses": { + "damage_boost": [ + 0.5, + 0.75, + 1, + 1.25, + 1.5 + ], + "kb": [ + 1, + 2, + 3, + 4, + 5 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/loot_modifiers/fortune.json b/src/main/resources/data/bloodmagic/loot_modifiers/fortune.json new file mode 100644 index 00000000..d62cfa37 --- /dev/null +++ b/src/main/resources/data/bloodmagic/loot_modifiers/fortune.json @@ -0,0 +1,11 @@ +{ + "type": "bloodmagic:fortune", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/loot_modifiers/looting.json b/src/main/resources/data/bloodmagic/loot_modifiers/looting.json new file mode 100644 index 00000000..fe391f6f --- /dev/null +++ b/src/main/resources/data/bloodmagic/loot_modifiers/looting.json @@ -0,0 +1,12 @@ +{ + "type": "bloodmagic:looting", + "conditions": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/loot_modifiers/silk_touch_bamboo.json b/src/main/resources/data/bloodmagic/loot_modifiers/silk_touch_bamboo.json new file mode 100644 index 00000000..1e88d9b9 --- /dev/null +++ b/src/main/resources/data/bloodmagic/loot_modifiers/silk_touch_bamboo.json @@ -0,0 +1,11 @@ +{ + "type": "bloodmagic:silk_touch_bamboo", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/loot_modifiers/smelt.json b/src/main/resources/data/bloodmagic/loot_modifiers/smelt.json new file mode 100644 index 00000000..4e9bf5a5 --- /dev/null +++ b/src/main/resources/data/bloodmagic/loot_modifiers/smelt.json @@ -0,0 +1,11 @@ +{ + "type": "bloodmagic:smelt", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/book.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/book.json new file mode 100644 index 00000000..4d8fef9b --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/book.json @@ -0,0 +1,23 @@ +{ + "name": "guide.bloodmagic.name", + "subtitle": "Alchemical Wizardry", + "landing_text": "Welcome to $(6)Blood Magic$()! $(br2)$(l:bloodmagic:utility/nyi)A lot of stuff$() isn't yet implemented, so please excuse our dust. $(br2)Click $(l:bloodmagic:utility/getting_started)HERE$() to get started. If you find any bugs, please report them on our $(l:https://github.com/WayofTime/BloodMagic/issues)Github$().", + "book_texture": "patchouli:textures/gui/book_red.png", + "filler_texture": "bloodmagic:textures/gui/patchouli_book/page_filler.png", + "creative_tab": "bloodmagictab", + "model": "bloodmagic:book", + "show_progress": false, + "macros": { + "$(water)": "$(#0000AA)", + "$(air)": "$(#AAAA00)", + "$(fire)": "$(#AA0000)", + "$(earth)": "$(#00AA00)", + "$(blank)": "$(#888888)", + "$(steadfast)": "$(#0000AA)", + "$(destructive)": "$(#AAAA00)", + "$(vengeful)": "$(#AA0000)", + "$(corrosive)": "$(#00AA00)", + "$(raw)": "$(#36C6C6)", + "$(blood)": "$(#AA0000)" + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_array.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_array.json new file mode 100644 index 00000000..1896d31d --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_array.json @@ -0,0 +1,6 @@ +{ + "name": "Alchemy Arrays", + "description": "Alchemy Arrays are simple effects that originate from circles that are drawn on the ground using $(l:bloodmagic:alchemy_array/functional_arrays/arcane_ash)Arcane Ashes.$(/l) They are simple to build and can be really useful in both early game and late game applications.", + "icon": "bloodmagic:arcaneashes", + "sortnum": 2 +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_array/functional_array.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_array/functional_array.json new file mode 100644 index 00000000..96640011 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_array/functional_array.json @@ -0,0 +1,7 @@ +{ + "name": "Functional Arrays", + "description": "", + "icon": "bloodmagic:arcaneashes", + "parent": "bloodmagic:alchemy_array", + "sortnum": 0 +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_array/living_equipment.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_array/living_equipment.json new file mode 100644 index 00000000..b864678c --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_array/living_equipment.json @@ -0,0 +1,7 @@ +{ + "name": "Living Equipment", + "description": "with some $(item)Arcane Ashes$() and a handful of this new $(item)Binding Reagent$(), a whole world of defense and utility has opened up before you.", + "icon": "bloodmagic:livinghelmet", + "parent": "bloodmagic:alchemy_array", + "sortnum": 2 +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_array/living_equipment/armor_upgrades.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_array/living_equipment/armor_upgrades.json new file mode 100644 index 00000000..0ea58b6e --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_array/living_equipment/armor_upgrades.json @@ -0,0 +1,6 @@ +{ + "name": "Living Armor Upgrades", + "description": "A list of available Living Armor Upgrades.", + "icon": "bloodmagic:upgradetome", + "parent": "bloodmagic:alchemy_array/living_equipment" +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_array/sigil.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_array/sigil.json new file mode 100644 index 00000000..af82aeeb --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_array/sigil.json @@ -0,0 +1,7 @@ +{ + "name": "Sigils", + "description": "$(item)Sigils$() are formed using an $(l:bloodmagic:alchemy_array/crafting_array)Alchemy Array$(), some form of $(item)Reagent$() and a $(l:bloodmagic:altar/slates)Slate$(). They draw LP from your $(altar/soul_network)Soul Network$() in order to perform all sorts of useful tasks.", + "icon": "bloodmagic:divinationsigil", + "parent": "bloodmagic:alchemy_array", + "sortnum": 1 +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_table.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_table.json new file mode 100644 index 00000000..958b5ccf --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_table.json @@ -0,0 +1,6 @@ +{ + "name": "Alchemy Table", + "description": "", + "icon": "bloodmagic:alchemytable", + "sortnum": 1 +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_table/anointments.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_table/anointments.json new file mode 100644 index 00000000..66adbb00 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemy_table/anointments.json @@ -0,0 +1,6 @@ +{ + "name": "Anointments", + "description": "", + "icon": "bloodmagic:smelting_anointment", + "parent": "bloodmagic:alchemy_table" +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/altar.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/altar.json new file mode 100644 index 00000000..b82a7c93 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/altar.json @@ -0,0 +1,6 @@ +{ + "name": "Blood Altars", + "description": "One of the central concepts of Blood Magic is building a glorious ziggurat to focus your power. These pages will guide you in the construction of this masterwork.", + "icon": "bloodmagic:altar", + "sortnum": 0 +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/altar/blood_rune.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/altar/blood_rune.json new file mode 100644 index 00000000..2d89895a --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/altar/blood_rune.json @@ -0,0 +1,6 @@ +{ + "name": "Blood Runes", + "description": "There's lots of different runes. They do cool stuff! Take your pick.", + "icon": "bloodmagic:blankrune", + "parent": "bloodmagic:altar" +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/demon_will.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/demon_will.json new file mode 100644 index 00000000..ce8f99e1 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/demon_will.json @@ -0,0 +1,6 @@ +{ + "name": "Demon Will", + "description": "$(item)Demon Will$() is one of the first things you can create with $(6)Blood Magic$(). Once you have gathered some with a $(l:bloodmagic:demon_will/soul_snare)Soul Snare$(), you will be able to craft a $(l:bloodmagic:demon_will/soul_gem)Petty Tartaric Gem$() and a $(l:bloodmagic:demon_will/sentient_sword)Sentient Sword$(/l)$().", + "icon": "bloodmagic:basemonstersoul", + "sortnum": 3 +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/rituals.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/rituals.json new file mode 100644 index 00000000..047ec904 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/rituals.json @@ -0,0 +1,6 @@ +{ + "name": "Rituals", + "description": "Rituals consume LP from your $(l:bloodmagic:altar/soul_network)Soul Network$(/l) in order to do a variety of tasks. $(br2)For information on specific rituals, click the Master Ritual Stone below.$(br2)>>> <<<", + "icon": "bloodmagic:ritualdiviner", + "sortnum": 4 +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/rituals/ritual_list.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/rituals/ritual_list.json new file mode 100644 index 00000000..065d9f1a --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/rituals/ritual_list.json @@ -0,0 +1,6 @@ +{ + "name": "List of Rituals", + "description": "Some simpler $(item)rituals$() will be available to you when you have a Tier III $(l:bloodmagic:altar/blood_altar)Blood Altar$(), but the more advanced ones will require Dusk Runes, and thus a Tier IV Altar. $(br2) Use the $(l:bloodmagic:rituals/ritual_diviner)Ritual Diviner$() to assemble the rituals, and don't forget to keep your $(l:bloodmagic:altar/soul_network)Soul Network$() topped off!", + "icon": "bloodmagic:masterritualstone", + "parent": "bloodmagic:rituals" +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/utility.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/utility.json new file mode 100644 index 00000000..08a62079 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/utility.json @@ -0,0 +1,6 @@ +{ + "name": "Utility Blocks & Items", + "description": "AKA the \"Miscellaneous\" bin. General information about the mod goes here, along with anything else that doesn't quite fit in another category, yet doesn't have enough to warrant a category of its own.", + "icon": "bloodmagic:incensealtar", + "sortnum": 99 +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/functional_arrays/arcane_ash.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/functional_arrays/arcane_ash.json new file mode 100644 index 00000000..22a0d810 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/functional_arrays/arcane_ash.json @@ -0,0 +1,36 @@ +{ + "name": "Alchemy Array Basics", + "icon": "bloodmagic:arcaneashes", + "category": "bloodmagic:alchemy_array/functional_array", + "extra_recipe_mappings":[["bloodmagic:arcaneashes", 1]], + "pages": [ + { + "type": "text", + "text": "$(item)Arcane Ashes$() is an item that is pivotal in the creation of Alchemy Arrays. $(item)Arcane Ashes$() can be crafted in the $(l:bloodmagic:alchemy_table/alchemy_table)Alchemy Table($()) using some early game items." + }, + { + "type": "crafting_alchemy_table", + "heading": "Arcane Ashes", + "recipe": "bloodmagic:alchemytable/arcane_ash" + }, + { + "type": "text", + "text": "In order to create an Alchemy Array, right click the top of the ground with the $(item)Arcane Ashes$() (although any solid block face works) - this will consume 1 durability out of 20 from the $(item)Arcane Ashes$() and draw a simple Alchemy Array, that by itself has no effects.$(bl2)When you click on the Alchemy Array, it will consume a single item from the stack in your hand and hold it in the array. These items are then used to determine the Alchemy Array's effect." + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/alchemy_array/simple_array.png", + "bloodmagic:images/entries/alchemy_array/divination_array_1.png", + "bloodmagic:images/entries/alchemy_array/divination_array_2.png" + ], + "title": "Alchemy Array", + "border": true, + "text": "Alchemy Array showing array with: no inputs; only the base item; both base and catalyst." + }, + { + "type": "text", + "text": "Each effect requires two items: a base and a catalyst. The base is the first item that you click the array with after it is drawn, and the catalyst is the second item. When you apply the input, the design of the array will change if it is valid, and the array will start activating once you apply the catalyst.$(br2)Although only a few arrays are currently implemented, eventually you will have arrays that range from simple $(l:bloodmagic:alchemy_array/crafting_array)crafting arrays$(/l) to even teleportation arrays." + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/functional_arrays/crafting_array.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/functional_arrays/crafting_array.json new file mode 100644 index 00000000..c652a006 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/functional_arrays/crafting_array.json @@ -0,0 +1,15 @@ +{ + "name": "Crafting with Arrays", + "icon": "bloodmagic:divinationsigil", + "category": "bloodmagic:alchemy_array/functional_array", + "pages": [ + { + "type": "text", + "text": "$(1)Alchemy Arrays of Crafting$() are one of the simplest forms of array. These arrays inscribe the $(item)base item$() onto the $(item)catalyst$(), transforming them both into a useful item (after a small, pretty animation)." + }, + { + "type": "text", + "text": "While some of these resulting items can be crafted $(l:bloodmagic:alchemy_array/sigil/divination)using very simple ingredients$(/l), others require additional steps to create useful items." + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/functional_arrays/movement_arrays.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/functional_arrays/movement_arrays.json new file mode 100644 index 00000000..303671fd --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/functional_arrays/movement_arrays.json @@ -0,0 +1,20 @@ +{ + "name": "Movement Array", + "icon": "minecraft:feather", + "category": "bloodmagic:alchemy_array/functional_array", + "pages": [ + { + "type": "text", + "text": "The Movement Arrays are a pair of arrays that thows players, mobs, items, etc in a specific direction. One will throw the items horizontally, while the other will throw them vertically." + }, + { + "type": "2x_functional_array", + "a.heading": "Speed Array", + "a.recipe": "bloodmagic:array/movement", + "a.image": "movementarray.png", + "b.heading": "Updraft Array", + "b.recipe": "bloodmagic:array/updraft", + "b.image": "updraftarray.png" + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/functional_arrays/spike_array.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/functional_arrays/spike_array.json new file mode 100644 index 00000000..84e73b99 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/functional_arrays/spike_array.json @@ -0,0 +1,17 @@ +{ + "name": "Spike Array", + "icon": "minecraft:iron_ingot", + "category": "bloodmagic:alchemy_array/functional_array", + "pages": [ + { + "type": "text", + "text": "The Spike Array is a rather simple array with a single purpose. When a living entity steps into the array, they are hit with a full heart of damage. This is good for mob traps, or for making your base a bit spikier for players." + }, + { + "type": "functional_array", + "heading": "Spike Array", + "recipe": "bloodmagic:array/spike", + "image": "spikearray.png" + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/functional_arrays/time_arrays.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/functional_arrays/time_arrays.json new file mode 100644 index 00000000..a14c9526 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/functional_arrays/time_arrays.json @@ -0,0 +1,20 @@ +{ + "name": "Day/Night Arrays", + "icon": "minecraft:clock", + "category": "bloodmagic:alchemy_array/functional_array", + "pages": [ + { + "type": "text", + "text": "Time-based arrays are straight-forward arrays that control the time of day. The items will be consumed once the array starts changing the time. These recipes are temporary and will change in the future.$(br2)The Day array will change the time of day to the next sunrise. The Night array will change the time of day to the next sunset." + }, + { + "type": "2x_functional_array", + "a.heading": "New Dawn", + "a.recipe": "bloodmagic:array/day", + "a.image": "sunarray.png", + "b.heading": "True Twilight", + "b.recipe": "bloodmagic:array/night", + "b.image": "moonarray.png" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/body_builder.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/body_builder.json new file mode 100644 index 00000000..50a5f4eb --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/body_builder.json @@ -0,0 +1,11 @@ +{ + "name": "Body Builder", + "icon": "minecraft:cooked_beef", + "category": "bloodmagic:alchemy_array/living_equipment/armor_upgrades", + "pages": [ + { + "type": "text", + "text": "Effect: Grants Knockback Resistance and bonus Health. Caps out at 100% Resistance and 10 half-hearts of health. $(br2)Trained by: Eating food. $(br2)Maximum level: 5" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/charging_strike.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/charging_strike.json new file mode 100644 index 00000000..be90ac0c --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/charging_strike.json @@ -0,0 +1,11 @@ +{ + "name": "Charging Strike", + "icon": "minecraft:golden_axe", + "category": "bloodmagic:alchemy_array/living_equipment/armor_upgrades", + "pages": [ + { + "type": "text", + "text": "Effect: Increases damage and knockback from sprinting attacks, up to +50%. $(br2)Trained by: Dealing damage while sprinting. $(br2)Maximum level: 5" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/dwarven_might.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/dwarven_might.json new file mode 100644 index 00000000..4c631ac8 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/dwarven_might.json @@ -0,0 +1,11 @@ +{ + "name": "Dwarven Might", + "icon": "minecraft:diamond_pickaxe", + "category": "bloodmagic:alchemy_array/living_equipment/armor_upgrades", + "pages": [ + { + "type": "text", + "text": "Effect: Increases mining speed while mining identical blocks. After a certain level, gives a Haste buff after breaking blocks. $(br2)Trained by: Mining. $(br2)Maximum level: 10" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/experienced.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/experienced.json new file mode 100644 index 00000000..72d28543 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/experienced.json @@ -0,0 +1,11 @@ +{ + "name": "Experienced", + "icon": "minecraft:experience_bottle", + "category": "bloodmagic:alchemy_array/living_equipment/armor_upgrades", + "pages": [ + { + "type": "text", + "text": "Effect: Increases XP drops from killing mobs, up to 150%. $(br2)Trained by: Collecting XP. $(br2)Maximum level: 10" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/gift_of_ignis.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/gift_of_ignis.json new file mode 100644 index 00000000..fe91e876 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/gift_of_ignis.json @@ -0,0 +1,11 @@ +{ + "name": "Gift of Ignis", + "icon": "minecraft:blaze_powder", + "category": "bloodmagic:alchemy_array/living_equipment/armor_upgrades", + "pages": [ + { + "type": "text", + "text": "Effect: Provides Fire Resistance. Higher levels last longer and recharge faster. $(br2)Trained by: Being on Fire. ($(item)Potions of Fire Resistance$() may be your friend here.) $(br2)Maximum level: 5" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/healthy.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/healthy.json new file mode 100644 index 00000000..7c116464 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/healthy.json @@ -0,0 +1,11 @@ +{ + "name": "Healthy", + "icon": "minecraft:golden_apple", + "category": "bloodmagic:alchemy_array/living_equipment/armor_upgrades", + "pages": [ + { + "type": "text", + "text": "Effect: Grants additional health, up to 50 half-hearts. $(br2)Trained by: Restoring health (Ordinary healing, or via $(item)Potions of Healing$() or $(item)Potions of Regeneration$().) $(br2)Maximum level: 10" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/pin_cushion.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/pin_cushion.json new file mode 100644 index 00000000..2db0a331 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/pin_cushion.json @@ -0,0 +1,11 @@ +{ + "name": "Pin Cushion", + "icon": "minecraft:arrow", + "category": "bloodmagic:alchemy_array/living_equipment/armor_upgrades", + "pages": [ + { + "type": "text", + "text": "Effect: Offers protection from arrows. $(br2)Trained by: Being shot. $(br2)Maximum level: 10" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/poison_resistance.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/poison_resistance.json new file mode 100644 index 00000000..80969677 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/poison_resistance.json @@ -0,0 +1,11 @@ +{ + "name": "Poison Resistance", + "icon": "minecraft:milk_bucket", + "category": "bloodmagic:alchemy_array/living_equipment/armor_upgrades", + "pages": [ + { + "type": "text", + "text": "Effect: Cures Poison. Has a cooldown which shortens with additional levels. $(br2)Trained by: Being Poisoned. $(br2)Maximum level: 5" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/quick_feet.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/quick_feet.json new file mode 100644 index 00000000..086ac451 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/quick_feet.json @@ -0,0 +1,11 @@ +{ + "name": "Quick Feet", + "icon": "minecraft:sugar", + "category": "bloodmagic:alchemy_array/living_equipment/armor_upgrades", + "pages": [ + { + "type": "text", + "text": "Effect: Increases player movement speed up to 150%. $(br2)Trained by: Running around. $(br2)Maximum level: 10" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/soft_fall.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/soft_fall.json new file mode 100644 index 00000000..a24cff98 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/soft_fall.json @@ -0,0 +1,11 @@ +{ + "name": "Soft Fall", + "icon": "minecraft:feather", + "category": "bloodmagic:alchemy_array/living_equipment/armor_upgrades", + "pages": [ + { + "type": "text", + "text": "Effect: Reduces fall damage, up to complete immunity. $(br2)Trained by: Getting hurt from falls. $(br2)Maximum level: 5" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/strong_legs.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/strong_legs.json new file mode 100644 index 00000000..9b99545f --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/strong_legs.json @@ -0,0 +1,11 @@ +{ + "name": "Strong Legs", + "icon": "minecraft:diamond_leggings", + "category": "bloodmagic:alchemy_array/living_equipment/armor_upgrades", + "pages": [ + { + "type": "text", + "text": "Effect: Increases jump height and reduces fall damage, up to a maximum of an additional 7.5 blocks and 83% fall resistance. $(br2)Trained by: Jumping around. $(br2)Maximum level: 10" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/tough.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/tough.json new file mode 100644 index 00000000..aedce14b --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/tough.json @@ -0,0 +1,11 @@ +{ + "name": "Tough", + "icon": "minecraft:shield", + "category": "bloodmagic:alchemy_array/living_equipment/armor_upgrades", + "pages": [ + { + "type": "text", + "text": "Effect: Protects you from non-projectile harm. $(br2)Trained by: Taking damage from anything but projectiles. $(br2)Maximum level: 10" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/tough_palms.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/tough_palms.json new file mode 100644 index 00000000..857cb83b --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/armor_upgrades/tough_palms.json @@ -0,0 +1,11 @@ +{ + "name": "Tough Palms", + "icon": "bloodmagic:sacrificialdagger", + "category": "bloodmagic:alchemy_array/living_equipment/armor_upgrades", + "pages": [ + { + "type": "text", + "text": "Effect: Grants a bonus to Self Sacrifice, up to an additional 150%. $(br2)Trained by: Sacrificing Blood with the Sacrificial Knife. $(br2)Maximum level: 10" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/living_basics.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/living_basics.json new file mode 100644 index 00000000..a4fb2a4e --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/living_basics.json @@ -0,0 +1,30 @@ +{ + "name": "Living Equipment Basics", + "icon": "bloodmagic:reagentbinding", + "priority": true, + "category": "bloodmagic:alchemy_array/living_equipment", + "priority": "true", + "extra_recipe_mappings":[["bloodmagic:reagentbinding", 1]], + "pages": [ + { + "type": "text", + "text": "To create $(item)Living Equipment$(), you will first need $(item)Iron Armor$() (or $(item)Iron Armour$(), if you prefer), some $(l:bloodmagic:alchemy_array/functional_arrays/arcane_ash)Arcane Ash$(), and some $(item)Binding Reagent$(). You'll also need at least a $(br)$(l:bloodmagic:demon_will/soul_gem)Common Tartaric Gem$() in order to hold the $(item)Demon Will$() required." + }, + { + "type": "crafting_alchemy_table", + "heading": "Binding Reagent", + "recipe": "bloodmagic:alchemytable/reagent_binding", + "text": "$(italic)It clings to me tightly...$()" + }, + { + "type": "text", + "text": "as with any other Alchemy Array, right click the top of the ground with the $(item)Arcane Ashes$() and apply the $(item)Binding Reagent$(). Then place in your $(item)Iron Helmet$(), $(item)Iron Chestplate$(), $(item)Iron Leggings$() or $(item)Iron Boots$(), stand back, and watch the show.$(br2) Living Equipment starts off equivalent to Iron, but it has $(item)Upgrade Points$() that can, with care, be spent to train it in specific ways. It starts with 100, but there may be ways to surpass this limitation..." + }, + { + "type": "crafting_array", + "heading": "Ritual of Binding", + "recipe": "bloodmagic:array/living_helmet", + "text": "It's alive, all right... and it's learning from me. I'd best be careful what I teach it. $(br2)I can keep a closer eye on what it's learned so far by holding shift when I look at it." + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/living_upgrades.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/living_upgrades.json new file mode 100644 index 00000000..92a18ee9 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/living_equipment/living_upgrades.json @@ -0,0 +1,17 @@ +{ + "name": "Living Equipment Upgrades", + "icon": "bloodmagic:upgradetome", + "priority": true, + "category": "bloodmagic:alchemy_array/living_equipment", + "extra_recipe_mappings":[["bloodmagic:upgradetome", 0]], + "pages": [ + { + "type": "text", + "text": "While wearing this new armour, you have felt it growing, trying to assist you with various tasks it has seen you perform. $(br2)It seems to be able to perform in a number of areas, but its growth is limited, and trying to do everything at once is quite fruitless." + }, + { + "type": "text", + "text": "Perhaps multiple specialised sets may be a good idea? Of course, you'll have to train it carefully if you want more than a smattering of poorly-directed benefits. $(br2)Fortunately, you have devised a $(l:rituals/ritual_list/ritual_upgrade_remove)Ritual$() that will assist with training, and $(l:rituals/ritual_list/ritual_armour_evolve)another one$() that will imbue your armour with a greater ability to grow." + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/air.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/air.json new file mode 100644 index 00000000..3cc3dc28 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/air.json @@ -0,0 +1,23 @@ +{ + "name": "Air Sigil", + "icon": "bloodmagic:airsigil", + "category": "bloodmagic:alchemy_array/sigil", + "extra_recipe_mappings":[ + ["bloodmagic:reagentair", 1], + ["bloodmagic:airsigil", 1] + ], + "pages": [ + { + "type": "text", + "text": "Throws you in the direction you're facing, at a cost of 50 LP per use. Note that this does not provide any sort of Feather Falling effect, so be careful when landing! A good way to get around quickly, albeit with some risk. Many an unwary mage has met their end by running out of LP in their $(l:bloodmagic:altar/soul_network)Soul Network$() while flying miles above the countryside." + }, + { + "type": "crafting_2-step_sigil", + "alchemy_table.heading": "Air Reagent", + "alchemy_table.recipe": "bloodmagic:alchemytable/reagent_air", + "array.heading": "Air Sigil", + "array.recipe": "bloodmagic:array/airsigil", + "array.text": "$(italic)I feel lighter already..." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/blood_light.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/blood_light.json new file mode 100644 index 00000000..c7d0c769 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/blood_light.json @@ -0,0 +1,23 @@ +{ + "name": "Sigil of the Blood Lamp", + "icon": "bloodmagic:bloodlightsigil", + "category": "bloodmagic:alchemy_array/sigil", + "extra_recipe_mappings":[ + ["bloodmagic:reagentbloodlight", 1], + ["bloodmagic:bloodlightsigil", 1] + ], + "pages": [ + { + "type": "text", + "text": "The $(item)Sigil of the Blood Lamp$() is a handy tool for any miner, dungeon delver, or simply any Blood Mage that doesn't like dark patches and feels that torches and glowstone blocks get in the way. When used, this sigil launches a Blood Light in the direction you are facing. When it hits a block, it spawns a nearly-invisible light source at a cost of 10LP." + }, + { + "type": "crafting_2-step_sigil", + "alchemy_table.heading": "Blood Lamp Reagent", + "alchemy_table.recipe": "bloodmagic:alchemytable/reagent_blood_light", + "array.heading": "Sigil of the Blood Lamp", + "array.recipe": "bloodmagic:array/bloodlightsigil", + "array.text": "$(italic)I see a light!" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/divination.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/divination.json new file mode 100644 index 00000000..612488ed --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/divination.json @@ -0,0 +1,33 @@ +{ + "name": "Divination Sigil", + "icon": "bloodmagic:divinationsigil", + "category": "bloodmagic:alchemy_array/sigil", + "extra_recipe_mappings":[ + ["bloodmagic:divinationsigil", 1] + ], + "pages": [ + { + "type": "text", + "text": "The $(item)Divination Sigil$() is probably the first of many sigils that you would like to craft in Blood Magic. In order to craft the sigil, you need to create an $(l:bloodmagic:alchemy_array/functional_arrays/arcane_ash)Alchemy Array$(/l) and use $(item)Redstone Dust$() and a $(item)Blank Slate$() as the base and catalyst items, respectively." + }, + { + "type": "crafting_array", + "heading": "Divination Sigil", + "recipe": "bloodmagic:array/divinationsigil", + "text": " $(italic)Peer into the soul." + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/sigil/divination_sigil.png" + ], + "title": "Divination Sigil Array", + "border": true, + "text": "The Divination Sigil, next to its crafting array." + }, + { + "type": "text", + "text": "The Divination Sigil has two primary uses: $(br)$(li)When the player right-clicks in the air with the sigil, it will display the amount of LP that is in the owner's $(l:bloodmagic:altar/soul_network)Soul Network.$(/l)$(li)When clicking on a $(l:bloodmagic:altar/blood_altar)Blood Altar$(/l), it will tell the player the altar's current Tier, the amount of LP stored in the altar, as well as its current max capacity. Having a $(item)Divination Sigil$() on hand can also be helpful for other block applications, but that will be covered later." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/grove.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/grove.json new file mode 100644 index 00000000..0d3bf70a --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/grove.json @@ -0,0 +1,37 @@ +{ + "name": "Sigil of the Green Grove", + "icon": "bloodmagic:growthsigil", + "category": "bloodmagic:alchemy_array/sigil", + "extra_recipe_mappings":[ + ["bloodmagic:reagentgrowth", 1], + ["bloodmagic:growthsigil", 1] + ], + "pages": [ + { + "type": "text", + "text": "The $(item)Sigil of the Green Grove$() is an item that has multiple uses. Crafted in an array with a $(item)Growth Reagent$(item) and a $(item)Reinforced Slate$(), the sigil can use the power of your stored life force to nourish and grow nearby plants." + }, + { + "type": "crafting_2-step_sigil", + "alchemy_table.heading": "Growth Reagent", + "alchemy_table.recipe": "bloodmagic:alchemytable/reagent_growth", + "array.heading": "Sigil of the Green Grove", + "array.recipe": "bloodmagic:array/growthsigil" + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/sigil/grove_sigil1.png", + "bloodmagic:images/entries/sigil/grove_sigil2.png", + "bloodmagic:images/entries/sigil/grove_sigil3.png" + ], + "title": "Green Grove Sigil Array", + "border": true, + "text": "The Sigil of the Green Grove's array, plus its primary uses." + }, + { + "type": "text", + "text": "If you right click on a block that is $(2)IGrowable$(), it will apply the bonemeal effect while consuming 150LP.$(br2)However, if you shift-right-click the sigil in the air, the sigil will light up to indicate that it is activated, and will consume 150LP every 10 seconds. Every block in a 7x7x5 high volume centered on the player will have a growth tick applied to it. Good for farming those taters!" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/holding.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/holding.json new file mode 100644 index 00000000..abadeedf --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/holding.json @@ -0,0 +1,23 @@ +{ + "name": "Sigil of Holding", + "icon": "bloodmagic:sigilofholding", + "category": "bloodmagic:alchemy_array/sigil", + "extra_recipe_mappings":[ + ["bloodmagic:reagentholding", 1], + ["bloodmagic:sigilofholding", 1] + ], + "pages": [ + { + "type": "text", + "text": "[Needs content pass from Wrince or WayofTime]$(br2)Press \"$(k:bloodmagic.keybind.open_holding)\" while holding the sigil to open its inventory.$()$(br)Press \"$(k:bloodmagic.keybind.cycle_holding_pos)\" to cycle forward,$() or \"$(k:bloodmagic.keybind.cycle_holding_neg)\" to cycle backwards.$() Sneaking and using your mousewheel also works.$(br2)If you don't see any keybinds there, then you don't have any set yet." + }, + { + "type": "crafting_2-step_sigil", + "alchemy_table.heading": "Holding Reagent", + "alchemy_table.recipe": "bloodmagic:alchemytable/reagent_holding", + "array.heading": "Sigil of Holding", + "array.recipe": "bloodmagic:array/holdingsigil", + "array.text": "$(italic)Sigil-ception" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/ice.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/ice.json new file mode 100644 index 00000000..770bdf2e --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/ice.json @@ -0,0 +1,14 @@ +{ + "name": "Sigil of the Frozen Lake [NYI]", + "icon": "bloodmagic:icesigil", + "category": "bloodmagic:alchemy_array/sigil", + "extra_recipe_mappings":[ + ["bloodmagic:icesigil", 0] + ], + "pages": [ + { + "type": "text", + "text": "[WIP Notes]$(br)[Not Yet Implemented]$(br2)Frostwalker Enchantment as a Sigil." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/lava.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/lava.json new file mode 100644 index 00000000..5602904c --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/lava.json @@ -0,0 +1,33 @@ +{ + "name": "Lava Sigil", + "icon": "bloodmagic:lavasigil", + "category": "bloodmagic:alchemy_array/sigil", + "extra_recipe_mappings":[ + ["bloodmagic:reagentlava", 1], + ["bloodmagic:lavasigil", 1] + ], + "pages": [ + { + "type": "text", + "text": "The sister sigil to the $(l:bloodmagic:alchemy_array/sigil/water)Water Sigil,$(/l) the $(item)Lava Sigil$() creates a source block of lava where you click on the ground for the cost of 1000LP. Crafted in an $(l:bloodmagic:alchemy_array/functional_arrays/arcane_ash)Alchemy Array$(/l) using a $(item)Lava Reagent$() and a $(item)Blank Slate,$() it'll drain 5 hearts from you if you don't have enough LP in your $(l:bloodmagic:altar/soul_network)Soul Network.$(/l)" + }, + { + "type": "crafting_2-step_sigil", + "alchemy_table.heading": "Lava Reagent", + "alchemy_table.recipe": "bloodmagic:alchemytable/reagent_lava", + "array.heading": "Lava Sigil", + "array.recipe": "bloodmagic:array/lavasigil", + "array.text": "$(italic)HOT! DO NOT EAT" + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/sigil/lava_sigil1.png", + "bloodmagic:images/entries/sigil/lava_sigil2.png" + ], + "title": "Lava Sigil Array", + "border": true, + "text": "The Lava Sigil, next to its crafting array, plus its primary use." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/magnetism.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/magnetism.json new file mode 100644 index 00000000..9c83a3a5 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/magnetism.json @@ -0,0 +1,22 @@ +{ + "name": "Sigil of Magnetism", + "icon": "bloodmagic:sigilofmagnetism", + "category": "bloodmagic:alchemy_array/sigil", + "extra_recipe_mappings":[ + ["bloodmagic:reagentmagnetism", 1], + ["bloodmagic:sigilofmagnetism", 1] + ], + "pages": [ + { + "type": "text", + "text": "[WIP Notes]$(br)[Not Yet Implemented]$(br2)Attacts items in the world towards the holder for pickup." + }, + { + "type": "crafting_2-step_sigil", + "alchemy_table.heading": "Magnetism Reagent", + "alchemy_table.recipe": "bloodmagic:alchemytable/reagent_magnetism", + "array.heading": "Sigil of Magnetism", + "array.recipe": "bloodmagic:array/magnetismsigil" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/mining.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/mining.json new file mode 100644 index 00000000..bf620f8f --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/mining.json @@ -0,0 +1,32 @@ +{ + "name": "Sigil of the Fast Miner", + "icon": "bloodmagic:miningsigil", + "category": "bloodmagic:alchemy_array/sigil", + "extra_recipe_mappings":[ + ["bloodmagic:reagentfastminer", 1], + ["bloodmagic:miningsigil", 1] + ], + "pages": [ + { + "type": "text", + "text": "The $(item)Sigil of the Fast Miner$() is a sigil that, when activated using shift-right-click, will consume 100LP every 10 seconds and apply the Haste potion effect. Thus, it increases your mining, digging, and cutting speeds. Crafted using the $(item)Mining Reagent$() and $(item)Reinforced Slate$() in an alchemy array." + }, + { + "type": "crafting_2-step_sigil", + "alchemy_table.heading": "Mining Reagent", + "alchemy_table.recipe": "bloodmagic:alchemytable/reagent_fastminer", + "array.heading": "Sigil of the Fast Miner", + "array.recipe": "bloodmagic:array/fastminersigil" + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/sigil/mining_sigil1.png", + "bloodmagic:images/entries/sigil/mining_sigil2.png" + ], + "title": "Fast Miner Sigil Array", + "border": true, + "text": "The Sigil of the Fast Miner's array, plus its primary uses." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/seer.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/seer.json new file mode 100644 index 00000000..21264a53 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/seer.json @@ -0,0 +1,36 @@ +{ + "name": "Seer's Sigil", + "icon": "bloodmagic:seersigil", + "category": "bloodmagic:alchemy_array/sigil", + "extra_recipe_mappings":[ + ["bloodmagic:reagentsight", 2], + ["bloodmagic:seersigil", 2] + ], + "pages": [ + { + "type": "text", + "text": "The $(item)Seer's Sigil$() is a more advanced form of the $(l:bloodmagic:alchemy_array/sigil/divination)Divination Sigil$(). Alongside showing the amount of LP in the bound player's $(l:bloodmagic:altar/soul_network)Soul Network$(/l), it also shows more information when looking at a $(l:bloodmagic:altar/blood_altar)Blood Altar$(/l)." + }, + { + "type": "crafting_2-step_sigil", + "alchemy_table.heading": "Sight Reagent", + "alchemy_table.recipe": "bloodmagic:alchemytable/reagent_sight", + "array.heading": "Seer's Sigil", + "array.recipe": "bloodmagic:array/seersigil", + "array.text": "$(italic)When seeing all is not enough" + }, + { + "type": "text", + "text": "From top to bottom, we have: $(li)The current Tier of the $(l:bloodmagic:altar/blood_altar)Blood Altar$(/l). $(li)The amount of blood currently inside the Altar, and the current total capacity of the Altar. (This defaults to 10,000mb, but may be increased with $(l:bloodmagic:altar/blood_rune/capacity_rune)Runes of Capacity$() and $(l:bloodmagic:altar/blood_rune/aug_capacity_rune)Runes of Augmented Capacity.$() $(li)The current crafting progress, if any. $(li)LP Consumption/Tick - how much LP the Altar will use per tick when crafting. $(li) Current LP Storage of any $(l:bloodmagic:altar/blood_rune/charging_rune)Charging Runes$() you may have." + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/sigil/seer_sigil_info.png" + ], + "title": "Seer's Sigil Display", + "border": true, + "text": "The Seer's Sigil's displays this HUD when you are looking at a blood Altar." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/void.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/void.json new file mode 100644 index 00000000..6bfa76ab --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/void.json @@ -0,0 +1,23 @@ +{ + "name": "Void Sigil", + "icon": "bloodmagic:voidsigil", + "category": "bloodmagic:alchemy_array/sigil", + "extra_recipe_mappings":[ + ["bloodmagic:reagentvoid", 1], + ["bloodmagic:voidsigil", 1] + ], + "pages": [ + { + "type": "text", + "text": "The $(item)Void sigil$(), when right-clicked on any fluid, will destroy it at a cost of 50LP per block. Good for clearing out irksome lava flows without all that tedious placing and breaking of individual blocks." + }, + { + "type": "crafting_2-step_sigil", + "alchemy_table.heading": "Void Reagent", + "alchemy_table.recipe": "bloodmagic:alchemytable/reagent_void", + "array.heading": "Void Sigil", + "array.recipe": "bloodmagic:array/voidsigil", + "array.text": "$(italic)Better than a Swiffer\u00AE!" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/water.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/water.json new file mode 100644 index 00000000..e43be9df --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_array/sigil/water.json @@ -0,0 +1,33 @@ +{ + "name": "Water Sigil", + "icon": "bloodmagic:watersigil", + "category": "bloodmagic:alchemy_array/sigil", + "extra_recipe_mappings":[ + ["bloodmagic:reagentwater", 1], + ["bloodmagic:watersigil", 1] + ], + "pages": [ + { + "type": "text", + "text": "The $(item)Water Sigil$() is a rather simple sigil. By right clicking on a block, you can drain 100LP from your $(l:bloodmagic:altar/soul_network)Soul Network$(/l) to place a source block of water in the world. If there's not enough LP, it will instead drain the toll from your health. Crafted using a $(item)Water Reagent$() and a $(item)Blank Slate.$()" + }, + { + "type": "crafting_2-step_sigil", + "alchemy_table.heading": "Water Reagent", + "alchemy_table.recipe": "bloodmagic:alchemytable/reagent_water", + "array.heading": "Water Sigil", + "array.recipe": "bloodmagic:array/watersigil", + "array.text": "$(italic)Infinite water, anyone?" + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/sigil/water_sigil1.png", + "bloodmagic:images/entries/sigil/water_sigil2.png" + ], + "title": "Water Sigil Array", + "border": true, + "text": "The Water Sigil, next to its crafting array, plus its primary use." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/alchemy_table.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/alchemy_table.json new file mode 100644 index 00000000..48a57843 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/alchemy_table.json @@ -0,0 +1,95 @@ +{ + "name": "Alchemy Table", + "icon": "bloodmagic:alchemytable", + "category": "bloodmagic:alchemy_table", + "extra_recipe_mappings":[ + ["bloodmagic:plantoil", 8], + ["bloodmagic:coalsand", 9] + ], + "pages": [ + { + "type": "text", + "text": "The Alchemy Table takes a little LP and a few ingredients to do some wondrous things!$(br2)A lot of its content is NYI. $(br2)Mouse over the LP arrow for more info." + }, + { + "type": "crafting", + "recipe": "bloodmagic:alchemy_table" + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/alchemy_table/alchemy_table_gui.png" + ], + "title": "Alchemy Table GUI", + "border": true, + "text": "The Alchemy Table can be inserted into or extracted from. This is how it's configured." + }, + { + "type": "text", + "text": "The $(item)Alchemy Table$() has a number of buttons on its right hand side. These are, in order, $(underline)D$()own, $(underline)U$()p, $(underline)N$()orth, $(underline)S$()outh, $(underline)W$()est, and $(underline)e$()ast. To use them, first click on any slot in the Alchemy Table. (Here, we have selected the central 'finished item' slot, for demonstration.) Next, click on one of these six buttons to toggle whether or not the $(item)Alchemy Table$() should allow $(item)Hoppers$(), pipes, or other such external interference from this face. To return to the table's normal function," + }, + { + "type": "text", + "text": "simply click the slot again to deselect it. The icon displayed in the slot shows whether it is accepting inputs or providing outputs. In the example picture, we are allowing pipes to take from our central slot only on the $(underline)D$()own slot, and any attempts to extract items from other sides will not succeed. $(br2)The following pages document a number of recipes currently available for the Alchemy Table." + }, + + { + "type": "crafting_alchemy_table", + "heading": "Basic Cutting Fluid", + "anchor": "cutting_fluid", + "recipe": "bloodmagic:alchemytable/basic_cutting_fluid", + "text": "Basic Cutting Fluid is used for 2x Ore Processing. It is also used in the $(l:bloodmagic:utility/alchemical_reaction_chamber)Alchemical Reaction Chamber$(/l) and the $(l:bloodmagic:rituals/ritual_list/ritual_crushing)Ritual of the Crusher$() for the same purpose." + }, + { + "type": "2x_crafting_alchemy_table", + "a.heading": "Iron Sand", + "a.recipe": "bloodmagic:alchemytable/sand_iron", + "b.heading": "Gold Sand", + "b.recipe": "bloodmagic:alchemytable/sand_gold" + }, + { + "type": "text", + "text": "The Alchemy Table provides several ways to get vanilla items." + }, + { + "type": "3x_crafting_alchemy_table", + "a.heading": "Grass", + "a.recipe": "bloodmagic:alchemytable/grass_block", + "b.heading": "Leather", + "b.recipe": "bloodmagic:alchemytable/leather_from_flesh", + "c.heading": "Bread", + "c.recipe": "bloodmagic:alchemytable/bread" + }, + { + "type": "2x_crafting_alchemy_table", + "a.heading": "Clay", + "a.recipe": "bloodmagic:alchemytable/clay_from_sand", + "b.heading": "String", + "b.recipe": "bloodmagic:alchemytable/string" + }, + { + "type": "2x_crafting_alchemy_table", + "a.heading": "Flint", + "a.recipe": "bloodmagic:alchemytable/flint_from_gravel", + "b.heading": "Gunpowder", + "b.recipe": "bloodmagic:alchemytable/gunpowder", + "b.text": "Saltpeter NYI in Blood Magic." + }, + { + "type": "3x_crafting_alchemy_table", + "a.heading": "Plant Oil", + "a.recipe": "bloodmagic:alchemytable/plantoil_from_wheat", + "b.recipe": "bloodmagic:alchemytable/plantoil_from_carrots", + "c.recipe": "bloodmagic:alchemytable/plantoil_from_taters" + }, + { + "type": "3x_crafting_alchemy_table", + "a.heading": "Plant Oil Cont.", + "a.recipe": "bloodmagic:alchemytable/plantoil_from_beets", + "b.heading": "Coal Sand", + "b.recipe": "bloodmagic:alchemytable/sand_coal", + "c.heading": "Explosive Powder", + "c.recipe": "bloodmagic:alchemytable/explosive_powder" + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments.json new file mode 100644 index 00000000..fc0265ce --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments.json @@ -0,0 +1,18 @@ +{ + "name": "Anointments", + "icon": "bloodmagic:melee_anointment", + "category": "bloodmagic:alchemy_table", + "extra_recipe_mappings":[["bloodmagic:slate_vial", 1]], + "pages": [ + { + "type": "text", + "text": "$(item)Anointments$() are essentially $(item)potions$() for your tools, weapons, and even your $(l:bloodmagic:demon_will/explosive_charges)Charges$(). By right-clicking with the $(item)anointment$() in one hand, it will be applied to the item in your other hand, if possible. Not all anointments work on all equipment! $(br2)Unlike $(item)potions$(), $(item)anointments$() aren't timed; rather, they wear off a bit at a time as your tool or weapon is used." + }, + { + "type": "crafting_alchemy_table", + "heading": "Slate-infused Vial", + "recipe": "bloodmagic:alchemytable/slate_vial", + "text": "A sturdy Vial that can contain otherwise uncontainable mixtures." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/bow_power_anointment.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/bow_power_anointment.json new file mode 100644 index 00000000..9a93a8ba --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/bow_power_anointment.json @@ -0,0 +1,14 @@ +{ + "name": "Iron Tip", + "icon": "bloodmagic:bow_power_anointment", + "category": "bloodmagic:alchemy_table/anointments", + "extra_recipe_mappings":[["bloodmagic:bow_power_anointment", 0]], + "pages": [ + { + "type": "crafting_alchemy_table", + "heading": "Iron Tip", + "recipe": "bloodmagic:alchemytable/bow_power_anointment", + "text": "Increases the damage of fired arrows by 25%. Also stacks with Vanilla enchantments. $(br2)Valid items: Bows, Crossbows.$(br2)Applies: Heavy Shot I (256 shots)" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/fortune_anointment.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/fortune_anointment.json new file mode 100644 index 00000000..bda05b21 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/fortune_anointment.json @@ -0,0 +1,14 @@ +{ + "name": "Fortuna Extract", + "icon": "bloodmagic:fortune_anointment", + "category": "bloodmagic:alchemy_table/anointments", + "extra_recipe_mappings":[["bloodmagic:fortune_anointment", 0]], + "pages": [ + { + "type": "crafting_alchemy_table", + "heading": "Fortuna Extract", + "recipe": "bloodmagic:alchemytable/fortune_anointment", + "text": "Increases the yield of some harvested blocks. Also stacks with the Fortune enchantment. $(br2)Valid items: Tools, Swords, Charges. $(br2)Applies: Fortunate I (256 blocks)" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/hidden_knowledge_anointment.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/hidden_knowledge_anointment.json new file mode 100644 index 00000000..524f64e9 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/hidden_knowledge_anointment.json @@ -0,0 +1,14 @@ +{ + "name": "Miner's Secrets", + "icon": "bloodmagic:hidden_knowledge_anointment", + "category": "bloodmagic:alchemy_table/anointments", + "extra_recipe_mappings":[["bloodmagic:hidden_knowledge_anointment", 0]], + "pages": [ + { + "type": "crafting_alchemy_table", + "heading": "Miner's Secrets", + "recipe": "bloodmagic:alchemytable/hidden_knowledge_anointment", + "text": "Blocks drop exp on successful harvest. Drops +2exp per block. $(br2)Valid items: Tools, Swords, Charges.$(br2)Applies: Miner's Secrets I (256 blocks)" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/holy_water_anointment.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/holy_water_anointment.json new file mode 100644 index 00000000..17e0bc58 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/holy_water_anointment.json @@ -0,0 +1,14 @@ +{ + "name": "Holy Water", + "icon": "bloodmagic:holy_water_anointment", + "category": "bloodmagic:alchemy_table/anointments", + "extra_recipe_mappings":[["bloodmagic:holy_water_anointment", 0]], + "pages": [ + { + "type": "crafting_alchemy_table", + "heading": "Holy Water", + "recipe": "bloodmagic:alchemytable/holy_water_anointment", + "text": "Temporarily increases the melee damage dealt to undead mobs by +5. $(br2)Valid items: Tools, Swords.$(br2)Applies: Holy Light I (256 hits)" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/looting_anointment.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/looting_anointment.json new file mode 100644 index 00000000..a236c120 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/looting_anointment.json @@ -0,0 +1,14 @@ +{ + "name": "Plunderer's Glint", + "icon": "bloodmagic:looting_anointment", + "category": "bloodmagic:alchemy_table/anointments", + "extra_recipe_mappings":[["bloodmagic:looting_anointment", 0]], + "pages": [ + { + "type": "crafting_alchemy_table", + "heading": "Plunderer's Glint", + "recipe": "bloodmagic:alchemytable/looting_anointment", + "text": "Increases the drops from killed mobs. Also stacks with the Looting enchantment.$(br2)Valid items: Tools, Swords.$(br2)Applies: Plundering I (256 hits)" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/melee_anointment.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/melee_anointment.json new file mode 100644 index 00000000..0f9deec8 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/melee_anointment.json @@ -0,0 +1,14 @@ +{ + "name": "Honing Oil", + "icon": "bloodmagic:melee_anointment", + "category": "bloodmagic:alchemy_table/anointments", + "extra_recipe_mappings":[["bloodmagic:melee_anointment", 0]], + "pages": [ + { + "type": "crafting_alchemy_table", + "heading": "Honing Oil", + "recipe": "bloodmagic:alchemytable/melee_damage_anointment", + "text": "Temporarily increases the melee damage dealt by +3. $(br2)Valid items: Tools, Swords.$(br2)Applies: Whetstone I (256 hits)" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/quick_draw_anointment.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/quick_draw_anointment.json new file mode 100644 index 00000000..7c19afc0 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/quick_draw_anointment.json @@ -0,0 +1,14 @@ +{ + "name": "Dexterity Alkahest", + "icon": "bloodmagic:quick_draw_anointment", + "category": "bloodmagic:alchemy_table/anointments", + "extra_recipe_mappings":[["bloodmagic:quick_draw_anointment", 0]], + "pages": [ + { + "type": "crafting_alchemy_table", + "heading": "Dexterity Alkahest", + "recipe": "bloodmagic:alchemytable/quick_draw_anointment", + "text": "Lowers the draw time of bows and crossbows by 33%. $(br2)Valid items: Bows, Crossbows.$(br2)Applies: Deft Hands I (256 shots)" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/silk_touch_anointment.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/silk_touch_anointment.json new file mode 100644 index 00000000..54fee0d5 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/silk_touch_anointment.json @@ -0,0 +1,14 @@ +{ + "name": "Soft Coating", + "icon": "bloodmagic:silk_touch_anointment", + "category": "bloodmagic:alchemy_table/anointments", + "extra_recipe_mappings":[["bloodmagic:silk_touch_anointment", 0]], + "pages": [ + { + "type": "crafting_alchemy_table", + "heading": "Soft Coating", + "recipe": "bloodmagic:alchemytable/silk_touch_anointment", + "text": "Applies Silk Touch to blocks harvested. Does not stack with the vanilla enchantment.$(br2)Valid items: Tools, Swords, Charges.$(br2)Applies: Soft Touch I (256 blocks)" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/smelting_anointment.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/smelting_anointment.json new file mode 100644 index 00000000..693f0660 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemy_table/anointments/smelting_anointment.json @@ -0,0 +1,14 @@ +{ + "name": "Slow-burning Oil", + "icon": "bloodmagic:smelting_anointment", + "category": "bloodmagic:alchemy_table/anointments", + "extra_recipe_mappings":[["bloodmagic:smelting_anointment", 0]], + "pages": [ + { + "type": "crafting_alchemy_table", + "heading": "Slow-burning Oil", + "recipe": "bloodmagic:alchemytable/smelting_anointment", + "text": "Uses heat to smelt harvested blocks. $(br2)Valid items: Tools, Swords, Charges. $(br2)Applies: Heated Tool I (256 blocks)" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_altar.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_altar.json new file mode 100644 index 00000000..26acc078 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_altar.json @@ -0,0 +1,178 @@ +{ + "name": "The Blood Altar", + "icon": "bloodmagic:altar", + "category": "bloodmagic:altar", + "priority": "true", + "extra_recipe_mappings":[ + ["bloodmagic:daggerofsacrifice", 13] + ], + "pages": [ + { + "type": "text", + "text": "The $(item)Blood Altar$() is the central block of the mod, able to convert raw blood into pure life essence. While it may start off small and insignificant, its strength and size grows throughout the mod, acting as a cornerstone for most of your power." + }, + { + "type": "crafting", + "recipe": "bloodmagic:blood_altar" + }, + { + "type": "text", + "text": "When placed into the world, the Blood Altar converts $(1)Life Essence$() into power to transfigure items placed into it. By right-clicking on the Altar, you may insert one item from your hand into the Altar's internal inventory. Right-clicking with an empty hand will extract the item." + }, + { + "type": "multiblock", + "name": "Tier 1 Blood Altar", + "multiblock":{ + "pattern":[ + ["0"], + ["_"] + ], + "mapping":{ + "0": "bloodmagic:altar" + }, + "symmetrical": true + }, + "text": "The Tier 1 Blood Altar, which has no runes." + }, + { + "type": "text", + "text": "In order for you to add $(1)Life Essence$(), measured as \"LP\", you first have to craft a $(item)Sacrificial Knife$(). By right-clicking in the air with the knife, you can \"extract\" 200LP for the cost of one heart, placing it into a nearby Altar. The Altar starts with a maximum capacity of 10,000LP, and the blood level in the basin indicates the percentage filled. The $(l:bloodmagic:alchemy_array/sigil/divination)Divination Sigil$(/l) allows more detailed information about the Altar." + }, + { + "type": "crafting", + "recipe": "bloodmagic:sacrificial_dagger", + "anchor": "knife", + "text": "Keep in mind that 10% of the total LP the altar can hold will be absorbed into an invisible internal 'tank' used for extracting and inserting Life Essence into the Altar." + }, + { + "type": "text", + "text": "The Blood Altar will attempt to start to craft as soon as an item is placed inside by a player (or after a periodic 5 seconds). The LP inside of the Altar will slowly drain, indicated by red particles, transforming the item. If there is no LP in the Altar, gray smoke will appear to indicate that the Altar is losing progress instead. Once enough LP is consumed (cost multiplied by number in the item stack), the full stack will be transformed into a new item." + }, + { + "type": "text", + "text": "The first item that you will want to craft is a $(l:bloodmagic:altar/soul_network)Weak Blood Orb$(/l), which by default is a diamond plus 2000LP inside of a Tier 1 Blood Altar. All items that can be crafted by the Blood Altar can be found using Just Enough Items (JEI)." + }, + { + "type": "text", + "anchor": "blank_rune", + "text": "To upgrade the Blood Altar, you need to craft $(item)Blood Runes$() and place them around the Altar. Blood Runes act as upgrades to the Altar, and by using more advanced versions of the Blood Runes you can confer different effects on the Altar. The basic version, the $(item)Blank Rune$(), does not give any upgrades barring upgrading the Tier of the Altar." + }, + { + "type": "crafting", + "recipe": "bloodmagic:blood_rune_blank" + }, + { + "type": "text", + "text": "In order to upgrade the Blood Altar to Tier 2, you must place 8 $(item)Blood Runes$() around the Altar. The runes in the cardinals can be upgraded, but the corner runes cannot act as upgrade runes until Tier 3." + }, + { + "type": "multiblock", + "name": "Tier 2 Blood Altar", + "multiblock": { + "pattern":[ + ["___", "_0_", "___"], + ["___", "_A_", "___"], + ["BRB", "R_R", "BRB"] + ], + "mapping":{ + "A": "bloodmagic:altar", + "B": "bloodmagic:blankrune", + "R": "#bloodmagic:altar_components/bloodrune" + }, + "symmetrical": true + }, + "text": "The Tier 2 Blood Altar, which has 8 total runes." + }, + { + "type": "text", + "anchor": "dagger_of_sacrifice", + "text": "Now that you have a Tier 2 Altar, you can look into getting blood from somewhere other than yourself. The $(item)Dagger of Sacrifice$() will allow you to kill any mob (monster or passive) that stands within 2 blocks of your Altar, instantly killing them and granting you a decent sum of LP. You can increase the amount you get per kill with $(l:bloodmagic:altar/blood_rune/sacrifice_rune)Runes of Sacrifice$(). Different entities give different amounts of LP. Check your configs for more info." + }, + { + "type": "crafting_altar", + "heading": "Dagger of Sacrifice", + "recipe": "bloodmagic:altar/daggerofsacrifice", + "text": "Slaughtering villagers for fun and profit!" + }, + { + "type": "text", + "text": "To upgrade the Blood Altar to Tier 3, place 5 $(item)Blood Runes$() one block down and two blocks away from the previous set of runes along each edge. Then place two blocks (indicated by the $(item)Stone Bricks$()) in each corner, starting above the new ring of runes, and then cap each pillar with $(item)Glowstone Blocks$().$(br)To check that it is successfully upgraded, use a $(l:bloodmagic:alchemy_array/sigil/divination)Divination Sigil$(/l) to check the tier. Note that any non-air block can be used for the pillars below the Glowstone." + }, + { + "type": "multiblock", + "name": "Tier 3 Blood Altar", + "multiblock": { + "pattern":[ + ["G_____G", "_______", "_______", "___0___", "_______", "_______", "G_____G"], + ["P_____P", "_______", "_______", "___A___", "_______", "_______", "P_____P"], + ["P_____P", "_______", "__RRR__", "__R_R__", "__RRR__", "_______", "P_____P"], + ["_RRRRR_", "R_____R", "R_____R", "R_____R", "R_____R", "R_____R", "_RRRRR_"] + ], + "mapping":{ + "A": "bloodmagic:altar", + "R": "#bloodmagic:altar_components/bloodrune", + "G": "#bloodmagic:altar_components/glowstone", + "P": "minecraft:stone_bricks" + }, + "symmetrical": true + }, + "text": "The Tier 3 Blood Altar, which has 28 total runes." + }, + { + "type": "text", + "text": "To upgrade the Blood Altar to Tier 4, place 7 $(item) Blood Runes$() one block down and two blocks away from the previous set of runes along each edge. Then place four solid blocks in each corner, starting above the new ring of runes, and then cap each pillar with $(l:bloodmagic:utility/bloodstone_bricks)Bloodstone Bricks$(/l) and/or $(l:bloodmagic:utility/bloodstone_bricks)Large Bloodstone Bricks$(/l)." + }, + { + "type": "multiblock", + "name": "Tier 4 Blood Altar", + "multiblock": { + "pattern":[ + ["B_________B", "___________", "___________", "___________", "___________", "___________", "___________", "___________", "___________", "___________", "B_________B"], + ["P_________P", "___________", "__G_____G__", "___________", "___________", "_____0_____", "___________", "___________", "__G_____G__", "___________", "P_________P"], + ["P_________P", "___________", "__P_____P__", "___________", "___________", "_____A_____", "___________", "___________", "__P_____P__", "___________", "P_________P"], + ["P_________P", "___________", "__P_____P__", "___________", "____RRR____", "____R_R____", "____RRR____", "___________", "__P_____P__", "___________", "P_________P"], + ["P_________P", "___________", "___RRRRR___", "__R_____R__", "__R_____R__", "__R_____R__", "__R_____R__", "__R_____R__", "___RRRRR___", "___________", "P_________P"], + ["__RRRRRRR__", "___________", "R_________R", "R_________R", "R_________R", "R_________R", "R_________R", "R_________R", "R_________R", "___________", "__RRRRRRR__"] + ], + "mapping":{ + "A": "bloodmagic:altar", + "R": "#bloodmagic:altar_components/bloodrune", + "B": "#bloodmagic:altar_components/bloodstone", + "G": "#bloodmagic:altar_components/glowstone", + "P": "minecraft:stone_bricks" + }, + "symmetrical": true + }, + "text": "The Tier 4 Blood Altar, which has 56 total runes." + }, + { + "type": "text", + "text": "[WIP Notes]$(br)[Tier-5 has No Content yet!]" + }, + { + "type": "multiblock", + "name": "Tier 5 Blood Altar", + "multiblock": { + "pattern":[ + ["_________________", "_________________", "_________________", "___B_________B___", "_________________", "_________________", "_________________", "_________________", "_________________", "_________________", "_________________", "_________________", "_________________", "___B_________B___", "_________________", "_________________", "_________________"], + ["_________________", "_________________", "_________________", "___P_________P___", "_________________", "_____G_____G_____", "_________________", "_________________", "________0________", "_________________", "_________________", "_____G_____G_____", "_________________", "___P_________P___", "_________________", "_________________", "_________________"], + ["_________________", "_________________", "_________________", "___P_________P___", "_________________", "_____P_____P_____", "_________________", "_________________", "________A________", "_________________", "_________________", "_____P_____P_____", "_________________", "___P_________P___", "_________________", "_________________", "_________________"], + ["_________________", "_________________", "_________________", "___P_________P___", "_________________", "_____P_____P_____", "_________________", "_______RRR_______", "_______R_R_______", "_______RRR_______", "_________________", "_____P_____P_____", "_________________", "___P_________P___", "_________________", "_________________", "_________________"], + ["_________________", "_________________", "_________________", "___P_________P___", "_________________", "______RRRRR______", "_____R_____R_____", "_____R_____R_____", "_____R_____R_____", "_____R_____R_____", "_____R_____R_____", "______RRRRR______", "_________________", "___P_________P___", "_________________", "_________________", "_________________"], + ["N_______________N", "_________________", "_________________", "_____RRRRRRR_____", "_________________", "___R_________R___", "___R_________R___", "___R_________R___", "___R_________R___", "___R_________R___", "___R_________R___", "___R_________R___", "_________________", "_____RRRRRRR_____", "_________________", "_________________", "N_______________N"], + ["__RRRRRRRRRRRRR__", "_________________", "R_______________R", "R_______________R", "R_______________R", "R_______________R", "R_______________R", "R_______________R", "R_______________R", "R_______________R", "R_______________R", "R_______________R", "R_______________R", "R_______________R", "R_______________R", "_________________", "__RRRRRRRRRRRRR__"] + ], + "mapping":{ + "A": "bloodmagic:altar", + "R": "#bloodmagic:altar_components/bloodrune", + "B": "#bloodmagic:altar_components/bloodstone", + "G": "#bloodmagic:altar_components/glowstone", + "N": "#bloodmagic:altar_components/beacon", + "P": "minecraft:stone_bricks" + }, + "symmetrical": true + }, + "text": "The Tier 5 Blood Altar, which has 108 total runes." + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/acceleration_rune.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/acceleration_rune.json new file mode 100644 index 00000000..14048e61 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/acceleration_rune.json @@ -0,0 +1,15 @@ +{ + "name": "Acceleration Rune", + "icon": "bloodmagic:accelerationrune", + "category": "bloodmagic:altar/blood_rune", + "pages": [ + { + "type": "text", + "text": "The $(item)Acceleration Rune$() increases the rate of a couple operations. While normally the operations of the $(l:bloodmagic:altar/blood_rune/charging_rune)Charging Rune$(/l) and $(l:bloodmagic:altar/blood_rune/dislocation_rune)Displacement Rune$(/l) occur every 20 ticks, one tick of the delay is removed per rune, down to a minimum of 1 operation per tick." + }, + { + "type": "crafting", + "recipe": "bloodmagic:blood_rune_acceleration" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/aug_capacity_rune.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/aug_capacity_rune.json new file mode 100644 index 00000000..2ff083b0 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/aug_capacity_rune.json @@ -0,0 +1,16 @@ +{ + "name": "Rune of Aug. Capacity", + "icon": "bloodmagic:bettercapacityrune", + "category": "bloodmagic:altar/blood_rune", + "pages": [ + { + "type": "text", + "text": "The $(item)Rune of Augmented Capacity$() increases the capacity of the $(l:bloodmagic:altar/blood_altar)Blood Altar$(/l) by a multiplicative +7.5% per rune. The Augmented Capacity runes apply $(o)after$() the regular $(l:bloodmagic:altar/blood_rune/capacity_rune)Capacity runes$()." + }, + { + "type": "crafting", + "title": "Rune of Aug. Capacity", + "recipe": "bloodmagic:blood_rune_aug_capacity" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/capacity_rune.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/capacity_rune.json new file mode 100644 index 00000000..93ca32cd --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/capacity_rune.json @@ -0,0 +1,15 @@ +{ + "name": "Rune of Capacity", + "icon": "bloodmagic:altarcapacityrune", + "category": "bloodmagic:altar/blood_rune", + "pages": [ + { + "type": "text", + "text": "The $(item)Rune of Capacity$() increases the capacity of the $(l:bloodmagic:altar/blood_altar)Blood Altar$(/l) by an additive +20% per rune." + }, + { + "type": "crafting", + "recipe": "bloodmagic:blood_rune_capacity" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/charging_rune.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/charging_rune.json new file mode 100644 index 00000000..f9a77e09 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/charging_rune.json @@ -0,0 +1,19 @@ +{ + "name": "Charging Rune", + "icon": "bloodmagic:chargingrune", + "category": "bloodmagic:altar/blood_rune", + "pages": [ + { + "type": "text", + "text": "The $(item)Charging Rune$() is a unique Rune upgrade. When the $(l:bloodmagic:altar/blood_altar)Blood Altar$() is not crafting nor filling a $(l:bloodmagic:altar/soul_network)Blood Orb$(), it will syphon LP to charge an internal buffer. When next an item is placed inside of the Blood Altar, it will instantaneously consume the stored charge and apply it to the crafting of the item at a 1:1 ratio." + }, + { + "type": "text", + "text": " The Blood Altar does a charging tick once per 20 in-game ticks, which is reduced by 1 per $(l:bloodmagic:altar/blood_rune/acceleration_rune)Acceleration Rune.$(/l)$(br) The speed that the Blood Altar charges at per charging tick is: [10LP x $(l:bloodmagic:altar/blood_rune/charging_rune)Charging Runes$() x (1 + $(l:bloodmagic:altar/blood_rune/speed_rune)Speed Runes$()/10)] $(br)The maximum charge that a Blood Altar can hold is 1000LP per $(item)Charging Rune$(), which is then multiplied by: [(capacity of the main Blood Altar tank)/20000] if that value is above 1." + }, + { + "type": "crafting", + "recipe": "bloodmagic:blood_rune_charging" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/dislocation_rune.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/dislocation_rune.json new file mode 100644 index 00000000..d6b5a64b --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/dislocation_rune.json @@ -0,0 +1,15 @@ +{ + "name": "Displacement Rune", + "icon": "bloodmagic:dislocationrune", + "category": "bloodmagic:altar/blood_rune", + "pages": [ + { + "type": "text", + "text": "The $(item)Displacement Rune$() increases the flowrate of LP into and out of the altar." + }, + { + "type": "crafting", + "recipe": "bloodmagic:blood_rune_displacement" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/orb_rune.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/orb_rune.json new file mode 100644 index 00000000..c936f70b --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/orb_rune.json @@ -0,0 +1,15 @@ +{ + "name": "Rune of The Orb", + "icon": "bloodmagic:orbcapacityrune", + "category": "bloodmagic:altar/blood_rune", + "pages": [ + { + "type": "text", + "text": "The $(item)Rune of The Orb$() increases the capacity of the $(item)Blood Orb$() that is inside of the Altar by +2% additively per rune while it is inside of the Altar." + }, + { + "type": "crafting", + "recipe": "bloodmagic:blood_rune_orb" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/sacrifice_rune.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/sacrifice_rune.json new file mode 100644 index 00000000..56fbbd23 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/sacrifice_rune.json @@ -0,0 +1,15 @@ +{ + "name": "Rune of Sacrifice", + "icon": "bloodmagic:sacrificerune", + "category": "bloodmagic:altar/blood_rune", + "pages": [ + { + "type": "text", + "text": "The $(item)Rune of Sacrifice$() increases the LP gained in the Blood Altar through means that take health from non-player entities. Each rune gives a bonus of +10% additively per rune." + }, + { + "type": "crafting", + "recipe": "bloodmagic:blood_rune_sacrifice" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/self_sacrifice_rune.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/self_sacrifice_rune.json new file mode 100644 index 00000000..190204a9 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/self_sacrifice_rune.json @@ -0,0 +1,15 @@ +{ + "name": "Rune of Self Sacrifice", + "icon": "bloodmagic:selfsacrificerune", + "category": "bloodmagic:altar/blood_rune", + "pages": [ + { + "type": "text", + "text": "The $(item)Rune of Self Sacrifice$() increases the LP gained in the Blood Altar through means that use a player's health. Each rune gives a bonus of +10% additively per rune." + }, + { + "type": "crafting", + "recipe": "bloodmagic:blood_rune_self_sacrifice" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/speed_rune.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/speed_rune.json new file mode 100644 index 00000000..6bf4192b --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/blood_rune/speed_rune.json @@ -0,0 +1,15 @@ +{ + "name": "Speed Rune", + "icon": "bloodmagic:speedrune", + "category": "bloodmagic:altar/blood_rune", + "pages": [ + { + "type": "text", + "text": "The $(item)Speed Rune$() increases all of the crafting operations of the Blood Altar. The crafting speed (and speed that the progress is lost when empty) increases by an additive +20% per rune." + }, + { + "type": "crafting", + "recipe": "bloodmagic:blood_rune_speed" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/redstone_automation.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/redstone_automation.json new file mode 100644 index 00000000..8e9c5be0 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/redstone_automation.json @@ -0,0 +1,31 @@ +{ + "name": "Redstone and Automation", + "icon": "minecraft:redstone", + "category": "bloodmagic:altar", + "pages": [ + { + "type": "text", + "text": "The $(l:bloodmagic:altar/blood_altar)Blood Altar$() is a fantastic tool, but standing around and waiting for slates to craft is not your idea of a good time. Luckily, items and LP can be automatically piped in and out of the altar, albeit with a few caveats. $(br2)While a simple $(item)Hopper$() lets you pipe items in, the Altar won't stop it from inputting more than 1 at a time. It will happily craft 64 slates in one" + }, + { + "type": "text", + "text": "go, consuming 64 times as much LP as usual to do so - but if you can't supply said LP fast enough, you're going to run into trouble. $(br2)Additionally, the altar makes no distinction between input and output, so without some sort of filter, items will be pulled in and out as fast as your item transfer system can handle. Perhaps a look at the Routing Nodes will be helpful... (once they're implemented, that is.)" + }, + { + "type": "text", + "text": "The altar also supports the transfer of blood, both to and from an external tank. Simply hook up your fluid pipe of choice and you can store excess blood for later crafts. $(br2)Note that the transfer speed is very slow by default. If you want to speed it up, you'd best look into $(l:bloodmagic:altar/blood_rune/acceleration_rune)Acceleration Runes$() and $(l:bloodmagic:altar/blood_rune/dislocation_rune)Displacement Runes$()." + }, + { + "type": "text", + "text": "Don't forget that this blood isn't taken directly from the altar itself, but rather from a second, secret internal tank. This tank can hold up to 10% of the blood that the altar itself can, so if the numbers don't appear to be adding up exactly right, or if blood appears to be vanishing from your altar, this is probably where it's going. The same limitations apply to blood being piped in." + }, + { + "type": "text", + "text": "(Also not implemented:) $(strike)The blood altar's LP value can be read via a comparator on the side, similar to a vanilla chest. $(br2)If you place a $(item)Bloodstone Brick$()$(strike) underneath the altar, the comparator will instead read the value of the $(l:bloodmagic:altar/soul_network)Soul Network$(/l) of the owner of any orb that is placed into the Altar. $(br2)The signal strength depends on the size of the orb in the altar, not the maximum LP of the network, so if you have" + }, + { + "type": "text", + "text": "$(strike)500,000 LP, a Weak Blood Orb would show as completely full, but a Master Blood Orb would show as only half full. This can be used to, for example, deactivate certain rituals when you are running low on LP, to ensure you don't run out. $(br2)Lastly, placing a $(item)Redstone Lamp$()$(strike) underneath the altar will make it output a redstone signal upon finishing a crafting operation. With a bit of cunning, this should allow you to fully automate the production of slates." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/slates.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/slates.json new file mode 100644 index 00000000..65b6b3d1 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/slates.json @@ -0,0 +1,33 @@ +{ + "name": "Tiers of Slates", + "icon": "bloodmagic:blankslate", + "category": "bloodmagic:altar", + "extra_recipe_mappings":[ + ["bloodmagic:blankslate", 1], + ["bloodmagic:reinforcedslate", 1], + ["bloodmagic:infusedslate", 2], + ["bloodmagic:demonslate", 2] + ], + "pages": [ + { + "type": "text", + "text": "The $(l:bloodmagic:altar/blood_altar)Blood Altar$(/l)'s main use is the production of $(item)Slates$(). Each tier of slate requires the previous tier and a more powerful altar than the last. $(br2)Note that $(item)Etherial Slates$() aren't currently implemented by default, but may be if you're playing in a modpack. Check JEI for details." + }, + { + "type": "2x_crafting_altar", + "a.heading": "Blank Slate", + "a.recipe": "bloodmagic:altar/slate", + "b.heading": "Reinforced Slate", + "b.recipe": "bloodmagic:altar/reinforcedslate" + }, + { + "type": "2x_crafting_altar", + "a.heading": "Imbued Slate", + "a.recipe": "bloodmagic:altar/imbuedslate", + "b.heading": "Demonic Slate", + "b.recipe": "bloodmagic:altar/demonicslate" + } + ] +} + + diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/soul_network.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/soul_network.json new file mode 100644 index 00000000..ae6945fe --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/soul_network.json @@ -0,0 +1,39 @@ +{ + "name": "Soul Network", + "icon": "bloodmagic:weakbloodorb", + "category": "bloodmagic:altar", + "extra_recipe_mappings":[ + ["bloodmagic:weakbloodorb", 3], + ["bloodmagic:apprenticebloodorb", 3], + ["bloodmagic:magicianbloodorb", 4], + ["bloodmagic:masterbloodorb", 4] + ], + "pages": [ + { + "type": "text", + "text": "The Soul Network is the network that connects the user's soul to all of their bound items and blocks. Functionally, it is a global storage of LP unique to each player that can be added to and extracted from, using the player's bound items as an itermediary. When a player first uses an item that can be bound to a Soul Network, it will bind to the player and will be labeled as being" + }, + { + "type": "text", + "text": "\"owned\" by that player - any action that the item does that has an LP cost will drain from the owner's Soul Network. In some cases, if the item cannot get its LP from the Soul Network, it will instead directly take the LP from the user's health.$(br2) In order to fill the user's Soul Network the user will need to construct a $(item)Blood Orb$(). Blood orbs suck up LP from either the user when they are right-clicked at a 1 heart:200LP ratio, or by a bound orb" + }, + { + "type": "text", + "text": "being placed inside of a $(l:bloodmagic:altar/blood_altar)Blood Altar$(/l) with LP.$(br2) There is a separate Blood Orb that can be created for each Tier of the Blood Altar:$(li)$(item)Weak Blood Orb$(), Max capacity: 5k LP.$(li)$(item)Apprentice Blood Orb$(), Max capacity: 25k LP. $(li)$(item)Magician Blood Orb$(), Max capacity: 150k LP.$(li)$(item)Master Blood Orb$(), Max capacity: 1M LP." + }, + { + "type": "2x_crafting_altar", + "a.heading": "Weak Blood Orb", + "a.recipe": "bloodmagic:altar/weakbloodorb", + "b.heading": "Apprentice Blood Orb", + "b.recipe": "bloodmagic:altar/apprenticebloodorb" + }, + { + "type": "2x_crafting_altar", + "a.heading": "Magician Blood Orb", + "a.recipe": "bloodmagic:altar/magicianbloodorb", + "b.heading": "Master Blood Orb", + "b.recipe": "bloodmagic:altar/masterbloodorb" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/aspected_will.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/aspected_will.json new file mode 100644 index 00000000..d61578b6 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/aspected_will.json @@ -0,0 +1,54 @@ +{ + "name": "Demon Will Aspects", + "icon": "bloodmagic:vengefulcrystal", + "category": "bloodmagic:demon_will", + "extra_recipe_mappings":[ + ["bloodmagic:steadfastdemoncrystal", 2], + ["bloodmagic:corrosivedemoncrystal", 2], + ["bloodmagic:destructivedemoncrystal", 2], + ["bloodmagic:vengefuldemoncrystal", 2], + ["bloodmagic:steadfastcrystal", 2], + ["bloodmagic:corrosivecrystal", 2], + ["bloodmagic:destructivecrystal", 2], + ["bloodmagic:vengefulcrystal", 2], + ["bloodmagic:basemonstersoul_vengeful", 2], + ["bloodmagic:basemonstersoul_corrosive", 2], + ["bloodmagic:basemonstersoul_steadfast", 2], + ["bloodmagic:basemonstersoul_destructive", 2] + ], + "pages": [ + { + "type": "text", + "text": "Unleashing $(l:bloodmagic:demon_will/demon_will)Demon Will$() into the atmosphere was definitely an excellent idea. Not only has it proven most useful in empowering $(item)Rituals$(), you have also successfully condensed it into a $(l:bloodmagic:demon_will/crystallized_will)Crystal Cluster$(), and are wondering what to turn your eye to next. $(br2)These $(item)Crystals$() feel somehow... conflicted, to you. A certain $(l:bloodmagic:rituals/ritual_list/ritual_crystal_split)Ritual$() may help coax them out into purer forms..." + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/demon_will/will_splitting.png" + ], + "title": "Aspects of Will", + "border": true, + "text": "The $(l:bloodmagic:rituals/ritual_list/ritual_crystal_split)Resonance of the Faceted Crystal$() ritual in action." + }, + { + "type": "text", + "text": "Now we have $(item)Crystallized Will$() in four spicy new flavours! on the $(water)Water Rune$() we have $(steadfast)Steadfast Will$(), on the $(air)Air Rune$() we get $(destructive)Destructive Will$(), on the $(fire)Fire Rune$() comes $(vengeful)Vengeful Will$() and on the $(earth)Earth Rune$() we find $(corrosive)Corrosive Will.$() $(br2)These various new types of Will can be burned in the $(item)Demon Crucible$() just like Raw Will, and from there can be fed into various Rituals to great and fascinating effect." + }, + { + "type": "text", + "text": "However, they also change how your Sentient Tools behave, making them more powerful.$(br) $(li)$(raw)Raw Will$(): Increases damage and attack speed. $(corrosive)$(li)Corrosive Will$(): Attacks have a chance to apply poison or wither to your foes, otherwise same as $(raw)Raw$(). $(vengeful)$(li)Vengeful Will$(): increases damage, but not as much as $(raw)Raw$(). Increases attack speed more than any other type. Gives a movement speed buff that increases with higher amounts of Will." + }, + { + "type": "text", + "text": "$(steadfast)$(li)Steadfast Will$(): Increases damage (but not as much as $(raw)Raw$()) and grants Absorption after a kill. $(destructive)$(li)Destructive Will$(): Increases damage more than any other will type, but increases attack speed more slowly than any other type. Top Tier is still faster than an unempowered tool / equivalent iron tool, but slower than any other will type." + }, + { + "type": "text", + "text": "You may be wondering: \"How on earth do I get this will into a usable form?\" Well, the answer is simple. Just place an EMPTY $(l:bloodmagic:demon_will/soul_gem)Tartaric Gem$() into a $(l:bloodmagic:demon_will/soul_forge)Hellfire Forge$() in the same chunk as a $(item)Demon Crucible$(), then feed the Demon Crucible with Will Crystals of the desired aspect. Your $(l:bloodmagic:demon_will/soul_gem)Tartaric Gem$() will fill with that aspect of will. You can change which kind of will your $(raw)Sentient Tools$() use by right-clicking while holding them." + }, + { + "type": "text", + "text": "Note that your $(raw)Sentient Tools$() will take on the aspect of the largest amount of $(raw)Will$() in your inventory. If you're carrying 10 $(corrosive)Corrosive Will$() in one $(l:bloodmagic:demon_will/soul_gem)Tartaric Gem$(), and 1,000 $(raw)Raw Will$() in another, then your sword will remain $(raw)Raw$()." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/crystallized_will.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/crystallized_will.json new file mode 100644 index 00000000..6bc4ef7e --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/crystallized_will.json @@ -0,0 +1,57 @@ +{ + "name": "Crystallized Will", + "icon": "bloodmagic:defaultcrystal", + "category": "bloodmagic:demon_will", + "extra_recipe_mappings":[ + ["bloodmagic:demoncrucible", 1], + ["bloodmagic:demoncrystallizer", 4], + ["bloodmagic:rawdemoncrystal", 4], + ["bloodmagic:defaultcrystal", 4] + ], + "pages": [ + { + "type": "text", + "text": "Now that you have plenty of $(l:bloodmagic:demon_will/demon_will)Demon Will$() in your $(l:bloodmagic:demon_will/soul_gem)Tartaric Gem$(), it's time to explore what happens when you unleash it upon the world. $(br)First off, you'll need to create a $(item)Demon Crucible$(), and then fill it with $(l:bloodmagic:demon_will/demon_will)Demon Will$()." + }, + { + "type": "crafting_soulforge", + "heading": "Demon Crucible", + "recipe": "bloodmagic:soulforge/demon_crucible", + "text": "This will burn $(l:bloodmagic:demon_will/demon_will)Demon Will$() and release it into the atmosphere. Put a charged $(l:bloodmagic:demon_will/soul_gem)Tartaric Gem$() or any aspect of $(item)Demon Crystal$() into it and let it run." + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/demon_will/demon_crucible.png" + ], + "title": "Demon Crucible", + "border": true, + "text": "The $(item)Demon Crucible$(), with a $(l:bloodmagic:demon_will/soul_gem)Tartaric Gem$() inside it." + }, + { + "type": "text", + "text": "Now we have $(raw)Raw Will$() in the atmosphere. Great, now what? $(br2)Some $(l:bloodmagic:rituals/ritual_tinkerer)Rituals$() benefit from $(raw)Raw Will$(), but the main benefit from this is the ability to create $(item)Demon Will Crystals$() and from there, split them into their $(l:bloodmagic:demon_will/aspected_will)Aspects$(). $(br2)Once you have some of these Aspected Will Crystals, you can burn them in the crucible to unleash them into the atmosphere for your rituals to benefit from." + }, + { + "type": "crafting_soulforge", + "heading": "Demon Crystallizer", + "recipe": "bloodmagic:soulforge/demon_crystallizer", + "text": "This will slowly consume $(l:bloodmagic:demon_will/demon_will)Demon Will$() from the atmosphere to produce $(item)Will Crystals$(). The first spire costs about 100 will to form, and all subsequent spires cost 40 each, but can be burned for 50 in the $(item)Demon Crucible$(). The largest $(item)Crystal Cluster$() can be up to 7 spires." + }, + { + "type": "text", + "text": "If you have at least 1,000 total Will in your inventory (Across any number of $(l:bloodmagic:demon_will/soul_gem)Tartaric Gems$()), you can harvest these crystals by right-clicking the spire with an empty hand. This will remove all but the central spire. $(br2)However, if you have not got this much will, $(italic)really$() need that central spire, or are just in a hurry, you can harvest the whole lot with a pickaxe." + }, + { + "type": "relations", + "title": "Related Links", + "entries": [ + "rituals/ritual_tinkerer", + "rituals/rituals_list/ritual_crystal_split", + "rituals/rituals_list/ritual_crystal_harvest", + "demon_will/aspected_will" + ], + "text": "There's more I can do, I can feel it..." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/demon_will.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/demon_will.json new file mode 100644 index 00000000..053561f4 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/demon_will.json @@ -0,0 +1,26 @@ +{ + "name": "Demon Will", + "icon": "bloodmagic:basemonstersoul", + "category": "bloodmagic:demon_will", + "extra_recipe_mappings":[["bloodmagic:basemonstersoul", 0]], + "pages": [ + { + "type": "text", + "text": "Once you have a $(l:bloodmagic:altar/blood_altar)Blood Altar$(), you'll need to gather a few $(item)Demon Wills$(). There are two ways to get Demon Will:$(br)$(li)Killing a mob that has been hit with a $(l:bloodmagic:demon_will/soul_snare)Soul Snare$(/l) and is killed when white particle effects appear.$(li)By killing a hostile mob with a $(l:bloodmagic:demon_will/sentient_sword)Sentient Sword$().$(br)Since you are just beginning to use the mod, you will not yet have a $(l:bloodmagic:demon_will/sentient_sword)Sentient Sword$()," + }, + { + "type": "text", + "text": "and thus will need to use a $(l:bloodmagic:demon_will/soul_snare)Soul Snare$(). $(br2)$(item)Demon Will$() is a recurring resource in $(6)Blood Magic$(), and is used to power the $(l:bloodmagic:demon_will/soul_forge)Hellfire Forge$(). $(br2)In the lore of $(6)Blood Magic$(), $(raw)Demon Will$() is the residual effect of when a demon imbues its will into the bodies of the dead." + }, + { + "type": "image", + "images": ["bloodmagic:images/entries/demon_will/demon_will.png"], + "title": "Demon Will", + "border": true + }, + { + "type": "text", + "text": "Once you have some $(raw)Will$(), you can use it to craft useful tools in the $(l:bloodmagic:demon_will/soul_forge)Hellfire Forge,$(). If you find them cluttering up your inventory, perhaps a $(l:bloodmagic:demon_will/soul_gem)Tartaric Gem$() may help." + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/explosive_charges.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/explosive_charges.json new file mode 100644 index 00000000..f99d722b --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/explosive_charges.json @@ -0,0 +1,85 @@ +{ + "name": "Explosive Charges", + "icon": "bloodmagic:shaped_charge", + "category": "bloodmagic:demon_will", + "extra_recipe_mappings":[ + ["bloodmagic:shaped_charge", 2], + ["bloodmagic:deforester_charge", 4], + ["bloodmagic:vein_charge", 6], + ["bloodmagic:fungal_charge", 8] + ], + "pages":[ + { + "type": "text", + "text": "Mining and foresting is all well and good for those who refuse to dream big, but what self-respecting sanguimancer would ever stoop to that? $(br2)With this in mind, you have devised some devious little devices. Simply throw them at some pesky trees, rocks, or whatever else you wish to cease to be and wait for them to self-ignite." + }, + { + "type": "text", + "text": "Not only that, you can improve their functionality by $(item)Anointing$() them with certain ingredients and a little $(raw)Will$(), as described after each entry. $(br2)The currently avaliable anointments are as follows: $(li)Fortunate - broken blocks are affected by $(item)Fortune I$(). $(li)Heated Tool - Broken blocks are $(item)Smelted$(). $(li)Soft Touch - Broken blocks are affected by $(item)Silk Touch$()." + }, + { + "type": "crafting_soulforge", + "heading": "Shaped Charge", + "recipe": "bloodmagic:soulforge/shaped_charge", + "anchor":"shaped_charge", + "text": "The $(item)Shaped Charge$() will destroy a 5x5x5 cube facing whichever side of a block it lands on, dropping all blocks as though mined with a pickaxe. It even works on Obsidian, and provides a most satisfying $(o)KABOOM$() whilst doing so." + }, + { + "type": "3x_crafting_soulforge", + "a.heading": "Fortunate", + "a.recipe": "bloodmagic:soulforge/shaped_charge_fortune_1", + "b.heading": "Heated Tool", + "b.recipe": "bloodmagic:soulforge/shaped_charge_smelting", + "c.heading": "Soft Touch", + "c.recipe": "bloodmagic:soulforge/shaped_charge_silk_touch" + }, + { + "type": "crafting_soulforge", + "heading": "Deforester Charge", + "recipe": "bloodmagic:soulforge/deforester_charge", + "anchor":"deforester_charge", + "text": "The $(item)Deforester Charge$() is for felling trees. It can be used on logs or leaves, and will fell all but the mightiest of trees, breaking up to $(item)two stacks$() of logs at a time (and neatly stripping away any leaves it encounters in the process!) Even the giant trees of the Jungle will fall in a matter of seconds." + }, + { + "type": "3x_crafting_soulforge", + "a.heading": "Fortunate", + "a.recipe": "bloodmagic:soulforge/deforester_charge_fortune_1", + "b.heading": "Heated Tool", + "b.recipe": "bloodmagic:soulforge/deforester_charge_smelting", + "c.heading": "Soft Touch", + "c.recipe": "bloodmagic:soulforge/deforester_charge_silk_touch" + }, + { + "type": "crafting_soulforge", + "heading": "Controlled Charge", + "recipe": "bloodmagic:soulforge/vein_charge", + "anchor":"controlled_charge", + "text": "The $(item)Controlled Charge$(), only destroys blocks $(underline)identical to the block it lands on$(). It will destroy up to $(item)Three stacks$() of blocks, seeking out from the original point. As with other charges, all mined blocks will be dropped." + }, + { + "type": "3x_crafting_soulforge", + "a.heading": "Fortunate", + "a.recipe": "bloodmagic:soulforge/vein_charge_fortune_1", + "b.heading": "Heated Tool", + "b.recipe": "bloodmagic:soulforge/vein_charge_smelting", + "c.heading": "Soft Touch", + "c.recipe": "bloodmagic:soulforge/vein_charge_silk_touch" + }, + { + "type": "crafting_soulforge", + "heading": "Fungal Charge", + "recipe": "bloodmagic:soulforge/fungal_charge", + "anchor":"fungal_charge", + "text": "The $(item)Fungal Charge$() is for felling giant mushrooms, both in the Overworld and the Nether. Although doubtful that you will ever reach this in a single charge, it can break up to $(item)three stacks of blocks$()." + }, + { + "type": "3x_crafting_soulforge", + "a.heading": "Fortunate", + "a.recipe": "bloodmagic:soulforge/fungal_charge_fortune_1", + "b.heading": "Heated Tool", + "b.recipe": "bloodmagic:soulforge/fungal_charge_smelting", + "c.heading": "Soft Touch", + "c.recipe": "bloodmagic:soulforge/fungal_charge_silk_touch" + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/sentient_sword.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/sentient_sword.json new file mode 100644 index 00000000..00058e13 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/sentient_sword.json @@ -0,0 +1,18 @@ +{ + "name": "Sentient Sword", + "icon": "bloodmagic:soulsword", + "category": "bloodmagic:demon_will", + "extra_recipe_mappings":[["bloodmagic:soulsword", 1]], + "pages": [ + { + "type": "text", + "text": "The $(item)Sentient Sword$() is a much more effective tool for collecting $(l:bloodmagic:demon_will/demon_will)Demon Will$() than $(l:bloodmagic:demon_will/soul_snare)Soul Snares$() could ever hope to be. It may seem weak at first, but it is powered by the Wills you carry, so crafting a $(l:bloodmagic:demon_will/soul_gem)Tartaric Gem$() is a must. $(br2) Note that the sword, as with all $(l:bloodmagic:demon_will/sentient_tools)Sentient Tools$(), can be repaired with $(l:bloodmagic:demon_will/crystallized_will)Crystallized Will$() in an Anvil." + }, + { + "type": "crafting_soulforge", + "heading": "Sentient Sword", + "recipe": "bloodmagic:soulforge/sentientsword", + "text": "This sword will serve you well." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/sentient_tools.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/sentient_tools.json new file mode 100644 index 00000000..f8e80fd2 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/sentient_tools.json @@ -0,0 +1,53 @@ +{ + "name": "Sentient Tools", + "icon": "bloodmagic:soulpickaxe", + "category": "bloodmagic:demon_will", + "extra_recipe_mappings":[ + ["bloodmagic:soulpickaxe", 1], + ["bloodmagic:soulscythe", 3], + ["bloodmagic:soulaxe", 5], + ["bloodmagic:soulshovel", 7] + ], + "pages": [ + { + "type": "text", + "text": "The $(l:bloodmagic:demon_will/sentient_sword)Sentient Sword$() has proven to be a resounding success. You find yourself wondering how other tools may react to a similar treatment... $(br2) Note that these tools, as with the $(l:bloodmagic:demon_will/sentient_sword)Sentient sword$(), can be repaired with $(l:bloodmagic:demon_will/crystallized_will)Crystallized Will$() in an Anvil." + }, + { + "type": "crafting_soulforge", + "heading": "Sentient Pickaxe", + "recipe": "bloodmagic:soulforge/sentientpickaxe", + "text": "This pickaxe improves with Will, cutting through stone with ease. With no Will to power it, it is only slightly better than the $(item)Iron Pickaxe$() it was crafted from; However, with a full enough $(l:bloodmagic:demon_will/soul_gem)Tartaric Gem$(), you forsee it surpassing even a $(item)Netherite Pickaxe$()." + }, + { + "type": "text", + "text": "The $(item)Sentient Scythe$() is a slightly different tool to its iron counterpart. Infusing it with will has transmuted it into a fearsone weapon. While slow and not as powerful as the other weapons, its great swings will damage all enemies in its range, making it an excellent choice for crowd control." + }, + { + "type": "crafting_soulforge", + "heading": "Sentient Scythe", + "recipe": "bloodmagic:soulforge/sentientscythe", + "text": "As with the pickaxe, with no Will to power your scythe, it is comparatively blunt and unwieldy; However, with a full enough $(l:bloodmagic:demon_will/soul_gem)Tartaric Gem$(), you forsee it becoming a devestating tool. $(br)Did we mention that it still functions as a hoe?" + }, + { + "type": "text", + "text": "Much like the $(item)Sentient Pickaxe$(), the $(item)Sentient Axe$() is a noticable improvement over its Iron counterpart. Additionally, it gets a noticable buff in its damage output, making it a fearsome weapon for those who don't mind its unwieldy nature." + }, + { + "type": "crafting_soulforge", + "heading": "Sentient Axe", + "recipe": "bloodmagic:soulforge/sentientaxe", + "text": "As with the pickaxe, with no Will to power your axe, it is only slightly better than the $(item)Iron Axe$() it was crafted from; However, with a full enough $(l:bloodmagic:demon_will/soul_gem)Tartaric Gem$(), you forsee it surpassing even a $(item)Netherite Axe$()." + }, + { + "type": "text", + "text": "Much like the $(item)Sentient Pickaxe$(), the $(item)Sentient Shovel$() is a noticable improvement over its Iron counterpart, even without additional $(l:bloodmagic:demon_will/demon_will)Demon Will$() to power it." + }, + { + "type": "crafting_soulforge", + "heading": "Sentient Shovel", + "recipe": "bloodmagic:soulforge/sentientshovel", + "text": "As with the pickaxe, with no Will to power your shovel, it is only slightly better than the $(item)Iron shovel$() it was crafted from; However, with a full enough $(l:bloodmagic:demon_will/soul_gem)Tartaric Gem$(), you forsee it surpassing even a $(item)Netherite Shovel$()." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/soul_forge.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/soul_forge.json new file mode 100644 index 00000000..0f14fd5a --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/soul_forge.json @@ -0,0 +1,15 @@ +{ + "name": "Hellfire Forge", + "icon": "bloodmagic:soulforge", + "category": "bloodmagic:demon_will", + "pages": [ + { + "type": "text", + "text": "The $(item)Hellfire Forge$() is one of the core crafting mechanics of $(6)Blood Magic$(), alongside the $(l:bloodmagic:altar/blood_altar)Blood Altar$(/l) itself. Here, you can work with the $(l:bloodmagic:demon_will/demon_will)Demon Will$() you have harvested from mobs, to allow you to create $(l:bloodmagic:demon_will/sentient_tools)Sentient Tools$(), including the $(l:bloodmagic:demon_will/sentient_sword)Sentient Sword$(), $(l:bloodmagic:demon_will/soul_gem)Tartaric Gems$(), various $(item)reagents$(), $(l:bloodmagic:alchemy_array/functional_arrays/arcane_ash)Arcane Ash$(), and many things besides." + }, + { + "type": "crafting", + "recipe": "bloodmagic:soul_forge" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/soul_gem.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/soul_gem.json new file mode 100644 index 00000000..b39397ab --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/soul_gem.json @@ -0,0 +1,53 @@ +{ + "name": "Tartaric Gems", + "icon": "bloodmagic:soulgemgreater", + "category": "bloodmagic:demon_will", + "extra_recipe_mappings":[ + ["bloodmagic:soulgempetty", 1], + ["bloodmagic:soulgemlesser", 3], + ["bloodmagic:soulgemcommon", 5], + ["bloodmagic:soulgemgreater", 7] + ], + "pages": [ + { + "type": "text", + "text": "$(l:bloodmagic:demon_will/demon_will)Demon Will$() is a very useful resource, but the fragments you have been getting so far are decidedly lacking in power. What you need is a storage item; A $(item)Tartaric Gem$() seems just the thing. What's more, it can absorb any leftover $(l:bloodmagic:demon_will/demon_will)Demon Will$() you might have lying around. Just drop them onto the floor and your shiny new gem will absorb them." + }, + { + "type": "crafting_soulforge", + "heading": "Petty Tartaric Gem", + "recipe": "bloodmagic:soulforge/pettytartaricgem", + "text": "Your first gem will hold a maximum of 64 $(l:bloodmagic:demon_will/demon_will)Will$(). Much more compact than before!" + }, + { + "type": "text", + "text": "Your $(item)Petty Tartaric Gem$() is a useful tool, but it's clearly lacking in power. By carefully working it with $(item)Diamond$(), $(item)Lapis$(), and $(item)Redstone$(), you have found a way to quadruple its storage capabilities." + }, + { + "type": "crafting_soulforge", + "heading": "Lesser Tartaric Gem", + "recipe": "bloodmagic:soulforge/lessertartaricgem", + "text": "This reinforced gem can hold up to 256 $(l:bloodmagic:demon_will/demon_will)Will$(). $(br2)Note: You only need one gem when upgrading - the $(item)Hellfire Forge$() will draw $(raw)Will$() from the gem it's crafting before trying to use will from the gem in its Gem Slot. Don't worry, the newly crafted gem will hold any leftover $(raw)Will$() from the process." + }, + { + "type": "text", + "text": "Your $(item)Lesser Tartaric Gem$() is a noted improvement, but once more you chafe under its limitations. To progress further will involve focusing on your $(l:bloodmagic:altar/blood_altar)Blood Altar$(), as you require the powers of an $(l:bloodmagic:altar/slates)Imbued Slate$(). Combining this slate with your gem and further refining it with another $(item)Diamond$() and a $(item)Block of Gold$(), you have found a way to once again quadruple its storage capabilities." + }, + { + "type": "crafting_soulforge", + "heading": "Common Tartaric Gem", + "recipe": "bloodmagic:soulforge/commontartaricgem", + "text": "This intricate gem can hold an impressive 1,024 $(l:bloodmagic:demon_will/demon_will)Will$()." + }, + { + "type": "text", + "text": "You have clearly outdone yourself with the creation of the $(item)Common Tartaric Gem$(), but you feel there is still more you can do. However, getting more out of your gem will involve the culmination of all your work so far. Not only do you need a $(l:bloodmagic:altar/slates)Demonic Slate$(), you also require a $(l:bloodmagic:utility/alchemical_reaction_chamber#blood_shard)Weak Blood Shard$() $(o)and$() a $(l:bloodmagic:demon_will/crystallized_will)Demon Will Crystal$(). Of course, it will come with rewards to match, powering your $(l:bloodmagic:demon_will/sentient_tools)Sentient Tools$() like nothing you have seen before..." + }, + { + "type": "crafting_soulforge", + "heading": "Greater Tartaric Gem", + "recipe": "bloodmagic:soulforge/greatertartaricgem", + "text": "This masterpiece of artifice can hold an astounding 4,096 $(l:bloodmagic:demon_will/demon_will)Will$()." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/soul_snare.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/soul_snare.json new file mode 100644 index 00000000..29babbd6 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/soul_snare.json @@ -0,0 +1,30 @@ +{ + "name": "Your First Will", + "icon": "bloodmagic:soulsnare", + "category": "bloodmagic:demon_will", + "priority": "true", + "pages": [ + { + "type": "crafting_altar", + "heading": "Soul Snare", + "recipe": "bloodmagic:altar/soul_snare", + "text": "$(item)Soul Snares$() are your gateway into the $(l:bloodmagic:demon_will/demon_will)Demon Will$() portion of $(6)Blood Magic$()." + }, + { + "type": "text", + "text": "Using the Snare is simple enough - craft a good quantity of them and throw them at hostile mobs. White particle effects will appear around them; then it's time to go in for the kill. On death, they will drop a $(l:bloodmagic:demon_will/demon_will)Demon Will$(). Before you ask, yes, the Looting enchantment will improve your odds. Once you've gathered a couple, you can get to work on crafting yourself a $(l:bloodmagic:demon_will/sentient_sword)Sentient Sword$() and a $(l:bloodmagic:demon_will/soul_gem)Tartaric Gem$() - these will make collecting $(l:bloodmagic:demon_will/demon_will)Demon Will$() much easier." + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/demon_will/snare_particles.png" + ], + "title": "Snare on Skeleton", + "border": true, + "text": "A skeleton with white particles after hit by a snare." + } + ] +} + + + diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/throwing_daggers.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/throwing_daggers.json new file mode 100644 index 00000000..5f38fb40 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demon_will/throwing_daggers.json @@ -0,0 +1,36 @@ +{ + "name": "Throwing Daggers", + "icon": "bloodmagic:throwing_dagger", + "category": "bloodmagic:demon_will", + "extra_recipe_mappings":[ + ["bloodmagic:throwing_dagger", 1], + ["bloodmagic:throwing_dagger_syringe", 2], + ["bloodmagic:slate_ampoule", 3] + ], + "pages":[ + { + "type": "text", + "text": "$(item)Bows$() and $(item)Crossbows$() are fine enough in their way, but sifting through $(item)Gravel$() for $(item)Flint$() and murdering chickens for their $(item)Feathers$() is, frankly, beneath you. These shiny (and extremely sharp) $(item)Throwing Daggers$() also have some quite devious effects, if you do say so yourself." + }, + { + "type": "crafting_soulforge", + "heading": "Iron Throwing Dagger", + "recipe": "bloodmagic:soulforge/throwing_dagger", + "anchor":"iron_throwing_dagger", + "text": "The $(item)Iron Throwing Dagger$() is a fast-hitting attack, dealing 10 damage with a decent cooldown. Not only that, but if you have some $(l:bloodmagic:demon_will/demon_will)Demon Will$() on you (be it in its raw form, or stored within a $(l:bloodmagic:demon_will/soul_gem)Tartaric Gem$(), it will drop $(raw)Will$() as a $(l:bloodmagic:demon_will/sentient_sword)Sentient Sword$() would." + }, + { + "type": "crafting_soulforge", + "heading": "Syringe Throwing Dagger", + "recipe": "bloodmagic:soulforge/throwing_dagger_syringe", + "anchor":"syringe_throwing_dagger", + "text": "The $(item)Syringe Throwing Dagger$() is for the Sanguimancer more interested of the acquisition of $(blood)Blood$() than $(raw)Will$(). While it deals slightly less damage, it is noticeably cheaper, and enemies killed by this weapon have a chance of dropping a $(item)Slate Ampoule$() - or more, if they're hearty enough." + }, + { + "type": "spotlight", + "item": "bloodmagic:slate_ampoule", + "title": "Slate Ampoule", + "text": "These delightful little vials can be crushed when near a $(l:bloodmagic:altar/blood_altar)Blood Altar$() in order to transfer $(blood)500 LP$() into it, destroying the $(item)Ampoule$() in the process. These gains are unaffected by any $(item)Runes$() you may have." + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/activation_crystals.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/activation_crystals.json new file mode 100644 index 00000000..e5cb0378 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/activation_crystals.json @@ -0,0 +1,30 @@ +{ + "name": "Activation Crystals", + "icon": "bloodmagic:activationcrystalweak", + "category": "bloodmagic:rituals", + "extra_recipe_mappings":[ + ["bloodmagic:activationcrystalweak", 1], + ["bloodmagic:activationcrystalawakened", 3] + ], + "pages": [ + { + "type": "text", + "text": "Your rituals require more than simply the correct arrangement of blocks and Sigils. An effort of will is required to open a channel from your Soul Network to the ritual, and The $(item)Activation Crystal$() will allow you to focus yourself enough to activate your rituals." + }, + { + "type": "crafting_altar", + "heading": "Weak Activation Crystal", + "recipe": "bloodmagic:weak_activation_crystal", + "text": "This crystal should do for now." + }, + { + "type": "text", + "text": "Eventually, you will find rituals that are too demanding for your current crystal. For now, you do not know what to do, save that a stronger crystal will be needed..." + }, + { + "type": "text", + "title": "Awakened Activation Crystal", + "text": "Not Yet Implemented." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_basics.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_basics.json new file mode 100644 index 00000000..e1be7278 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_basics.json @@ -0,0 +1,32 @@ +{ + "name": "Rituals - Getting Started", + "icon": "bloodmagic:activationcrystalcreative", + "category": "bloodmagic:rituals", + "priority": "true", + "pages": [ + { + "type": "text", + "text": "Once you have gotten your $(l:bloodmagic:altar/blood_altar)Blood Altar$(/l) to Tier 3, you can delve into the wonderful world of Rituals. $(br2)For working with rituals, you will require the following: $(li)An $(l:bloodmagic:rituals/activation_crystals)Activation Crystal$(). At tier 3 only the $(item)Weak Crystal$() is avaliable. $(li)A $(item)Master Ritual Stone$(). Every ritual requires exactly one of these at its centre." + }, + { + "type": "text", + "text": "$(li)Enough Ritual Stones to built the Ritual. $(li)(Recommended) A $(l:bloodmagic:rituals/ritual_diviner)Ritual Diviner$(). Although not required, it will make ritual construction significantly easier. $(br2)Building a ritual is relatively straightforward. Simply shift+click with the Ritual Diviner in hand until it displays the name of the desired ritual. Check the number of runes required by mousing over it in your" + }, + { + "type": "text", + "text": "inventory and holding shift. $(br2)Place down a Master Ritual Stone, and hold right-click until all the stones have been placed and painted with the correct element. Finally, right click the Master Ritual Stone with your Activation Crystal. If you've done everything right, you should get a message saying 'A rush of energy flows through the ritual!'. The ritual is now active." + }, + { + "type": "text", + "text": "If this does not occur, a few things may have gone wrong. If you instead get text saying 'You feel a push, but are too weak to complete this ritual', then you do not have enough LP in your Soul Network to activate the ritual. $(br2) If the message reads 'You feel that these runes are not configured correctly...', then something has gone wrong in the placement of the runes. Check the area for any blockages (such as grass, stone, etc) and try again." + }, + { + "type": "text", + "text": "Remember that some rituals extend several blocks above and below the Master Ritual Stone. If you get no error, ensure that the activation crystal is bound to your soul network - this can be accomplished by right-clicking it. $(br2) It is important to note that the crystal does not have to be bound to YOUR network - if you can get a hold of another player's crystal, you can activate rituals using their blood-pool. Guard yours well!" + }, + { + "type": "text", + "text": "one last note; all rituals respond to a $(item)Redstone$() signal, so sticking a lever on the side of the Master Ritual Stone is a good way to deactivate it. You can combine this knowledge with some of the information in $(l:bloodmagic:altar/redstone_automation)Redstone and Automation$() to ensure your rituals shut down automatically long before your Soul Network runs dry." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_diviner.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_diviner.json new file mode 100644 index 00000000..4cbe1545 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_diviner.json @@ -0,0 +1,51 @@ +{ + "name": "The Ritual Diviner", + "icon": "bloodmagic:ritualdiviner", + "category": "bloodmagic:rituals", + "extra_recipe_mappings":[ + ["bloodmagic:airscribetool", 4], + ["bloodmagic:firescribetool", 4], + ["bloodmagic:waterscribetool", 5], + ["bloodmagic:earthscribetool", 5], + ["bloodmagic:duskscribetool", 6] + ], + "pages": [ + { + "type": "text", + "text": "Crafting rituals is an intricate business; Even if you have the correct $(item)Inscription Tools$(), you can't just slap runic inscriptions down any old how and expect things to happen. Luckily, the $(item)Ritual Diviner$() is here to help." + }, + { + "type": "crafting", + "recipe": "bloodmagic:ritual_diviner_0" + }, + { + "type": "text", + "text": "The base Ritual Diviner requires one of each $(item)Elemental Inscription Tool$() for its construction, and thus a tier 3 $(l:bloodmagic:altar/blood_altar)Blood Altar$(/l). The four base Elemental Inscription Tools can be crafted in your Altar for 1,000 LP each, as defined on the following pages. You can also use these tools to inscribe runes by hand, but this should only seriously be used for decorative purposes, as it is both slow and inaccurate." + }, + { + "type": "crafting", + "recipe": "bloodmagic:ritual_diviner_1", + "anchor": "dusk", + "text": "There is also an augmented version of the Ritual Diviner, for creating more powerful rituals." + }, + { + "type": "2x_crafting_altar", + "a.heading": "Inscription Tool: Air", + "a.recipe": "bloodmagic:altar/air_tool", + "b.heading": "Inscription Tool: Fire", + "b.recipe": "bloodmagic:altar/fire_tool" + }, + { + "type": "2x_crafting_altar", + "a.heading": "Inscription Tool: Water", + "a.recipe": "bloodmagic:altar/water_tool", + "b.heading": "Inscription Tool: Earth", + "b.recipe": "bloodmagic:altar/earth_tool" + }, + { + "type": "crafting_altar", + "heading": "Inscription Tool: Dusk", + "recipe": "bloodmagic:altar/dusk_tool" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_animal_growth.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_animal_growth.json new file mode 100644 index 00000000..a9ab94b4 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_animal_growth.json @@ -0,0 +1,71 @@ +{ + "name": "Ritual of the Shepherd", + "icon": "minecraft:white_wool", + "category": "bloodmagic:rituals/ritual_list", + "pages": [ + { + "type": "multiblock", + "name": "Ritual of the Shepherd", + "multiblock":{ + "pattern":[ + ["_EDE_", + "A_W_A", + "DW0WD", + "A_W_A", + "_EDE_"] + ], + "mapping":{ + "0": "bloodmagic:masterritualstone", + "W": "bloodmagic:waterritualstone", + "A": "#bloodmagic:ritual_stones/air_or_earth", + "E": "#bloodmagic:ritual_stones/earth_or_air", + "D": "bloodmagic:duskritualstone" + }, + "symetrical": true + }, + "text": "Use a $(l:bloodmagic:rituals/ritual_diviner#dusk)Ritual Diviner [Dusk]$(/l) for easier construction." + }, + { + "type": "text", + "text": "Increases the maturity rate of baby animals within its range.$(br2)$(water)Water Runes: 4$(br)$(air)Air Runes: 4$(br)$(br)$(earth)Earth Runes: 4$(br)$()Dusk Runes: 4$(br2)$()Total Runes: 16" + }, + { + "type": "spotlight", + "item": "bloodmagic:defaultcrystal", + "title": "Raw", + "text": "Increases the speed of the ritual based on the total amount of $(raw)Raw Will$() in the Aura." + }, + { + "type": "spotlight", + "item": "bloodmagic:vengefulcrystal", + "title": "Vengeful", + "text": "Decreases the time it takes for adults to breed again." + }, + { + "type": "spotlight", + "item": "bloodmagic:destructivecrystal", + "title": "Destructive", + "text": "Causes adults that have not bred lately to run at mobs and explode." + }, + { + "type": "spotlight", + "item": "bloodmagic:steadfastcrystal", + "title": "Steadfast", + "text": "Automatically breeds adults within its area using items in the connected chest." + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Growth) Animals within this range will grow much faster. $(br) $(li)Maximum Volume: Full Range. $(li)Horizontal Radius: 7 $(li)Vertical Radius: 7" + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Chest) Chest for breeding items (if properly augmented, requires $(steadfast)Steadfast Will$()).$(br) $(li)Maximum Volume: 1 $(li)Horizontal Radius: 3 $(li)Vertical Radius: 3" + } + ] +} + + diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_armour_evolve.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_armour_evolve.json new file mode 100644 index 00000000..ffc86706 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_armour_evolve.json @@ -0,0 +1,32 @@ +{ + "name": "Ritual of Living Evolution", + "icon": "bloodmagic:livingplate", + "category": "bloodmagic:rituals/ritual_list", + "pages": [ + { + "type": "multiblock", + "name": "Ritual of Living Evolution", + "multiblock":{ + "pattern":[ + ["_________", "_________", "_________", "____E____", "___E_E___", "____E____", "_________", "_________", "_________"], + ["_________", "_E_____E_", "_________", "___D_D___", "_________", "___D_D___", "_________", "_E_____E_", "_________"], + ["_________", "_E_____E_", "_________", "_________", "_________", "_________", "_________", "_E_____E_", "_________"], + ["_________", "_E_____E_", "_________", "___D_D___", "_________", "___D_D___", "_________", "_E_____E_", "_________"], + ["____E____", "_E_____E_", "__FF_FF__", "__FD_DF__", "E___0___E", "__FD_DF__", "__FF_FF__", "_E_____E_", "____E____"] + ], + "mapping":{ + "0": "bloodmagic:masterritualstone", + "F": "bloodmagic:fireritualstone", + "E": "bloodmagic:earthritualstone", + "D": "bloodmagic:duskritualstone" + }, + "symetrical": true + }, + "text": "Use a $(l:bloodmagic:rituals/ritual_diviner#dusk)Ritual Diviner [Dusk]$(/l) for easier construction." + }, + { + "type": "text", + "text": "Increases the amount of maximum Upgrade Points on your Living Armor to 300.$(br2)$(fire)Fire Runes: 12$(br)$(earth)Earth Runes: 24$(br)$()Dusk Runes: 12$(br2)$()Total Runes: 48" + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crushing.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crushing.json new file mode 100644 index 00000000..62b053e0 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crushing.json @@ -0,0 +1,72 @@ +{ + "name": "Ritual of the Crusher", + "icon": "minecraft:iron_pickaxe", + "category": "bloodmagic:rituals/ritual_list", + "pages": [ + { + "type": "multiblock", + "name": "Ritual of the Crusher", + "multiblock":{ + "pattern":[ + ["__A__", "_____", "A___A", "_____", "__A__"], + ["D_F_D", "__E__", "FE0EF", "__E__", "D_F_D"] + ], + "mapping":{ + "0": "bloodmagic:masterritualstone", + "A": "bloodmagic:airritualstone", + "F": "bloodmagic:fireritualstone", + "E": "bloodmagic:earthritualstone", + "D": "bloodmagic:duskritualstone" + }, + "symetrical": true + }, + "text": "Use a $(l:bloodmagic:rituals/ritual_diviner#dusk)Ritual Diviner [Dusk]$(/l) for easier construction." + }, + { + "type": "text", + "text": "Breaks blocks within its $(item)Crushing Range$() and places the items into the linked $(item)Chest$().$(br2)$(air)Air Runes: 4$(br)$(fire)Fire Runes: 4$(br)$(earth)Earth Runes: 4$(br)$()Dusk Runes: 4$(br2)$()Total Runes: 16" + }, + { + "type": "spotlight", + "item": "bloodmagic:defaultcrystal", + "title": "Raw", + "text": "Increases the speed of the ritual based on the total amount of $(raw)Raw Will$() in the Aura." + }, + { + "type": "spotlight", + "item": "bloodmagic:corrosivecrystal", + "title": "Corrosive", + "text": "All blocks are broken to be processed with a form of $(l:bloodmagic:alchemy_table/alchemy_table#cutting_fluid)Cutting Fluid$(). Overrides $(item)Silk Touch$() where applicable." + }, + { + "type": "spotlight", + "item": "bloodmagic:vengefulcrystal", + "title": "Vengeful", + "text": "Compresses the inventory on successful operation (e.g. coal into Coal Blocks, Redstone into Blocks of Redstone, etc). Currently only does one compression per operation." + }, + { + "type": "spotlight", + "item": "bloodmagic:destructivecrystal", + "title": "Destructive", + "text": "Blocks are broken down forcefully: all blocks broken are affected by $(item)Fortune III.$()" + }, + { + "type": "spotlight", + "item": "bloodmagic:steadfastcrystal", + "title": "Steadfast", + "text": "Causes all blocks that are broken to be picked up with $(item)Silk Touch$(). Overrides $(item)Fortune$() where applicable." + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Chest) The location of the inventory that the ritual will place the broken blocks into. $(br) $(li)Maximum Volume: 1 $(li)Horizontal Radius: 3 $(li)Vertical Radius: 3" + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Crushing) The blocks that the ritual will break. $(br) $(li)Maximum Volume: 50 $(li)Horizontal Radius: 10 $(li)Vertical Radius: 10" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crystal_harvest.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crystal_harvest.json new file mode 100644 index 00000000..cba3241c --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crystal_harvest.json @@ -0,0 +1,37 @@ +{ + "name": "Crack of the Fractured Crystal", + "icon": "bloodmagic:defaultcrystal", + "category": "bloodmagic:rituals/ritual_list", + "pages": [ + { + "type": "multiblock", + "name": "Crack of the Fractured Crystal", + "multiblock":{ + "pattern":[ + ["_______", "_______", "___D___", "__D_D__", "___D___", "_______", "_______"], + ["ED___DE", "D_____D", "__A_A__", "___0___", "__A_A__", "D_____D", "ED___DE"], + ["E_FFF_E", "___F___", "F__F__F", "FFF_FFF", "F__F__F", "___F___", "E_FFF_E"] + ], + "mapping":{ + "0": "bloodmagic:masterritualstone", + "A": "bloodmagic:airritualstone", + "F": "bloodmagic:fireritualstone", + "E": "bloodmagic:earthritualstone", + "D": "bloodmagic:duskritualstone" + }, + "symetrical": true + }, + "text": "Use a $(l:bloodmagic:rituals/ritual_diviner#dusk)Ritual Diviner [Dusk]$(/l) for easier construction." + }, + { + "type": "text", + "text": "Breaks $(raw)Demon Will$() Crystal Clusters of all aspects within its range, dropping the results on top of the crystals. $(br2)$(air)Air Runes: 4 $(br)$(fire)Fire Runes: 20 $(br)$(earth)Earth Runes: 8 $(br)$()Dusk Runes: 12 $(br2)$()Total Runes: 44" + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Crystal) All $(raw)Demon Will$() crystal clusters have a single crystal broken off, spawning the crystal into the world. If there is only one crystal on the cluster, it will not break it. $(br) $(li)Maximum Volume: 250 $(li)Horizontal Radius: 5 $(li)Vertical Radius: 7" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crystal_split.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crystal_split.json new file mode 100644 index 00000000..85f767bc --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crystal_split.json @@ -0,0 +1,43 @@ +{ + "name": "Resonance of the Faceted Crystal", + "icon": "bloodmagic:vengefulcrystal", + "category": "bloodmagic:rituals/ritual_list", + "pages": [ + { + "type": "multiblock", + "name": "Resonance of the Faceted Crystal", + "multiblock":{ + "pattern":[ + ["__D__", "_BFB_", "DE0AD", "_BWB_", "__D__"], + ["_D_D_", "D___D", "_____", "D___D", "_D_D_"] + ], + "mapping":{ + "0": "bloodmagic:masterritualstone", + "B": "bloodmagic:ritualstone", + "W": "#bloodmagic:ritual_stones/water_earth_fire_air", + "A": "#bloodmagic:ritual_stones/air_water_earth_fire", + "F": "#bloodmagic:ritual_stones/fire_air_water_earth", + "E": "#bloodmagic:ritual_stones/earth_fire_air_water", + "D": "bloodmagic:duskritualstone" + }, + "symetrical": false + }, + "text": "Use a $(l:bloodmagic:rituals/ritual_diviner#dusk)Ritual Diviner [Dusk]$(/l) for easier construction." + }, + { + "type": "text", + "text": "Splits apart a well-grown $(raw)Raw Crystal Cluster$() into several aspected crystal clusters. For additional setup information, see the next page. For more information on Aspected Will, see $(l:bloodmagic:demon_will/aspected_will)Aspected Will$(). $(br2)$(blank)Blank Runes: 4 $(br)$(water)Water Runes: 1 $(br)$(air)Air Runes: 1 $(br)$(fire)Fire Runes: 1 $(br)$(earth)Earth Runes: 1 $(br)$()Dusk Runes: 12 $(br2)$()Total Runes: 20" + }, + { + "type": "image", + "title": "Ritual Setup", + "images": ["bloodmagic:images/entries/demon_will/will_splitting.png"], + "border": true, + "text": "Recommended setup for the Resonance of the Faceted Crystal ritual." + }, + { + "type": "text", + "text": "This ritual takes a well grown (5 spires) $(l:bloodmagic:demon_will/crystallized_will)Raw Crystal Cluster$(/l) located 2 blocks above the $(item)Master Ritual Stone$(), and splits it into new single spires of each $(l:bloodmagic:demon_will/aspected_will)Aspected Will$(/l) Crystal Clusters located directly above the 4 elemental Ritual Stones. This spacing is designed to accommodate a $(item)Demon Crystallizer$() on top of the $(item)Master Ritual Stone$().$(br2)For information on growing Demon Will Crystals, please see $(l:bloodmagic:demon_will/crystallized_will)Crystallized Will$(/l)." + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_ellipse.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_ellipse.json new file mode 100644 index 00000000..553d3e51 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_ellipse.json @@ -0,0 +1,52 @@ +{ + "name": "Focus of the Ellipsoid", + "icon": "minecraft:bucket", + "category": "bloodmagic:rituals/ritual_list", + "pages": [ + { + "type": "multiblock", + "name": "Focus of the Ellipsoid", + "multiblock":{ + "pattern":[ + ["_____AAA___", + "_____A_____", + "__WWW__EE__", + "F_W_____E__", + "F___D_D_E__", + "FF___0___FF", + "__E_D_D___F", + "__E_____W_F", + "__EE__WWW__", + "_____A_____", + "___AAA_____"] + ], + "mapping":{ + "0": "bloodmagic:masterritualstone", + "W": "#bloodmagic:ritual_stones/water_or_earth", + "A": "#bloodmagic:ritual_stones/air_or_fire", + "F": "#bloodmagic:ritual_stones/fire_or_air", + "E": "#bloodmagic:ritual_stones/earth_or_water", + "D": "bloodmagic:duskritualstone" + }, + "symetrical": false + }, + "text": "Use a $(l:bloodmagic:rituals/ritual_diviner#dusk)Ritual Diviner [Dusk]$(/l) for easier construction." + }, + { + "type": "text", + "text": "Creates a hollow spheroid around the ritual using the blocks in the attached chest. Good for building complicated shapes, such as the mighty gold dome above your Evil Lair. ... You do have one of those, right? $(br2)$(water)Water Runes: 8$(br)$(air)Air Runes: 8$(br)$(fire)Fire Runes: 8$(br)$(earth)Earth Runes: 8$(br)$()Dusk Runes: 4$(br2)$()Total Runes: 36" + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Chest) The location of the inventory that the ritual will grab blocks from to place in the world. $(br) $(li)Maximum Volume: 1 $(li)Horizontal Radius: 3 $(li)Vertical Radius: 3" + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Placement) The range that the ritual will place its blocks in. Note that the Spheroid is centered on the ritual - if one side is shorter than the side opposite, the spheroid will be truncated. $(br) $(li)Maximum Volume: Full Range. $(li)Horizontal Radius: 32 $(li)Vertical Radius: 32" + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_feathered_knife.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_feathered_knife.json new file mode 100644 index 00000000..03865209 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_feathered_knife.json @@ -0,0 +1,77 @@ +{ + "name": "Ritual of the Feathered Knife", + "icon": "bloodmagic:sacrificialdagger", + "category": "bloodmagic:rituals/ritual_list", + "pages": [ + { + "type": "multiblock", + "name": "Ritual of the Feathered Knife", + "multiblock":{ + "pattern":[ + ["_EE___EE_", "EA_____AE", "E_______E", "____D____", "___D0D___", "____D____", "E_______E", "EA_____AE", "_EE___EE_"], + ["__F___F__", "_________", "F___W___F", "___A_A___", "__W___W__", "___A_A___", "F___W___F", "_________", "__F___F__"] + ], + "mapping":{ + "0": "bloodmagic:masterritualstone", + "W": "bloodmagic:waterritualstone", + "A": "bloodmagic:airritualstone", + "F": "bloodmagic:fireritualstone", + "E": "bloodmagic:earthritualstone", + "D": "bloodmagic:duskritualstone" + }, + "symetrical": true + }, + "text": "Use a $(l:bloodmagic:rituals/ritual_diviner#dusk)Ritual Diviner [Dusk]$(/l) for easier construction." + }, + { + "type": "text", + "text": "Drains health from players in its area and puts the LP into a nearby blood altar. LP Gains are affected by $(l:bloodmagic:altar/blood_rune/self_sacrifice_rune)Runes of Self Sacrifice.$() $(br2)$(water)Water Runes: 4$() $(br)$(air)Air Runes: 8$() $(br)$(fire)Fire Runes: 8$() $(br)$(earth)Earth Runes: 16$() $(br)Dusk Runes: 4 $(br2)Total Runes: 40" + }, + { + "type": "spotlight", + "item": "bloodmagic:defaultcrystal", + "title": "Raw", + "text": "Increases the speed of the ritual based on the total amount of $(raw)Raw Will$() in the Aura." + }, + { + "type": "spotlight", + "item": "bloodmagic:corrosivecrystal", + "title": "Corrosive", + "text": "Uses the player's current Incense Bonus (if any) to increase the yield. Stand near an $(l:bloodmagic:utility/incense_altar)Incense Altar$() to maintain this bonus." + }, + { + "type": "spotlight", + "item": "bloodmagic:vengefulcrystal", + "title": "Vengeful", + "text": "Sets the minimum health for sacrificing to 10%. Overridden by $(steadfast)Steadfast$() for the Owner if active." + }, + { + "type": "spotlight", + "item": "bloodmagic:destructivecrystal", + "title": "Destructive", + "text": "Increases the yield of the ritual based on the total amount of $(destructive)Destructive Will$() in the Aura." + }, + { + "type": "spotlight", + "item": "bloodmagic:steadfastcrystal", + "title": "Steadfast", + "text": "Sets the minimum health for sacrificing from 30% to 70%." + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Altar) This range defines the area that the ritual searches for the $(l:bloodmagic:altar/blood_altar)Blood Altar$(/l). Changing this will either expand or limit the range to a certain region. $(br) $(li)Maximum Volume: Full Range. $(li)Horizontal Radius: 10 $(li)Vertical Radius: 15" + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Damage) This defines where the ritual will damage a player. Players inside of this range will receive damage over time up to the specified limit. $(br) $(li)Maximum Volume: Full Range. $(li)Horizontal Radius: 25 $(li)Vertical Radius: 15" + } + ] +} + + + + diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_green_grove.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_green_grove.json new file mode 100644 index 00000000..736054b7 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_green_grove.json @@ -0,0 +1,77 @@ +{ + "name": "Ritual of the Green Grove", + "icon": "minecraft:bone_meal", + "category": "bloodmagic:rituals/ritual_list", + "pages": [ + { + "type": "multiblock", + "name": "Ritual of the Green Grove", + "multiblock":{ + "pattern":[ + ["EWE", + "W0W", + "EWE"] + ], + "mapping":{ + "0": "bloodmagic:masterritualstone", + "E": "bloodmagic:earthritualstone", + "W": "bloodmagic:waterritualstone" + }, + "symetrical": true + }, + "text": "Use a $(l:bloodmagic:rituals/ritual_diviner)Ritual Diviner$(/l) for easier construction." + }, + { + "type": "text", + "text": "Grows crops within its area.$(br2)$(water)Water Runes: 4$() $(br)$(earth)Earth Runes: 4$() $(br2)Total Runes: 8" + }, + { + "type": "spotlight", + "item": "bloodmagic:defaultcrystal", + "title": "Raw", + "text": "Increases the speed of all ritual operations based on the total amount of $(raw)Raw Will$() in the Aura." + }, + { + "type": "spotlight", + "item": "bloodmagic:corrosivecrystal", + "title": "Corrosive", + "text": "Entities within range are attacked by nearby plants, leeching away their life to feed their own growth." + }, + { + "type": "spotlight", + "item": "bloodmagic:vengefulcrystal", + "title": "Vengeful", + "text": "Increases the rate that a growth tick is successful." + }, + { + "type": "spotlight", + "item": "bloodmagic:destructivecrystal", + "title": "Destructive", + "text": "Increases the maximum growth range of the ritual based on the total amount of $(destructive)Destructive Will$() in the Aura." + }, + { + "type": "spotlight", + "item": "bloodmagic:steadfastcrystal", + "title": "Steadfast", + "text": "Seeds are replanted and blocks are hydrated within the specified range." + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Growth) The area that the ritual will grow plants in. $(br) $(li)Maximum Volume: 81 $(li)Horizontal Radius: 4 $(li)Vertical Radius: 4" + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Steadfast) Blocks within this range are rehydrated into farmland, and seeds within the area are planted nearby. $(br) $(li)Maximum Volume: Full Range. $(li)Horizontal Radius: 15 $(li)Vertical Radius: 15" + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Corrosive) Entities in this area have their life drained to grow nearby crops. $(br) $(li)Maximum Volume: Full Range. $(li)Horizontal Radius: 15 $(li)Vertical Radius: 15" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_harvest.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_harvest.json new file mode 100644 index 00000000..615e679b --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_harvest.json @@ -0,0 +1,41 @@ +{ + "name": "Reap of the Harvest Moon", + "icon": "minecraft:wheat", + "category": "bloodmagic:rituals/ritual_list", + "pages": [ + { + "type": "multiblock", + "name": "Reap of the Harvest Moon", + "multiblock":{ + "pattern":[ + ["_WE_EW_", + "W__E__W", + "E_D_D_E", + "_E_0_E_", + "E_D_D_E", + "W__E__W", + "_WE_EW_"] + ], + "mapping":{ + "0": "bloodmagic:masterritualstone", + "W": "bloodmagic:waterritualstone", + "E": "bloodmagic:earthritualstone", + "D": "bloodmagic:duskritualstone" + }, + "symetrical": true + }, + "text": "Use a $(l:bloodmagic:rituals/ritual_diviner#dusk)Ritual Diviner [Dusk]$(/l) for easier construction." + }, + { + "type": "text", + "text": "Harvests plants within its range, dropping the results on the ground.$(br2)$(water)Water Runes: 8$(br)$(earth)Earth Runes: 12$(br)$()Dusk Runes: 4$(br2)$()Total Runes: 24" + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Harvesting) Plants within this range will be harvested. $(br) $(li)Maximum Volume: Full Range. $(li)Horizontal Radius: 15 $(li)Vertical Radius: 15" + } + ] +} + diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_lava.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_lava.json new file mode 100644 index 00000000..f9a8c693 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_lava.json @@ -0,0 +1,88 @@ +{ + "name": "Serenade of the Nether", + "icon": "minecraft:lava_bucket", + "category": "bloodmagic:rituals/ritual_list", + "pages": [ + { + "type": "multiblock", + "name": "Serenade of the Nether", + "multiblock":{ + "pattern":[ + ["_F_", + "F0F", + "_F_"] + ], + "mapping":{ + "0": "bloodmagic:masterritualstone", + "F": "bloodmagic:fireritualstone" + }, + "symetrical": true + }, + "text": "Use a $(l:bloodmagic:rituals/ritual_diviner)Ritual Diviner$(/l) for easier construction." + }, + { + "type": "text", + "text": "Generates a source of lava from the master ritual stone.$(br2)$(fire)Fire Runes: 4$()$(br2)Total Runes: 4" + }, + { + "type": "spotlight", + "item": "bloodmagic:defaultcrystal", + "title": "Raw", + "text": "Decreases the LP cost of placing lava and allows the lava to be directly placed into a tank or other fluid-handling block." + }, + { + "type": "spotlight", + "item": "bloodmagic:corrosivecrystal", + "title": "Corrosive", + "text": "Entities within range that are immune to fire (e.g. pigmen, blazes) are damaged severely." + }, + { + "type": "spotlight", + "item": "bloodmagic:vengefulcrystal", + "title": "Vengeful", + "text": "Entities in this range are afflicted by Fire Fuse. When the debuff ends, they will do a wonderful impression of a firework." + }, + { + "type": "spotlight", + "item": "bloodmagic:destructivecrystal", + "title": "Destructive", + "text": "Lava placement range is increased based on the total amount of $(destructive)Destructive Will$() in the Aura." + }, + { + "type": "spotlight", + "item": "bloodmagic:steadfastcrystal", + "title": "Steadfast", + "text": "Players in this range have Fire Resist applied." + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Lava) The area that the ritual will place lava source blocks. $(br) $(li)Maximum Volume: 9 $(li)Horizontal Radius: 3 $(li)Vertical Radius: 3" + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Corrosive) Entities within this range that are immune to fire damage are hurt proportional to the Will. $(br) $(li)Maximum Volume: Full Range. $(li)Horizontal Radius: 10 $(li)Vertical Radius: 10" + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Vengeful) Entities in this range are afflicted by Fire Fuse. $(br) $(li)Maximum Volume: Full Range. $(li)Horizontal Radius: 10 $(li)Vertical Radius: 10" + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Steadfast) Players in this range have Fire Resist applied. $(br) $(li)Maximum Volume: Full Range. $(li)Horizontal Radius: 10 $(li)Vertical Radius: 10" + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Raw) The tank that the ritual will place lava into. $(br) $(li)Maximum Volume: 1 $(li)Horizontal Radius: 10 $(li)Vertical Radius: 10" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_magnetic.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_magnetic.json new file mode 100644 index 00000000..79d74155 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_magnetic.json @@ -0,0 +1,40 @@ +{ + "name": "Ritual of Magnetism", + "icon": "minecraft:iron_ore", + "category": "bloodmagic:rituals/ritual_list", + "pages": [ + { + "type": "multiblock", + "name": "Ritual of Magnetism", + "multiblock":{ + "pattern":[ + ["__F__", "_____", "F___F", "_____", "__F__"], + ["A_E_A", "_____", "E___E", "_____", "A_E_A"], + ["_____", "_E_E_", "__0__", "_E_E_", "_____"] + ], + "mapping":{ + "0": "bloodmagic:masterritualstone", + "A": "bloodmagic:airritualstone", + "F": "bloodmagic:fireritualstone", + "E": "bloodmagic:earthritualstone" + }, + "symetrical": true + }, + "text": "Use a $(l:bloodmagic:rituals/ritual_diviner)Ritual Diviner$(/l) for easier construction." + }, + { + "type": "text", + "text": "Pulls up ores from the ground below and puts them into its placement range.$(br2)$(air)Air Runes: 4$(br)$(fire)Fire Runes: 4$(br)$(earth)Earth Runes: 8$(br2)$()Total Runes: 16" + }, + { + "type": "text", + "text": "By default, the $()Ritual of Magnetism$() searches down to bedrock in a radius of 3 blocks out from the $(item)Master Ritual Stone$() for ores to collect. This can be augmented by placing an expensive block directly underneath the MRS, as follows: $(br2)$(li)$(item)Block of Iron$() - 7 blocks. $(li)$(item)Block of Gold$() - 15 blocks. $(li)$(item)Block of Diamond$() - 31 blocks." + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Placement) The range that the ritual will place the grabbed ores into. $(br) $(li)Maximum Volume: 50 $(li)Horizontal Radius: 4 $(li)Vertical Radius: 4" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_regeneration.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_regeneration.json new file mode 100644 index 00000000..57cacbfe --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_regeneration.json @@ -0,0 +1,49 @@ +{ + "name": "Ritual of Regeneration", + "icon": "minecraft:golden_apple", + "category": "bloodmagic:rituals/ritual_list", + "pages": [ + { + "type": "multiblock", + "name": "Ritual of Regeneration", + "multiblock":{ + "pattern":[ + ["EEW_F_F_WEE", "E____F____E", "W_D_____D_W", "___________", "A_________A", "_A___0___A_", "A_________A", "___________", "W_D_____D_W", "E____F____E", "EEW_F_F_WEE"], + ["_E_______E_", "E_________E", "___________", "___________", "___________", "___________", "___________", "___________", "___________", "E_________E", "_E_______E_"] + ], + "mapping":{ + "0": "bloodmagic:masterritualstone", + "W": "bloodmagic:waterritualstone", + "A": "#bloodmagic:ritual_stones/air_or_fire", + "F": "#bloodmagic:ritual_stones/fire_or_air", + "E": "bloodmagic:earthritualstone", + "D": "bloodmagic:duskritualstone" + }, + "symetrical": true + }, + "text": "Use a $(l:bloodmagic:rituals/ritual_diviner#dusk)Ritual Diviner [Dusk]$(/l) for easier construction." + }, + { + "type": "text", + "text": "Casts regeneration on entities within its range if they are missing health. $(br2)$(water)Water Runes: 8 $(br)$(air)Air Runes: 6 $(br)$(fire)Fire Runes: 6 $(br)$(earth)Earth Runes: 20 $(br)$()Dusk Runes: 4$(br2)$()Total Runes: 44" + }, + { + "type": "spotlight", + "item": "bloodmagic:corrosivecrystal", + "title": "Corrosive", + "text": "Steals health from non-players inside of its Vampirism range and directly heals players." + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Healing) Entities within this range will receive a regeneration buff. $(br) $(li)Maximum Volume: Full Range. $(li)Horizontal Radius: 20 $(li)Vertical Radius: 20" + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Vampirism) Mobs within this range have their health syphoned to heal players in the Healing range. $(br) $(li)Maximum Volume: Full Range. $(li)Horizontal Radius: 20 $(li)Vertical Radius: 20" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_upgrade_remove.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_upgrade_remove.json new file mode 100644 index 00000000..2bb7d05f --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_upgrade_remove.json @@ -0,0 +1,34 @@ +{ + "name": "Sound of the Cleansing Soul", + "icon": "bloodmagic:upgradetome", + "category": "bloodmagic:rituals/ritual_list", + "pages": [ + { + "type": "multiblock", + "name": "Sound of the Cleansing Soul", + "multiblock":{ + "pattern":[ + ["_________", "_________", "_________", "____A____", "___A_A___", "____A____", "_________", "_________", "_________"], + ["_________", "_E_____E_", "_________", "___W_W___", "_________", "___W_W___", "_________", "_E_____E_", "_________"], + ["_________", "_E_____E_", "_________", "_________", "_________", "_________", "_________", "_E_____E_", "_________"], + ["_________", "_E_____E_", "_________", "___W_W___", "_________", "___W_W___", "_________", "_E_____E_", "_________"], + ["____E____", "_E_____E_", "__FF_FF__", "__FD_DF__", "E___0___E", "__FD_DF__", "__FF_FF__", "_E_____E_", "____E____"] + ], + "mapping":{ + "0": "bloodmagic:masterritualstone", + "W": "bloodmagic:waterritualstone", + "A": "bloodmagic:airritualstone", + "F": "bloodmagic:fireritualstone", + "E": "bloodmagic:earthritualstone", + "D": "bloodmagic:duskritualstone" + }, + "symetrical": true + }, + "text": "Use a $(l:bloodmagic:rituals/ritual_diviner#dusk)Ritual Diviner [Dusk]$(/l) for easier construction." + }, + { + "type": "text", + "text": "Removes all upgrades (and downgrades) from your $(l:bloodmagic:alchemy_array/living_equipment/living_basics)Living Armour$() and gives you the corresponding Upgrade (and Downgrade) $(l:bloodmagic:alchemy_array/living_equipment/living_upgrades)Tomes$(). You can right click while holding one of these $(item)Tomes$() to re-apply them to your $(l:bloodmagic:alchemy_array/living_equipment/living_basics)Living Armour$() again.$(br2)$(water)Water Runes: 8 $(br)$(air)Air Runes: 4 $(br)$(fire)Fire Runes: 12 $(br)$(earth)Earth Runes: 20 $(br)$()Dusk Runes: 4 $(br2)$()Total Runes: 48" + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_water.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_water.json new file mode 100644 index 00000000..518f74a0 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_water.json @@ -0,0 +1,40 @@ +{ + "name": "Ritual of the Full Spring", + "icon": "minecraft:water_bucket", + "category": "bloodmagic:rituals/ritual_list", + "pages": [ + { + "type": "multiblock", + "name": "Ritual of the Full Spring", + "multiblock":{ + "pattern":[ + ["W_W", + "_0_", + "W_W"] + ], + "mapping":{ + "0": "bloodmagic:masterritualstone", + "W": "bloodmagic:waterritualstone" + }, + "symetrical": true + }, + "text": "Use a $(l:bloodmagic:rituals/ritual_diviner)Ritual Diviner$(/l) for easier construction." + }, + { + "type": "text", + "text": "Generates a source of water from the master ritual stone.$(br2)$(water)Water Runes: 4$()$(br2)Total Runes: 4" + }, + { + "type": "spotlight", + "item": "bloodmagic:defaultcrystal", + "title": "Raw", + "text": "allows the water to be directly placed into a Tank or other fluid-handling block." + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Water) The area within which the Ritual will place Source Blocks. $(br2)$(li)Maximum Volume: 9 $(li)Horizontal Radius: 3 $(li)Vertical Radius: 3 " + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_well_of_suffering.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_well_of_suffering.json new file mode 100644 index 00000000..135c7740 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_well_of_suffering.json @@ -0,0 +1,45 @@ +{ + "name": "Well of Suffering", + "icon": "bloodmagic:life_essence_bucket", + "category": "bloodmagic:rituals/ritual_list", + "pages": [ + { + "type": "multiblock", + "name": "Well Of Suffering", + "multiblock":{ + "pattern":[ + ["____A____", "_________", "_________", "_________", "A_______A", "_________", "_________", "_________", "____A____"], + ["___W_W___", "_________", "_________", "W__F_F__W", "____0____", "W__F_F__W", "_________", "_________", "___W_W___"], + ["__W___W__", "_D_____D_", "W_F_E_F_W", "_________", "__E___E__", "_________", "W_F_E_F_W", "_D_____D_", "__W___W__"] + + ], + "mapping":{ + "0": "bloodmagic:masterritualstone", + "W": "bloodmagic:waterritualstone", + "A": "bloodmagic:airritualstone", + "F": "bloodmagic:fireritualstone", + "E": "bloodmagic:earthritualstone", + "D": "bloodmagic:duskritualstone" + }, + "symetrical": true + }, + "text": "Use a $(l:bloodmagic:rituals/ritual_diviner)Ritual Diviner [Dusk]$(/l) for easier construction." + }, + { + "type": "text", + "text": "This ritual attacks mobs within its damage zone and puts the harvested $(blood)Blood$() into a nearby $(l:bloodmagic:altar/blood_altar)Blood Altar$(). Put a $(l:bloodmagic:altar/soul_network)Blood Orb$() in the Altar, maybe add a few $(l:bloodmagic:altar/blood_rune/sacrifice_rune)Runes of Sacrifice$() for good measure and you'll never have to worry about your LP supplies again... As long as you can supply enough mobs.$(br)$(water)Water Runes: 16$(br)$(air)Air Runes: 4$(br)$(fire)Fire Runes: 8$(br)$(earth)Earth Runes: 4$(br)$()Dusk Runes: 4$(br2)$()Total Runes: 36" + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Altar) The area that the ritual searches for a $(l:bloodmagic:altar/blood_altar)Blood Altar$() to deposit its Blood into. $(br2)$(li)Maximum Volume: Full Range. $(li)Horizontal Radius: 10 $(li)Vertical Radius: 15 " + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualtinkerer", + "title": "Range", + "text": "(Damage) All mobs within this area will take damage every second or so until they die. This does not include players, fortunately. $(br2)Mobs will drop $(item)Items$(), so be sure to set up something to clean up the mess. $(br2)$(li)Maximum Volume: Full Range. $(li)Horizontal Radius: 15 $(li)Vertical Radius: 15 " + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_stones.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_stones.json new file mode 100644 index 00000000..5e27ac42 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_stones.json @@ -0,0 +1,23 @@ +{ + "name": "Ritual Stones", + "icon": "bloodmagic:waterritualstone", + "category": "bloodmagic:rituals", + "extra_recipe_mappings":[ + ["bloodmagic:airritualstone", 0], + ["bloodmagic:fireritualstone", 0], + ["bloodmagic:waterritualstone", 0], + ["bloodmagic:earthritualstone", 0], + ["bloodmagic:duskritualstone", 0] + ], + "pages": [ + { + "type": "text", + "text": "$(item)Ritual Stones$() are the canvas upon which you will draw your $(item)Rituals$(). They also look quite nifty, and can be manually painted with the various $(l:bloodmagic:rituals/ritual_diviner)Elemental Inscription Tools$()." + }, + { + "type": "crafting", + "recipe": "bloodmagic:ritual_stone_blank", + "recipe2": "bloodmagic:ritual_stone_master" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_tinkerer.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_tinkerer.json new file mode 100644 index 00000000..62e82de5 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_tinkerer.json @@ -0,0 +1,24 @@ +{ + "name": "Ritual Tinkerer", + "icon": "bloodmagic:ritualtinkerer", + "category": "bloodmagic:rituals", + "priority": "true", + "pages": [ + { + "type": "text", + "text": "The $(item)Ritual Tinkerer$() is an essential tool for the advanced Blood Mage who is looking for all they can get out of their Rituals. It has three main modes, as described overleaf." + }, + { + "type": "crafting", + "recipe": "bloodmagic:ritual_reader" + }, + { + "type": "text", + "text": "$(li)Information: Describes the function of the ritual, similar to the Ritual Diviner. $(li)Set Will Consumed: Tells the ritual which kinds of Demon Will (if any) to consume from the Aura. Specify this by carrying Demon Will Crystals in your hotbar, one for each type of will you wish the Ritual to consume. Further information about the effects of Demon Will upon Rituals can be found on each Ritual's respective page in this book." + }, + { + "type": "text", + "text": "$(li)Define Area: Specifies the zone that the ritual should work in, and displays the current zone. If multiple zones can be specified, shift-clicking will cycle through them. Some rituals can be expanded far beyond their default areas, but keep in mind that this will increase the LP cost to match..." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/alchemical_reaction_chamber.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/alchemical_reaction_chamber.json new file mode 100644 index 00000000..389ff102 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/alchemical_reaction_chamber.json @@ -0,0 +1,125 @@ +{ + "name": "Alchemical Reaction Chamber", + "icon": "bloodmagic:alchemicalreactionchamber", + "category": "bloodmagic:utility", + "extra_recipe_mappings":[ + ["bloodmagic:sanguinereverter", 2], + ["bloodmagic:weakbloodshard", 3], + ["bloodmagic:explosivepowder", 6], + ["bloodmagic:ironfragment", 7], + ["bloodmagic:goldfragment", 7], + ["bloodmagic:fragment_netherite_scrap", 7], + ["bloodmagic:irongravel", 9], + ["bloodmagic:goldgravel", 9], + ["bloodmagic:gravel_netherite_scrap", 9], + ["bloodmagic:ironsand", 7], + ["bloodmagic:goldsand", 7], + ["bloodmagic:sand_netherite", 7], + ["bloodmagic:sulfur", 7], + ["bloodmagic:primitive_crystalline_resonator", 8], + ["bloodmagic:basiccuttingfluid", 10] + ], + "pages": [ + { + "type": "text", + "text": "The $(item)Alchemical Reaction Chamber$() isn't fully implemented yet, but among other things it can function as a furnace, offers a form of ore-tripling, revert Blood Orbs, and is currently the only way to get $(item)Weak Blood Shards$(), specifically from an $(l:bloodmagic:altar/slates)Imbued Slate$()." + }, + { + "type": "crafting", + "recipe": "bloodmagic:arc" + }, + { + "type": "crafting_soulforge", + "heading": "Sanguine Reverter", + "recipe": "bloodmagic:soulforge/sanguine_reverter", + "anchor": "blood_shard", + "text": "The Sanguine Reverter is used to create Weak Blood Shards, and revert Blood Orbs to their input crafting item." + }, + { + "type": "3x_crafting_arc", + "a.heading": "Weak Blood Shard", + "a.recipe": "bloodmagic:arc/weakbloodshard", + "b.heading": "Revert Weak Blood Orb", + "b.recipe": "bloodmagic:arc/reversion/weak_blood_orb", + "c.heading": "Revert Apprentice Blood Orb", + "c.recipe": "bloodmagic:arc/reversion/apprentice_blood_orb" + }, + { + "type": "2x_crafting_arc", + "a.heading": "Revert Magician Blood Orb", + "a.recipe": "bloodmagic:arc/reversion/magician_blood_orb", + "b.heading": "Revert Master Blood Orb", + "b.recipe": "bloodmagic:arc/reversion/master_blood_orb", + "b.text": "Turn the page for more uses of the ARC." + }, + { + "type": "empty" + }, + { + "type": "crafting_alchemy_table", + "heading": "Explosive Powder", + "anchor": "ore_processing", + "recipe": "bloodmagic:alchemytable/explosive_powder", + "text": "Explosive Powder in the ARC is used to turn Ores into Ore Fragments for 3x Ore Processing, or turn Ingots into their Sand variant. It can also turn Netherrack into Sulfur and 5mb of Lava." + }, + { + "type": "3x_crafting_arc", + "a.heading": "Ore to 3 Ore Fragments", + "a.recipe": "bloodmagic:arc/fragmentsiron", + "b.heading": "Ingot to Metal Sand", + "b.recipe": "bloodmagic:arc/dustsfrom_ingot_iron", + "c.heading": "Sulfur and Lava", + "c.recipe": "bloodmagic:arc/netherrack_to_sulfer", + "c.fluid_output": "minecraft:lava_bucket" + }, + { + "type": "crafting_soulforge", + "heading": "Resonator", + "recipe": "bloodmagic:soulforge/primitive_crystalline_resonator", + "text": "The Resonator is used to turn Ore Fragments into the relevant Gravel for continued ore processing, and creates some tiny dusts that are NYI." + }, + { + "type": "crafting_arc", + "heading": "Ore Fragment to Metal Gravel", + "recipe": "bloodmagic:arc/gravelsiron" + }, + { + "type": "crafting_alchemy_table", + "heading": "Basic Cutting Fluid", + "recipe": "bloodmagic:alchemytable/basic_cutting_fluid", + "text": "Cutting Fluid turns a metal's Gravel into that metal's Sand for continued 3x ore processing. It can also turn an ore directly into two metal Sand for 2x Ore Processing. The same 2x Ore Processing is possible in the Alchemy Table, but doing it in the ARC will save you some LP." + }, + { + "type": "2x_crafting_arc", + "a.heading": "Metal Gravel to Metal Sand", + "a.recipe": "bloodmagic:arc/dustsfrom_gravel_iron", + "b.heading": "Ore to 2 Metal Sand", + "b.recipe": "bloodmagic:arc/dustsfrom_ore_iron" + }, + { + "type": "crafting", + "heading": "Fuel Cell (Furnace)", + "recipe": "bloodmagic:primitive_furnace_cell", + "text": "The ARC also functions as a Furnace, but the only fuel sources it accepts is the $(item)Primitive Fuel Cell$() or $(l:bloodmagic:utility/lava_crystal)Lava Crystal$(/l)." + }, + { + "type": "text", + "text": "The Primitive Fuel Cell is good for 128 individual uses. That's more than the Block of Coal used to craft it (60 items), and since it only loses durability when the crafting is finished it will not wase fuel." + }, + { + "type": "crafting", + "heading": "Hydration Cell", + "recipe": "bloodmagic:primitive_hydration_cell", + "text": "The Hydration Cell is used to make Clay, the Cornerstone of Balance." + }, + { + "type": "2x_crafting_arc", + "a.heading": "Clay from Sand", + "a.recipe": "bloodmagic:arc/clay_from_sand", + "a.fluid_input": "minecraft:water_bucket", + "b.heading": "Clay from Terracotta", + "b.recipe": "bloodmagic:arc/clay_from_terracotta", + "b.fluid_input": "minecraft:water_bucket" + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/bloodstone_bricks.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/bloodstone_bricks.json new file mode 100644 index 00000000..c1753cb3 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/bloodstone_bricks.json @@ -0,0 +1,16 @@ +{ + "name": "Bloodstone Bricks", + "icon": "bloodmagic:largebloodstonebrick", + "category": "bloodmagic:utility", + "pages":[ + { + "type": "text", + "text": "Bloodstone Bricks are a decorational block, and used as the capstones for the Tier-4 Blood Altar." + }, + { + "type": "crafting", + "recipe": "bloodmagic:largebloodstonebrick", + "recipe2": "bloodmagic:bloodstonebrick" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/book_experience.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/book_experience.json new file mode 100644 index 00000000..6946e58d --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/book_experience.json @@ -0,0 +1,15 @@ +{ + "name": "Tome of Peritia", + "icon": "bloodmagic:experiencebook", + "category": "bloodmagic:utility", + "pages": [ + { + "type": "text", + "text": "The $(item)Tome of Peritia$() allows you to safely store your experience $(br2)Shift + Right Click stores a level. Right Click retrieves a level. Hold right-click to store/retrive multiple levels." + }, + { + "type": "crafting", + "recipe": "bloodmagic:experience_tome" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/changelog.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/changelog.json new file mode 100644 index 00000000..18dbe6c1 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/changelog.json @@ -0,0 +1,117 @@ +{ + "name": "Changelog", + "icon": "minecraft:map", + "category": "bloodmagic:utility", + "priority": "true", + "pages":[ + { + "type": "text", + "text": "All the changelogs of $(6)Blood Magic$() to date, from most recent to oldest." + }, + { + "type": "text", + "title": "3.1.0-15", + "text": "$(li)Majorly refactored the progression of the mod. Instead of starting with a $(l:bloodmagic:demon_will/soul_snare)Snare$(), you instead start by crafting the $(l:bloodmagic:altar/blood_altar)Blood Altar$(). The changes are documented in the guide, and you can follow its $(l:bloodmagic:utility/getting_started)Getting Started$() entry!$(li)Changed the tooltips so that they are gray, more easily differentiating them from the name of the item." + }, + { + "type": "text", + "text": "$(li)Added the $(l:bloodmagic:alchemy_array/holding)Sigil of Holding$().$(li)Changed the crafting of $(l:bloodmagic:demon_will/soul_gem)Tartaric Gems$() so that you no longer need to use the previous tier gem in the gem slot.$(li2)The $(l:bloodmagic:demon_will/soul_forge)Hellfire Forge$() will now syphon from the gem in the crafting table first, and all unused will from the consumed gem will be placed in the crafted gem." + }, + { + "type": "text", + "text": "$(li)Changed the GUI for the $(l:bloodmagic:alchemy_table/alchemy_table)Alchemy Table$(). See the updated section.$(li)Fixed $(l:bloodmagic:alchemy_table/anointments/looting_anointment)Plunderer's Glint$() not properly applying the Looting level.$(li)Also fixed a NPE crash due to $(l:bloodmagic:alchemy_table/anointments/bow_power_anointment)Iron Tip$(). Fixes some crashes due to mods using the ItemUsedFinish event.$(li)Fixed the $(l:bloodmagic:blood_altar/blood_altar)Blood Altar$() not being able to input fluids. About time, Way!" + }, + { + "type": "text", + "text": "$(li)Added new $(l:bloodmagic:demon_will/explosive_charges)Explosive Charges.$()$(li2)$(item)Fungal Charge$(), which is very useful for giant mushrooms and nether mushrooms.$(li2)$(item)Controlled Charge$(), which will destroy only blocks that match the block it is placed on.$(li)Added the ability to apply a few select Anointments to the charges. Only one can be applied to a charge at a time.$(li2)$(l:bloodmagic:alchemy_table/anointments/silk_touch_anointment)Soft Coating$()$(li2)$(l:bloodmagic:alchemy_table/anointments/fortune_anointment)Fortuna Extract$()" + }, + { + "type": "text", + "text": "$(li2)$(l:bloodmagic:alchemy_table/anointments/smelting_anointment)Slow-burning Oil$()$(li)Fixed the $(l:bloodmagic:alchemy_array/living_equipment/living_basics)Living Armour$() so that you cannot use an upgrade tome to usurp the point cap.$(li2)Fixed $(l:bloodmagic:alchemy_array/living_equipment/armor_upgrades/strong_legs)Strong Legs$()so that it no longer runs the program \"CrunchyLegs.exe\" - as a result, you no longer suffer fall damage from jumping on the same level. Removed the direct fall damage mitigation from Strong Legs." + }, + { + "type": "text", + "text": "$(li)Added two types of $(l:bloodmagic:demon_will/throwing_daggers)Throwing Daggers$() to the Blood Mage's offensive kit.$(li2)$(item)Iron Throwing Dagger$()$(li2)$(item)Syringe Throwing Dagger$()$(li)Refactored the guide so that it provides +2 to awesomeness.$()" + }, + { + "type": "text", + "title": "3.0.6-11", + "text": " $(li)Reimplemented the $(l:bloodmagic:rituals/ritual_list/ritual_well_of_suffering)Well of Suffering$(). $(li)Added several new items, called \"$(l:bloodmagic:alchemy_table/anointments)Anointments$()\"! These are items that provide temporary buffs to your tools and weapons, such as silk touch, higher damage, and more! Look them up in the Utility section of the book. These include: $(li2)Honing Oil $(li2)Soft Coating $(li2)Fortuna Extract $(li2)Holy Water" + }, + { + "type": "text", + "text": "$(li2)Miner's Secrets $(li2)Dexterity Alkahest $(li2)Iron Tip $(li2)Plunderer's Glint $(li2)Slow-burning Oil $(li)Made the $(l:bloodmagic:demon_will/explosive_charges#shaped_charge)Shaped Charge$() and $(l:bloodmagic:demon_will/explosive_charges#deforester_charge)Deforester Charge$() throwable." + }, + { + "type": "text", + "title": "3.0.5-10", + "text": "Fixed a crash with the $(l:bloodmagic:altar/blood_altar)Blood Altar$() on unload and adjusted the recipe for the $(l:bloodmagic:alchemy_array/functional_arrays/time_arrays)Day array$() to use $(item)Coal$() instead of $(item)Clocks$()." + }, + { + "type": "text", + "title": "3.0.4-9", + "text": "$(li)Added two new $(l:bloodmagic:demon_will/explosive_charges)explosives$(): $(li2)The $(l:bloodmagic:demon_will/explosive_charges#shaped_charge)Shaped Charge$(), which will break a 5x5x5 volume when placed. $(li2)The $(l:bloodmagic:demon_will/explosive_charges#deforester_charge)Deforester Charge$(), which can chop down a tree up to a maximum of 128 logs. $(li)(Both explosives drop all blocks affected, and do not cause further environmental nor entity damage.)" + }, + { + "type": "text", + "text": "$(li)Added new alchemy arrays: $(li2)$(l:bloodmagic:alchemy_array/functional_arrays/time_arrays)Two arrays$(), which changes the current daylight cycle to day and night. Recipes are temp. $(li)Fixed the following $(l:bloodmagic:alchemy_array/living_equipment/living_upgrades)Living Armour upgrades$() so that they are now obtainable: $(li2)Experienced $(li2)Body Builder" + }, + { + "type": "text", + "title": "3.0.3-8", + "text": "$(li)Updated the $(item)Sanguine Scientiem$() - it's very well written! Special thanks to both $(fire)VT-14$() and $(raw)Wrincewind$() for their long hours of effort to make this book better than I could have done! $(li)Fixed a crash with the $(l:bloodmagic:alchemy_array/living_equipment/living_basics)Living Armour$() when crafted and worn right after enchanting." + }, + { + "type": "text", + "title": "3.0.2-7", + "text": "Readded the $(l:bloodmagic:alchemy_array/living_equipment/living_basics)Living Armour$(). Currently only with a few $(l:bloodmagic:alchemy_array/living_equipment/living_upgrades)upgrades$(), and no downgrades. $(li)Pin Cushion $(li)Soft Fall $(li)Tough $(li)Strong Legs (Now can be temporarily deactivated when jumping by sneaking) $(li)Healthy $(li)Experienced $(li)Charging Strike $(li)Tough Palms $(li)Quick Feet $(li)Poison Resistance" + }, + { + "type": "text", + "text": "$(li)Gift of Ignis $(li)Dwarven Might $(li)Body Builder $(br2)Reimplemented the following rituals: $(li)$(l:bloodmagic:rituals/ritual_list/ritual_crystal_split)Resonance of the Faceted Crystal$() $(li)$(l:bloodmagic:rituals/ritual_list/ritual_crystal_harvest)Crack of the Fractured Crystal$() $(li)$(l:bloodmagic:rituals/ritual_list/ritual_harvest)Reap of the Harvest Moon$() (Mainly vanilla crops) $(li)$(l:bloodmagic:rituals/ritual_list/ritual_animal_growth)Ritual of the Shepherd$() $(li)$(l:bloodmagic:rituals/ritual_list/ritual_green_grove)Ritual of the Green Grove$() $(li)$(l:bloodmagic:rituals/ritual_list/ritual_ellipse)Focus of the Ellipsoid$() $(li)$(l:bloodmagic:rituals/ritual_list/ritual_upgrade_remove)Sound of the Cleansing Soul$()" + }, + { + "type": "text", + "text": "$(li)$(l:bloodmagic:rituals/ritual_list/ritual_armour_evolve)Ritual of Living Evolution$()" + }, + { + "type": "text", + "title": "3.0.1-6", + "text": "$(li)Reimplemented the $(l:bloodmagic:utility/incense_altar)Incense Altar$() with all appropriate blocks. $(li)Added guide entries for the $(l:bloodmagic:utility/incense_altar)Incense Altar$() and $(l:bloodmagic:altar/blood_altar)Blood Altar$(). Other misc entries added, too. $(li)Fixed a server-related crash on the client on the $(l:bloodmagic:alchemy_array/sigil/grove)Sigil of the Green Grove$(). $(li)Added $(l:bloodmagic:utility/alchemical_reaction_chamber#ore_processing)ore processing$() to $(item)Ancient Debris.$() $(li)Readded the other $(l:bloodmagic:demon_will/sentient_tools)Sentient Tool$() types (with one more on the way)." + }, + { + "type": "text", + "text": "$(li)Added a few WIP items that cannot be used yet - they're part of the D*$)@ D*#@(@* system that I'm adding for Tier 4. $(li)Added the API - It's still in flux, so expect it to change very soon! $(li)Probably forgot something important. $(li)Fixed a crash for the $(l:bloodmagic:utility/lava_crystal)Lava Crystal$() that made it blow up the Client if used on a server. No, that was not the intended purpose!" + }, + { + "type": "text", + "text": "$(li)Added the $(l:bloodmagic:rituals/ritual_tinkerer)Ritual Tinkerer$() for Rituals. $(li)Added the \"$(l:bloodmagic:utility/book_experience)Tome of Peritia$()\" again - stores EXP." + }, + { + "type": "text", + "title": "3.0.0-3", + "text": "$(li)Fix for an issue with the Will Handler, which would cause massive lag. $(li)Reimplemented some recipes which... were not properly implemented. These include the $(l:bloodmagic:alchemy_table/alchemy_table#cutting_fluid)Cutting Fluid$() recipes in the $(l:bloodmagic:alchemy_table/alchemy_table)Alchemy Table$(). Whoops! $(li)Reduced the cost of the $(l:bloodmagic:altar/blood_altar#blank_rune)Blank Rune$(), swapping one of the $(l:bloodmagic:altar/slates)Blank Slates$() for $(item)Smooth Stone$()." + }, + { + "type": "text", + "title": "3.0.0-1", + "text": "First update for $(item)Minecraft 1.16.3$()! Supposedly it should also work for 1.16.4, however it was built for 1.16.3. $(br2)This release is what I can best describe as \"early alpha\" - a lot of the systems are in place and working, however a few things are notably absent. This can mean that the system will either be fully revamped, reimplemented from previous MC versions at a later date, or" + }, + { + "type": "text", + "text": "will not be added to make room for another system. $(br2)Some of the things that are currently missing from this version of Blood Magic are: $(li)$(l:bloodmagic:alchemy_array/living_equipment/living_basics)Living Armour$(), which will need to be completely rewritten to fix some client-server bugs. $(li)Several rituals. Rituals ARE in this release, but only a handful. Most of the rituals WILL be readded. $(li)The $(l:bloodmagic:utility/incense_altar)Incense Altar$(). Will be reimplemented soon." + }, + { + "type": "text", + "text": "$(li)The Item Routing System. Might need to be reimplemented? And it'll need a bunch of insecticide, since there's some bugs that I've heard about. $(li)Tier 5 - there's not currently much in T5 from previous versions, so it's temporarily disabled until I've fully decided the upgrade path towards it. Although I won't give much away, it will involve demons. And *^$%@)$#. $(li)Tier 6 - Why do people still ask about this?" + }, + { + "type": "text", + "text": "And other systems and items that I have not specifically mentioned. $(br2)Notable new content that's currently being experimented with and/or tweaked: $(li)The $(item)Blood Magic Guide$()! It's being completely rewritten and is currently using the mod Patchouli! $(strike)It's a pretty Neat mod by Vazkii$() It's in its early stages of writing, but for now the plan is to have it be purely informational - main reason I am temporarily ditching the narrative-based" + }, + { + "type": "text", + "text": "guide is that I need some form of in-game guide that tells the user about all the new and improved systems in the mod. And building a comprehensive narrative makes such a thing slow moving. $(li)The $(l:bloodmagic:utility/alchemical_reaction_chamber)Alchemical Reaction Chamber$()! It's a multiple-use block that can process ores and is integral for reaching Tier 4. It's still being balanced, so any feedback on this is greatly appreciated. $(br2)I hope you will enjoy the mod! $(br) - WayofTime" + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/getting_started.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/getting_started.json new file mode 100644 index 00000000..5ade9211 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/getting_started.json @@ -0,0 +1,66 @@ +{ + "name": "Tiers & Getting Started", + "icon": "bloodmagic:sacrificialdagger", + "category": "bloodmagic:utility", + "priority": "true", + "pages": [ + { + "type": "text", + "text": "$(6)Blood Magic 3$()'s progression is still being reworked, and the first few steps are significantly different from Blood Magic 2's.$(br2)We do plan on adding better guideance, such as entry unlocking, but we are waiting until the progression is locked down. In the mean time, here is a quick overview on how to progress in this alpha version of $(6)Blood Magic 3$()." + }, + { + "type": "spotlight", + "item": "bloodmagic:altar", + "title": "Blood Altar (Tier-1)", + "text": "The first step of $(6)Blood Magic$() is to build a $(l:bloodmagic:altar/blood_altar)Blood Altar$() and $(l:bloodmagic:altar/blood_altar#knife)Sacrificial Knife$(). Use these to generate $(blood)LP$() from Self-Sacrificing.$(br2)Use this $(blood)LP$() to craft a $(l:bloodmagic:altar/soul_network)Weak Blood Orb$(), several $(l:bloodmagic:altar/slates)Blank Slates$(), and a few $(l:bloodmagic:demon_will/soul_snare)Soul Snares$()." + }, + { + "type": "spotlight", + "item": "bloodmagic:alchemytable", + "title": "Alchemy Table (Tier-1)", + "text": "The $(l:bloodmagic:alchemy_table/alchemy_table)Alchemy Table$() uses $(blood)LP$() from a player's $(blood)Soul Network$() (drawn from the $(l:bloodmagic:altar/soul_network)bound Blood Orb$() in it) to craft various different objects, such as:$(li)$(l:bloodmagic:alchemy_array/functional_arrays/arcane_ash)Arcane Ashes$()$(li)$(item)Reagents for Sigils$()$(li)$(item)Anointments$()$(li)$(thing)2x Ore Processing$()$(li)and various other odds and ends." + }, + { + "type": "spotlight", + "item": "bloodmagic:arcaneashes", + "title": "Alchemy Array (Tier-1)", + "text": "An $(thing)Alchemy Array$() is made by placing some $(l:bloodmagic:alchemy_array/functional_arrays/arcane_ash)Arcane Ashes$() on the ground. The Alchemy Array can have 2 items right clicked into it, and will either craft an item (such as a $(l:bloodmagic:alchemy_array/sigil/divination)Divination Sigil$()) or perform some kind of function (such as $(l:bloodmagic:alchemy_array/functional_arrays/time_arrays)turning day into night$())." + }, + { + "type": "spotlight", + "item": "bloodmagic:soulforge", + "title": "Hellfire Forge (Tier-1)", + "text": "The $(l:bloodmagic:demon_will/soul_forge)Hellfire Forge$() crafts using $(l:bloodmagic:demon_will/demon_will)Demon Will$(). You get your first $(raw)Will$() by using $(l:bloodmagic:demon_will/soul_snare)Soul Snares$(), though upgrading to a $(l:bloodmagic:demon_will/sentient_sword)Sentient Sword$() is recommended. The $(item)Hellfire Forge$() is used for stuff directly related to $(raw)Demon Will$() (like $(l:bloodmagic:demon_will/soul_gem)Tartaric Gems$() and $(l:bloodmagic:demon_will/sentient_tools)Sentient Tools$()), and consumables (like $(l:bloodmagic:demon_will/explosive_charges)Explosive Charges$() and $(l:bloodmagic:demon_will/throwing_daggers)Throwing Daggers$())." + }, + { + "type": "spotlight", + "item": "bloodmagic:daggerofsacrifice", + "title": "Tier Two", + "text": "At this point, you will be able to craft a $(l:bloodmagic:altar/blood_altar#dagger_of_sacrifice)Dagger of Sacrifice$() in order to slaughter mobs for more LP. Various $(item)Upgrade Runes$() should be avaliable for your $(item)Blood Altar$(), and some more $(item)Sigils$() will be available. As before, you should focus on further upgrading your $(l:bloodmagic:altar/blood_altar)Altar$()." + }, + { + "type": "spotlight", + "item": "bloodmagic:ritualdiviner", + "title": "Tier Three", + "text": "By this point, you will have the ability to create some $(l:bloodmagic:rituals/ritual_basics)basic Rituals$() and $(l:bloodmagic:alchemy_array/living_equipment/living_basics)Living Armour$() as well. This armour is very versatile, though you'll have to work hard to unlock its full potential. At this point you should look into upgrading your Altar and your $(l:bloodmagic:rituals/ritual_diviner)Ritual Diviner$()." + }, + { + "type": "spotlight", + "item": "bloodmagic:vengefulcrystal", + "title": "Tier Four", + "text": "This is the top tier. At this point you have access to everything that $(6)Blood Magic$() has to offer. You may want to look into the $(l:bloodmagic:rituals/ritual_tinkerer)Ritual Tinkerer$() and the various kinds of $(l:bloodmagic:demon_will/aspected_will)Will Aspects$() avaliable to you, and consider how they may be used to refine your existing rituals and alter how your $(l:bloodmagic:demon_will/sentient_tools)Sentient Tools$() and $(l:bloodmagic:demon_will/sentient_sword)Weapons$() work." + }, + { + "type": "spotlight", + "item": "bloodmagic:activationcrystalawakened", + "title": "Tier Five", + "text": "Currently, this is just a myth. Nothing's implemented at this stage." + }, + { + "type": "spotlight", + "item": "minecraft:barrier", + "title": "Tier Six?", + "text": "What? No. Look, even in 1.12, this only existed as a favor to pack makers and was otherwise unimplemented. You've come too far. Go back two pages." + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/incense_altar.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/incense_altar.json new file mode 100644 index 00000000..01916ffe --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/incense_altar.json @@ -0,0 +1,107 @@ +{ + "name": "Incense Altar", + "icon": "bloodmagic:incensealtar", + "category": "bloodmagic:utility", + "pages": [ + { + "type": "text", + "text": " The $(item)Incense Altar$() is a multiblock structure that can be used to boost your self-sacrificing at a $(l:bloodmagic:altar/blood_altar)Blood Altar.$(/l) By standing nearby your setup, the $(item)Incense Altar$() will calm your soul based on the area's total \"Tranquility\", allowing you to significantly increase your LP gains." + }, + { + "type": "crafting", + "recipe": "bloodmagic:incense_altar" + }, + { + "type": "text", + "text": " The basic Tier 1 setup of an $(item)Incense Altar$() is the altar itself; place it down anywhere (You may want to set up a 3x3 block platform, this will be helpful later) and stay within a 5 block radius of the altar.$(br2) While the altar is working, it will emit flame particles from its top and transform your $(l:bloodmagic:altar/blood_altar#knife)Sacrificial Knife.$(/l) Once your knife starts to shine, holding and releasing right click near a Blood Altar will sacrifice 90% of your health all at once." + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/utility/incense_altar1.png" + ], + "title": "Basic Setup", + "border": true, + "text": "Basic setup showing the 3x3 square of blocks before the path blocks." + }, + { + "type": "text", + "text": " What is more, based on the total Tranquility of the area you will receive a bonus to the LP added to the altar. Hovering over the $(item)Incense Altar$() with either a $(l:bloodmagic:alchemy_array/sigil/divination)Divination Sigil$(/l) or $(l:bloodmagic:alchemy_array/sigil/seer)Seer's Sigil$() will display the total Tranquility of the setup (top number) and the percentage bonus received when sacrificing (bottom number). When you sacrifice, it will take the LP that you would normally get and multiply it by (1 + bonus/100)." + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/utility/incense_altar2.png" + ], + "title": "Incense HUD", + "border": true, + "text": "Incense HUD, default in top left corner, showing a self-sacrifice bonus of +20%." + }, + { + "type": "text", + "text": " \"But Way, how can I increase this bonus?\" Why, by increasing the tranquility of the surrounding area! ...That may be a bit ambiguous.$(br2) To increase the Tranquility of the area, you must place paths leading out from your Incense Altar. These paths need to be constructed from a three wide set of Path blocks, such as the $(item)Wooden Path$(), that extend from the 3x3 set of solid reference blocks in all four cardinal directions." + }, + { + "type": "crafting", + "recipe": "bloodmagic:path/path_wood", + "recipe2": "bloodmagic:path/path_woodtile" + }, + { + "type": "crafting", + "recipe": "bloodmagic:path/path_stone", + "recipe2": "bloodmagic:path/path_stonetile" + }, + { + "type": "crafting", + "recipe": "bloodmagic:path/path_wornstone", + "recipe2": "bloodmagic:path/path_wornstonetile" + }, + { + "type": "text", + "text": " Each new \"ring\" of path blocks follow a set of rules:$(li)All path blocks on the same ring have to be on the same level.$(li)The next ring of path blocks may not be more than 5 blocks higher/lower than the previous ring.$(li)The blocks that are the same level or up to two blocks above the path blocks' ring count towards the total Tranquility - these are indicated by the glass blocks in the picture." + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/utility/incense_altar.png" + ], + "title": "Incense Altar", + "border": true, + "text": "Incense Altar with different Path orientations." + }, + { + "type": "text", + "text": "Furthermore:$(li)The efficacy of each type of path block only lasts a certain distance: wooden paths can only go three rings, stone paths for up to five rings, worn stone paths for seven rings, and obsidian paths for nine rings.$(bn2) Now obviously, not every type of block will count towards your Tranquility. Not just any ol' cobble will do, no! We need crops, dirt, and even... lava?" + }, + { + "type": "text", + "text": " There are multiple block categories that count towards the total Tranquility. In no particular order, they are: Plants, Crops, Trees, Earthen, Water, Fire, and Lava. The Incense Altar will look at all of the blocks that are within its range (set by the path blocks) and tabulate how much total Tranquility of each Type there is. Once done, it will calculate the total Tranquility by square-rooting the Tranquility of each type and then adding them together." + }, + { + "type": "text", + "text": "This means that for later-game setups, it is best to have many different types of Tranquility. Although other mods may add their own, and more will be added later, the blocks that contribute to Tranquility are: Lava, Water, Life Essence, Netherrack, Dirt, Farmland, Potatoes, Carrots, Wheat, Netherwart, Beetroots, Leaves, Logs, Fire, and Grass." + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/utility/incense_altar3.png" + ], + "title": "Incense Altar Setup", + "border": true, + "text": "Late-game Incense Altar setup with many different levels." + }, + { + "type": "text", + "text": "Of course, your setup can be as steep or as shallow as you want (Within reason, as defined earlier in this entry). $(br2) It is important to note that the tranquility bonus is capped by the size of your altar (and thus, the tier of path you are using). The caps are as follows: $(li) No Path: 20%. $(li) Wooden Path: 60%. $(li) Stone Path: 120%. $(li) Worn Stone Path: 200%. $(li) Obsidian Path: 300%. (Obsidian is NYI, sadly)" + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/utility/incense_altar4.png" + ], + "title": "Incense Altar Setup", + "border": true, + "text": "A very simple Incense Altar. Note the (optional) mixing of different path blocks." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/lava_crystal.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/lava_crystal.json new file mode 100644 index 00000000..3b7438e0 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/lava_crystal.json @@ -0,0 +1,16 @@ +{ + "name": "Lava Crystal", + "icon": "bloodmagic:lavacrystal", + "category": "bloodmagic:utility", + "pages": [ + { + "type": "text", + "text": "The $(item)Lava Crystal$() is a source of great heat. Between the lava used in its creation and the power of your Soul Network, you feel confident that it will never cool.$(br2) Right clicking on any block in the world will ignite it, at a cost of 100 LP." + }, + { + "type": "crafting", + "recipe": "bloodmagic:lava_crystal", + "text": "$(br)Furthermore, if placed in the fuel slot of a furnace, it will act as a never-ending fuel source, consuming 50LP to burn for 10 seconds, or long enough to cook one item." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/life_essence_bucket.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/life_essence_bucket.json new file mode 100644 index 00000000..491d4e60 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/life_essence_bucket.json @@ -0,0 +1,18 @@ +{ + "name": "Bucket of Life", + "icon": "bloodmagic:life_essence_bucket", + "category": "bloodmagic:utility", + "extra_recipe_mappings":[["bloodmagic:life_essence_bucket", 1]], + "pages": [ + { + "type": "text", + "text": "Life Essence is all fine and good in the altar, where it can be used for crafting or funnelled into an $(l:bloodmagic:altar/soul_network)Orb$() to power Rituals, but what if you want to build a moat of the stuff around your $(l:bloodmagic:utility/incense_altar)Incense Altar$()? Fortunarely, extracting $(item)Life Essence$() is relatively trivial. Simply place a $(item)Bucket$() in the Blood Altar and wait a few seconds for it to fill up. 1LP=1mb, so 1,000LP should be plenty for your Bucket." + }, + { + "type": "crafting_altar", + "heading": "Bucket of Life", + "recipe": "bloodmagic:altar/bucket_life", + "text": "$(italic)It's definitely not blood. Blood would have coagulated by now. $(br2)... Why are you looking at me like that?$()" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/nyi.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/nyi.json new file mode 100644 index 00000000..de49065d --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/nyi.json @@ -0,0 +1,36 @@ +{ + "name": "NOT YET IMPLEMENTED", + "icon": "minecraft:barrier", + "category": "bloodmagic:utility", + "pages": [ + { + "type": "text", + "text": "OK. Breaking the fourth wall here. Blood Magic is still in an early alpha, and a lot of things you may recall from earlier versions are Not Yet Implemented. Some of these things may come back in the future, others are done and dusted. (Looking at you, Bound Armour and Weapons...)$(br)$(li)Will Automation. Some of the rituals are being reworked, this is still under development." + }, + { + "type": "text", + "text": "$(li)Arcane Ash Rituals. Some of these are coming back soon(tm),for now wait and see. $(li)Ritual of Binding. This went out with 1.7.10, stop asking. $(li)Imperfect Rituals (Lapis etc). $(li)Sigil of Magnetism. $(li)Sigil of the Frozen Lake. $(li)Sigil of Elasticity. $(li)Potion Flasks. $(li)Sigil of Elemental Affinity. $(li)Sigil of the Claw. $(li)Demon Will Aura Gauge. $(li)Transfer Nodes." + }, + { + "type": "text", + "text": "$(li)Additional Living Armour Traits. (Some are in, but not all) $(li)Interdiction Ritual. $(li)Ritual of Containment. $(li)Ritual of High Jump. $(li)Ritual of the Satiated Stomach. $(li)Call of the Zephyr. $(li)Le Vulcano Frigius. $(li)Crash of the Timberman. $(li)Laying of the Filler. $(li)Ritual of Suppression. $(li)Teleposers. $(li)Ritual Dismantler. $(li)Ritual Diviner (Dawn)." + }, + { + "type": "text", + "text": "$(li)Demon Pylon. $(li)Grand Tartaric Gem. $(li)Spectral Weapons and Tools. $(li)Teleposition Sigil. $(li)Sigil of Suppression. $(li)Transposition Sigil. $(li)Sigil of Ender Severance. $(li)Sigil of Compression. $(li)Sigil of the Phantom Bridge. $(li)Assembly of the High Altar. $(li)Cry of the Eternal Soul. $(li)Hymn of Syphoning. $(li)Mark of the Falling Tower. $(li)Reverence of the Condor." + }, + { + "type": "text", + "text": "$(li)Ritual of Grounding. $(li)Ritual of Speed. $(li)The Gate of the Fold. $(li)Ritual of the Feathered Earth. $(li)Ritual of Expulsion. $(li)Most of Tier V. $(li)Archmage Blood Orb. $(li)Awakened Activation Crystal." + }, + { + "type": "text", + "text": "$(li)Training Bracelets. $(li)Penance of the Leadened Soul. $(br2)Other things may appear or disappear as the mod marches onwards from Alpha, through Beta, and hopefully one day to a full Stable Release. $(br2)For more information, check out the $(l:https://github.com/WayofTime/BloodMagic)Blood Magic Github$(), the $(l:https://www.curseforge.com/minecraft/mc-mods/blood-magic)Blood Magic Curseforge Page$(), and the $(l:https://discord.gg/VtNrGrs)Blood Magic Discord$()." + }, + { + "type": "text", + "text": "This manual was put together by Wrincewind and VT-14, building on Way's original manual, with some help from Patchouli and MinecraftGuides.net. Thank you for playing! :)"} + ] +} + + diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/2x_crafting_alchemy_table.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/2x_crafting_alchemy_table.json new file mode 100644 index 00000000..c59a542a --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/2x_crafting_alchemy_table.json @@ -0,0 +1,16 @@ +{ + "include": [ + { + "template": "crafting_alchemy_table", + "as": "a", + "x": 0, + "y": 0 + }, + { + "template": "crafting_alchemy_table", + "as": "b", + "x": 0, + "y": 53 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/2x_crafting_altar.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/2x_crafting_altar.json new file mode 100644 index 00000000..12e73437 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/2x_crafting_altar.json @@ -0,0 +1,16 @@ +{ + "include": [ + { + "template": "crafting_altar", + "as": "a", + "x": 0, + "y": 0 + }, + { + "template": "crafting_altar", + "as": "b", + "x": 0, + "y": 75 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/2x_crafting_arc.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/2x_crafting_arc.json new file mode 100644 index 00000000..ae6a4498 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/2x_crafting_arc.json @@ -0,0 +1,16 @@ +{ + "include": [ + { + "template": "crafting_arc", + "as": "a", + "x": 0, + "y": 0 + }, + { + "template": "crafting_arc", + "as": "b", + "x": 0, + "y": 53 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/2x_crafting_array.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/2x_crafting_array.json new file mode 100644 index 00000000..9d192548 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/2x_crafting_array.json @@ -0,0 +1,16 @@ +{ + "include": [ + { + "template": "crafting_array", + "as": "a", + "x": 0, + "y": 0 + }, + { + "template": "crafting_array", + "as": "b", + "x": 0, + "y": 65 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/2x_crafting_soulforge.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/2x_crafting_soulforge.json new file mode 100644 index 00000000..2e8d7d18 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/2x_crafting_soulforge.json @@ -0,0 +1,16 @@ +{ + "include": [ + { + "template": "crafting_soulforge", + "as": "a", + "x": 0, + "y": 0 + }, + { + "template": "crafting_soulforge", + "as": "b", + "x": 0, + "y": 65 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/2x_functional_array.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/2x_functional_array.json new file mode 100644 index 00000000..61f095a1 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/2x_functional_array.json @@ -0,0 +1,16 @@ +{ + "include": [ + { + "template": "functional_array", + "as": "a", + "x": 0, + "y": 0 + }, + { + "template": "functional_array", + "as": "b", + "x": 0, + "y": 65 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/3x_crafting_alchemy_table.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/3x_crafting_alchemy_table.json new file mode 100644 index 00000000..93144042 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/3x_crafting_alchemy_table.json @@ -0,0 +1,22 @@ +{ + "include": [ + { + "template": "crafting_alchemy_table", + "as": "a", + "x": 0, + "y": 0 + }, + { + "template": "crafting_alchemy_table", + "as": "b", + "x": 0, + "y": 53 + }, + { + "template": "crafting_alchemy_table", + "as": "c", + "x": 0, + "y": 106 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/3x_crafting_arc.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/3x_crafting_arc.json new file mode 100644 index 00000000..ba3d6a42 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/3x_crafting_arc.json @@ -0,0 +1,22 @@ +{ + "include": [ + { + "template": "crafting_arc", + "as": "a", + "x": 0, + "y": 0 + }, + { + "template": "crafting_arc", + "as": "b", + "x": 0, + "y": 53 + }, + { + "template": "crafting_arc", + "as": "c", + "x": 0, + "y": 106 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/3x_crafting_soulforge.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/3x_crafting_soulforge.json new file mode 100644 index 00000000..dc944e66 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/3x_crafting_soulforge.json @@ -0,0 +1,22 @@ +{ + "include": [ + { + "template": "crafting_soulforge", + "as": "a", + "x": 0, + "y": 0 + }, + { + "template": "crafting_soulforge", + "as": "b", + "x": 0, + "y": 53 + }, + { + "template": "crafting_soulforge", + "as": "c", + "x": 0, + "y": 106 + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/crafting_2-step_sigil.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/crafting_2-step_sigil.json new file mode 100644 index 00000000..adaaa240 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/crafting_2-step_sigil.json @@ -0,0 +1,16 @@ +{ + "include": [ + { + "template": "crafting_alchemy_table", + "as": "alchemy_table", + "x": 0, + "y": 0 + }, + { + "template": "crafting_array", + "as": "array", + "x": 0, + "y": 60 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/crafting_alchemy_table.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/crafting_alchemy_table.json new file mode 100644 index 00000000..3a261c22 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/crafting_alchemy_table.json @@ -0,0 +1,109 @@ +{ + "processor": "wayoftime.bloodmagic.compat.patchouli.processors.AlchemyTableProcessor", + "components": [ + { + "type": "header", + "text": "#heading", + "x": -1, + "y": -6 + }, + { + "type": "text", + "text": "#text", + "x": 0, + "y": 51 + }, + { + "type": "image", + "image": "bloodmagic:textures/gui/patchouli_book/crafting.png", + "x": 2, + "y": 4, + "u": 0, + "v": 154, + "texture_width": 128, + "texture_height": 256, + "width": 62, + "height": 43 + }, + { + "type": "image", + "image": "bloodmagic:textures/gui/patchouli_book/crafting.png", + "x": 65, + "y": 4, + "u": 44, + "v": 111, + "texture_width": 128, + "texture_height": 256, + "width": 49, + "height": 43 + }, + { + "type": "item", + "item": "bloodmagic:alchemytable", + "x": 94, + "y": 27 + }, + { + "type": "item", + "item": "#input1", + "x": 6, + "y": 8 + }, + { + "type": "item", + "item": "#input2", + "x": 25, + "y": 8 + }, + { + "type": "item", + "item": "#input3", + "x": 44, + "y": 8 + }, + { + "type": "item", + "item": "#input4", + "x": 6, + "y": 27 + }, + { + "type": "item", + "item": "#input5", + "x": 25, + "y": 27 + }, + { + "type": "item", + "item": "#input6", + "x": 44, + "y": 27 + }, + { + "type": "item", + "item": "#orb", + "x": 69, + "y": 27 + }, + { + "type": "tooltip", + "tooltip": ["Cost: #syphon# LP", "Duration: #time# Ticks"], + "x": 69, + "y": 8, + "width": 16, + "height": 16 + }, + { + "type": "text", + "text": "LP", + "x": 74, + "y": 6 + }, + { + "type": "item", + "item": "#output", + "x": 94, + "y": 8 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/crafting_altar.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/crafting_altar.json new file mode 100644 index 00000000..ae327e85 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/crafting_altar.json @@ -0,0 +1,52 @@ +{ + "processor": "wayoftime.bloodmagic.compat.patchouli.processors.BloodAltarProcessor", + "components": [ + { + "type": "header", + "text": "#heading", + "x": -1, + "y": -6 + }, + { + "type": "image", + "image": "bloodmagic:textures/gui/patchouli_book/crafting.png", + "x": 9, + "y": 4, + "u": 0, + "v": 51, + "texture_width": 128, + "texture_height": 256, + "width": 98, + "height": 60 + }, + { + "type": "item", + "item": "bloodmagic:altar", + "x": 87, + "y": 46 + }, + { + "type": "item", + "item": "#input", + "x": 30, + "y": 8 + }, + { + "type": "item", + "item": "#output", + "x": 87, + "y": 27 + }, + { + "type": "text", + "text": "Tier: #tier# $(br)LP: #lp#", + "x": 59, + "y": 5 + }, + { + "type": "text", + "text": "#text", + "y": 67 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/crafting_arc.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/crafting_arc.json new file mode 100644 index 00000000..b46dcbda --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/crafting_arc.json @@ -0,0 +1,120 @@ +{ + "processor": "wayoftime.bloodmagic.compat.patchouli.processors.ARCProcessor", + "components": [ + { + "type": "header", + "text": "#heading", + "x": -1, + "y": -6 + }, + { + "type": "text", + "text": "#text", + "x": 0, + "y": 51 + }, + { + "type": "item", + "item": "#fluid_input", + "x": 6, + "y": 26 + }, + { + "type": "item", + "item": "#fluid_output", + "x": 94, + "y": 7 + }, + { + "type": "image", + "image": "bloodmagic:textures/gui/patchouli_book/crafting.png", + "x": 2, + "y": 4, + "u": 0, + "v": 198, + "texture_width": 128, + "texture_height": 256, + "width": 112, + "height": 43 + }, + { + "type": "item", + "item": "bloodmagic:alchemicalreactionchamber", + "x": 94, + "y": 26 + }, + { + "type": "item", + "item": "#input", + "x": 6, + "y": 7 + }, + { + "type": "item", + "item": "#tool", + "x": 31, + "y": 26 + }, + { + "type": "item", + "item": "#output1", + "x": 56, + "y": 7 + }, + { + "type": "item", + "item": "#output2", + "x": 75, + "y": 7 + }, + { + "type": "text", + "text": "#chance2#%", + "guard": "#show_chance2", + "x": 75, + "y": 6 + }, + { + "type": "item", + "item": "#output3", + "x": 56, + "y": 26 + }, + { + "type": "text", + "text": "#chance3#%", + "guard": "#show_chance3", + "x": 56, + "y": 25 + }, + { + "type": "item", + "item": "#output4", + "x": 75, + "y": 26 + }, + { + "type": "text", + "text": "#chance4#%", + "guard": "#show_chance4", + "x": 75, + "y": 25 + }, + { + "type": "tooltip", + "guard": "#show_fluid_tooltip", + "tooltip": ["Input: #tooltip_fluid_input#", "Output: #tooltip_fluid_output#"], + "x": 31, + "y": 7, + "width": 16, + "height": 16 + }, + { + "type": "text", + "guard": "#show_fluid_tooltip", + "text": "Fluid", + "x": 31, + "y": 5 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/crafting_array.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/crafting_array.json new file mode 100644 index 00000000..dbd6c723 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/crafting_array.json @@ -0,0 +1,52 @@ +{ + "processor": "wayoftime.bloodmagic.compat.patchouli.processors.AlchemyArrayProcessor", + "components": [ + { + "type": "header", + "text": "#heading", + "x": -1, + "y": -6 + }, + { + "type": "image", + "image": "bloodmagic:textures/gui/patchouli_book/crafting.png", + "x": 11, + "y": 4, + "u": 0, + "v": 0, + "texture_width": 128, + "texture_height": 256, + "width": 94, + "height": 50 + }, + { + "type": "item", + "item": "#baseinput", + "x": 28, + "y": 22 + }, + { + "type": "item", + "item": "#addedinput", + "x": 63, + "y": 10 + }, + { + "type": "item", + "item": "#output", + "x": 85, + "y": 22 + }, + { + "type": "item", + "item": "bloodmagic:arcaneashes", + "x": 85, + "y": 40 + }, + { + "type": "text", + "text": "#text", + "y": 58 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/crafting_soulforge.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/crafting_soulforge.json new file mode 100644 index 00000000..6a375357 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/crafting_soulforge.json @@ -0,0 +1,84 @@ +{ + "processor": "wayoftime.bloodmagic.compat.patchouli.processors.TartaricForgeProcessor", + "components": [ + { + "type": "header", + "text": "#heading", + "x": -1, + "y": -6 + }, + { + "type": "image", + "image": "bloodmagic:textures/gui/patchouli_book/crafting.png", + "x": 11, + "y": 4, + "u": 0, + "v": 111, + "texture_width": 128, + "texture_height": 256, + "width": 93, + "height": 43 + }, + { + "type": "item", + "item": "#input1", + "x": 15, + "y": 8 + }, + { + "type": "item", + "item": "#input2", + "x": 34, + "y": 8 + }, + { + "type": "item", + "item": "#input3", + "x": 15, + "y": 27 + }, + { + "type": "item", + "item": "#input4", + "x": 34, + "y": 27 + }, + { + "type": "item", + "item": "#will", + "x": 59, + "y": 27 + }, + { + "type": "item", + "item": "#output", + "x": 84, + "y": 8 + }, + { + "type": "item", + "item": "bloodmagic:soulforge", + "x": 84, + "y": 27 + }, + { + "type": "tooltip", + "tooltip": ["Minimum: #willrequired# Will", "Drained: #willdrain# Will"], + "x": 59, + "y": 8, + "width": 16, + "height": 16 + }, + { + "type": "text", + "text": "Will", + "x": 61, + "y": 6 + }, + { + "type": "text", + "text": "#text", + "y": 51 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/functional_array.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/functional_array.json new file mode 100644 index 00000000..7be37120 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/templates/functional_array.json @@ -0,0 +1,71 @@ +{ + "processor": "wayoftime.bloodmagic.compat.patchouli.processors.AlchemyArrayProcessor", + "components": [ + { + "type": "header", + "text": "#heading", + "x": -1, + "y": -6 + }, + { + "type": "image", + "image": "bloodmagic:textures/gui/patchouli_book/crafting.png", + "x": 3, + "y": 4, + "u": 0, + "v": 0, + "texture_width": 128, + "texture_height": 256, + "width": 68, + "height": 50 + }, + { + "type": "image", + "image": "bloodmagic:textures/gui/patchouli_book/crafting.png", + "x": 71, + "y": 9, + "u": 62, + "v": 154, + "texture_width": 128, + "texture_height": 256, + "width": 40, + "height": 40 + }, + { + "type": "item", + "item": "#baseinput", + "x": 20, + "y": 22 + }, + { + "type": "item", + "item": "#addedinput", + "x": 55, + "y": 10 + }, + { + "type": "item", + "item": "bloodmagic:arcaneashes", + "x": 55, + "y": 35 + }, + { + "type": "text", + "text": "#text", + "y": 58 + }, + { + "type": "image", + "image": "bloodmagic:textures/models/alchemyarrays/#image#", + "x": 75, + "y": 13, + "u": 0, + "v": 0, + "texture_width": 512, + "texture_height": 512, + "width": 512, + "height": 512, + "scale": 0.0625 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/recipes/guide.json b/src/main/resources/data/bloodmagic/recipes/guide.json new file mode 100644 index 00000000..97922e75 --- /dev/null +++ b/src/main/resources/data/bloodmagic/recipes/guide.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:book" + }, + { + "item": "minecraft:glass" + } + ], + "result": { + "item": "patchouli:guide_book", + "nbt": { + "patchouli:book": "bloodmagic:guide" + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/structures/dungeon/pavilion/3x3_tnt.nbt b/src/main/resources/data/bloodmagic/structures/dungeon/pavilion/3x3_tnt.nbt new file mode 100644 index 00000000..b3d28725 Binary files /dev/null and b/src/main/resources/data/bloodmagic/structures/dungeon/pavilion/3x3_tnt.nbt differ diff --git a/src/main/resources/data/bloodmagic/structures/dungeon/pavilion/test.nbt b/src/main/resources/data/bloodmagic/structures/dungeon/pavilion/test.nbt new file mode 100644 index 00000000..2883b7ac Binary files /dev/null and b/src/main/resources/data/bloodmagic/structures/dungeon/pavilion/test.nbt differ diff --git a/src/main/resources/data/bloodmagic/structures/dungeon/pavilion/test2.nbt b/src/main/resources/data/bloodmagic/structures/dungeon/pavilion/test2.nbt new file mode 100644 index 00000000..60931552 Binary files /dev/null and b/src/main/resources/data/bloodmagic/structures/dungeon/pavilion/test2.nbt differ diff --git a/src/main/resources/data/bloodmagic/structures/four_way_corridor.nbt b/src/main/resources/data/bloodmagic/structures/four_way_corridor.nbt new file mode 100644 index 00000000..e8a47680 Binary files /dev/null and b/src/main/resources/data/bloodmagic/structures/four_way_corridor.nbt differ diff --git a/src/main/resources/data/bloodmagic/structures/four_way_corridor_loot.nbt b/src/main/resources/data/bloodmagic/structures/four_way_corridor_loot.nbt new file mode 100644 index 00000000..2fdf1a41 Binary files /dev/null and b/src/main/resources/data/bloodmagic/structures/four_way_corridor_loot.nbt differ diff --git a/src/main/resources/data/bloodmagic/structures/ore_hold_1.nbt b/src/main/resources/data/bloodmagic/structures/ore_hold_1.nbt new file mode 100644 index 00000000..6ecc7b1e Binary files /dev/null and b/src/main/resources/data/bloodmagic/structures/ore_hold_1.nbt differ diff --git a/src/main/resources/data/bloodmagic/structures/straight_corridor.nbt b/src/main/resources/data/bloodmagic/structures/straight_corridor.nbt new file mode 100644 index 00000000..0f244757 Binary files /dev/null and b/src/main/resources/data/bloodmagic/structures/straight_corridor.nbt differ diff --git a/src/main/resources/data/bloodmagic/structures/t_corridor.nbt b/src/main/resources/data/bloodmagic/structures/t_corridor.nbt new file mode 100644 index 00000000..a9caf7e5 Binary files /dev/null and b/src/main/resources/data/bloodmagic/structures/t_corridor.nbt differ diff --git a/src/main/resources/data/bloodmagic/tags/blocks/altar_components/beacon.json b/src/main/resources/data/bloodmagic/tags/blocks/altar_components/beacon.json new file mode 100644 index 00000000..7b3492ad --- /dev/null +++ b/src/main/resources/data/bloodmagic/tags/blocks/altar_components/beacon.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:beacon" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/tags/blocks/altar_components/bloodrune.json b/src/main/resources/data/bloodmagic/tags/blocks/altar_components/bloodrune.json new file mode 100644 index 00000000..7f6f93b0 --- /dev/null +++ b/src/main/resources/data/bloodmagic/tags/blocks/altar_components/bloodrune.json @@ -0,0 +1,14 @@ +{ + "values": [ + "bloodmagic:blankrune", + "bloodmagic:speedrune", + "bloodmagic:sacrificerune", + "bloodmagic:selfsacrificerune", + "bloodmagic:dislocationrune", + "bloodmagic:altarcapacityrune", + "bloodmagic:bettercapacityrune", + "bloodmagic:orbcapacityrune", + "bloodmagic:accelerationrune", + "bloodmagic:chargingrune" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/tags/blocks/altar_components/bloodstone.json b/src/main/resources/data/bloodmagic/tags/blocks/altar_components/bloodstone.json new file mode 100644 index 00000000..d4a485db --- /dev/null +++ b/src/main/resources/data/bloodmagic/tags/blocks/altar_components/bloodstone.json @@ -0,0 +1,6 @@ +{ + "values": [ + "bloodmagic:largebloodstonebrick", + "bloodmagic:bloodstonebrick" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/tags/blocks/altar_components/glowstone.json b/src/main/resources/data/bloodmagic/tags/blocks/altar_components/glowstone.json new file mode 100644 index 00000000..770fbfb2 --- /dev/null +++ b/src/main/resources/data/bloodmagic/tags/blocks/altar_components/glowstone.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:glowstone", + "minecraft:sea_lantern" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/air_or_earth.json b/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/air_or_earth.json new file mode 100644 index 00000000..4ed8fb27 --- /dev/null +++ b/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/air_or_earth.json @@ -0,0 +1,6 @@ +{ + "values": [ + "bloodmagic:airritualstone", + "bloodmagic:earthritualstone" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/air_or_fire.json b/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/air_or_fire.json new file mode 100644 index 00000000..61cd9671 --- /dev/null +++ b/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/air_or_fire.json @@ -0,0 +1,6 @@ +{ + "values": [ + "bloodmagic:airritualstone", + "bloodmagic:fireritualstone" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/air_water_earth_fire.json b/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/air_water_earth_fire.json new file mode 100644 index 00000000..de155609 --- /dev/null +++ b/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/air_water_earth_fire.json @@ -0,0 +1,8 @@ +{ + "values": [ + "bloodmagic:airritualstone", + "bloodmagic:waterritualstone", + "bloodmagic:earthritualstone", + "bloodmagic:fireritualstone" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/earth_fire_air_water.json b/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/earth_fire_air_water.json new file mode 100644 index 00000000..0d59ce19 --- /dev/null +++ b/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/earth_fire_air_water.json @@ -0,0 +1,8 @@ +{ + "values": [ + "bloodmagic:earthritualstone", + "bloodmagic:fireritualstone", + "bloodmagic:airritualstone", + "bloodmagic:waterritualstone" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/earth_or_air.json b/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/earth_or_air.json new file mode 100644 index 00000000..3c15e031 --- /dev/null +++ b/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/earth_or_air.json @@ -0,0 +1,6 @@ +{ + "values": [ + "bloodmagic:earthritualstone", + "bloodmagic:airritualstone" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/earth_or_water.json b/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/earth_or_water.json new file mode 100644 index 00000000..01f41b58 --- /dev/null +++ b/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/earth_or_water.json @@ -0,0 +1,6 @@ +{ + "values": [ + "bloodmagic:earthritualstone", + "bloodmagic:waterritualstone" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/fire_air_water_earth.json b/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/fire_air_water_earth.json new file mode 100644 index 00000000..75c96637 --- /dev/null +++ b/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/fire_air_water_earth.json @@ -0,0 +1,8 @@ +{ + "values": [ + "bloodmagic:fireritualstone", + "bloodmagic:airritualstone", + "bloodmagic:waterritualstone", + "bloodmagic:earthritualstone" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/fire_or_air.json b/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/fire_or_air.json new file mode 100644 index 00000000..14dd35bf --- /dev/null +++ b/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/fire_or_air.json @@ -0,0 +1,6 @@ +{ + "values": [ + "bloodmagic:fireritualstone", + "bloodmagic:airritualstone" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/water_earth_fire_air.json b/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/water_earth_fire_air.json new file mode 100644 index 00000000..a343481d --- /dev/null +++ b/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/water_earth_fire_air.json @@ -0,0 +1,8 @@ +{ + "values": [ + "bloodmagic:waterritualstone", + "bloodmagic:earthritualstone", + "bloodmagic:fireritualstone", + "bloodmagic:airritualstone" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/water_or_earth.json b/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/water_or_earth.json new file mode 100644 index 00000000..74fd587b --- /dev/null +++ b/src/main/resources/data/bloodmagic/tags/blocks/ritual_stones/water_or_earth.json @@ -0,0 +1,6 @@ +{ + "values": [ + "bloodmagic:waterritualstone", + "bloodmagic:earthritualstone" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/loot_modifiers/global_loot_modifiers.json b/src/main/resources/data/forge/loot_modifiers/global_loot_modifiers.json new file mode 100644 index 00000000..af646989 --- /dev/null +++ b/src/main/resources/data/forge/loot_modifiers/global_loot_modifiers.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "entries": [ + "bloodmagic:silk_touch_bamboo", + "bloodmagic:fortune", + "bloodmagic:looting", + "bloodmagic:smelt" + ] +} \ No newline at end of file diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info deleted file mode 100644 index 20a2c3ce..00000000 --- a/src/main/resources/mcmod.info +++ /dev/null @@ -1,16 +0,0 @@ -[ -{ - "modid": "AWWayofTime", - "name": "Blood Magic: Alchemical Wizardry", - "description": "Rituals, spells, and more!", - "version": "v1.3.0Beta(1.7.10)", - "mcversion": "1.7.10", - "url": "http://www.minecraftforum.net/topic/1899223-", - "updateUrl": "", - "authorList": ["WayofTime"], - "credits": "", - "logoFile": "", - "screenshots": [], - "dependencies": [] -} -] diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta new file mode 100644 index 00000000..db8911aa --- /dev/null +++ b/src/main/resources/pack.mcmeta @@ -0,0 +1,7 @@ +{ + "pack": { + "description": "BloodMagic 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." + } +} diff --git a/src/main/resources/todo.txt b/src/main/resources/todo.txt deleted file mode 100644 index 8c06bf8c..00000000 --- a/src/main/resources/todo.txt +++ /dev/null @@ -1,2 +0,0 @@ --Create effect for the light ritual block. --Create effect for the fire ritual block. \ No newline at end of file